Index: openafs/doc/arch/arch-overview.h
diff -c /dev/null openafs/doc/arch/arch-overview.h:1.1.2.2
*** /dev/null	Thu Jun 11 11:13:00 2009
--- openafs/doc/arch/arch-overview.h	Sun May 31 12:54:53 2009
***************
*** 0 ****
--- 1,1223 ----
+ /*!
+ 	\page title AFS-3 Programmer's Reference:  Architectural Overview 
+ 
+ \author Edward R. Zayas 
+ Transarc Corporation 
+ \version 1.0
+ \date 2 September 1991 22:53 .cCopyright 1991 Transarc Corporation All Rights
+ Reserved FS-00-D160 
+ 
+ 
+ 	\page chap1 Chapter 1: Introduction 
+ 
+ 	\section sec1-1 Section 1.1: Goals and Background 
+ 
+ \par
+ This paper provides an architectural overview of Transarc's wide-area
+ distributed file system, AFS. Specifically, it covers the current level of
+ available software, the third-generation AFS-3 system. This document will
+ explore the technological climate in which AFS was developed, the nature of
+ problem(s) it addresses, and how its design attacks these problems in order to
+ realize the inherent benefits in such a file system. It also examines a set of
+ additional features for AFS, some of which are actively being considered. 
+ \par
+ This document is a member of a reference suite providing programming
+ specifications as to the operation of and interfaces offered by the various AFS
+ system components. It is intended to serve as a high-level treatment of
+ distributed file systems in general and of AFS in particular. This document
+ should ideally be read before any of the others in the suite, as it provides
+ the organizational and philosophical framework in which they may best be
+ interpreted. 
+ 
+ 	\section sec1-2 Section 1.2: Document Layout 
+ 
+ \par
+ Chapter 2 provides a discussion of the technological background and
+ developments that created the environment in which AFS and related systems were
+ inspired. Chapter 3 examines the specific set of goals that AFS was designed to
+ meet, given the possibilities created by personal computing and advances in
+ communication technology. Chapter 4 presents the core AFS architecture and how
+ it addresses these goals. Finally, Chapter 5 considers how AFS functionality
+ may be be improved by certain design changes. 
+ 
+ 	\section sec1-3 Section 1.3: Related Documents 
+ 
+ \par
+ The names of the other documents in the collection, along with brief summaries
+ of their contents, are listed below. 
+ \li AFS-3 Programmer?s Reference: File Server/Cache Manager Interface: This
+ document describes the File Server and Cache Manager agents, which provide the
+ backbone ?le managment services for AFS. The collection of File Servers for a
+ cell supplies centralized ?le storage for that site, and allows clients running
+ the Cache Manager component to access those ?les in a high-performance, secure
+ fashion. 
+ \li AFS-3 Programmer?s Reference:Volume Server/Volume Location Server
+ Interface: This document describes the services through which ?containers? of
+ related user data are located and managed. 
+ \li AFS-3 Programmer?s Reference: Protection Server Interface: This paper
+ describes the server responsible for mapping printable user names to and from
+ their internal AFS identi?ers. The Protection Server also allows users to
+ create, destroy, and manipulate ?groups? of users, which are suitable for
+ placement on Access Control Lists (ACLs). 
+ \li AFS-3 Programmer?s Reference: BOS Server Interface: This paper covers the
+ ?nanny? service which assists in the administrability of the AFS environment. 
+ \li AFS-3 Programmer?s Reference: Speci?cation for the Rx Remote Procedure Call
+ Facility: This document speci?es the design and operation of the remote
+ procedure call and lightweight process packages used by AFS. 
+ 
+ 	\page chap2 Chapter 2: Technological Background 
+ 
+ \par
+ Certain changes in technology over the past two decades greatly in?uenced the
+ nature of computational resources, and the manner in which they were used.
+ These developments created the conditions under which the notion of a
+ distributed ?le systems (DFS) was born. This chapter describes these
+ technological changes, and explores how a distributed ?le system attempts to
+ capitalize on the new computing environment?s strengths and minimize its
+ disadvantages. 
+ 
+ 	\section sec2-1 Section 2.1: Shift in Computational Idioms 
+ 
+ \par
+ By the beginning of the 1980s, new classes of computing engines and new methods
+ by which they may be interconnected were becoming firmly established. At this
+ time, a shift was occurring away from the conventional mainframe-based,
+ timeshared computing environment to one in which both workstation-class
+ machines and the smaller personal computers (PCs) were a strong presence. 
+ \par
+ The new environment offered many benefits to its users when compared with
+ timesharing. These smaller, self-sufficient machines moved dedicated computing
+ power and cycles directly onto people's desks. Personal machines were powerful
+ enough to support a wide variety of applications, and allowed for a richer,
+ more intuitive, more graphically-based interface for them. Learning curves were
+ greatly reduced, cutting training costs and increasing new-employee
+ productivity. In addition, these machines provided a constant level of service
+ throughout the day. Since a personal machine was typically only executing
+ programs for a single human user, it did not suffer from timesharing's
+ load-based response time degradation. Expanding the computing services for an
+ organization was often accomplished by simply purchasing more of the relatively
+ cheap machines. Even small organizations could now afford their own computing
+ resources, over which they exercised full control. This provided more freedom
+ to tailor computing services to the specific needs of particular groups. 
+ \par
+ However, many of the benefits offered by the timesharing systems were lost when
+ the computing idiom first shifted to include personal-style machines. One of
+ the prime casualties of this shift was the loss of the notion of a single name
+ space for all files. Instead, workstation-and PC-based environments each had
+ independent and completely disconnected file systems. The standardized
+ mechanisms through which files could be transferred between machines (e.g.,
+ FTP) were largely designed at a time when there were relatively few large
+ machines that were connected over slow links. Although the newer multi-megabit
+ per second communication pathways allowed for faster transfers, the problem of
+ resource location in this environment was still not addressed. There was no
+ longer a system-wide file system, or even a file location service, so
+ individual users were more isolated from the organization's collective data.
+ Overall, disk requirements ballooned, since lack of a shared file system was
+ often resolved by replicating all programs and data to each machine that needed
+ it. This proliferation of independent copies further complicated the problem of
+ version control and management in this distributed world. Since computers were
+ often no longer behind locked doors at a computer center, user authentication
+ and authorization tasks became more complex. Also, since organizational
+ managers were now in direct control of their computing facilities, they had to
+ also actively manage the hardware and software upon which they depended. 
+ \par
+ Overall, many of the benefits of the proliferation of independent,
+ personal-style machines were partially offset by the communication and
+ organizational penalties they imposed. Collaborative work and dissemination of
+ information became more difficult now that the previously unified file system
+ was fragmented among hundreds of autonomous machines. 
+ 
+ 	\section sec2-2 Section 2.2: Distributed File Systems 
+ 
+ \par
+ As a response to the situation outlined above, the notion of a distributed file
+ system (DFS) was developed. Basically, a DFS provides a framework in which
+ access to files is permitted regardless of their locations. Specifically, a
+ distributed file system offers a single, common set of file system operations
+ through which those accesses are performed. 
+ \par
+ There are two major variations on the core DFS concept, classified according to
+ the way in which file storage is managed. These high-level models are defined
+ below. 
+ \li Peer-to-peer: In this symmetrical model, each participating machine
+ provides storage for specific set of files on its own attached disk(s), and
+ allows others to access them remotely. Thus, each node in the DFS is capable of
+ both importing files (making reference to files resident on foreign machines)
+ and exporting files (allowing other machines to reference files located
+ locally). 
+ \li Server-client: In this model, a set of machines designated as servers
+ provide the storage for all of the files in the DFS. All other machines, known
+ as clients, must direct their file references to these machines. Thus, servers
+ are the sole exporters of files in the DFS, and clients are the sole importers. 
+ 
+ \par
+ The notion of a DFS, whether organized using the peer-to-peer or server-client
+ discipline, may be used as a conceptual base upon which the advantages of
+ personal computing resources can be combined with the single-system benefits of
+ classical timeshared operation. 
+ \par
+ Many distributed file systems have been designed and deployed, operating on the
+ fast local area networks available to connect machines within a single site.
+ These systems include DOMAIN [9], DS [15], RFS [16], and Sprite [10]. Perhaps
+ the most widespread of distributed file systems to date is a product from Sun
+ Microsystems, NFS [13] [14], extending the popular unix file system so that it
+ operates over local networks. 
+ 
+ 	\section sec2-3 Section 2.3: Wide-Area Distributed File Systems 
+ 
+ \par
+ Improvements in long-haul network technology are allowing for faster
+ interconnection bandwidths and smaller latencies between distant sites.
+ Backbone services have been set up across the country, and T1 (1.5
+ megabit/second) links are increasingly available to a larger number of
+ locations. Long-distance channels are still at best approximately an order of
+ magnitude slower than the typical local area network, and often two orders of
+ magnitude slower. The narrowed difference between local-area and wide-area data
+ paths opens the window for the notion of a wide-area distributed file system
+ (WADFS). In a WADFS, the transparency of file access offered by a local-area
+ DFS is extended to cover machines across much larger distances. Wide-area file
+ system functionality facilitates collaborative work and dissemination of
+ information in this larger theater of operation. 
+ 
+ 	\page chap3 Chapter 3: AFS-3 Design Goals 
+ 
+ 	\section sec3-1 Section 3.1: Introduction 
+ 
+ \par
+ This chapter describes the goals for the AFS-3 system, the first commercial
+ WADFS in existence. 
+ \par
+ The original AFS goals have been extended over the history of the project. The
+ initial AFS concept was intended to provide a single distributed file system
+ facility capable of supporting the computing needs of Carnegie Mellon
+ University, a community of roughly 10,000 people. It was expected that most CMU
+ users either had their own workstation-class machine on which to work, or had
+ access to such machines located in public clusters. After being successfully
+ implemented, deployed, and tuned in this capacity, it was recognized that the
+ basic design could be augmented to link autonomous AFS installations located
+ within the greater CMU campus. As described in Section 2.3, the long-haul
+ networking environment developed to a point where it was feasible to further
+ extend AFS so that it provided wide-area file service. The underlying AFS
+ communication component was adapted to better handle the widely-varying channel
+ characteristics encountered by intra-site and inter-site operations. 
+ \par
+ A more detailed history of AFS evolution may be found in [3] and [18]. 
+ 
+ 	\section sec3-2 Section 3.2: System Goals 
+ 
+ \par
+ At a high level, the AFS designers chose to extend the single-machine unix
+ computing environment into a WADFS service. The unix system, in all of its
+ numerous incarnations, is an important computing standard, and is in very wide
+ use. Since AFS was originally intended to service the heavily unix-oriented CMU
+ campus, this decision served an important tactical purpose along with its
+ strategic ramifications. 
+ \par
+ In addition, the server-client discipline described in Section 2.2 was chosen
+ as the organizational base for AFS. This provides the notion of a central file
+ store serving as the primary residence for files within a given organization.
+ These centrally-stored files are maintained by server machines and are made
+ accessible to computers running the AFS client software. 
+ \par
+ Listed in the following sections are the primary goals for the AFS system.
+ Chapter 4 examines how the AFS design decisions, concepts, and implementation
+ meet this list of goals. 
+ 
+ 	\subsection sec3-2-1 Section 3.2.1: Scale 
+ 
+ \par
+ AFS differs from other existing DFSs in that it has the specific goal of
+ supporting a very large user community with a small number of server machines.
+ Unlike the rule-of-thumb ratio of approximately 20 client machines for every
+ server machine (20:1) used by Sun Microsystem's widespread NFS distributed file
+ system, the AFS architecture aims at smoothly supporting client/server ratios
+ more along the lines of 200:1 within a single installation. In addition to
+ providing a DFS covering a single organization with tens of thousands of users,
+ AFS also aims at allowing thousands of independent, autonomous organizations to
+ join in the single, shared name space (see Section 3.2.2 below) without a
+ centralized control or coordination point. Thus, AFS envisions supporting the
+ file system needs of tens of millions of users at interconnected yet autonomous
+ sites. 
+ 
+ 	\subsection sec3-2-2 Section 3.2.2: Name Space 
+ 
+ \par
+ One of the primary strengths of the timesharing computing environment is the
+ fact that it implements a single name space for all files in the system. Users
+ can walk up to any terminal connected to a timesharing service and refer to its
+ files by the identical name. This greatly encourages collaborative work and
+ dissemination of information, as everyone has a common frame of reference. One
+ of the major AFS goals is the extension of this concept to a WADFS. Users
+ should be able to walk up to any machine acting as an AFS client, anywhere in
+ the world, and use the identical file name to refer to a given object. 
+ \par
+ In addition to the common name space, it was also an explicit goal for AFS to
+ provide complete access transparency and location transparency for its files.
+ Access transparency is defined as the system's ability to use a single
+ mechanism to operate on a file, regardless of its location, local or remote.
+ Location transparency is defined as the inability to determine a file's
+ location from its name. A system offering location transparency may also
+ provide transparent file mobility, relocating files between server machines
+ without visible effect to the naming system. 
+ 
+ 	\subsection sec3-2-3 Section 3.2.3: Performance 
+ 
+ \par
+ Good system performance is a critical AFS goal, especially given the scale,
+ client-server ratio, and connectivity specifications described above. The AFS
+ architecture aims at providing file access characteristics which, on average,
+ are similar to those of local disk performance. 
+ 
+ 	\subsection sec3-2-4 Section 3.2.4: Security 
+ 
+ \par
+ A production WADFS, especially one which allows and encourages transparent file
+ access between different administrative domains, must be extremely conscious of
+ security issues. AFS assumes that server machines are "trusted" within their
+ own administrative domain, being kept behind locked doors and only directly
+ manipulated by reliable administrative personnel. On the other hand, AFS client
+ machines are assumed to exist in inherently insecure environments, such as
+ offices and dorm rooms. These client machines are recognized to be
+ unsupervisable, and fully accessible to their users. This situation makes AFS
+ servers open to attacks mounted by possibly modified client hardware, firmware,
+ operating systems, and application software. In addition, while an organization
+ may actively enforce the physical security of its own file servers to its
+ satisfaction, other organizations may be lax in comparison. It is important to
+ partition the system's security mechanism so that a security breach in one
+ administrative domain does not allow unauthorized access to the facilities of
+ other autonomous domains. 
+ \par
+ The AFS system is targeted to provide confidence in the ability to protect
+ system data from unauthorized access in the above environment, where untrusted
+ client hardware and software may attempt to perform direct remote file
+ operations from anywhere in the world, and where levels of physical security at
+ remote sites may not meet the standards of other sites. 
+ 
+ 	\subsection sec3-2-5 Section 3.2.5: Access Control 
+ 
+ \par
+ The standard unix access control mechanism associates mode bits with every file
+ and directory, applying them based on the user's numerical identifier and the
+ user's membership in various groups. This mechanism was considered too
+ coarse-grained by the AFS designers. It was seen as insufficient for specifying
+ the exact set of individuals and groups which may properly access any given
+ file, as well as the operations these principals may perform. The unix group
+ mechanism was also considered too coarse and inflexible. AFS was designed to
+ provide more flexible and finer-grained control of file access, improving the
+ ability to define the set of parties which may operate on files, and what their
+ specific access rights are. 
+ 
+ 	\subsection sec3-2-6 Section 3.2.6: Reliability 
+ 
+ \par
+ The crash of a server machine in any distributed file system causes the
+ information it hosts to become unavailable to the user community. The same
+ effect is observed when server and client machines are isolated across a
+ network partition. Given the potential size of the AFS user community, a single
+ server crash could potentially deny service to a very large number of people.
+ The AFS design reflects a desire to minimize the visibility and impact of these
+ inevitable server crashes. 
+ 
+ 	\subsection sec3-2-7 Section 3.2.7: Administrability 
+ 
+ \par
+ Driven once again by the projected scale of AFS operation, one of the system's
+ goals is to offer easy administrability. With the large projected user
+ population, the amount of file data expected to be resident in the shared file
+ store, and the number of machines in the environment, a WADFS could easily
+ become impossible to administer unless its design allowed for easy monitoring
+ and manipulation of system resources. It is also imperative to be able to apply
+ security and access control mechanisms to the administrative interface. 
+ 
+ 	\subsection sec3-2-8 Section 3.2.8: Interoperability/Coexistence 
+ 
+ \par
+ Many organizations currently employ other distributed file systems, most
+ notably Sun Microsystem's NFS, which is also an extension of the basic
+ single-machine unix system. It is unlikely that AFS will receive significant
+ use if it cannot operate concurrently with other DFSs without mutual
+ interference. Thus, coexistence with other DFSs is an explicit AFS goal. 
+ \par
+ A related goal is to provide a way for other DFSs to interoperate with AFS to
+ various degrees, allowing AFS file operations to be executed from these
+ competing systems. This is advantageous, since it may extend the set of
+ machines which are capable of interacting with the AFS community. Hardware
+ platforms and/or operating systems to which AFS is not ported may thus be able
+ to use their native DFS system to perform AFS file references. 
+ \par
+ These two goals serve to extend AFS coverage, and to provide a migration path
+ by which potential clients may sample AFS capabilities, and gain experience
+ with AFS. This may result in data migration into native AFS systems, or the
+ impetus to acquire a native AFS implementation. 
+ 
+ 	\subsection sec3-2-9 Section 3.2.9: Heterogeneity/Portability 
+ 
+ \par
+ It is important for AFS to operate on a large number of hardware platforms and
+ operating systems, since a large community of unrelated organizations will most
+ likely utilize a wide variety of computing environments. The size of the
+ potential AFS user community will be unduly restricted if AFS executes on a
+ small number of platforms. Not only must AFS support a largely heterogeneous
+ computing base, it must also be designed to be easily portable to new hardware
+ and software releases in order to maintain this coverage over time. 
+ 
+ 	\page chap4 Chapter 4: AFS High-Level Design 
+ 
+ 	\section sec4-1 Section 4.1: Introduction 
+ 
+ \par
+ This chapter presents an overview of the system architecture for the AFS-3
+ WADFS. Different treatments of the AFS system may be found in several
+ documents, including [3], [4], [5], and [2]. Certain system features discussed
+ here are examined in more detail in the set of accompanying AFS programmer
+ specification documents. 
+ \par
+ After the archtectural overview, the system goals enumerated in Chapter 3 are
+ revisited, and the contribution of the various AFS design decisions and
+ resulting features is noted. 
+ 
+ 	\section sec4-2 Section 4.2: The AFS System Architecture 
+ 
+ 	\subsection sec4-2-1 Section 4.2.1: Basic Organization 
+ 
+ \par
+ As stated in Section 3.2, a server-client organization was chosen for the AFS
+ system. A group of trusted server machines provides the primary disk space for
+ the central store managed by the organization controlling the servers. File
+ system operation requests for specific files and directories arrive at server
+ machines from machines running the AFS client software. If the client is
+ authorized to perform the operation, then the server proceeds to execute it. 
+ \par
+ In addition to this basic file access functionality, AFS server machines also
+ provide related system services. These include authentication service, mapping
+ between printable and numerical user identifiers, file location service, time
+ service, and such administrative operations as disk management, system
+ reconfiguration, and tape backup. 
+ 
+ 	\subsection sec4-2-2 Section 4.2.2: Volumes 
+ 
+ 	\subsubsection sec4-2-2-1 Section 4.2.2.1: Definition 
+ 
+ \par
+ Disk partitions used for AFS storage do not directly host individual user files
+ and directories. Rather, connected subtrees of the system's directory structure
+ are placed into containers called volumes. Volumes vary in size dynamically as
+ the objects it houses are inserted, overwritten, and deleted. Each volume has
+ an associated quota, or maximum permissible storage. A single unix disk
+ partition may thus host one or more volumes, and in fact may host as many
+ volumes as physically fit in the storage space. However, the practical maximum
+ is currently 3,500 volumes per disk partition. This limitation is imposed by
+ the salvager program, which examines and repairs file system metadata
+ structures. 
+ \par
+ There are two ways to identify an AFS volume. The first option is a 32-bit
+ numerical value called the volume ID. The second is a human-readable character
+ string called the volume name. 
+ \par
+ Internally, a volume is organized as an array of mutable objects, representing
+ individual files and directories. The file system object associated with each
+ index in this internal array is assigned a uniquifier and a data version
+ number. A subset of these values are used to compose an AFS file identifier, or
+ FID. FIDs are not normally visible to user applications, but rather are used
+ internally by AFS. They consist of ordered triplets, whose components are the
+ volume ID, the index within the volume, and the uniquifier for the index. 
+ \par
+ To understand AFS FIDs, let us consider the case where index i in volume v
+ refers to a file named example.txt. This file's uniquifier is currently set to
+ one (1), and its data version number is currently set to zero (0). The AFS
+ client software may then refer to this file with the following FID: (v, i, 1).
+ The next time a client overwrites the object identified with the (v, i, 1) FID,
+ the data version number for example.txt will be promoted to one (1). Thus, the
+ data version number serves to distinguish between different versions of the
+ same file. A higher data version number indicates a newer version of the file. 
+ \par
+ Consider the result of deleting file (v, i, 1). This causes the body of
+ example.txt to be discarded, and marks index i in volume v as unused. Should
+ another program create a file, say a.out, within this volume, index i may be
+ reused. If it is, the creation operation will bump the index's uniquifier to
+ two (2), and the data version number is reset to zero (0). Any client caching a
+ FID for the deleted example.txt file thus cannot affect the completely
+ unrelated a.out file, since the uniquifiers differ. 
+ 
+ 	\subsubsection sec4-2-2-2 Section 4.2.2.2: Attachment 
+ 
+ \par
+ The connected subtrees contained within individual volumes are attached to
+ their proper places in the file space defined by a site, forming a single,
+ apparently seamless unix tree. These attachment points are called mount points.
+ These mount points are persistent file system objects, implemented as symbolic
+ links whose contents obey a stylized format. Thus, AFS mount points differ from
+ NFS-style mounts. In the NFS environment, the user dynamically mounts entire
+ remote disk partitions using any desired name. These mounts do not survive
+ client restarts, and do not insure a uniform namespace between different
+ machines. 
+ \par
+ A single volume is chosen as the root of the AFS file space for a given
+ organization. By convention, this volume is named root.afs. Each client machine
+ belonging to this organization peforms a unix mount() of this root volume (not
+ to be confused with an AFS mount point) on its empty /afs directory, thus
+ attaching the entire AFS name space at this point. 
+ 
+ 	\subsubsection sec4-2-2-3 Section 4.2.2.3: Administrative Uses 
+ 
+ \par
+ Volumes serve as the administrative unit for AFS ?le system data, providing as
+ the basis for replication, relocation, and backup operations. 
+ 
+ 	\subsubsection sec4-2-2-4 Section 4.2.2.4: Replication 
+ 
+ Read-only snapshots of AFS volumes may be created by administrative personnel.
+ These clones may be deployed on up to eight disk partitions, on the same server
+ machine or across di?erent servers. Each clone has the identical volume ID,
+ which must di?er from its read-write parent. Thus, at most one clone of any
+ given volume v may reside on a given disk partition. File references to this
+ read-only clone volume may be serviced by any of the servers which host a copy. 
+ 
+ 	\subsubsection sec4-2-2-4 Section 4.2.2.5: Backup 
+ 
+ \par
+ Volumes serve as the unit of tape backup and restore operations. Backups are
+ accomplished by first creating an on-line backup volume for each volume to be
+ archived. This backup volume is organized as a copy-on-write shadow of the
+ original volume, capturing the volume's state at the instant that the backup
+ took place. Thus, the backup volume may be envisioned as being composed of a
+ set of object pointers back to the original image. The first update operation
+ on the file located in index i of the original volume triggers the
+ copy-on-write association. This causes the file's contents at the time of the
+ snapshot to be physically written to the backup volume before the newer version
+ of the file is stored in the parent volume. 
+ \par
+ Thus, AFS on-line backup volumes typically consume little disk space. On
+ average, they are composed mostly of links and to a lesser extent the bodies of
+ those few files which have been modified since the last backup took place.
+ Also, the system does not have to be shut down to insure the integrity of the
+ backup images. Dumps are generated from the unchanging backup volumes, and are
+ transferred to tape at any convenient time before the next backup snapshot is
+ performed. 
+ 
+ 	\subsubsection sec4-2-2-6 Section 4.2.2.6: Relocation 
+ 
+ \par
+ Volumes may be moved transparently between disk partitions on a given file
+ server, or between different file server machines. The transparency of volume
+ motion comes from the fact that neither the user-visible names for the files
+ nor the internal AFS FIDs contain server-specific location information. 
+ \par
+ Interruption to file service while a volume move is being executed is typically
+ on the order of a few seconds, regardless of the amount of data contained
+ within the volume. This derives from the staged algorithm used to move a volume
+ to a new server. First, a dump is taken of the volume's contents, and this
+ image is installed at the new site. The second stage involves actually locking
+ the original volume, taking an incremental dump to capture file updates since
+ the first stage. The third stage installs the changes at the new site, and the
+ fourth stage deletes the original volume. Further references to this volume
+ will resolve to its new location. 
+ 
+ 	\subsection sec4-2-3 Section 4.2.3: Authentication 
+ 
+ \par
+ AFS uses the Kerberos [22] [23] authentication system developed at MIT's
+ Project Athena to provide reliable identification of the principals attempting
+ to operate on the files in its central store. Kerberos provides for mutual
+ authentication, not only assuring AFS servers that they are interacting with
+ the stated user, but also assuring AFS clients that they are dealing with the
+ proper server entities and not imposters. Authentication information is
+ mediated through the use of tickets. Clients register passwords with the
+ authentication system, and use those passwords during authentication sessions
+ to secure these tickets. A ticket is an object which contains an encrypted
+ version of the user's name and other information. The file server machines may
+ request a caller to present their ticket in the course of a file system
+ operation. If the file server can successfully decrypt the ticket, then it
+ knows that it was created and delivered by the authentication system, and may
+ trust that the caller is the party identified within the ticket. 
+ \par
+ Such subjects as mutual authentication, encryption and decryption, and the use
+ of session keys are complex ones. Readers are directed to the above references
+ for a complete treatment of Kerberos-based authentication. 
+ 
+ 	\subsection sec4-2-4 Section 4.2.4: Authorization 
+ 
+ 	\subsubsection sec4-2-4-1 Section 4.2.4.1: Access Control Lists 
+ 
+ \par
+ AFS implements per-directory Access Control Lists (ACLs) to improve the ability
+ to specify which sets of users have access to the ?les within the directory,
+ and which operations they may perform. ACLs are used in addition to the
+ standard unix mode bits. ACLs are organized as lists of one or more (principal,
+ rights) pairs. A principal may be either the name of an individual user or a
+ group of individual users. There are seven expressible rights, as listed below. 
+ \li Read (r): The ability to read the contents of the files in a directory. 
+ \li Lookup (l): The ability to look up names in a directory. 
+ \li Write (w): The ability to create new files and overwrite the contents of
+ existing files in a directory. 
+ \li Insert (i): The ability to insert new files in a directory, but not to
+ overwrite existing files. 
+ \li Delete (d): The ability to delete files in a directory. 
+ \li Lock (k): The ability to acquire and release advisory locks on a given
+ directory. 
+ \li Administer (a): The ability to change a directory's ACL. 
+ 
+ 	\subsubsection sec4-2-4-2 Section 4.2.4.2: AFS Groups 
+ 
+ \par
+ AFS users may create a certain number of groups, differing from the standard
+ unix notion of group. These AFS groups are objects that may be placed on ACLs,
+ and simply contain a list of AFS user names that are to be treated identically
+ for authorization purposes. For example, user erz may create a group called
+ erz:friends consisting of the kazar, vasilis, and mason users. Should erz wish
+ to grant read, lookup, and insert rights to this group in directory d, he
+ should create an entry reading (erz:friends, rli) in d's ACL. 
+ \par
+ AFS offers three special, built-in groups, as described below. 
+ \par
+ 1. system:anyuser: Any individual who accesses AFS files is considered by the
+ system to be a member of this group, whether or not they hold an authentication
+ ticket. This group is unusual in that it doesn't have a stable membership. In
+ fact, it doesn't have an explicit list of members. Instead, the system:anyuser
+ "membership" grows and shrinks as file accesses occur, with users being
+ (conceptually) added and deleted automatically as they interact with the
+ system. 
+ \par
+ The system:anyuser group is typically put on the ACL of those directories for
+ which some specific level of completely public access is desired, covering any
+ user at any AFS site. 
+ \par
+ 2. system:authuser: Any individual in possession of a valid Kerberos ticket
+ minted by the organization's authentication service is treated as a member of
+ this group. Just as with system:anyuser, this special group does not have a
+ stable membership. If a user acquires a ticket from the authentication service,
+ they are automatically "added" to the group. If the ticket expires or is
+ discarded by the user, then the given individual will automatically be
+ "removed" from the group. 
+ \par
+ The system:authuser group is usually put on the ACL of those directories for
+ which some specific level of intra-site access is desired. Anyone holding a
+ valid ticket within the organization will be allowed to perform the set of
+ accesses specified by the ACL entry, regardless of their precise individual ID. 
+ \par
+ 3. system:administrators: This built-in group de?nes the set of users capable
+ of performing certain important administrative operations within the cell.
+ Members of this group have explicit 'a' (ACL administration) rights on every
+ directory's ACL in the organization. Members of this group are the only ones
+ which may legally issue administrative commands to the file server machines
+ within the organization. This group is not like the other two described above
+ in that it does have a stable membership, where individuals are added and
+ deleted from the group explicitly. 
+ \par
+ The system:administrators group is typically put on the ACL of those
+ directories which contain sensitive administrative information, or on those
+ places where only administrators are allowed to make changes. All members of
+ this group have implicit rights to change the ACL on any AFS directory within
+ their organization. Thus, they don't have to actually appear on an ACL, or have
+ 'a' rights enabled in their ACL entry if they do appear, to be able to modify
+ the ACL. 
+ 
+ 	\subsection sec4-2-5 Section 4.2.5: Cells 
+ 
+ \par
+ A cell is the set of server and client machines managed and operated by an
+ administratively independent organization, as fully described in the original
+ proposal [17] and specification [18] documents. The cell's administrators make
+ decisions concerning such issues as server deployment and configuration, user
+ backup schedules, and replication strategies on their own hardware and disk
+ storage completely independently from those implemented by other cell
+ administrators regarding their own domains. Every client machine belongs to
+ exactly one cell, and uses that information to determine where to obtain
+ default system resources and services. 
+ \par
+ The cell concept allows autonomous sites to retain full administrative control
+ over their facilities while allowing them to collaborate in the establishment
+ of a single, common name space composed of the union of their individual name
+ spaces. By convention, any file name beginning with /afs is part of this shared
+ global name space and can be used at any AFS-capable machine. The original
+ mount point concept was modified to contain cell information, allowing volumes
+ housed in foreign cells to be mounted in the file space. Again by convention,
+ the top-level /afs directory contains a mount point to the root.cell volume for
+ each cell in the AFS community, attaching their individual file spaces. Thus,
+ the top of the data tree managed by cell xyz is represented by the /afs/xyz
+ directory. 
+ \par
+ Creating a new AFS cell is straightforward, with the operation taking three
+ basic steps: 
+ \par
+ 1. Name selection: A prospective site has to first select a unique name for
+ itself. Cell name selection is inspired by the hierarchical Domain naming
+ system. Domain-style names are designed to be assignable in a completely
+ decentralized fashion. Example cell names are transarc.com, ssc.gov, and
+ umich.edu. These names correspond to the AFS installations at Transarc
+ Corporation in Pittsburgh, PA, the Superconducting Supercollider Lab in Dallas,
+ TX, and the University of Michigan at Ann Arbor, MI. respectively. 
+ \par
+ 2. Server installation: Once a cell name has been chosen, the site must bring
+ up one or more AFS file server machines, creating a local file space and a
+ suite of local services, including authentication (Section 4.2.6.4) and volume
+ location (Section 4.2.6.2). 
+ \par
+ 3. Advertise services: In order for other cells to discover the presence of the
+ new site, it must advertise its name and which of its machines provide basic
+ AFS services such as authentication and volume location. An established site
+ may then record the machines providing AFS system services for the new cell,
+ and then set up its mount point under /afs. By convention, each cell places the
+ top of its file tree in a volume named root.cell. 
+ 
+ 	\subsection sec4-2-6 Section 4.2.6: Implementation of Server
+ Functionality 
+ 
+ \par
+ AFS server functionality is implemented by a set of user-level processes which
+ execute on server machines. This section examines the role of each of these
+ processes. 
+ 
+ 	\subsubsection sec4-2-6-1 Section 4.2.6.1: File Server 
+ 
+ \par
+ This AFS entity is responsible for providing a central disk repository for a
+ particular set of files within volumes, and for making these files accessible
+ to properly-authorized users running on client machines. 
+ 
+ 	\subsubsection sec4-2-6-2 Section 4.2.6.2: Volume Location Server 
+ 
+ \par
+ The Volume Location Server maintains and exports the Volume Location Database
+ (VLDB). This database tracks the server or set of servers on which volume
+ instances reside. Among the operations it supports are queries returning volume
+ location and status information, volume ID management, and creation, deletion,
+ and modification of VLDB entries. 
+ \par
+ The VLDB may be replicated to two or more server machines for availability and
+ load-sharing reasons. A Volume Location Server process executes on each server
+ machine on which a copy of the VLDB resides, managing that copy. 
+ 
+ 	\subsubsection sec4-2-6-3 Section 4.2.6.3: Volume Server 
+ 
+ \par
+ The Volume Server allows administrative tasks and probes to be performed on the
+ set of AFS volumes residing on the machine on which it is running. These
+ operations include volume creation and deletion, renaming volumes, dumping and
+ restoring volumes, altering the list of replication sites for a read-only
+ volume, creating and propagating a new read-only volume image, creation and
+ update of backup volumes, listing all volumes on a partition, and examining
+ volume status. 
+ 
+ 	\subsubsection sec4-2-6-4 Section 4.2.6.4: Authentication Server 
+ 
+ \par
+ The AFS Authentication Server maintains and exports the Authentication Database
+ (ADB). This database tracks the encrypted passwords of the cell's users. The
+ Authentication Server interface allows operations that manipulate ADB entries.
+ It also implements the Kerberos mutual authentication protocol, supplying the
+ appropriate identification tickets to successful callers. 
+ \par
+ The ADB may be replicated to two or more server machines for availability and
+ load-sharing reasons. An Authentication Server process executes on each server
+ machine on which a copy of the ADB resides, managing that copy. 
+ 
+ 	\subsubsection sec4-2-6-5 Section 4.2.6.5: Protection Server 
+ 
+ \par
+ The Protection Server maintains and exports the Protection Database (PDB),
+ which maps between printable user and group names and their internal numerical
+ AFS identifiers. The Protection Server also allows callers to create, destroy,
+ query ownership and membership, and generally manipulate AFS user and group
+ records. 
+ \par
+ The PDB may be replicated to two or more server machines for availability and
+ load-sharing reasons. A Protection Server process executes on each server
+ machine on which a copy of the PDB resides, managing that copy. 
+ 
+ 	\subsubsection sec4-2-6-6 Section 4.2.6.6: BOS Server 
+ 
+ \par
+ The BOS Server is an administrative tool which runs on each file server machine
+ in a cell. This server is responsible for monitoring the health of the AFS
+ agent processess on that machine. The BOS Server brings up the chosen set of
+ AFS agents in the proper order after a system reboot, answers requests as to
+ their status, and restarts them when they fail. It also accepts commands to
+ start, suspend, or resume these processes, and install new server binaries. 
+ 
+ 	\subsubsection sec4-2-6-7 Section 4.2.6.7: Update Server/Client 
+ 
+ \par
+ The Update Server and Update Client programs are used to distribute important
+ system files and server binaries. For example, consider the case of
+ distributing a new File Server binary to the set of Sparcstation server
+ machines in a cell. One of the Sparcstation servers is declared to be the
+ distribution point for its machine class, and is configured to run an Update
+ Server. The new binary is installed in the appropriate local directory on that
+ Sparcstation distribution point. Each of the other Sparcstation servers runs an
+ Update Client instance, which periodically polls the proper Update Server. The
+ new File Server binary will be detected and copied over to the client. Thus,
+ new server binaries need only be installed manually once per machine type, and
+ the distribution to like server machines will occur automatically. 
+ 
+ 	\subsection sec4-2-7 Section 4.2.7: Implementation of Client
+ Functionality 
+ 
+ 	\subsubsection sec4-2-7-1 Section 4.2.7.1: Introduction 
+ 
+ \par
+ The portion of the AFS WADFS which runs on each client machine is called the
+ Cache Manager. This code, running within the client's kernel, is a user's
+ representative in communicating and interacting with the File Servers. The
+ Cache Manager's primary responsibility is to create the illusion that the
+ remote AFS file store resides on the client machine's local disk(s). 
+ \par
+ s implied by its name, the Cache Manager supports this illusion by maintaining
+ a cache of files referenced from the central AFS store on the machine's local
+ disk. All file operations executed by client application programs on files
+ within the AFS name space are handled by the Cache Manager and are realized on
+ these cached images. Client-side AFS references are directed to the Cache
+ Manager via the standard VFS and vnode file system interfaces pioneered and
+ advanced by Sun Microsystems [21]. The Cache Manager stores and fetches files
+ to and from the shared AFS repository as necessary to satisfy these operations.
+ It is responsible for parsing unix pathnames on open() operations and mapping
+ each component of the name to the File Server or group of File Servers that
+ house the matching directory or file. 
+ \par
+ The Cache Manager has additional responsibilities. It also serves as a reliable
+ repository for the user's authentication information, holding on to their
+ tickets and wielding them as necessary when challenged during File Server
+ interactions. It caches volume location information gathered from probes to the
+ VLDB, and keeps the client machine's local clock synchronized with a reliable
+ time source. 
+ 
+ 	\subsubsection sec4-2-7-2 Section 4.2.7.2: Chunked Access 
+ 
+ \par
+ In previous AFS incarnations, whole-file caching was performed. Whenever an AFS
+ file was referenced, the entire contents of the file were stored on the
+ client's local disk. This approach had several disadvantages. One problem was
+ that no file larger than the amount of disk space allocated to the client's
+ local cache could be accessed. 
+ \par
+ AFS-3 supports chunked file access, allowing individual 64 kilobyte pieces to
+ be fetched and stored. Chunking allows AFS files of any size to be accessed
+ from a client. The chunk size is settable at each client machine, but the
+ default chunk size of 64K was chosen so that most unix files would fit within a
+ single chunk. 
+ 
+ 	\subsubsection sec4-2-7-3 Section 4.2.7.3: Cache Management 
+ 
+ \par
+ The use of a file cache by the AFS client-side code, as described above, raises
+ the thorny issue of cache consistency. Each client must effciently determine
+ whether its cached file chunks are identical to the corresponding sections of
+ the file as stored at the server machine before allowing a user to operate on
+ those chunks. 
+ \par
+ AFS employs the notion of a callback as the backbone of its cache consistency
+ algorithm. When a server machine delivers one or more chunks of a file to a
+ client, it also includes a callback "promise" that the client will be notified
+ if any modifications are made to the data in the file at the server. Thus, as
+ long as the client machine is in possession of a callback for a file, it knows
+ it is correctly synchronized with the centrally-stored version, and allows its
+ users to operate on it as desired without any further interaction with the
+ server. Before a file server stores a more recent version of a file on its own
+ disks, it will first break all outstanding callbacks on this item. A callback
+ will eventually time out, even if there are no changes to the file or directory
+ it covers. 
+ 
+ 	\subsection sec4-2-8 Section 4.2.8: Communication Substrate: Rx 
+ 
+ \par
+ All AFS system agents employ remote procedure call (RPC) interfaces. Thus,
+ servers may be queried and operated upon regardless of their location. 
+ \par
+ The Rx RPC package is used by all AFS agents to provide a high-performance,
+ multi-threaded, and secure communication mechanism. The Rx protocol is
+ adaptive, conforming itself to widely varying network communication media
+ encountered by a WADFS. It allows user applications to de?ne and insert their
+ own security modules, allowing them to execute the precise end-to-end
+ authentication algorithms required to suit their specific needs and goals. Rx
+ offers two built-in security modules. The first is the null module, which does
+ not perform any encryption or authentication checks. The second built-in
+ security module is rxkad, which utilizes Kerberos authentication. 
+ \par
+ Although pervasive throughout the AFS distributed file system, all of its
+ agents, and many of its standard application programs, Rx is entirely separable
+ from AFS and does not depend on any of its features. In fact, Rx can be used to
+ build applications engaging in RPC-style communication under a variety of
+ unix-style file systems. There are in-kernel and user-space implementations of
+ the Rx facility, with both sharing the same interface. 
+ 
+ 	\subsection sec4-2-9 Section 4.2.9: Database Replication: ubik 
+ 
+ \par
+ The three AFS system databases (VLDB, ADB, and PDB) may be replicated to
+ multiple server machines to improve their availability and share access loads
+ among the replication sites. The ubik replication package is used to implement
+ this functionality. A full description of ubik and of the quorum completion
+ algorithm it implements may be found in [19] and [20]. 
+ \par
+ The basic abstraction provided by ubik is that of a disk file replicated to
+ multiple server locations. One machine is considered to be the synchronization
+ site, handling all write operations on the database file. Read operations may
+ be directed to any of the active members of the quorum, namely a subset of the
+ replication sites large enough to insure integrity across such failures as
+ individual server crashes and network partitions. All of the quorum members
+ participate in regular elections to determine the current synchronization site.
+ The ubik algorithms allow server machines to enter and exit the quorum in an
+ orderly and consistent fashion. 
+ \par
+ All operations to one of these replicated "abstract files" are performed as
+ part of a transaction. If all the related operations performed under a
+ transaction are successful, then the transaction is committed, and the changes
+ are made permanent. Otherwise, the transaction is aborted, and all of the
+ operations for that transaction are undone. 
+ \par
+ Like Rx, the ubik facility may be used by client applications directly. Thus,
+ user applicatons may easily implement the notion of a replicated disk file in
+ this fashion. 
+ 
+ 	\subsection sec4-2-10 Section 4.2.10: System Management 
+ 
+ \par
+ There are several AFS features aimed at facilitating system management. Some of
+ these features have already been mentioned, such as volumes, the BOS Server,
+ and the pervasive use of secure RPCs throughout the system to perform
+ administrative operations from any AFS client machinein the worldwide
+ community. This section covers additional AFS features and tools that assist in
+ making the system easier to manage. 
+ 
+ 	\subsubsection sec4-2-10-1 Section 4.2.10.1: Intelligent Access
+ Programs 
+ 
+ \par
+ A set of intelligent user-level applications were written so that the AFS
+ system agents could be more easily queried and controlled. These programs
+ accept user input, then translate the caller's instructions into the proper
+ RPCs to the responsible AFS system agents, in the proper order. 
+ \par
+ An example of this class of AFS application programs is vos, which mediates
+ access to the Volume Server and the Volume Location Server agents. Consider the
+ vos move operation, which results in a given volume being moved from one site
+ to another. The Volume Server does not support a complex operation like a
+ volume move directly. In fact, this move operation involves the Volume Servers
+ at the current and new machines, as well as the Volume Location Server, which
+ tracks volume locations. Volume moves are accomplished by a combination of full
+ and incremental volume dump and restore operations, and a VLDB update. The vos
+ move command issues the necessary RPCs in the proper order, and attempts to
+ recovers from errors at each of the steps. 
+ \par
+ The end result is that the AFS interface presented to system administrators is
+ much simpler and more powerful than that offered by the raw RPC interfaces
+ themselves. The learning curve for administrative personnel is thus flattened.
+ Also, automatic execution of complex system operations are more likely to be
+ successful, free from human error. 
+ 
+ 	\subsubsection sec4-2-10-2 Section 4.2.10.2: Monitoring Interfaces 
+ 
+ \par
+ The various AFS agent RPC interfaces provide calls which allow for the
+ collection of system status and performance data. This data may be displayed by
+ such programs as scout, which graphically depicts File Server performance
+ numbers and disk utilizations. Such monitoring capabilites allow for quick
+ detection of system problems. They also support detailed performance analyses,
+ which may indicate the need to reconfigure system resources. 
+ 
+ 	\subsubsection sec4-2-10-3 Section 4.2.10.3: Backup System 
+ 
+ \par
+ A special backup system has been designed and implemented for AFS, as described
+ in [6]. It is not sufficient to simply dump the contents of all File Server
+ partitions onto tape, since volumes are mobile, and need to be tracked
+ individually. The AFS backup system allows hierarchical dump schedules to be
+ built based on volume names. It generates the appropriate RPCs to create the
+ required backup volumes and to dump these snapshots to tape. A database is used
+ to track the backup status of system volumes, along with the set of tapes on
+ which backups reside. 
+ 
+ 	\subsection sec4-2-11 Section 4.2.11: Interoperability 
+ 
+ \par
+ Since the client portion of the AFS software is implemented as a standard
+ VFS/vnode file system object, AFS can be installed into client kernels and
+ utilized without interference with other VFS-style file systems, such as
+ vanilla unix and the NFS distributed file system. 
+ \par
+ Certain machines either cannot or choose not to run the AFS client software
+ natively. If these machines run NFS, it is still possible to access AFS files
+ through a protocol translator. The NFS-AFS Translator may be run on any machine
+ at the given site that runs both NFS and the AFS Cache Manager. All of the NFS
+ machines that wish to access the AFS shared store proceed to NFS-mount the
+ translator's /afs directory. File references generated at the NFS-based
+ machines are received at the translator machine, which is acting in its
+ capacity as an NFS server. The file data is actually obtained when the
+ translator machine issues the corresponding AFS references in its role as an
+ AFS client. 
+ 
+ 	\section sec4-3 Section 4.3: Meeting AFS Goals 
+ 
+ \par
+ The AFS WADFS design, as described in this chapter, serves to meet the system
+ goals stated in Chapter 3. This section revisits each of these AFS goals, and
+ identifies the specific architectural constructs that bear on them. 
+ 
+ 	\subsection sec4-3-1 Section 4.3.1: Scale 
+ 
+ \par
+ To date, AFS has been deployed to over 140 sites world-wide, with approximately
+ 60 of these cells visible on the public Internet. AFS sites are currently
+ operating in several European countries, in Japan, and in Australia. While many
+ sites are modest in size, certain cells contain more than 30,000 accounts. AFS
+ sites have realized client/server ratios in excess of the targeted 200:1. 
+ 
+ 	\subsection sec4-3-2 Section 4.3.2: Name Space 
+ 
+ \par
+ A single uniform name space has been constructed across all cells in the
+ greater AFS user community. Any pathname beginning with /afs may indeed be used
+ at any AFS client. A set of common conventions regarding the organization of
+ the top-level /afs directory and several directories below it have been
+ established. These conventions also assist in the location of certain per-cell
+ resources, such as AFS configuration files. 
+ \par
+ Both access transparency and location transparency are supported by AFS, as
+ evidenced by the common access mechanisms and by the ability to transparently
+ relocate volumes. 
+ 
+ 	\subsection sec4-3-3 Section 4.3.3: Performance 
+ 
+ \par
+ AFS employs caching extensively at all levels to reduce the cost of "remote"
+ references. Measured data cache hit ratios are very high, often over 95%. This
+ indicates that the file images kept on local disk are very effective in
+ satisfying the set of remote file references generated by clients. The
+ introduction of file system callbacks has also been demonstrated to be very
+ effective in the efficient implementation of cache synchronization. Replicating
+ files and system databases across multiple server machines distributes load
+ among the given servers. The Rx RPC subsystem has operated successfully at
+ network speeds ranging from 19.2 kilobytes/second to experimental
+ gigabit/second FDDI networks. 
+ \par
+ Even at the intra-site level, AFS has been shown to deliver good performance,
+ especially in high-load situations. One often-quoted study [1] compared the
+ performance of an older version of AFS with that of NFS on a large file system
+ task named the Andrew Benchmark. While NFS sometimes outperformed AFS at low
+ load levels, its performance fell off rapidly at higher loads while AFS
+ performance degradation was not significantly affected. 
+ 
+ 	\subsection sec4-3-4 Section 4.3.4: Security 
+ 
+ \par
+ The use of Kerberos as the AFS authentication system fits the security goal
+ nicely. Access to AFS files from untrusted client machines is predicated on the
+ caller's possession of the appropriate Kerberos ticket(s). Setting up per-site,
+ Kerveros-based authentication services compartmentalizes any security breach to
+ the cell which was compromised. Since the Cache Manager will store multiple
+ tickets for its users, they may take on different identities depending on the
+ set of file servers being accessed. 
+ 
+ 	\subsection sec4-3-5 Section 4.3.5: Access Control 
+ 
+ \par
+ AFS extends the standard unix authorization mechanism with per-directory Access
+ Control Lists. These ACLs allow specific AFS principals and groups of these
+ principals to be granted a wide variety of rights on the associated files.
+ Users may create and manipulate AFS group entities without administrative
+ assistance, and place these tailored groups on ACLs. 
+ 
+ 	\subsection sec4-3-6 Section 4.3.6: Reliability 
+ 
+ \par
+ A subset of file server crashes are masked by the use of read-only replication
+ on volumes containing slowly-changing files. Availability of important,
+ frequently-used programs such as editors and compilers may thus been greatly
+ improved. Since the level of replication may be chosen per volume, and easily
+ changed, each site may decide the proper replication levels for certain
+ programs and/or data. 
+ Similarly, replicated system databases help to maintain service in the face of
+ server crashes and network partitions. 
+ 
+ 	\subsection sec4-3-7 Section 4.3.7: Administrability 
+ 
+ \par
+ Such features as pervasive, secure RPC interfaces to all AFS system components,
+ volumes, overseer processes for monitoring and management of file system
+ agents, intelligent user-level access tools, interface routines providing
+ performance and statistics information, and an automated backup service
+ tailored to a volume-based environment all contribute to the administrability
+ of the AFS system. 
+ 
+ 	\subsection sec4-3-8 Section 4.3.8: Interoperability/Coexistence 
+ 
+ \par
+ Due to its VFS-style implementation, the AFS client code may be easily
+ installed in the machine's kernel, and may service file requests without
+ interfering in the operation of any other installed file system. Machines
+ either not capable of running AFS natively or choosing not to do so may still
+ access AFS files via NFS with the help of a protocol translator agent. 
+ 
+ 	\subsection sec4-3-9 Section 4.3.9: Heterogeneity/Portability 
+ 
+ \par
+ As most modern kernels use a VFS-style interface to support their native file
+ systems, AFS may usually be ported to a new hardware and/or software
+ environment in a relatively straightforward fashion. Such ease of porting
+ allows AFS to run on a wide variety of platforms. 
+ 
+ 	\page chap5 Chapter 5: Future AFS Design Re?nements 
+ 
+ 	\section sec5-1 Section 5.1: Overview 
+ 
+ \par
+ The current AFS WADFS design and implementation provides a high-performance,
+ scalable, secure, and flexible computing environment. However, there is room
+ for improvement on a variety of fronts. This chapter considers a set of topics,
+ examining the shortcomings of the current AFS system and considering how
+ additional functionality may be fruitfully constructed. 
+ \par
+ Many of these areas are already being addressed in the next-generation AFS
+ system which is being built as part of Open Software Foundation?s (OSF)
+ Distributed Computing Environment [7] [8]. 
+ 
+ 	\section sec5-2 Section 5.2: unix Semantics 
+ 
+ \par
+ Any distributed file system which extends the unix file system model to include
+ remote file accesses presents its application programs with failure modes which
+ do not exist in a single-machine unix implementation. This semantic difference
+ is dificult to mask. 
+ \par
+ The current AFS design varies from pure unix semantics in other ways. In a
+ single-machine unix environment, modifications made to an open file are
+ immediately visible to other processes with open file descriptors to the same
+ file. AFS does not reproduce this behavior when programs on different machines
+ access the same file. Changes made to one cached copy of the file are not made
+ immediately visible to other cached copies. The changes are only made visible
+ to other access sites when a modified version of a file is stored back to the
+ server providing its primary disk storage. Thus, one client's changes may be
+ entirely overwritten by another client's modifications. The situation is
+ further complicated by the possibility that dirty file chunks may be flushed
+ out to the File Server before the file is closed. 
+ \par
+ The version of AFS created for the OSF offering extends the current, untyped
+ callback notion to a set of multiple, independent synchronization guarantees.
+ These synchronization tokens allow functionality not offered by AFS-3,
+ including byte-range mandatory locking, exclusive file opens, and read and
+ write privileges over portions of a file. 
+ 
+ 	\section sec5-3 Section 5.3: Improved Name Space Management 
+ 
+ \par
+ Discovery of new AFS cells and their integration into each existing cell's name
+ space is a completely manual operation in the current system. As the rate of
+ new cell creations increases, the load imposed on system administrators also
+ increases. Also, representing each cell's file space entry as a mount point
+ object in the /afs directory leads to a potential problem. As the number of
+ entries in the /afs directory increase, search time through the directory also
+ grows. 
+ \par
+ One improvement to this situation is to implement the top-level /afs directory
+ through a Domain-style database. The database would map cell names to the set
+ of server machines providing authentication and volume location services for
+ that cell. The Cache Manager would query the cell database in the course of
+ pathname resolution, and cache its lookup results. 
+ \par
+ In this database-style environment, adding a new cell entry under /afs is
+ accomplished by creating the appropriate database entry. The new cell
+ information is then immediately accessible to all AFS clients. 
+ 
+ 	\section sec5-4 Section 5.4: Read/Write Replication 
+ 
+ \par
+ The AFS-3 servers and databases are currently equipped to handle read/only
+ replication exclusively. However, other distributed file systems have
+ demonstrated the feasibility of providing full read/write replication of data
+ in environments very similar to AFS [11]. Such systems can serve as models for
+ the set of required changes. 
+ 
+ 	\section sec5-5 Section 5.5: Disconnected Operation 
+ 
+ \par
+ Several facilities are provided by AFS so that server failures and network
+ partitions may be completely or partially masked. However, AFS does not provide
+ for completely disconnected operation of file system clients. Disconnected
+ operation is a mode in which a client continues to access critical data during
+ accidental or intentional inability to access the shared file repository. After
+ some period of autonomous operation on the set of cached files, the client
+ reconnects with the repository and resynchronizes the contents of its cache
+ with the shared store. 
+ \par
+ Studies of related systems provide evidence that such disconnected operation is
+ feasible [11] [12]. Such a capability may be explored for AFS. 
+ 
+ 	\section sec5-6 Section 5.6: Multiprocessor Support 
+ 
+ \par
+ The LWP lightweight thread package used by all AFS system processes assumes
+ that individual threads may execute non-preemeptively, and that all other
+ threads are quiescent until control is explicitly relinquished from within the
+ currently active thread. These assumptions conspire to prevent AFS from
+ operating correctly on a multiprocessor platform. 
+ \par
+ A solution to this restriction is to restructure the AFS code organization so
+ that the proper locking is performed. Thus, critical sections which were
+ previously only implicitly defined are explicitly specified. 
+ 
+ 	\page biblio Bibliography 
+ 
+ \li [1] John H. Howard, Michael L. Kazar, Sherri G. Menees, David A. Nichols,
+ M. Satyanarayanan, Robert N. Sidebotham, Michael J. West, Scale and Performance
+ in a Distributed File System, ACM Transactions on Computer Systems, Vol. 6, No.
+ 1, February 1988, pp. 51-81. 
+ \li [2] Michael L. Kazar, Synchronization and Caching Issues in the Andrew File
+ System, USENIX Proceedings, Dallas, TX, Winter 1988. 
+ \li [3] Alfred Z. Spector, Michael L. Kazar, 	Uniting File Systems, Unix
+ Review, March 1989, 
+ \li [4] Johna Till Johnson, Distributed File System Brings LAN Technology to
+ WANs, Data Communications, November 1990, pp. 66-67. 
+ \li [5] Michael Padovano, PADCOM Associates, AFS widens your horizons in
+ distributed computing, Systems Integration, March 1991. 
+ \li [6] Steve Lammert, 	The AFS 3.0 Backup System, LISA IV Conference
+ Proceedings, Colorado Springs, Colorado, October 1990. 
+ \li [7] Michael L. Kazar, Bruce W. Leverett, Owen T. Anderson, Vasilis
+ Apostolides, Beth A. Bottos, Sailesh Chutani, Craig F. Everhart, W. Anthony
+ Mason, Shu-Tsui Tu, Edward R. Zayas, DEcorum File System Architectural
+ Overview, USENIX Conference Proceedings, Anaheim, Texas, Summer 1990. 
+ \li [8] 	AFS Drives DCE Selection, Digital Desktop, Vol. 1, No. 6,
+ September 1990. 
+ \li [9] Levine, P.H., The Apollo DOMAIN Distributed File System, in NATO ASI
+ Series: Theory and Practice of Distributed Operating Systems, Y. Paker, J-P.
+ Banatre, M. Bozyigit, editors, Springer-Verlag, 1987. 
+ \li [10] M.N. Nelson, B.B. Welch, J.K. Ousterhout, 	Caching in the Sprite
+ Network File System, ACM Transactions on Computer Systems, Vol. 6, No. 1,
+ February 1988. 
+ \li [11] James J. Kistler, M. Satyanarayanan, Disconnected Operaton in the Coda
+ File System, CMU School of Computer Science technical report, CMU-CS-91-166, 26
+ July 1991. 
+ \li [12] Puneet Kumar, M. Satyanarayanan, 	Log-Based Directory Resolution
+ in the Coda File System, CMU School of Computer Science internal document, 2
+ July 1991. 
+ \li [13] Sun Microsystems, Inc., 	NFS: Network File System Protocol
+ Specification, RFC 1094, March 1989. 
+ \li [14] Sun Microsystems, Inc,. Design and Implementation of the Sun Network
+ File System, USENIX Summer Conference Proceedings, June 1985. 
+ \li [15] C.H. Sauer, D.W Johnson, L.K. Loucks, A.A. Shaheen-Gouda, and T.A.
+ Smith, RT PC Distributed Services Overview, Operating Systems Review, Vol. 21,
+ No. 3, July 1987. 
+ \li [16] A.P. Rifkin, M.P. 	Forbes, R.L. Hamilton, M. Sabrio, S. Shah, and
+ K. Yueh, RFS Architectural Overview, Usenix Conference Proceedings, Atlanta,
+ Summer 1986. 
+ \li [17] Edward R. Zayas, Administrative Cells: Proposal for Cooperative Andrew
+ File Systems, Information Technology Center internal document, Carnegie Mellon
+ University, 25 June 1987. 
+ \li [18] Ed. Zayas, Craig Everhart, Design and Specification of the Cellular
+ Andrew Environment, Information Technology Center, Carnegie Mellon University,
+ CMU-ITC-070, 2 August 1988. 
+ \li [19] Kazar, Michael L., Information Technology Center, Carnegie Mellon
+ University. Ubik -A Library For Managing Ubiquitous Data, ITCID, Pittsburgh,
+ PA, Month, 1988. 
+ \li [20] Kazar, Michael L., Information Technology Center, Carnegie Mellon
+ University. Quorum Completion, ITCID, Pittsburgh, PA, Month, 1988. 
+ \li [21] S. R. Kleinman. 	Vnodes: An Architecture for Multiple file
+ System Types in Sun UNIX, Conference Proceedings, 1986 Summer Usenix Technical
+ Conference, pp. 238-247, El Toro, CA, 1986. 
+ \li [22] S.P. Miller, B.C. Neuman, J.I. Schiller, J.H. Saltzer. Kerberos
+ Authentication and Authorization System, Project Athena Technical Plan, Section
+ E.2.1, M.I.T., December 1987. 
+ \li [23] Bill 	Bryant. Designing an Authentication System: a Dialogue in Four
+ Scenes, Project Athena internal document, M.I.T, draft of 8 February 1988. 
+ 
+ 
+ */
Index: openafs/doc/man-pages/Makefile.in
diff -c openafs/doc/man-pages/Makefile.in:1.1.2.7 openafs/doc/man-pages/Makefile.in:1.1.2.9
*** openafs/doc/man-pages/Makefile.in:1.1.2.7	Mon Jan 30 13:21:48 2006
--- openafs/doc/man-pages/Makefile.in	Tue Jun  2 13:34:06 2009
***************
*** 11,16 ****
--- 11,18 ----
  html:
  	perl generate-html
  
+ LINKEDPAGES = klog pagsh tokens
+ 
  dest:
  	chmod +x install-man
  	mkdir -p $(DEST)/man/man1 $(DEST)/man/man5 $(DEST)/man/man8
***************
*** 23,28 ****
--- 25,35 ----
  	set -e; cd man8 && for M in *.8 ; do \
  	    ../install-man $$M $(DEST)/man/man8/$$M ; \
  	done
+ 	set -e; for M in ${LINKEDPAGES}; do \
+ 	    test -h $(DEST)/man/man1/$$M.krb.1 \
+ 		|| ln -s $$M.1 $(DEST)/man/man1/$$M.krb.1 ; \
+ 	done
+ 
  
  install: $(MAN1) $(MAN8)
  	chmod +x install-man
***************
*** 37,39 ****
--- 44,50 ----
  	set -e; cd man8 && for M in *.8 ; do \
  	    ../install-man $$M $(DESTDIR)$(mandir)/man8/$$M ; \
  	done
+ 	set -e; for M in ${LINKEDPAGES}; do \
+ 	    test -h $(DESTDIR)$(mandir)/man1/$$M.krb.1 \
+ 		|| ln -s $$M.1 $(DESTDIR)$(mandir)/man1/$$M.krb.1 ; \
+ 	done
Index: openafs/doc/man-pages/README
diff -c openafs/doc/man-pages/README:1.4.2.33 openafs/doc/man-pages/README:1.4.2.45
*** openafs/doc/man-pages/README:1.4.2.33	Mon Mar 16 22:38:35 2009
--- openafs/doc/man-pages/README	Fri Jun  5 14:23:13 2009
***************
*** 229,261 ****
    don't just report the deficiency again, but any contributions towards
    fixing it are greatly appreciated.
  
-    * The following installed commands have no man pages:
- 
-        compile_et.afs
-        copyauth
-        fs cscpolicy
-        fs getfid
-        fs memdump
-        fs monitor
-        fs rxstatpeer
-        fs rxstatproc
-        fs setcbaddr
-        fs trace
-        klog.krb
-        krb.conf
-        pagsh.krb
-        restorevol
-        rmtsysd
-        tokens.krb
-        vsys
- 
     * Add -noresolve to the documentation of all the vos commands.
  
-    * klog.krb, pagsh.krb, and tokens.krb need to be listed as alternative
-      names in the NAME line of the non-.krb man pages, links should be
-      installed on man page installation, and the behavior of pagsh.krb
-      should be documented in the pagsh man page.
- 
     * Some of the documentation in fs getserverprefs needs minor updates to
       reflect what happens in the dynroot case.
  
--- 229,236 ----
***************
*** 278,285 ****
     * The salvager actually creates a bunch of SalvageLog files and then
       combines them, but the SalvageLog man page doesn't reflect this.
  
-    * The CellServDB documentation hasn't been updated for -dynroot.
- 
     * The aklog man page isn't in POD.  (Neither is the mpp man page, but
       I don't think we care about it and it's not currently installed.)
  
--- 253,258 ----
***************
*** 298,303 ****
--- 271,280 ----
       kaserver (and possibly without fakeka), and deprecation warnings
       on the .krb varient commands.
  
+    * Linked cells are currently documented in fs newcell as being only
+      for DCE, which is not correct.  That documentation, aklog, and the
+      CellServDB documentation needs to be updated.
+ 
     * We need a way to add links to other man pages (kinit most notably)
       without creating dangling links in the HTML output.  This probably
       means that the HTML conversion script needs to generate at startup
Index: openafs/doc/man-pages/pod1/compile_et.pod
diff -c /dev/null openafs/doc/man-pages/pod1/compile_et.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/compile_et.pod	Mon May 18 19:33:15 2009
***************
*** 0 ****
--- 1,83 ----
+ =head1 NAME
+ 
+ compile_et - Produce error text tables for compilation
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<compile_et> [B<-debug>] S<<< [B<-language> <I<lang>>] >>>
+     S<<< [B<-prefix> <I<prefix>>] >>> [B<-v> <I<version>>] <I<error_table>>
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ The B<compile_et> command builds the error text tables for compilation.
+ This includes both a header file that contains a set of mappings between
+ error names and values and a F<.c> (or F<.msf>) file that provides a text
+ table of descriptions.
+ 
+ The <I<error_table>> argument specifies which error table to generate.
+ The error table specification should exist in the current working
+ directory or in the directory specified with B<-prefix> and should be
+ named F<error_table.et>.
+ 
+ =head1 CAUTIONS
+ 
+ This command is used internally within the build process for OpenAFS.
+ Most users will access this information via L<translate_et(1)> rather than
+ via B<compile_et>.
+ 
+ This command does not use the standard AFS command-line parsing package.
+ 
+ =head1 OPTIONS
+ 
+ =over 4
+ 
+ =item B<-debug>
+ 
+ Does nothing.  It neither adds debugging information to the output nor
+ provides additional information on its operation.
+ 
+ =item B<-language> <I<lang>>
+ 
+ Specifies the type of output to generate.  Currently, only ANSI C and K&R
+ are supported values (via the B<c> and B<k&r-c> values, respectively).
+ The default is ANSI C.  There is some support for C++ started, but that is
+ not yet supported.
+ 
+ =item B<-prefix <I<prefix>>
+ 
+ Specifies the directory to search for the F<error_table.et> file.
+ 
+ =item B<-v> <I<version>>
+ 
+ Specified the type of output file: valid values are 1 (the default, for C
+ files) or 2, for B<.msf> file generation.
+ 
+ =back
+ 
+ =head1 EXAMPLES
+ 
+ The following command generates the files F<pterror.h> and F<pterror.c>, 
+ suitable for use with C programs:
+ 
+    % compile_et -p path/to/src/ptserver pterror
+ 
+ The following command generates K&R style files instead:
+ 
+    % compile_et -p path/to/src/ptserver -lang 'k&r-c' pterror
+ 
+ =head1 SEE ALSO
+ 
+ L<translate_et(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2009 Steven Jenkins <steven@endpoint.com>
+ 
+ This documentation is covered by the IBM Public License Version 1.0.  This
+ man page was written by Steven Jenkins for OpenAFS.
Index: openafs/doc/man-pages/pod1/copyauth.pod
diff -c /dev/null openafs/doc/man-pages/pod1/copyauth.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/copyauth.pod	Mon May 18 19:33:32 2009
***************
*** 0 ****
--- 1,44 ----
+ =head1 NAME
+ 
+ copyauth - Copies user's AFS credentials to a new cell
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<copyauth> S<<< <I<cell name>> >>> 
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ The B<copyauth> command copies existing AFS credentials in the local
+ cell to the foreign cell specified on the command line.  
+ 
+ The functionality in this command is largely superseded by L<aklog(1)>.
+ 
+ =head1 CAUTIONS
+ 
+ This functionality only works if you have a shared AFS key across multiple
+ cells, which is strongly discouraged as it weakens security.  If you do
+ not understand those risks, you should not use this tool.
+ 
+ =head1 EXAMPLES
+ 
+    % copyauth other.cell.org
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ None.
+ 
+ =head1 SEE ALSO
+ 
+ L<aklog(1)>,
+ L<tokens(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ This documentation was written by Steven Jenkins and is covered 
+ by the IBM Public License Version 1.0. 
Index: openafs/doc/man-pages/pod1/fs.pod
diff -c openafs/doc/man-pages/pod1/fs.pod:1.3.2.9 openafs/doc/man-pages/pod1/fs.pod:1.3.2.12
*** openafs/doc/man-pages/pod1/fs.pod:1.3.2.9	Tue Dec 25 17:28:16 2007
--- openafs/doc/man-pages/pod1/fs.pod	Mon May 18 19:33:52 2009
***************
*** 23,28 ****
--- 23,29 ----
  L<B<fs getserverprefs>|fs_getserverprefs(1)>,
  L<B<fs listcells>|fs_listcells(1)>,
  L<B<fs newcell>|fs_newcell(1)>,
+ L<B<fs setcbaddr>|fs_setcbaddr(1)>,
  L<B<fs setcell>|fs_setcell(1)>,
  L<B<fs setcrypt>|fs_setcrypt(1)>,
  L<B<fs setserverprefs>|fs_setserverprefs(1)>,
***************
*** 45,50 ****
--- 46,52 ----
  given file or directory:
  L<B<fs diskfree>|fs_diskfree(1)>,
  L<B<fs examine>|fs_examine(1)>,
+ L<B<fs getfid>|fs_getfid(1)>,
  L<B<fs listquota>|fs_listquota(1)>,
  L<B<fs quota>|fs_quota(1)>,
  L<B<fs setquota>|fs_setquota(1)>,
***************
*** 56,61 ****
--- 58,64 ----
  
  Commands to administer the local client cache and related information:
  L<B<fs checkvolumes>|fs_checkvolumes(1)>,
+ L<B<fs cscpolicy>|fs_cscpolicy(1)>,
  L<B<fs flush>|fs_flush(1)>,
  L<B<fs flushall>|fs_flushall(1)>,
  L<B<fs flushvolume>|fs_flushvolume(1)>,
***************
*** 75,81 ****
  
  Commands to control monitoring and tracing:
  L<B<fs debug>|fs_debug(1)>,
! and L<B<fs messages>|fs_messages(1)>.
  
  =item *
  
--- 78,90 ----
  
  Commands to control monitoring and tracing:
  L<B<fs debug>|fs_debug(1)>,
! L<B<fs memdump>|fs_memdump(1)>,
! L<B<fs messages>|fs_messages(1)>,
! L<B<fs minidump>|fs_minidump(1)>,
! L<B<fs monitor>|fs_monitor(1)>,
! L<B<fs rxstatpeer>|fs_rxstatpeer(1)>,
! L<B<fs rxstatproc>|fs_rxstatproc(1)>,
! and L<B<fs trace>|fs_trace(1)>.
  
  =item *
  
***************
*** 184,189 ****
--- 193,199 ----
  L<fs_checkvolumes(1)>,
  L<fs_cleanacl(1)>,
  L<fs_copyacl(1)>,
+ L<fs_cscpolicy(1)>,
  L<fs_diskfree(1)>,
  L<fs_examine(1)>,
  L<fs_exportafs(1)>,
***************
*** 196,201 ****
--- 206,212 ----
  L<fs_getcellstatus(1)>,
  L<fs_getclientaddrs(1)>,
  L<fs_getcrypt(1)>,
+ L<fs_getfid(1)>,
  L<fs_getserverprefs(1)>,
  L<fs_help(1)>,
  L<fs_listacl(1)>,
***************
*** 203,216 ****
--- 214,233 ----
  L<fs_listcells(1)>,
  L<fs_listquota(1)>,
  L<fs_lsmount(1)>,
+ L<fs_memdump(1)>,
  L<fs_messages(1)>,
+ L<fs_minidump(1)>,
  L<fs_mkmount(1)>,
+ L<fs_monitor(1)>,
  L<fs_newalias(1)>,
  L<fs_newcell(1)>,
  L<fs_quota(1)>,
  L<fs_rmmount(1)>,
+ L<fs_rxstatpeer(1)>,
+ L<fs_rxstatproc(1)>,
  L<fs_setacl(1)>,
  L<fs_setcachesize(1)>,
+ L<fs_setcbattr(1)>,
  L<fs_setcell(1)>,
  L<fs_setclientaddrs(1)>,
  L<fs_setcrypt(1)>,
***************
*** 219,224 ****
--- 236,242 ----
  L<fs_setvol(1)>,
  L<fs_storebehind(1)>,
  L<fs_sysname(1)>,
+ L<fs_trace(1)>,
  L<fs_whereis(1)>,
  L<fs_whichcell(1)>,
  L<fs_wscell(1)>
Index: openafs/doc/man-pages/pod1/fs_cscpolicy.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_cscpolicy.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_cscpolicy.pod	Sun May 17 23:40:37 2009
***************
*** 0 ****
--- 1,107 ----
+ =head1 NAME
+ 
+ fs_cscpolicy - Change client side caching policy for AFS shares
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs cscpolicy> S<<< [B<-share> I<sharename> [B<-manual>|B<-programs>|B<-documents>|B<-disable>] ] >>>
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ The fs cscpolicy command sets the client side caching policy for a
+ particular AFS share, or displays a list of policies.
+ 
+ This command can change the policy of only one share at a time.
+ 
+ Only one of the policy options B<-manual>, B<-programs>, B<-documents>, or
+ B<-disable>, may be selected.  The default policy is B<-manual>.
+ 
+ After changing the policy for a share, you must close all applications
+ that accessed files on this share, or restart AFS Client, for the change
+ to take effect.
+ 
+ =head1 CAUTIONS
+ 
+ This command is only available on Windows.
+ 
+ Use of this functionality is not recommended.  Windows Offline Folders do
+ not work well with AFS since the AFS server is always present.  When this
+ functionality was contributed and incorporated, it was believed to be safe
+ for the AFS cache manager to return BADNETPATH errors when a single file
+ server or volume was inaccessible.  It is now known that returning such
+ errors causes the Microsoft SMB redirector to drop the connection to the
+ AFS server resulting in serious side effects.
+ 
+ This functionality is specific to use with the Microsoft SMB redirector.
+ Client Side Caching (Offline Folders) is built into that driver and will
+ not be present in the native AFS redirector, so this functionality will be
+ removed at a future date.
+ 
+ =head1 OPTIONS
+ 
+ =over 4
+ 
+ =item B<-share> I<sharename>
+ 
+ The name of the share whose policy is to be changed.  (If omitted, no
+ share policy is changed.)
+ 
+ =item B<-manual>
+ 
+ Specifies manual caching of documents.
+ 
+ =item B<-programs>
+ 
+ Specifies automatic caching of programs and documents.
+ 
+ =item B<-documents>
+ 
+ Specifies automatic caching of documents.
+ 
+ =item B<-disable>
+ 
+ Disables caching.
+ 
+ =back
+ 
+ =head1 OUTPUT
+ 
+ When changing the policy of a share, the output is:
+ 
+    CSC policy on share "share" changed to "policy".
+    Close all applications that accessed files on this share or restart AFS Client for the change to take effect.
+ 
+ When displaying policies, the output is:
+ 
+    policyname = policy
+ 
+ =head1 EXAMPLES
+ 
+ The following command disables all caching on the share "AFS1":
+ 
+    % fs cscpolicy -share AFS1 -disable
+ 
+ The following command displays all policies currently in effect:
+ 
+    % fs cscpolicy
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be have AFS Client Administrator access, either to display
+ or to set policies.
+ 
+ In addition, to change policies, the issuer must be a Windows
+ Administrator, since policy information is stored in a protected area of
+ the Windows Registry.
+ 
+ =head1 COPYRIGHT
+ 
+ This document was written by Mike Robinson, and is released under the IBM
+ Public License Version 1.0.  Jeffrey Altman made several corrections,
+ clarifications, and additions.
Index: openafs/doc/man-pages/pod1/fs_getfid.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_getfid.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_getfid.pod	Sun May 17 23:40:37 2009
***************
*** 0 ****
--- 1,82 ----
+ =head1 NAME
+ 
+ fs_getfid - Display the fid for a given path in AFS
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs getfid> S<<< [B<-path>] I<path> >>> [B<-help>]
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ The fs getfid command displays the FID for a given path in AFS.  The FID
+ is the internal identifier used by AFS encoding the volume name and the
+ file within a volume.
+ 
+ =head1 CAUTIONS
+ 
+ This command is not available on Windows prior to version 1.5.60.
+ 
+ =head1 OPTIONS
+ 
+ =over 4
+ 
+ =item B<-path> I<path>
+ 
+ The path of the file (or directory).
+ 
+ =item B<-literal>
+ 
+ Windows only: for a symlink or mount point, evaluates the specified object
+ rather than the object it refers to.
+ 
+ =item B<-help>
+ 
+ Prints the online help for this command. All other valid options are
+ ignored.
+ 
+ =back
+ 
+ =head1 OUTPUT
+ 
+ The output contains the name of the file or directory, the FID, and the
+ volume containing the FID.  The Windows version also outputs the object
+ type instead of using "File" to describe all objects.
+ 
+ =head1 EXAMPLES
+ 
+ On Unix:
+ 
+    % fs getfid .
+    File . (536870918.1.1) contained in volume 536870918
+ 
+    % fs getfid /afs/example.com/foo 
+    File /afs/example.com/foo (536870918.20404.20997) contained in volume 536870918
+ 
+ On Windows:
+ 
+    % fs.exe getfid \\afs\example.edu\user\b\o\bob \
+        \\afs\example.org\usr\bob\linktests\broken
+    Directory \\afs\example.edu\user\b\o\bob (537235559.1.1) contained in cell example.edu
+    fs: File '\\afs\example.org\usr\bob\linktests\broken' doesn't exist
+ 
+    % fs.exe getfid \\afs\example.edu\user\b\o\bob \
+        \\afs\example.org\usr\bob\linktests\broken -literal
+    Mountpoint \\afs\example.edu\user\b\o\bob (536873032.1162.16997) contained in cell example.edu
+    Symlink \\afs\example.org\usr\bob\linktests\broken (536874416.27618.488969) contained in cell example.org
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be have read access in the directory containing the path
+ to be resolved.
+ 
+ =head1 COPYRIGHT
+ 
+ This document was written by Steven Jenkins, and is released under the IBM
+ Public License Version 1.0.  Jeffrey Altman made several suggestions and
+ additions.
Index: openafs/doc/man-pages/pod1/fs_memdump.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_memdump.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_memdump.pod	Sun May 17 23:40:37 2009
***************
*** 0 ****
--- 1,71 ----
+ =head1 NAME
+ 
+ fs_memdump - Dump AFS cache state and memory allocations
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs memdump> S<<< [B<-begin>|B<-end>] >>>
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ This command dumps the state of AFS cache manager objects and statistics.
+ If a checked build of the C run-time library is in use, memory allocations
+ will also be included.
+ 
+ =head1 CAUTIONS
+ 
+ This command is only available on Windows.
+ 
+ =head1 OPTIONS
+ 
+ (One of either B<-begin> or B<-end> must be specified.)
+ 
+ =over 4
+ 
+ =item B<-begin>
+ 
+ Set a memory checkpoint.
+ 
+ =item B<-end>
+ 
+ Create a dump-file containing information about memory allocation that has
+ taken place since the B<-begin> command was issued.
+ 
+ =back
+ 
+ =head1 OUTPUT
+ 
+ If successful, the output of this command (for B<-begin> I<or> B<-end>)
+ will be:
+ 
+    AFS memdump created
+ 
+ If unsuccessful:
+ 
+    AFS memdump failed
+ 
+ =head1 EXAMPLES
+ 
+ The following command starts a memory allocation dump:
+ 
+    % fs memdump -begin
+ 
+ The following command ends it:
+ 
+    % fs memdump -end
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be have AFS Client Administrator access to issue this
+ command.
+ 
+ =head1 COPYRIGHT
+ 
+ This document was written by Mike Robinson, and is released under the IBM
+ Public License Version 1.0.
Index: openafs/doc/man-pages/pod1/fs_monitor.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_monitor.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_monitor.pod	Mon May 18 19:33:52 2009
***************
*** 0 ****
--- 1,54 ----
+ =head1 NAME
+ 
+ fs_monitor - Enable client logging to a remote monitoring station
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs monitor> S<<< [B<-server> <I<hostname/IP address or 'off'>>] >>> [B<-help>]
+ 
+ B<fs mariner> S<<< [B<-server> <I<hostname/IP address or 'off'>>] >>> [B<-help>]
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ The B<fs monitor> command (aka B<mariner>) sets the cache monitor host
+ address (or turns it off).
+ 
+ =head1 CAUTIONS
+ 
+ This command is hidden since the necessary remote monitoring component,
+ B<venusmon>, is not part of OpenAFS.  This system is not currently
+ distributed or supported.
+ 
+ =head1 OPTIONS
+ 
+ =over 4
+ 
+ =item B<-server> <I<hostname/IP address or 'off'>>
+ 
+ Name (or address) of the B<venusmon> host that monitoring information
+ should be sent to.  Setting the server to I<off> turns off monitoring.
+ 
+ =item B<-help>
+ 
+ Prints the online help for this command.  All other valid options are
+ ignored.
+ 
+ =back
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be super-user on the local machine.
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2009 Steven Jenkins <steven@endpoint.com>
+ 
+ This documentation is covered by the BSD License as written in the
+ doc/LICENSE file. This man page was written by Steven Jenkins for
+ OpenAFS.
Index: openafs/doc/man-pages/pod1/fs_rxstatpeer.pod
diff -c openafs/doc/man-pages/pod1/fs_rxstatpeer.pod:1.1.4.3 openafs/doc/man-pages/pod1/fs_rxstatpeer.pod:1.1.4.4
*** openafs/doc/man-pages/pod1/fs_rxstatpeer.pod:1.1.4.3	Tue Dec 25 17:32:10 2007
--- openafs/doc/man-pages/pod1/fs_rxstatpeer.pod	Sun May 17 23:41:11 2009
***************
*** 1,6 ****
  =head1 NAME
  
! fs_rxstatpeer - Enables Rx packet logging in the OpenAFS kernel module
  
  =head1 SYNOPSIS
  
--- 1,6 ----
  =head1 NAME
  
! fs_rxstatpeer - Manage per-peer Rx statistics collection
  
  =head1 SYNOPSIS
  
***************
*** 57,62 ****
--- 57,63 ----
  =head1 SEE ALSO
  
  L<fs(1)>,
+ L<fs_rxstatproc(1)>,
  L<rxdebug(1)>
  
  =head1 COPYRIGHT
Index: openafs/doc/man-pages/pod1/fs_rxstatproc.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_rxstatproc.pod:1.1.4.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_rxstatproc.pod	Mon May 18 19:57:18 2009
***************
*** 0 ****
--- 1,65 ----
+ =head1 NAME
+ 
+ fs_rxstatproc - Manage per-process Rx statistics collection
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs rxstatproc> [B<-enable>] [B<-disable>] [B<-clear>]
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ This command enables or disables the updating of RPC statistics counters
+ related to the entire RX process, or sets the accumulated counter values
+ back to zero.
+ 
+ =head1 OPTIONS
+ 
+ One or more of the following options must be specified:
+ 
+ =over 4
+ 
+ =item B<-enable>
+ 
+ Enable the collection of process RPC statistics
+ 
+ =item B<-disable>
+ 
+ Enable the collection of process RPC statistics
+ 
+ =item B<-clear>
+ 
+ Resets all trace counters to zero.
+ 
+ =back
+ 
+ =head1 OUTPUT
+ 
+ This command produces no output other than error-messages.
+ 
+ =head1 EXAMPLES
+ 
+ The following command starts collecting statistics:
+ 
+    % fs rxstatproc -enable
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be logged in as the local superuser root.
+ 
+ =head1 SEE ALSO
+ 
+ L<fs(1)>,
+ L<fs_rxstatpeer(1)>,
+ L<rxdebug(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2008. This documentation is covered by the BSD License as
+ written in the doc/LICENSE file. This man page was written by Mike
+ Robinson (L<mike@endpoint.com>) for OpenAFS.
Index: openafs/doc/man-pages/pod1/fs_setcbaddr.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_setcbaddr.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_setcbaddr.pod	Sun May 17 23:41:11 2009
***************
*** 0 ****
--- 1,49 ----
+ =head1 NAME
+ 
+ fs_setcbaddr - Configure IP address used for AFS callbacks
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs setcbaddr> S<<< [B<-host> <I<address>>] >>>
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ B<fs setcbaddr> changes the IP address used by the client for callbacks.
+ 
+ =head1 OPTIONS
+ 
+ =over 4
+ 
+ =item B<-host> <I<address>>]
+ 
+ The new callback address.
+ 
+ =back
+ 
+ =head1 OUTPUT
+ 
+ This command produces no output other than error messages.
+ 
+ =head1 EXAMPLES
+ 
+    % fs setcbaddr 10.2.4.23
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be the local superuser.
+ 
+ =head1 SEE ALSO
+ 
+ L<fs(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2008. This documentation is covered by the BSD License as
+ written in the doc/LICENSE file. This man page was written by Mike
+ Robinson (L<mike@endpoint.com>) for OpenAFS.
Index: openafs/doc/man-pages/pod1/fs_trace.pod
diff -c /dev/null openafs/doc/man-pages/pod1/fs_trace.pod:1.1.4.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod1/fs_trace.pod	Mon May 18 19:57:18 2009
***************
*** 0 ****
--- 1,86 ----
+ =head1 NAME
+ 
+ fs_trace - Enable or disable AFS Cache Manager tracing 
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<fs trace> S<<< [B<-on>|B<-off>] >>> [B<-reset>] [B<-dump>]
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ This command enables or disables AFS Cache Manager tracing, resets the
+ trace log, or dumps the log.  When you dump the log, two files are created
+ in the Windows Temporary directory:  F<afs-buffer.log> and F<afsd.log>.
+ Any existing files with those names will be replaced.
+ 
+ =head1 CAUTIONS
+ 
+ This command is only available on Windows.
+ 
+ =head1 OPTIONS
+ 
+ Any combination of the following options may be specified, except that
+ both B<-on> and B<-off> cannot be specified at the same time.
+ 
+ =over 4
+ 
+ =item B<-on>
+ 
+ Turn tracing on.
+ 
+ =item B<-off>
+ 
+ Turn tracing off.
+ 
+ =item B<-reset>
+ 
+ Resets the tracing information, discarding any trace-information collected
+ up to this time.
+ 
+ =item B<-dump>
+ 
+ Creates a dump file containing the trace information.
+ 
+ =back
+ 
+ =head1 OUTPUT
+ 
+ If successful, the output of this command (for any option) will be:
+ 
+    AFS tracing enabled
+ 
+ If unsuccessful:
+ 
+    AFS tracing disabled
+ 
+ =head1 EXAMPLES
+ 
+ The following command starts tracing:
+ 
+    % fs trace -on
+ 
+ The following dumps the current contents and resets the trace log, then
+ turns tracing off:
+ 
+    % fs trace -dump -reset -off
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be have AFS Client Administrator access to issue this
+ command.
+ 
+ =head1 SEE ALSO
+ 
+ L<fs(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2008. This documentation is covered by the BSD License as
+ written in the doc/LICENSE file. This man page was written by Mike
+ Robinson (L<mike@endpoint.com>) for OpenAFS.
Index: openafs/doc/man-pages/pod1/klog.pod
diff -c openafs/doc/man-pages/pod1/klog.pod:1.3.2.6 openafs/doc/man-pages/pod1/klog.pod:1.3.2.7
*** openafs/doc/man-pages/pod1/klog.pod:1.3.2.6	Fri Jul 27 14:02:03 2007
--- openafs/doc/man-pages/pod1/klog.pod	Mon May 18 19:38:25 2009
***************
*** 1,6 ****
  =head1 NAME
  
! klog - Authenticates with the Authentication Server
  
  =head1 SYNOPSIS
  
--- 1,6 ----
  =head1 NAME
  
! klog, klog.krb - Authenticates with the Authentication Server
  
  =head1 SYNOPSIS
  
***************
*** 19,24 ****
--- 19,31 ----
      [B<-pi>] [B<-si>] S<<< [B<-l> <I<ticket lifetime in hh[:mm[:ss]]>>] >>>
      [B<-se>] [B<-t>] [B<-h>]
  
+ B<klog.krb> [B<-x>] S<<< [B<-principal> <I<user name>>] >>>
+     [-password <I<user's password>>] S<<< [B<-cell> <I<cell name>>] >>>
+     S<<< [B<-servers> <I<explicit list of servers>>+] >>>
+     [B<-pipe>] [B<-silent>]
+     S<<< [B<-lifetime> <I<ticket lifetime in hh[:mm[:ss]]>>] >>>
+     [B<-setpag>] [B<-tmp>] [B<-help>]
+ 
  =for html
  </div>
  
***************
*** 54,60 ****
  B<aklog> instead of B<klog>.
  
  Sites using Kerberos v4 authentication (perhaps with the AFS
! Authentication Server) must use the Kerberos version of this command,
  B<klog.krb>, on all client machines. It automatically places the issuer's
  Kerberos tickets in the file named by the KRBTKFILE environment variable,
  which the B<pagsh.krb> command defines automatically as F</tmp/tktpI<X>>
--- 61,67 ----
  B<aklog> instead of B<klog>.
  
  Sites using Kerberos v4 authentication (perhaps with the AFS
! Authentication Server) should use the Kerberos version of this command,
  B<klog.krb>, on all client machines. It automatically places the issuer's
  Kerberos tickets in the file named by the KRBTKFILE environment variable,
  which the B<pagsh.krb> command defines automatically as F</tmp/tktpI<X>>
Index: openafs/doc/man-pages/pod1/pagsh.pod
diff -c openafs/doc/man-pages/pod1/pagsh.pod:1.3.2.5 openafs/doc/man-pages/pod1/pagsh.pod:1.3.2.6
*** openafs/doc/man-pages/pod1/pagsh.pod:1.3.2.5	Wed Mar  1 00:11:20 2006
--- openafs/doc/man-pages/pod1/pagsh.pod	Mon May 18 19:38:25 2009
***************
*** 1,6 ****
  =head1 NAME
  
! pagsh - Creates a new PAG
  
  =head1 SYNOPSIS
  
--- 1,6 ----
  =head1 NAME
  
! pagsh, pagsh.krb - Creates a new PAG
  
  =head1 SYNOPSIS
  
***************
*** 9,14 ****
--- 9,16 ----
  
  B<pagsh>
  
+ B<pagsh.krb>
+ 
  =for html
  </div>
  
***************
*** 24,32 ****
  
  Any tokens acquired subsequently (presumably for other cells) become
  associated with the PAG, rather than with the user's UNIX UID.  This
! method for distinguishing users has two advantages.
  
! =over 4
  
  =item *
  
--- 26,34 ----
  
  Any tokens acquired subsequently (presumably for other cells) become
  associated with the PAG, rather than with the user's UNIX UID.  This
! method for distinguishing users has two advantages:
  
! =over 2
  
  =item *
  
***************
*** 49,54 ****
--- 51,63 ----
  
  =back
  
+ The (mostly obsolete) B<pagsh.krb> command is the same as B<pagsh> except
+ that it also sets the KRBTKFILE environment variable, which controls the
+ default Kerberos v4 ticket cache, to F</tmp/tktpI<X>> where I<X> is the
+ number of the user's PAG.  This is only useful for AFS cells still using
+ Kerberos v4 outside of AFS and has no effect for cells using Kerberos v5
+ and B<aklog> or B<klog.krb5>.
+ 
  =head1 CAUTIONS
  
  Each PAG created uses two of the memory slots that the kernel uses to
***************
*** 98,103 ****
--- 107,113 ----
  
  =head1 SEE ALSO
  
+ L<aklog(1)>,
  L<fs_exportafs(1)>,
  L<klog(1)>,
  L<tokens(1)>
Index: openafs/doc/man-pages/pod1/pts.pod
diff -c openafs/doc/man-pages/pod1/pts.pod:1.2.2.5 openafs/doc/man-pages/pod1/pts.pod:1.2.2.6
*** openafs/doc/man-pages/pod1/pts.pod:1.2.2.5	Mon Feb  4 12:53:58 2008
--- openafs/doc/man-pages/pod1/pts.pod	Tue May 12 15:40:59 2009
***************
*** 129,134 ****
--- 129,140 ----
  and refuses to perform such an action even if the B<-noauth> flag is
  provided.
  
+ =item B<-encrypt>
+ 
+ Establishes an authenticated, encrypted connection to the Protection Server.
+ It is useful when it is desired to obscure network traffic related to the
+ transactions being done.
+ 
  =item B<-localauth>
  
  Constructs a server ticket using the server encryption key with the
Index: openafs/doc/man-pages/pod1/tokens.pod
diff -c openafs/doc/man-pages/pod1/tokens.pod:1.3.2.5 openafs/doc/man-pages/pod1/tokens.pod:1.3.2.6
*** openafs/doc/man-pages/pod1/tokens.pod:1.3.2.5	Wed Mar  1 00:11:20 2006
--- openafs/doc/man-pages/pod1/tokens.pod	Mon May 18 19:38:25 2009
***************
*** 1,6 ****
  =head1 NAME
  
! tokens - Displays the issuer's tokens
  
  =head1 SYNOPSIS
  
--- 1,6 ----
  =head1 NAME
  
! tokens, tokens.krb - Displays the issuer's tokens
  
  =head1 SYNOPSIS
  
***************
*** 11,26 ****
  
  B<tokens> [B<-h>]
  
  =for html
  </div>
  
  =head1 DESCRIPTION
  
! The tokens command displays all tokens (tickets) cached on the local
  machine for the issuer. AFS server processes require that their clients
  present a token as evidence that they have authenticated in the server's
  local cell.
  
  =head1 OPTIONS
  
  =over 4
--- 11,33 ----
  
  B<tokens> [B<-h>]
  
+ B<tokens.krb> [B<-help>]
+ 
+ B<tokens.krb> [B<-h>]
+ 
  =for html
  </div>
  
  =head1 DESCRIPTION
  
! The B<tokens> command displays all tokens (tickets) cached on the local
  machine for the issuer. AFS server processes require that their clients
  present a token as evidence that they have authenticated in the server's
  local cell.
  
+ The (mostly obsolete) B<tokens.krb> command is the same as B<tokens>
+ except that it also displays the user's Kerberos v4 ticket cache.
+ 
  =head1 OPTIONS
  
  =over 4
***************
*** 37,43 ****
  The output lists one token for each cell in which the user is
  authenticated. The output indicates the
  
! =over 4
  
  =item *
  
--- 44,50 ----
  The output lists one token for each cell in which the user is
  authenticated. The output indicates the
  
! =over 2
  
  =item *
  
Index: openafs/doc/man-pages/pod1/vos_dump.pod
diff -c openafs/doc/man-pages/pod1/vos_dump.pod:1.3.2.6 openafs/doc/man-pages/pod1/vos_dump.pod:1.3.2.8
*** openafs/doc/man-pages/pod1/vos_dump.pod:1.3.2.6	Sun Nov 11 18:52:53 2007
--- openafs/doc/man-pages/pod1/vos_dump.pod	Tue May 26 21:25:36 2009
***************
*** 9,20 ****
  
  B<vos dump> S<<< B<-id> <I<volume name or ID>> >>> S<<< [B<-time> <I<dump from time>>] >>>
      S<<< [B<-file> <I<dump file>>] >>> S<<< [B<-server> <I<server>>] >>>
!     S<<< [B<-partition> <I<partition>>] >>> S<<< [B<-cell> <I<cell name>>] >>>
!     [B<-noauth>] [B<-localauth>] [B<-verbose>] [B<-help>]
  
  B<vos du> S<<< B<-i> <I<volume name or ID>> >>> S<<< [B<-t> <I<dump from time>>] >>>
      S<<< [B<-f> <I<dump file>>] >>> S<<< [B<-s> <I<server>>] >>> S<<< [B<-p> <I<partition>>] >>>
!     S<<< [B<-c> <I<cell name>>] >>> [B<-n>] [B<-l>] [B<-v>] [B<-h>]
  
  =for html
  </div>
--- 9,22 ----
  
  B<vos dump> S<<< B<-id> <I<volume name or ID>> >>> S<<< [B<-time> <I<dump from time>>] >>>
      S<<< [B<-file> <I<dump file>>] >>> S<<< [B<-server> <I<server>>] >>>
!     S<<< [B<-partition> <I<partition>>] >>> [B<-clone>] [B<-omitdirs>]
!     S<<< [B<-cell> <I<cell name>>] >>> [B<-noauth>] [B<-localauth>]
!     [B<-verbose>] [B<-help>]
  
  B<vos du> S<<< B<-i> <I<volume name or ID>> >>> S<<< [B<-t> <I<dump from time>>] >>>
      S<<< [B<-f> <I<dump file>>] >>> S<<< [B<-s> <I<server>>] >>> S<<< [B<-p> <I<partition>>] >>>
!     [B<-cl>] [B<-o>] S<<< [B<-ce> <I<cell name>>] >>> [B<-n>] [B<-l>]
!     [B<-v>] [B<-h>]
  
  =for html
  </div>
***************
*** 130,135 ****
--- 132,154 ----
  Specifies the partition on which the volume resides. Provide the
  B<-server> argument along with this one.
  
+ =item B<-clone>
+ 
+ Normally, B<vos dump> locks the volume and dumps it, which blocks writes
+ to the volume while the dump is in progress.  If this flag is given, B<vos
+ dump> will instead clone the volume first (similar to what B<vos move>
+ would do) and then dumps the clone.  This can significantly decrease the
+ amount of time the volume is kept locked for dumps of large volumes.
+ 
+ =item B<-omitdirs>
+ 
+ By default, B<vos dump> includes all directory objects in an incremental
+ dump whether they've been changed or not.  If this option is given,
+ unchanged directories will be omitted.  This will reduce the size of the
+ dump and not cause problems if the incremental is restored, as expected,
+ on top of a volume containing the correct directory structure (such as one
+ created by restoring previous full and incremental dumps).
+ 
  =item B<-cell> <I<cell name>
  
  Names the cell in which to run the command. Do not combine this argument
***************
*** 187,192 ****
--- 206,212 ----
  
  =head1 SEE ALSO
  
+ L<restorevol(8)>,
  L<vos(1)>,
  L<vos_examine(1)>,
  L<vos_listvldb(1)>,
Index: openafs/doc/man-pages/pod1/vos_restore.pod
diff -c openafs/doc/man-pages/pod1/vos_restore.pod:1.3.2.6 openafs/doc/man-pages/pod1/vos_restore.pod:1.3.2.7
*** openafs/doc/man-pages/pod1/vos_restore.pod:1.3.2.6	Sun Nov 11 18:52:53 2007
--- openafs/doc/man-pages/pod1/vos_restore.pod	Mon May 18 19:34:40 2009
***************
*** 221,226 ****
--- 221,227 ----
  
  =head1 SEE ALSO
  
+ L<restorevol(8)>,
  L<vos(1)>,
  L<vos_dump(1)>,
  L<vos_examine(1)>,
Index: openafs/doc/man-pages/pod1/xstat_fs_test.pod
diff -c openafs/doc/man-pages/pod1/xstat_fs_test.pod:1.2.2.4 openafs/doc/man-pages/pod1/xstat_fs_test.pod:1.2.2.5
*** openafs/doc/man-pages/pod1/xstat_fs_test.pod:1.2.2.4	Wed Mar  1 00:11:21 2006
--- openafs/doc/man-pages/pod1/xstat_fs_test.pod	Mon Jun  8 18:41:37 2009
***************
*** 48,54 ****
  amount of data the command interpreter gathers about the File Server.
  Data is returned in a predefined data structure.
  
! There are three acceptable values:
  
  =over 4
  
--- 48,54 ----
  amount of data the command interpreter gathers about the File Server.
  Data is returned in a predefined data structure.
  
! There are four acceptable values:
  
  =over 4
  
***************
*** 70,75 ****
--- 70,82 ----
  Server (for example, minimum, maximum, and cumulative statistics regarding
  File Server RPCs, how long they take to complete, and how many succeed).
  
+ =item 3
+ 
+ Reports File Server callback processing statistics since the File Server
+ started, including the number of call of callbacks added (AddCallBack), the
+ number of callbacks broken (BreakCallBacks), and the number of callback
+ space reclaims (GetSomeSpaces).
+ 
  =back
  
  =item B<-onceonly>
Index: openafs/doc/man-pages/pod5/CellServDB.pod
diff -c openafs/doc/man-pages/pod5/CellServDB.pod:1.1.2.3 openafs/doc/man-pages/pod5/CellServDB.pod:1.1.2.5
*** openafs/doc/man-pages/pod5/CellServDB.pod:1.1.2.3	Sun Jul 13 19:57:26 2008
--- openafs/doc/man-pages/pod5/CellServDB.pod	Fri Jun  5 14:23:14 2009
***************
*** 8,24 ****
  same format.  One version is used by an AFS client and lists all of the
  database server machines in the local cell and any foreign cell that is to
  be accessible from the local client machine.  The other version is used on
! servers and lists only the database servers in the local cell.
  
  =head2 Client CellServDB
  
  Along with AFSDB entries in DNS, the client version of the CellServDB file
  lists the database server machines in the local cell and any foreign cell
  that is to be accessible from the local client machine. Database server
! machines run the Authentication Server (optional), Backup Server,
! Protection Server, and Volume Location (VL) Server (the B<kaserver>,
! B<buserver>, B<ptserver>, and B<vlserver>) processes, which maintain the
! cell's administrative AFS databases.
  
  The Cache Manager and other processes running on a client machine use the
  list of a cell's database server machines when performing several common
--- 8,25 ----
  same format.  One version is used by an AFS client and lists all of the
  database server machines in the local cell and any foreign cell that is to
  be accessible from the local client machine.  The other version is used on
! servers and need list only the database servers in the local cell; in some
! configurations it can be a link to the same file the client uses.
  
  =head2 Client CellServDB
  
  Along with AFSDB entries in DNS, the client version of the CellServDB file
  lists the database server machines in the local cell and any foreign cell
  that is to be accessible from the local client machine. Database server
! machines run the Authentication Server (optional), Backup Server
! (optional), Protection Server, and Volume Location (VL) Server (the
! B<kaserver>, B<buserver>, B<ptserver>, and B<vlserver>) processes, which
! maintain the cell's administrative AFS databases.
  
  The Cache Manager and other processes running on a client machine use the
  list of a cell's database server machines when performing several common
***************
*** 33,48 ****
  
  =item *
  
! Authenticating users. Client-side authentication programs (such as an
! AFS-modified login utility or the B<klog> command interpreter) contact the
! Authentication Server to obtain a server ticket, which the AFS server
! processes accept as proof that the user is authenticated.
  
  =item *
  
! Creating protection groups. The B<pts> command interpreter contacts the
! Protection Server when users create protection groups or request
! information from the Protection Database.
  
  =back
  
--- 34,58 ----
  
  =item *
  
! Creating, viewing, and manipulating protection groups. The B<pts> command
! interpreter contacts the Protection Server when users create protection
! groups or request information from the Protection Database.
! 
! =item *
! 
! Populating the contents of the fake F<root.afs> volume mounted at F</afs>
! (or the alternative mount point specified in F<cacheinfo>) when B<afsd> is
! run in C<-dynroot> mode.  The default contents of this directory will
! match the cells listed in the client F<CellServDB> file.
  
  =item *
  
! Authenticating users. Client-side authentication programs (such as an
! AFS-modified login utility or the B<klog> command interpreter) contact the
! Authentication Server to obtain a server ticket, which the AFS server
! processes accept as proof that the user is authenticated. This only
! applies to AFS cells using the deprecated Authentication Server instead of
! Kerberos v5 and B<aklog>.
  
  =back
  
***************
*** 54,59 ****
--- 64,77 ----
  list of database server machines without rebooting, use the B<fs newcell>
  command.
  
+ If the client attempts to access an AFS cell not listed in F<CellServDB>
+ and B<afsd> was started with the B<-afsdb> option, the Cache Manager will
+ attempt an AFSDB DNS record lookup and dynamically add the database server
+ locations for that cell based on the result of the DNS query.  If the
+ B<-afsdb> option was not used, all AFS cells that will be accessed by a
+ client machine must either be listed in F<CellServDB> or added with the
+ B<fs newcell> command.
+ 
  The F<CellServDB> file is in ASCII format and must reside in the
  F</usr/vice/etc> directory on each AFS client machine. Use a text editor
  to create and maintain it.
***************
*** 69,83 ****
  
  The server version of the F<CellServDB> file lists the local cell's
  database server machines. These machines run the Authentication Server
! (optional), Backup Server, Protection Server, and Volume Location (VL)
! Server (the B<kaserver>, B<buserver>, B<ptserver>, and B<vlserver>)
! processes, which maintain the cell's administrative AFS databases. The
! initial version of the file is created with the B<bos setcellname> command
! during the installation of the cell's server machine, which is
! automatically recorded as the cell's first database server machine. When
! adding or removing database server machines, be sure to update this file
! appropriately. It must reside in the F</usr/afs/etc> directory on each AFS
! server machine.
  
  The database server processes consult the F<CellServDB> file to learn
  about their peers, with which they must maintain constant connections in
--- 87,105 ----
  
  The server version of the F<CellServDB> file lists the local cell's
  database server machines. These machines run the Authentication Server
! (optional), Backup Server (optional), Protection Server, and Volume
! Location (VL) Server (the B<kaserver>, B<buserver>, B<ptserver>, and
! B<vlserver>) processes, which maintain the cell's administrative AFS
! databases. The initial version of the file is created with the B<bos
! setcellname> command during the installation of the cell's server machine,
! which is automatically recorded as the cell's first database server
! machine. When adding or removing database server machines, be sure to
! update this file appropriately. It must reside in the F</usr/afs/etc>
! directory on each AFS server machine. The database server processes,
! in addition to the usual configuration allowing each to be elected
! synchronization site and coordinate updates, can be set up as readonly
! database clone servers. Such servers can never be elected as the
! synchronization site.
  
  The database server processes consult the F<CellServDB> file to learn
  about their peers, with which they must maintain constant connections in
***************
*** 112,118 ****
  file stored on the system control machine. Otherwise, edit the file on
  each server machine individually. For instructions on adding and removing
  database server machine, see the I<OpenAFS Quick Start> chapter on
! installing additional server machines.
  
  =head2 CellServDB Format
  
--- 134,142 ----
  file stored on the system control machine. Otherwise, edit the file on
  each server machine individually. For instructions on adding and removing
  database server machine, see the I<OpenAFS Quick Start> chapter on
! installing additional server machines. Updates to the server F<CellServDB>
! will trigger reloading the cell server configurations automatically in the
! AFS server processes.
  
  =head2 CellServDB Format
  
***************
*** 124,132 ****
  
  The first line begins at the left margin with the greater-than character
  (C<< > >>), followed immediately by the cell's name without an intervening
! space. Optionally, a comment can follow any number of spaces and a number
! sign (C<#>), perhaps to identify the organization associated with the
! cell.
  
  =item *
  
--- 148,158 ----
  
  The first line begins at the left margin with the greater-than character
  (C<< > >>), followed immediately by the cell's name without an intervening
! space. Optionally, a comment can follow any number of spaces and a octothorpe
! (C<#>), perhaps to identify the organization associated with the
! cell. A variant of this allows the defintion of a linked cell: after the 
! leading (C<< > >>) and cell name, a space and a second cell name may be
! listed before the optional spaces, octothorpe and comment.
  
  =item *
  
***************
*** 137,143 ****
  
  =item *
  
! The database server machine's IP address in dotted-decimal format.
  
  =item *
  
--- 163,170 ----
  
  =item *
  
! The database server machine's IP address in dotted-decimal format, optionally
! enclosed in square braces (C<< [ >>)(C<< ] >>) to define a non-voting clone.
  
  =item *
  
***************
*** 145,151 ****
  
  =item *
  
! A number sign (#), followed by the machine's fully qualified hostname
  without an intervening space. This number sign does not indicate that the
  hostname is a comment. It is a required field.
  
--- 172,178 ----
  
  =item *
  
! An octothorpe (#), followed by the machine's fully qualified hostname
  without an intervening space. This number sign does not indicate that the
  hostname is a comment. It is a required field.
  
***************
*** 173,180 ****
     >abc.com        # ABC Corporation
     192.12.105.2	        #db1.abc.com
     192.12.105.3	        #db2.abc.com
!    192.12.107.3	        #db3.abc.com
!    >test.abc.com   # ABC Corporation Test Cell
     192.12.108.57        #testdb1.abc.com
     192.12.108.55        #testdb2.abc.com
  
--- 200,207 ----
     >abc.com        # ABC Corporation
     192.12.105.2	        #db1.abc.com
     192.12.105.3	        #db2.abc.com
!    [192.12.107.3]       #db3.abc.com
!    >test.abc.com abc.com   # ABC Corporation Test Cell
     192.12.108.57        #testdb1.abc.com
     192.12.108.55        #testdb2.abc.com
  
Index: openafs/doc/man-pages/pod5/NetInfo.pod
diff -c openafs/doc/man-pages/pod5/NetInfo.pod:1.2.2.4 openafs/doc/man-pages/pod5/NetInfo.pod:1.2.2.5
*** openafs/doc/man-pages/pod5/NetInfo.pod:1.2.2.4	Tue Jun 19 05:06:27 2007
--- openafs/doc/man-pages/pod5/NetInfo.pod	Mon Apr 27 14:37:44 2009
***************
*** 80,88 ****
--- 80,103 ----
  appears on each line, in dotted decimal format. The order of the addresses
  is not significant.
  
+ Optionally, the File Server can be forced to use an IP address that does
+ not belong to one of the server interfaces. To do this, add a line to the
+ F<NetInfo> file with the IP address prefixed with "f" and a space. This is
+ useful when the File Server is on the interal side of a NAT firewall.
+ 
  To display the File Server interface addresses registered in the VLDB, use
  the B<vos listaddrs> command.
  
+ =head1 EXAMPLES
+ 
+ If the File Server is on the internal side of a NAT firewall, where it
+ serves internal clients using the IP address 192.168.1.123 and external
+ clients using the IP address 10.1.1.321, then the F<NetInfo> file should
+ contain the following:
+ 
+    192.168.1.123
+    f 10.1.1.321
+ 
  =head1 SEE ALSO
  
  L<NetRestrict(5)>,
Index: openafs/doc/man-pages/pod5/krb.conf.pod
diff -c openafs/doc/man-pages/pod5/krb.conf.pod:1.1.4.2 openafs/doc/man-pages/pod5/krb.conf.pod:1.1.4.3
*** openafs/doc/man-pages/pod5/krb.conf.pod:1.1.4.2	Sun Jul 13 19:57:26 2008
--- openafs/doc/man-pages/pod5/krb.conf.pod	Tue May 19 14:40:48 2009
***************
*** 4,10 ****
  
  =head1 DESCRIPTION
  
! /usr/vice/etc/krb.conf is an optional file that resides on an OpenAFS
  server and is used to specify which Kerberos5 realms are trusted to
  authenticate to the local AFS cell. The format of the file is one realm
  per line. If the Kerberos5 realm matches the AFS cell name
--- 4,10 ----
  
  =head1 DESCRIPTION
  
! /usr/afs/etc/krb.conf is an optional file that resides on an OpenAFS
  server and is used to specify which Kerberos5 realms are trusted to
  authenticate to the local AFS cell. The format of the file is one realm
  per line. If the Kerberos5 realm matches the AFS cell name
Index: openafs/doc/man-pages/pod8/afsd.pod
diff -c openafs/doc/man-pages/pod8/afsd.pod:1.5.2.14 openafs/doc/man-pages/pod8/afsd.pod:1.5.2.15
*** openafs/doc/man-pages/pod8/afsd.pod:1.5.2.14	Thu Mar 19 22:32:56 2009
--- openafs/doc/man-pages/pod8/afsd.pod	Sat May 30 21:23:11 2009
***************
*** 25,31 ****
       [B<-nosettime>]
       S<<< [B<-prealloc> <I<number of 'small' preallocated blocks>>] >>>
       [B<-rmtsys>] S<<< [B<-rootvol> <I<name of AFS root volume>>] >>>
!      [B<-rxbind>] S<<< [B<-rxpck> value for rx_extraPackets ] >>>
       [B<-settime>] [B<-shutdown>]
       S<<< [B<-splitcache> <I<RW/RO ratio>>] >>>
       S<<< [B<-stat> <I<number of stat entries>>] >>> [B<-verbose>]
--- 25,32 ----
       [B<-nosettime>]
       S<<< [B<-prealloc> <I<number of 'small' preallocated blocks>>] >>>
       [B<-rmtsys>] S<<< [B<-rootvol> <I<name of AFS root volume>>] >>>
!      [B<-rxbind>] S<<< [B<-rxmaxmtu> value for maximum MTU ] >>> 
!      S<<< [B<-rxpck> value for rx_extraPackets ] >>>
       [B<-settime>] [B<-shutdown>]
       S<<< [B<-splitcache> <I<RW/RO ratio>>] >>>
       S<<< [B<-stat> <I<number of stat entries>>] >>> [B<-verbose>]
***************
*** 628,633 ****
--- 629,641 ----
  
  Bind the Rx socket (one interface only).
  
+ =item B<-rxmaxmtu> <I<value for maximum MTU>>
+ 
+ Set a limit for the largest maximum transfer unit (network packet size) that
+ the AFS client on this machine will be willing to transmit. This switch can
+ be used where an artificial limit on the network precludes packets as large
+ as the discoverable MTU from being transmitted successfully.
+ 
  =item B<-rxpck> <I<value for rx_extraPackets>>
  
  Set rx_extraPackets to this value. This sets the number of extra Rx
Index: openafs/doc/man-pages/pod8/asetkey.pod
diff -c openafs/doc/man-pages/pod8/asetkey.pod:1.1.2.2 openafs/doc/man-pages/pod8/asetkey.pod:1.1.2.3
*** openafs/doc/man-pages/pod8/asetkey.pod:1.1.2.2	Mon Apr  3 15:48:08 2006
--- openafs/doc/man-pages/pod8/asetkey.pod	Wed Jun  3 01:41:58 2009
***************
*** 9,14 ****
--- 9,16 ----
  
  B<asetkey> add <I<kvno>> <I<keyfile>> <I<principal>>
  
+ B<asetkey> add <I<kvno>> <I<key>>
+ 
  B<asetkey> delete <I<kvno>>
  
  B<asetkey> list
***************
*** 21,27 ****
  The B<asetkey> command is used to add a key to an AFS KeyFile from a
  Kerberos keytab.  It is similar to B<bos addkey> except that it must be
  run locally on the system where the KeyFile is located and it takes the
! new key from a Kerberos 5 keytab rather than prompting for the password.
  
  B<asetkey delete> can be used to delete a key (similar to B<bos
  removekeys>), and B<asetkey list> will list the keys in a KeyFile (similar
--- 23,30 ----
  The B<asetkey> command is used to add a key to an AFS KeyFile from a
  Kerberos keytab.  It is similar to B<bos addkey> except that it must be
  run locally on the system where the KeyFile is located and it takes the
! new key from the command line or a Kerberos 5 keytab rather than prompting
! for the password.
  
  B<asetkey delete> can be used to delete a key (similar to B<bos
  removekeys>), and B<asetkey list> will list the keys in a KeyFile (similar
***************
*** 38,44 ****
  match the kvno in the Kerberos KDC (checked with B<kvno> or the
  C<getprinc> function of B<kadmin>).  I<principal> should be the name of
  the AFS principal in the keytab, which must be either C<afs> or
! C<afs/I<cell name>>.
  
  In cells that use the Update Server to distribute the contents of the
  F</usr/afs/etc> directory, it is conventional to run B<asetkey add> only
--- 41,48 ----
  match the kvno in the Kerberos KDC (checked with B<kvno> or the
  C<getprinc> function of B<kadmin>).  I<principal> should be the name of
  the AFS principal in the keytab, which must be either C<afs> or
! C<afs/I<cell name>>. B<asetkey> can also be used to install a key
! from a hex string.
  
  In cells that use the Update Server to distribute the contents of the
  F</usr/afs/etc> directory, it is conventional to run B<asetkey add> only
***************
*** 82,87 ****
--- 86,98 ----
  You may want to use C<afs/I<cell name>> instead of C<afs>, particularly if
  you may have multiple AFS cells for a single Kerberos realm.
  
+ In the event you have been distributed a key by a Kerberos administrator
+ in the form of a hex string, you may use asetkey to install that.
+ 
+     % asetkey add 3 80b6a7cd7a9dadb6
+ 
+ I<key> should be an 8 byte hex representation.
+ 
  =head1 PRIVILEGE REQUIRED
  
  The issuer must be able to read (for B<asetkey list>) and write (for
Index: openafs/doc/man-pages/pod8/bosserver.pod
diff -c openafs/doc/man-pages/pod8/bosserver.pod:1.2.2.8 openafs/doc/man-pages/pod8/bosserver.pod:1.2.2.9
*** openafs/doc/man-pages/pod8/bosserver.pod:1.2.2.8	Mon Feb  4 14:42:16 2008
--- openafs/doc/man-pages/pod8/bosserver.pod	Tue May  5 08:30:45 2009
***************
*** 8,14 ****
  <div class="synopsis">
  
  B<bosserver> [B<-noauth>] [B<-log>] [B<-enable_peer_stats>]
!     [B<-enable_process_stats>] [B<-allow-dotted-principal>] [B<-help>]
  
  =for html
  </div>
--- 8,14 ----
  <div class="synopsis">
  
  B<bosserver> [B<-noauth>] [B<-log>] [B<-enable_peer_stats>]
!     [B<-enable_process_stats>] [B<-allow-dotted-principals>] [B<-help>]
  
  =for html
  </div>
***************
*** 108,114 ****
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principal>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
--- 108,114 ----
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principals>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
Index: openafs/doc/man-pages/pod8/fileserver.pod
diff -c openafs/doc/man-pages/pod8/fileserver.pod:1.4.2.19 openafs/doc/man-pages/pod8/fileserver.pod:1.4.2.21
*** openafs/doc/man-pages/pod8/fileserver.pod:1.4.2.19	Tue Nov 11 21:31:21 2008
--- openafs/doc/man-pages/pod8/fileserver.pod	Fri May 15 09:30:49 2009
***************
*** 20,26 ****
      S<<< [B<-busyat> <I<< redirect clients when queue > n >>>] >>>
      [B<-nobusy>] S<<< [B<-rxpck> <I<number of rx extra packets>>] >>>
      [B<-rxdbg>] [B<-rxdbge>] S<<< [B<-rxmaxmtu> <I<bytes>>] >>>
!     [B<-allow-dotted-principal>] [B<-jumbo>] [B<-nojumbo>]
      S<<< [B<-rxbind> <I<address to bind the Rx socket to>>] >>>
      S<<< [B<-vattachpar> <I<number of volume attach threads>>] >>>
      S<<< [B<-m> <I<min percentage spare in partition>>] >>>
--- 20,26 ----
      S<<< [B<-busyat> <I<< redirect clients when queue > n >>>] >>>
      [B<-nobusy>] S<<< [B<-rxpck> <I<number of rx extra packets>>] >>>
      [B<-rxdbg>] [B<-rxdbge>] S<<< [B<-rxmaxmtu> <I<bytes>>] >>>
!     [B<-allow-dotted-principals>] [B<-jumbo>] [B<-nojumbo>]
      S<<< [B<-rxbind> <I<address to bind the Rx socket to>>] >>>
      S<<< [B<-vattachpar> <I<number of volume attach threads>>] >>>
      S<<< [B<-m> <I<min percentage spare in partition>>] >>>
***************
*** 111,117 ****
  
    Parameter (Argument)               Small (-S)     Medium   Large (-L)
    ---------------------------------------------------------------------
!   Number of LWPs (-p)                        6           9           12
    Number of cached dir blocks (-b)          70          90          120
    Number of cached large vnodes (-l)       200         400          600
    Number of cached small vnodes (-s)       200         400          600
--- 111,117 ----
  
    Parameter (Argument)               Small (-S)     Medium   Large (-L)
    ---------------------------------------------------------------------
!   Number of LWPs (-p)                        6           9          128
    Number of cached dir blocks (-b)          70          90          120
    Number of cached large vnodes (-l)       200         400          600
    Number of cached small vnodes (-s)       200         400          600
***************
*** 349,355 ****
  Writes a trace of the File Server's operations on Rx events (such as
  retransmissions) to the file F</usr/afs/logs/rx_dbg>.
  
! =item B<-allow-dotted-principal>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
--- 349,355 ----
  Writes a trace of the File Server's operations on Rx events (such as
  retransmissions) to the file F</usr/afs/logs/rx_dbg>.
  
! =item B<-allow-dotted-principals>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
Index: openafs/doc/man-pages/pod8/ptserver.pod
diff -c openafs/doc/man-pages/pod8/ptserver.pod:1.2.2.11 openafs/doc/man-pages/pod8/ptserver.pod:1.2.2.12
*** openafs/doc/man-pages/pod8/ptserver.pod:1.2.2.11	Sun Aug 24 21:15:22 2008
--- openafs/doc/man-pages/pod8/ptserver.pod	Tue May  5 08:30:45 2009
***************
*** 11,17 ****
      [B<-rebuildDB>] S<<< [B<-groupdepth> <I<# of nested groups>>] >>>
      S<<< [B<-default_access> <I<user access mask>> <I<group access mask>>] >>>
      [B<-restricted>] [B<-enable_peer_stats>]
!     [B<-enable_process_stats>] [B<-allow-dotted-principal>]
      S<<< [B<-auditlog> <I<file path>>] >>>
      S<<< [B<-syslog>[=<I<FACILITY>>]] >>> S<<< [B<-rxmaxmtu> <I<bytes>>] >>>
      [B<-help>]
--- 11,17 ----
      [B<-rebuildDB>] S<<< [B<-groupdepth> <I<# of nested groups>>] >>>
      S<<< [B<-default_access> <I<user access mask>> <I<group access mask>>] >>>
      [B<-restricted>] [B<-enable_peer_stats>]
!     [B<-enable_process_stats>] [B<-allow-dotted-principals>]
      S<<< [B<-auditlog> <I<file path>>] >>>
      S<<< [B<-syslog>[=<I<FACILITY>>]] >>> S<<< [B<-rxmaxmtu> <I<bytes>>] >>>
      [B<-help>]
***************
*** 128,134 ****
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principal>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to
--- 128,134 ----
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principals>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to
Index: openafs/doc/man-pages/pod8/restorevol.pod
diff -c /dev/null openafs/doc/man-pages/pod8/restorevol.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod8/restorevol.pod	Mon May 18 19:34:41 2009
***************
*** 0 ****
--- 1,153 ----
+ =head1 NAME
+ 
+ restorevol - Restore a volume from vos dump to the local file system
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<restorevol> S<<< [B<-file> <I<dump file>>] >>> S<<< [B<-dir> <I<restore dir>> ] >>>
+     S<<< [B<-extension> <I<name extension>>] >>>
+     S<<< [B<-mountpoint> <I<mount point root>>] >>>
+     S<<< [B<-umask> <I<mode mask>>] >>> [B<-verbose>] [B<-help>]
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ B<restorevol> takes an AFS volume in the format produced by B<vos dump>
+ and restores it to the local file system.  Normally, the contents of a
+ volume are maintained by the AFS File Server in an opaque format and
+ copying a volume's raw data does not make it easily accessible.  This
+ utility will produce a directory tree that is equivalent to that seen via
+ an AFS client, but without preserving the AFS-specific Access Control
+ Lists (ACLs).  It's primary use is to recover data from a volume dump or
+ backup and make it available via a filesystem other than AFS.
+ 
+ The dump output will read from standard input, or from a file if B<-file>
+ is specified.
+ 
+ The restore process is as follows:
+ 
+ =over 4
+ 
+ =item 1. 
+ 
+ The dump file will be restored within the current directory or that
+ specified with B<-dir>.
+ 
+ =item 2. 
+ 
+ Within this directory, a subdir is created.  It's name is the RW volume
+ name that was dumped.  An extension can be appended to this directory name
+ with B<-extension>.
+ 
+ =item 3. 
+ 
+ All mountpoints will appear as symbolic links to the volume name.  The
+ path name to the volume will be either that in B<-mountpoint>, or B<-dir>.
+ Symbolic links remain untouched.
+ 
+ =item 4. 
+ 
+ You can change your umask during the restore with B<-umask>.  Otherwise,
+ B<restorevol> uses your current umask.  Mode bits for directories are 0777
+ (then AND'ed with the umask).  Mode bits for files are the owner mode bits
+ duplicated accross group and user (then AND'ed with the umask).
+ 
+ =item 5. 
+ 
+ For restores of full dumps, if a directory says it has a file and the file
+ is not found, then a symbolic link F<< AFSFile-<#> >> will appear in that
+ restored tree.  Restores of incremental dumps remove all these files at
+ the end (expensive because it is a tree search).
+ 
+ =item 6. 
+ 
+ If a file or directory was found in the dump but found not to be connected
+ to the hierarchical tree, then the file or directory will be connected at
+ the root of the tree as F<< __ORPHANEDIR__.<#> >> or F<<
+ __ORPHANFILE__.<#> >>.
+ 
+ =item 7. 
+ 
+ ACLs are not restored.
+ 
+ =back
+ 
+ =head1 CAUTIONS
+ 
+ Normally, use L<vos_restore(1)> instead of this command.  B<restorevol> is
+ a tool of last resort to try to extract data from the data structures
+ stored in a volume dumpfile and is not as regularly tested or used as the
+ normal L<vos_restore(1)> implementation.  Using B<restorevol> bypasses
+ checks done by the L<fileserver(8)> and L<salvager(8)>.
+ 
+ =head1 OPTIONS
+ 
+ =over 4
+ 
+ =item B<-file> <I<dump file>>
+ 
+ Specifies the output file for the dump.  If this option is not given, the
+ volume will be dumped to standard output.
+ 
+ =item B<-dir> <I<restore dir>>
+ 
+ Names the directory in which to create the restored filesystem.  The
+ current directory is used by default.  Note that any mountpoints inside
+ the volume will point to the same directory unless the B<-mountpoint>
+ option is also specified.
+ 
+ =item B<-extension> <I<name extension>>
+ 
+ By default, the name of the directory created matches the RW volume name
+ of the volume in the dump file.  If this option is used, the directory
+ name will be the RW volume name I<name extension> as the suffix.
+ 
+ =item B<-mountpoint> <I<mount point root>>
+ 
+ By default, mountpoints inside the volume being restored point to the
+ value given by I<-dir>.  This option allows mountpoints to be resolved
+ relative to another path.  A common use for this would be to specify a
+ path under F</afs> as the mount point root so that mountpoints inside the
+ restored volume would be resolved via AFS.
+ 
+ The I<mount point root> must exist, and the process running the command
+ have read access to that directory, or the command will fail.
+ 
+ =back
+ 
+ =head1 EXAMPLES
+ 
+ The following command restores the contents of the dumpfile in
+ F<sample.dump> to the directory F</tmp/sample.2009-05-17>, but having all
+ mountpoints inside the volume point to AFS (note that this requires
+ knowledge of where F<sample> is mounted in AFS):
+ 
+    % restorevol -file sample.dump -dir /tmp -extension .2009-05-17 \
+        -mountpoint /afs/example.org/sample
+    Restoring volume dump of 'sample' to directory '/tmp/sample.2009-05-17'
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must have read access to the dump file and write access to the
+ directory into which the dump is restored.  If the B<-mountpoint> flag is
+ given, the issuer must also have read access to that directory.
+ 
+ =head1 SEE ALSO
+ 
+ L<salvager(8)>,
+ L<voldump(8)>,
+ L<vos_dump(1)>,
+ L<vos_restore(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2009 Steven Jenkins <steven@endpoint.com>
+ 
+ This documentation is covered by the BSD License as written in the
+ doc/LICENSE file. This man page was written by Steven Jenkins for
+ OpenAFS.
Index: openafs/doc/man-pages/pod8/rmtsysd.pod
diff -c /dev/null openafs/doc/man-pages/pod8/rmtsysd.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod8/rmtsysd.pod	Mon May 18 19:35:13 2009
***************
*** 0 ****
--- 1,41 ----
+ =head1 NAME
+ 
+ rmtsysd - Daemon to execute AFS-specific system calls for remote hosts
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<rmtsysd>
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ B<rmtsysd> is a daemon to execute AFS-specific system calls on behalf of
+ NFS client machines.  This daemon only needs to be started if the machine
+ is an NFS/AFS translator server for users of NFS client machines who
+ execute AFS commands.
+ 
+ =head1 CAUTIONS
+ 
+ The protocol used by this daemon is not considered secure, so this should
+ not be used in an environment where security is important.
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be logged in as the local superuser root.
+ 
+ =head1 SEE ALSO
+ 
+ L<afsd(8)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2009 Steven Jenkins <steven@endpoint.com>
+ 
+ This documentation is covered by the BSD License as written in the
+ doc/LICENSE file. This man page was written by Steven Jenkins for
+ OpenAFS.
Index: openafs/doc/man-pages/pod8/vlserver.pod
diff -c openafs/doc/man-pages/pod8/vlserver.pod:1.2.2.9 openafs/doc/man-pages/pod8/vlserver.pod:1.2.2.10
*** openafs/doc/man-pages/pod8/vlserver.pod:1.2.2.9	Sun Aug 24 21:15:22 2008
--- openafs/doc/man-pages/pod8/vlserver.pod	Tue May  5 08:30:45 2009
***************
*** 8,14 ****
  <div class="synopsis">
  
  B<vlserver> S<<< [B<-p> <I<lwp processes>>] >>> [B<-nojumbo>] [B<-jumbo>] S<<< [B<-d> <I<debug level>>] >>>
!     [B<-allow-dotted-principal>] [B<-enable_peer_stats>] [B<-enable_process_stats>] 
      [B<-help>]
  
  =for html
--- 8,14 ----
  <div class="synopsis">
  
  B<vlserver> S<<< [B<-p> <I<lwp processes>>] >>> [B<-nojumbo>] [B<-jumbo>] S<<< [B<-d> <I<debug level>>] >>>
!     [B<-allow-dotted-principals>] [B<-enable_peer_stats>] [B<-enable_process_stats>] 
      [B<-help>]
  
  =for html
***************
*** 95,101 ****
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principal>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
--- 95,101 ----
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principals>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
Index: openafs/doc/man-pages/pod8/voldump.pod
diff -c openafs/doc/man-pages/pod8/voldump.pod:1.1.2.3 openafs/doc/man-pages/pod8/voldump.pod:1.1.2.4
*** openafs/doc/man-pages/pod8/voldump.pod:1.1.2.3	Wed Mar  1 00:11:29 2006
--- openafs/doc/man-pages/pod8/voldump.pod	Mon May 18 19:34:41 2009
***************
*** 86,91 ****
--- 86,92 ----
  =head1 SEE ALSO
  
  L<bos_shutdown(8)>,
+ L<restorevol(8)>,
  L<volserver(8)>,
  L<vos_dump(1)>,
  L<vos_restore(1)>
Index: openafs/doc/man-pages/pod8/volserver.pod
diff -c openafs/doc/man-pages/pod8/volserver.pod:1.3.2.10 openafs/doc/man-pages/pod8/volserver.pod:1.3.2.11
*** openafs/doc/man-pages/pod8/volserver.pod:1.3.2.10	Sun Aug 24 21:15:22 2008
--- openafs/doc/man-pages/pod8/volserver.pod	Tue May  5 08:30:45 2009
***************
*** 12,18 ****
      S<<< [B<-d> <I<debug level>>] >>>
      [B<-nojumbo>] [B<-jumbo>] 
      [B<-enable_peer_stats>] [B<-enable_process_stats>] 
!     [B<-allow-dotted-principal>] [B<-help>]
  
  =for html
  </div>
--- 12,18 ----
      S<<< [B<-d> <I<debug level>>] >>>
      [B<-nojumbo>] [B<-jumbo>] 
      [B<-enable_peer_stats>] [B<-enable_process_stats>] 
!     [B<-allow-dotted-principals>] [B<-help>]
  
  =for html
  </div>
***************
*** 99,105 ****
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principal>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
--- 99,105 ----
  other machines. To display or otherwise access the records, use the Rx
  Monitoring API.
  
! =item B<-allow-dotted-principals>
  
  By default, the RXKAD security layer will disallow access by Kerberos
  principals with a dot in the first component of their name. This is to avoid
Index: openafs/doc/man-pages/pod8/vsys.pod
diff -c /dev/null openafs/doc/man-pages/pod8/vsys.pod:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/man-pages/pod8/vsys.pod	Mon May 18 19:35:44 2009
***************
*** 0 ****
--- 1,51 ----
+ =head1 NAME
+ 
+ vsys - Make AFS system calls from the command line
+ 
+ =head1 SYNOPSIS
+ 
+ =for html
+ <div class="synopsis">
+ 
+ B<vsys> <I<call number>> <I<parms>>+
+ 
+ =for html
+ </div>
+ 
+ =head1 DESCRIPTION
+ 
+ B<vsys> is a development tool to make AFS system calls from the command
+ line.  <I<call number>> is the AFS system call to be invoked.  <I<parms>>+
+ are the values to pass to the system call.  Knowledge of the AFS system
+ call layer is required to know valid call numbers and parameters.
+ 
+ =head1 CAUTIONS
+ 
+ B<vsys> is intended for debugging AFS at a low level and is therefore
+ intended for AFS developers.  System Administrators and AFS users should
+ use the higher-level interfaces provided by L<fs(1)>, L<aklog(1)>,
+ L<klog(1)>, and L<pagsh(1)> instead.
+ 
+ B<vsys> provides a way to pass arbitrary data into the AFS system call
+ mechanism.  Caution should be taken when using or providing this binary on
+ a system, as incorrect use as a privileged user could cause a system to
+ panic, hang, or perform an unsafe operation.
+ 
+ =head1 PRIVILEGE REQUIRED
+ 
+ The issuer must be logged in as the local superuser root.
+ 
+ =head1 SEE ALSO
+ 
+ L<afsd(8)>,
+ L<aklog(1)>,
+ L<fs(1)>,
+ L<klog(1)>,
+ L<pagsh(1)>
+ 
+ =head1 COPYRIGHT
+ 
+ Copyright 2009 Steven Jenkins <steven@endpoint.com>
+ 
+ This documentation is covered by the BSD License as written in the
+ doc/LICENSE file. This man page was written by Steven Jenkins for OpenAFS.
Index: openafs/doc/protocol/bos-spec.h
diff -c /dev/null openafs/doc/protocol/bos-spec.h:1.1.2.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/protocol/bos-spec.h	Sun May 31 12:59:32 2009
***************
*** 0 ****
--- 1,2473 ----
+ /*!
+ 
+ 	\page title AFS-3 Programmer's Reference: BOS Server Interface 
+ 
+ \author Edward R. Zayas 
+ Transarc Corporation 
+ \version 1.0 
+ \date 28 August 1991 11:58 Copyright 1991 Transarc Corporation All Rights
+ Reserved FS-00-D161 
+ 
+ 	\page chap1 Chapter 1: Overview 
+ 
+ 	\section sec1-1 Section 1.1: Introduction 
+ 
+ \par
+ One of the important duties of an AFS system administrator is to insure that
+ processes on file server machines are properly installed and kept running. The
+ BOS Server was written as a tool for assisting administrators in these tasks.
+ An instance of the BOS Server runs on each AFS server machine, and has the
+ following specific areas of responsibility: 
+ \li Definition of the set of processes that are to be run on the machine on
+ which a given BOS Server executes. This definition may be changed dynamically
+ by system administrators. Programs may be marked as continuously or
+ periodically runnable. 
+ \li Automatic startup and restart of these specified processes upon server
+ bootup and program failure. The BOS Server also responds to administrator
+ requests for stopping and starting one or more of these processes. In addition,
+ the BOS Server is capable of restarting itself on command. 
+ \li Collection of information regarding the current status, command line
+ parameters, execution history, and log files generated by the set of server
+ programs. 
+ \li Management of the security information resident on the machine on which the
+ BOS Server executes. Such information includes the list of administratively
+ privileged people associated with the machine and the set of AFS File Server
+ encryption keys used in the course of file service. 
+ \li Management of the cell configuration information for the server machine in
+ question. This includes the name of the cell in which the server resides, along
+ with the list and locations of the servers within the cell providing AFS
+ database services (e.g., volume location, authentication, protection).
+ Installation of server binaries on the given machine. The BOS Server allows
+ several "generations" of server software to be kept on its machine.
+ Installation of new software for one or more server agents is handled by the
+ BOS Server, as is "rolling back" to a previous version should it prove more
+ stable than the currently-installed image. 
+ \par
+ Execution of commands on the server machine. An administrator may execute
+ arbitrary unix commands on a machine running the BOS Server. 
+ \par
+ Unlike many other AFS server processes, the BOS Server does not maintain a
+ cell-wide, replicated database. It does, however, maintain several databases
+ used exclusively on every machine on which it runs. 
+ 
+ 	\section sec1-2 Section 1.2: Scope 
+ 
+ \par
+ This paper describes the design and structure of the AFS-3 BOS Server. The
+ scope of this work is to provide readers with a sufficiently detailed
+ description of the BOS Server so that they may construct client applications
+ that call the server's RPC interface routines. 
+ 
+ 	\section sec1-3 Section 1.3: Document Layout 
+ 
+ \par
+ The second chapter discusses various aspects of the BOS Server's architecture.
+ First, one of the basic concepts is examined, namely the bnode. Providing the
+ complete description of a program or set of programs to be run on the given
+ server machine, a bnode is the generic definitional unit for the BOS Server's
+ duties. After bnodes have been explained, the set of standard directories on
+ which the BOS Server depends is considered. Also, the set of well-known files
+ within these directories is explored. Their uses and internal formats are
+ presented. After these sections, a discussion of BOS Server restart times
+ follows. The BOS Server has special support for two commonly-used restart
+ occasions, as described by this section. Finally, the organization and behavior
+ of the bosserver program itself is presented. 
+ \par
+ The third and final chapter provides a detailed examination of the
+ programmer-visible BOS Server constants and structures, along with a full
+ specification of the API for the RPC-based BOS Server functionality. 
+ 
+ 	\section sec1-4 Section 1.4: Related Documents 
+ 
+ \par
+ This document is a member of a documentation suite providing programmer-level
+ specifications for the operation of the various AFS servers and agents, and the
+ interfaces they export, as well as the underlying RPC system they use to
+ communicate. The full suite of related AFS specification documents is listed
+ below: 
+ \li AFS-3 Programmer's Reference: Architectural Overview: This paper provides
+ an architectual overview of the AFS distributed file system, describing the
+ full set of servers and agents in a coherent way, illustrating their
+ relationships to each other and examining their interactions. 
+ \li AFS-3 Programmer's Reference: File Server/Cache Manager Interface: This
+ document describes the File Server and Cache Manager agents, which provide the
+ backbone file managment services for AFS. The collection of File Servers for a
+ cell supply centralized file storage for that site, and allow clients running
+ the Cache Manager component to acces those files in a high-performance, secure
+ fashion. 
+ \li AFS-3 Programmer's Reference:Volume Server/Volume Location Server
+ Interface: This document describes the services through which "containers" of
+ related user data are located and managed. 
+ \li AFS-3 Programmer's Reference: Protection Server Interface: This paper
+ describes the server responsible for mapping printable user names to and from
+ their internal AFS identifiers. The Protection Server also allows users to
+ create, destroy, and manipulate "groups" of users, which are suitable for
+ placement on ACLs. 
+ \li AFS-3 Programmer's Reference: Specification for the Rx Remote Procedure
+ Call Facility: This document specifies the design and operation of the remote
+ procedure call and lightweight process packages used by AFS. 
+ \par
+ In addition to these papers, the AFS 3.1 product is delivered with its own
+ user, administrator, installation, and command reference documents. 
+ 
+ 	\page chap2 Chapter 2: BOS Server Architecture 
+ 
+ \par
+ This chapter considers some of the architectual features of the AFS-3 BOS
+ Server. First, the basic organizational and functional entity employed by the
+ BOS Server, the bnode, is discussed. Next, the set of files with which the
+ server interacts is examined. The notion of restart times is then explained in
+ detail. Finally, the organization and components of the bosserver program
+ itself, which implements the BOS Server, are presented. 
+ 
+ 	\section sec2-1 Section 2.1: Bnodes 
+ 
+ 	\subsection sec2-1-1 Section 2.1.1: Overview 
+ 
+ \par
+ The information required to manage each AFS-related program running on a File
+ Server machine is encapsulated in a bnode object. These bnodes serve as the
+ basic building blocks for BOS Server services. Bnodes have two forms of
+ existence: 
+ \li On-disk: The BosConfig file (see Section 2.3.4 below) defines the set of
+ bnodes for which the BOS Server running on that machine will be responsible,
+ along with specifying other information such as values for the two restart
+ times. This file provides permanent storage (i.e., between bootups) for the
+ desired list of programs for that server platform. 
+ \li In-memory: The contents of the BosConfig file are parsed and internalized
+ by the BOS Server when it starts execution. The basic data for a particular
+ server program is placed into a struct bnode structure. 
+ \par
+ The initial contents of the BosConfig file are typically set up during system
+ installation. The BOS Server can be directed, via its RPC interface, to alter
+ existing bnode entries in the BosConfig file, add new ones, and delete old
+ ones. Typically, this file is never edited directly. 
+ 
+ 	\subsection sec2-1-2 Section 2.1.2: Bnode Classes 
+ 
+ \par
+ The descriptions of the members of the AFS server suite fall into three broad
+ classes of programs: 
+ \li Simple programs: This server class is populated by programs that simply
+ need to be kept running, and do not depend on other programs for correctness or
+ effectiveness. Examples of AFS servers falling into this category are the
+ Volume Location Server, Authentication Server, and Protection Server. Since its
+ members exhibit such straightforward behavior, this class of programs is
+ referred to as the simple class. 
+ \li Interrelated programs: The File Server program depends on two other
+ programs, and requires that they be executed at the appropriate times and in
+ the appropriate sequence, for correct operation. The first of these programs is
+ the Volume Server, which must be run concurrently with the File Server. The
+ second is the salvager, which repairs the AFS volume metadata on the server
+ partitions should the metadata become damaged. The salvager must not be run at
+ the same time as the File Server. In honor of the File Server trio that
+ inspired it, the class of programs consisting of groups of interrelated
+ processes is named the fs class. 
+ \li Periodic programs: Some AFS servers, such as the BackupServer, only need to
+ run every so often, but on a regular and well-defined basis. The name for this
+ class is taken from the unix tool that is typically used to define such regular
+ executions, namely the cron class. 
+ \par
+ The recognition and definition of these three server classes is exploited by
+ the BOS Server. Since all of the programs in a given class share certain common
+ characteristics, they may all utilize the same basic data structures to record
+ and manage their special requirements. Thus, it is not necessary to reimplement
+ all the operations required to satisfy the capabilities promised by the BOS
+ Server RPC interface for each and every program the BOS Server manages.
+ Implementing one set of operations for each server class is sufficient to
+ handle any and all server binaries to be run on the platform. 
+ 
+ 	\subsection sec2-1-3 Section 2.1.3: Per-Class Bnode Operations 
+ 
+ \par
+ As mentioned above, only one set of basic routines must be implemented for each
+ AFS server class. Much like Sun's VFS/vnode interface [8], providing a common
+ set of routines for interacting with a given file system, regardless of its
+ underlying implementation and semantics, the BOS Server defines a common vector
+ of operations for a class of programs to be run under the BOS Server's
+ tutelage. In fact, it was this standardized file system interface that inspired
+ the "bnode" name. 
+ \par
+ The BOS Server manipulates the process or processes that are described by each
+ bnode by invoking the proper functions in the appropriate order from the
+ operation vector for that server class. Thus, the BOS Server itself operates in
+ a class-independent fashion. This allows each class to take care of the special
+ circumstances associated with it, yet to have the BOS Server itself be totally
+ unaware of what special actions (if any) are needed for the class. This
+ abstraction also allows more server classes to be implemented without any
+ significant change to the BOS Server code itself. 
+ \par
+ There are ten entries in this standardized class function array. The purpose
+ and usage of each individual class function is described in detail in Section
+ 3.3.5. Much like the VFS system, a collection of macros is also provided in
+ order to simplify the invocation of these functions. These macros are described
+ in Section 3.5. The ten function slots are named here for convenience: 
+ \li create() 
+ \li timeout() 
+ \li getstat() 
+ \li setstat() 
+ \li delete() 
+ \li procexit() 
+ \li getstring() 
+ \li getparm() 
+ \li restartp() 
+ \li hascore() 
+ 
+ 	\section sec2-2 Section 2.2: BOS Server Directories 
+ 
+ \par
+ The BOS Server expects the existence of the following directories on the local
+ disk of the platform on which it runs. These directories define where the
+ system binaries, log files, ubik databases, and other files lie. 
+ \li /usr/afs/bin: This directory houses the full set of AFS server binaries.
+ Such executables as bosserver, fileserver, vlserver, volserver, kaserver, and
+ ptserver reside here. 
+ \li /usr/afs/db: This directory serves as the well-known location on the
+ server's local disk for the ubik database replicas for this machine.
+ Specifically, the Authentication Server, Protection Server, and the Volume
+ Location Server maintain their local database images here. 
+ \li /usr/afs/etc: This directory hosts the files containing the security, cell,
+ and authorized system administrator list for the given machine. Specifically,
+ the CellServDB, KeyFile, License, ThisCell, and UserList files are stored here. 
+ \li /usr/afs/local: This directory houses the BosConfig file, which supplies
+ the BOS Server with the permanent set of bnodes to support. Also contained in
+ this directory are files used exclusively by the salvager. 
+ \li /usr/afs/logs: All of the AFS server programs that maintain log files
+ deposit them in this directory. 
+ 
+ 	\section sec2-3 Section 2.3: BOS Server Files 
+ 
+ \par
+ Several files, some mentioned above, are maintained on the server's local disk
+ and manipulated by the BOS Server. This section examines many of these files,
+ and describes their formats. 
+ 
+ 	\subsection sec2-3-1 Section 2.3.1: /usr/afs/etc/UserList 
+ 
+ \par
+ This file contains the names of individuals who are allowed to issue
+ "restricted" BOS Server commands (e.g., creating & deleting bnodes, setting
+ cell information, etc.) on the given hardware platform. The format is
+ straightforward, with one administrator name per line. If a cell grants joe and
+ schmoe these rights on a machine, that particular UserList will have the
+ following two lines: 
+ \n joe 
+ \n schmoe 
+ 
+ 	\subsection sec2-3-2 Section 2.3.2: /usr/afs/etc/CellServDB 
+ 
+ \par
+ This file identifies the name of the cell to which the given server machine
+ belongs, along with the set of machines on which its ubik database servers are
+ running. Unlike the CellServDB found in /usr/vice/etc on AFS client machines,
+ this file contains only the entry for the home cell. It shares the formatting
+ rules with the /usr/vice/etc version of CellServDB. The contents of the
+ CellServDB file used by the BOS Server on host grand.central.org are: 
+ \code
+ >grand.central.org	#DARPA clearinghouse cell
+ 192.54.226.100		#grand.central.org
+ 192.54.226.101		#penn.central.org
+ \endcode
+ 
+ 	\subsection sec2-3-3 Section 2.3.3: /usr/afs/etc/ThisCell 
+ 
+ \par
+ The BOS Server obtains its notion of cell membership from the ThisCell file in
+ the specified directory. As with the version of ThisCell found in /usr/vice/etc
+ on AFS client machines, this file simply contains the character string
+ identifying the home cell name. For any server machine in the grand.central.org
+ cell, this file contains the following: 
+ \code 
+ grand.central.org 
+ \endcode
+ 
+ 	\subsection sec2-3-4 Section 2.3.4: /usr/afs/local/BosConfig 
+ 
+ \par
+ The BosConfig file is the on-disk representation of the collection of bnodes
+ this particular BOS Server manages. The BOS Server reads and writes to this
+ file in the normal course of its affairs. The BOS Server itself, in fact,
+ should be the only agent that modifies this file. Any changes to BosConfig
+ should be carried out by issuing the proper RPCs to the BOS Server running on
+ the desired machine. 
+ \par
+ The following is the text of the BosConfig file on grand.central.org. A
+ discussion of the contents follows immediately afterwards. 
+ \code
+ restarttime 11 0 4 0 0 checkbintime 3 0 5 0 0 
+ bnode simple kaserver 1 parm /usr/afs/bin/kaserver 
+ end bnode simple ptserver 1 parm 
+ /usr/afs/bin/ptserver end bnode simple vlserver 1 
+ parm /usr/afs/bin/vlserver end bnode fs fs 1 parm 
+ /usr/afs/bin/fileserver parm /usr/afs/bin/volserver 
+ parm /usr/afs/bin/salvager end bnode simple runntp 
+ 1 parm /usr/afs/bin/runntp -localclock transarc.com 
+ end bnode simple upserver 1 parm 
+ /usr/afs/bin/upserver end bnode simple 
+ budb_server 1 parm /usr/afs/bin/budb_server end 
+ bnode cron backup 1 parm 
+ /usr/afs/backup/clones/lib/backup.csh daily parm 
+ 05:00 end 
+ \endcode
+ 
+ \par
+ The first two lines of this file set the system and new-binary restart times
+ (see Section 2.4, below). They are optional, with the default system restart
+ time being every Sunday at 4:00am and the new-binary restart time being 5:00am
+ daily. Following the reserved words restarttime and checkbintime are five
+ integers, providing the mask, day, hour, minute, and second values (in decimal)
+ for the restart time, as diagrammed below: 
+ \code
+ restarttime <mask> <day> <hour> <minute> 
+ <second> checkbintime <mask> <day> <hour> 
+ <minute> <second> 
+ \endcode
+ 
+ \par
+ The range of acceptable values for these fields is presented in Section 3.3.1.
+ In this example, the restart line specifies a (decimal) mask value of 11,
+ selecting the KTIME HOUR, KTIME MIN, and KTIME DAY bits. This indicates that
+ the hour, minute, and day values are the ones to be used when matching times.
+ Thus, this line requests that system restarts occur on day 0 (Sunday), hour 4
+ (4:00am), and minute 0 within that hour. 
+ \par
+ The sets of lines that follow define the individual bnodes for the particular
+ machine. The first line of the bnode definition set must begin with the
+ reserved word bnode, followed by the type name, the instance name, and the
+ initial bnode goal: 
+ \code
+ bnode <type_name> <instance_name> <goal_val> 
+ \endcode
+ 
+ \par
+ The <type name> and <instance name> fields are both character strings, and the
+ <goal val> field is an integer. Acceptable values for the <type name> are
+ simple, fs, and cron. Acceptable values for <goal val> are defined in Section
+ 3.2.3, and are normally restricted to the integer values representing BSTAT
+ NORMAL and BSTAT SHUTDOWN. Thus, in the bnode line defining the Authentication
+ Server, it is declared to be of type simple, have instance name kaserver, and
+ have 1 (BSTAT NORMAL) as a goal (e.g., it should be brought up and kept
+ running). 
+ \par
+ Following the bnode line in the BosConfig file may be one or more parm lines.
+ These entries represent the command line parameters that will be used to invoke
+ the proper related program or programs. The entire text of the line after the
+ parm reserved word up to the terminating newline is stored as the command line
+ string. 
+ \code
+ parm <command_line_text> 
+ \endcode
+ 
+ \par
+ After the parm lines, if any, the reserved word end must appear alone on a
+ line, marking the end of an individual bnode definition. 
+ 
+ 	\subsection sec2-3-5 Section 2.3.5: /usr/afs/local/NoAuth 
+ 
+ \par
+ The appearance of this file is used to mark whether the BOS Server is to insist
+ on properly authenticated connections for its restricted operations or whether
+ it will allow any caller to exercise these commands. Not only is the BOS Server
+ affected by the presence of this file, but so are all of the bnodes objects the
+ BOS Server starts up. If /usr/afs/local/NoAuth is present, the BOS Server will
+ start all of its bnodes with the -noauth flag. 
+ \par
+ Completely unauthenticated AFS operation will result if this file is present
+ when the BOS Server starts execution. The file itself is typically empty. If
+ any data is put into the NoAuth file, it will be ignored by the system. 
+ 
+ 	\subsection sec2-3-6 Section 2.3.6: /usr/afs/etc/KeyFile 
+ 
+ \par
+ This file stores the set of AFS encryption keys used for file service
+ operations. The file follows the format defined by struct afsconf key and
+ struct afsconf keys in include file afs/keys.h. For the reader's convenience,
+ these structures are detailed below: 
+ \code
+ #define AFSCONF_MAXKEYS 8 
+ struct afsconf_key { 
+ 	long kvno; 
+ 	char key[8]; 
+ }; 
+ struct afsconf_keys { 
+ 	long nkeys; 
+ 	struct afsconf_key key[AFSCONF_MAXKEYS]; 
+ }; 
+ \endcode
+ \par
+ The first longword of the file reveals the number of keys that may be found
+ there, with a maximum of AFSCONF MAXKEYS (8). The keys themselves follow, each
+ preceded by its key version number. 
+ \par
+ All information in this file is stored in network byte order. Each BOS Server
+ converts the data to the appropriate host byte order befor storing and
+ manipulating it. 
+ 
+ 	\section sec2-4 Section 2.4: Restart Times 
+ 
+ \par
+ It is possible to manually start or restart any server defined within the set
+ of BOS Server bnodes from any AFS client machine, simply by making the
+ appropriate call to the RPC interface while authenticated as a valid
+ administrator (i.e., a principal listed in the UserList file on the given
+ machine). However, two restart situations merit the implementation of special
+ functionality within the BOS Server. There are two common occasions, occuring
+ on a regular basis, where the entire system or individual server programs
+ should be brought down and restarted: 
+ \par 
+ \b Complete \b system \b restart: To guard against the reliability and
+ performance problems caused by any core leaks in long-running programs, the
+ entire AFS system should be occasionally shut down and restarted periodically.
+ This action 'clears out' the memory system, and may result in smaller memory
+ images for these servers, as internal data structures are reinitialized back to
+ their starting sizes. It also allows AFS partitions to be regularly examined,
+ and salvaged if necessary. 
+ \par 
+ Another reason for performing a complete system restart is to commence
+ execution of a new release of the BOS Server itself. The new-binary restarts
+ described below do not restart the BOS Server if a new version of its software
+ has been installed on the machine. 
+ \par 
+ \b New-binary \b restarts: New server software may be installed at any time
+ with the assistance of the BOS Server. However, it is often not the case that
+ such software installations occur as a result of the discovery of an error in
+ the program or programs requiring immediate restart. On these occasions,
+ restarting the given processes in prime time so that the new binaries may begin
+ execution is counterproductive, causing system downtime and interfering with
+ user productivity. The system administrator may wish to set an off-peak time
+ when the server binaries are automatically compared to the running program
+ images, and restarts take place should the on-disk binary be more recent than
+ the currently running program. These restarts would thus minimize the resulting
+ service disruption. 
+ \par 
+ Automatically performing these restart functions could be accomplished by
+ creating cron-type bnodes that were defined to execute at the desired times.
+ However, rather than force the system administrator to create and supervise
+ such bnodes, the BOS Server supports the notion of an internal LWP thread with
+ the same effect (see Section 2.5.2). As part of the BosConfig file defined
+ above, the administrator may simply specify the values for the complete system
+ restart and new-binary restart times, and a dedicated BOS Server thread will
+ manage the restarts. 
+ \par 
+ Unless otherwise instructed, the BOS Server selects default times for the two
+ above restart times. A complete system restart is carried out every Sunday at
+ 4:00am by default, and a new-binary restart is executed for each updated binary
+ at 5:00am every day. 
+ 
+ 	\section sec2-5 Section 2.5: The bosserver Process 
+ 
+ 	\subsection sec2-5-1 Section 2.5.1: Introduction 
+ 
+ \par
+ The user-space bosserver process is in charge of managing the AFS server
+ processes and software images, the local security and cell database files, and
+ allowing administrators to execute arbitrary programs on the server machine on
+ which it runs. It also implements the RPC interface defined in the bosint.xg
+ Rxgen definition file. 
+ 
+ 	\subsection sec2-5-2 Section 2.5.2: Threading 
+ 
+ \par
+ As with all the other AFS server agents, the BOS Server is a multithreaded
+ program. It is configured so that a minimum of two lightweight threads are
+ guaranteed to be allocated to handle incoming RPC calls to the BOS Server, and
+ a maximum of four threads are commissioned for this task. 
+ \par
+ In addition to these threads assigned to RPC duties, there is one other thread
+ employed by the BOS Server, the BozoDaemon(). This thread is responsible for
+ keeping track of the two major restart events, namely the system restart and
+ the new binary restart (see Section 2.4). Every 60 seconds, this thread is
+ awakened, at which time it checks to see if either deadline has occurred. If
+ the complete system restart is then due, it invokes internal BOS Server
+ routines to shut down the entire suite of AFS agents on that machine and then
+ reexecute the BOS Server binary, which results in the restart of all of the
+ server processes. If the new-binary time has arrived, the BOS Server shuts down
+ the bnodes for which binaries newer than those running are available, and then
+ invokes the new software. 
+ \par
+ In general, the following procedure is used when stopping and restarting
+ processes. First, the restart() operation defined for each bnode's class is
+ invoked via the BOP RESTART() macro. This allows each server to take any
+ special steps required before cycling its service. After that function
+ completes, the standard mechanisms are used to shut down each bnode's process,
+ wait until it has truly stopped its execution, and then start it back up again. 
+ 
+ 	\subsection sec2-5-3 Section 2.5.3: Initialization Algorithm 
+ 
+ \par
+ This section describes the procedure followed by the BOS Server from the time
+ when it is invoked to the time it has properly initialized the server machine
+ upon which it is executing. 
+ \par
+ The first check performed by the BOS Server is whether or not it is running as
+ root. It needs to manipulate local unix files and directories in which only
+ root has been given access, so it immediately exits with an error message if
+ this is not the case. The BOS Server's unix working directory is then set to be
+ /usr/afs/logs in order to more easily service incoming RPC requests to fetch
+ the contents of the various server log files at this location. Also, changing
+ the working directory in this fashion results in any core images dumped by the
+ BOS Server's wards will be left in /usr/afs/logs. 
+ \par
+ The command line is then inspected, and the BOS Server determines whether it
+ will insist on authenticated RPC connections for secure administrative
+ operations by setting up the /usr/afs/local/NoAuth file appropriately (see
+ Section 2.3.5). It initializes the underlying bnode package and installs the
+ three known bnode types (simple, fs, and cron). 
+ \par
+ After the bnode package is thus set up, the BOS Server ensures that the set of
+ local directories on which it will depend are present; refer to Section 2.2 for
+ more details on this matter. The license file in /usr/afs/etc/License is then
+ read to determine the number of AFS server machines the site is allowed to
+ operate, and whether the cell is allowed to run the NFS/AFS Translator
+ software. This file is typically obtained in the initial system installation,
+ taken from the installation tape. The BOS Server will exit unless this file
+ exists and is properly formatted. 
+ \par
+ In order to record its actions, any existing /usr/afs/logs/BosLog file is moved
+ to BosLog.old, and a new version is opened in append mode. The BOS Server
+ immediately writes a log entry concerning the state of the above set of
+ important directories. 
+ \par
+ At this point, the BOS Server reads the BosConfig file, which lists the set of
+ bnodes for which it will be responsible. It starts up the processes associated
+ with the given bnodes. Once accomplished, it invokes its internal system
+ restart LWP thread (covered in Section 2.5.2 above). 
+ \par
+ Rx initialization begins at this point, setting up the RPC infrastructure to
+ receive its packets on the AFSCONF NANNYPORT, UDP port 7007. The local cell
+ database is then read and internalized, followed by acquisition of the AFS
+ encryption keys. 
+ \par
+ After all of these steps have been carried out, the BOS Server has gleaned all
+ of the necessary information from its environemnt and has also started up its
+ wards. The final initialization action required is to start all of its listener
+ LWP threads, which are devoted to executing incoming requests for the BOS
+ Server RPC interface. 
+ 
+ 	\subsection sec2-5-4 Section 2.5.4: Command Line Switches 
+ 
+ \par
+ The BOS Server recognizes exactly one command line argument: -noauth. By
+ default, the BOS Server attempts to use authenticated RPC connections (unless
+ the /usr/afs/local/NoAuth file is present; see Section 2.3.5). The appearance
+ of the -noauth command line flag signals that this server incarnation is to use
+ unauthenticated connections for even those operations that are normally
+ restricted to system administrators. This switch is essential during the
+ initial AFS system installation, where the procedures followed to bootstrap AFS
+ onto a new machine require the BOS Server to run before some system databases
+ have been created. 
+ 
+ 	\page chap3 Chapter 3: BOS Server Interface 
+ 
+ 	\section sec3-1 Section 3.1: Introduction 
+ 
+ \par
+ This chapter documents the API for the BOS Server facility, as defined by the
+ bosint.xg Rxgen interface file and the bnode.h include file. Descriptions of
+ all the constants, structures, macros, and interface functions available to the
+ application programmer appear in this chapter. 
+ 
+ 	\section sec3-2 Section 3.2: Constants 
+ 
+ \par
+ This section covers the basic constant definitions of interest to the BOS
+ Server application programmer. These definitions appear in the bosint.h file,
+ automatically generated from the bosint.xg Rxgen interface file. Another file
+ is exported to the programmer, namely bnode.h. 
+ \par
+ Each subsection is devoted to describing constants falling into each of the
+ following categories: 
+ \li Status bits 
+ \li Bnode activity bits 
+ \li Bnode states 
+ \li Pruning server binaries 
+ \li Flag bits for struct bnode proc 
+ \par
+ One constant of general utility is BOZO BSSIZE, which defines the length in
+ characters of BOS Server character string buffers, including the trailing null.
+ It is defined to be 256 characters. 
+ 
+ 	\subsection sec3-2-1 Section 3.2.1: Status Bits 
+ 
+ \par
+ The following bit values are used in the flags field of struct bozo status, as
+ defined in Section 3.3.4. They record whether or not the associated bnode
+ process currently has a stored core file, whether the bnode execution was
+ stopped because of an excessive number of errors, and whether the mode bits on
+ server binary directories are incorrect. 
+ 
+ \par Name
+ BOZO HASCORE
+ \par Value
+ 1
+ \par Description
+ Does this bnode have a stored core file?
+ 
+ \par Name
+ BOZO ERRORSTOP
+ \par Value
+ 2
+ \par Description
+ Was this bnode execution shut down because of an excessive number of errors
+ (more than 10 in a 10 second period)?
+ 
+ \par Name
+ BOZO BADDIRACCESS
+ \par Value
+ 3
+ \par Description
+ Are the mode bits on the /usr/afs directory and its descendants (etc, bin,
+ logs, backup, db, local, etc/KeyFile, etc/UserList) correctly set?
+ 
+ 	\subsection sec3-2-2 Section 3.2.2: Bnode Activity Bits 
+ 
+ \par
+ This section describes the legal values for the bit positions within the flags
+ field of struct bnode, as defined in Section 3.3.8. They specify conditions
+ related to the basic activity of the bnode and of the entities relying on it. 
+ 
+ \par Name
+ BNODE NEEDTIMEOUT
+ \par Value
+ 0x01
+ \par Description
+ This bnode is utilizing the timeout mechanism for invoking actions on its
+ behalf.
+ 
+ \par Name
+ BNODE ACTIVE
+ \par Value
+ 0x02
+ \par Description
+ The given bnode is in active service.
+ 
+ \par Name
+ BNODE WAIT
+ \par Value
+ 0x04
+ \par Description
+ Someone is waiting for a status change in this bnode.
+ 
+ \par Name
+ BNODE DELETE
+ \par Value
+ 0x08
+ \par Description
+ This bnode should be deleted at the earliest convenience.
+ 
+ \par Name
+ BNODE ERRORSTOP
+ \par Value
+ 0x10
+ \par Description
+ This bnode decommissioned because of an excessive number of errors in its
+ associated unix processes. 
+ 
+ 	\subsection sec3-2-3 Section 3.2.3: Bnode States 
+ 
+ \par
+ The constants defined in this section are used as values within the goal and
+ fileGoal fields within a struct bnode. They specify either the current state of
+ the associated bnode, or the anticipated state. In particular, the fileGoal
+ field, which is the value stored on disk for the bnode, always represents the
+ desired state of the bnode, whether or not it properly reflects the current
+ state. For this reason, only BSTAT SHUTDOWN and BSTAT NORMAL may be used within
+ the fileGoal field. The goal field may take on any of these values, and
+ accurately reflects the current status of the bnode. 
+ 
+ \par Name
+ BSTAT SHUTDOWN
+ \par Value
+ 0
+ \par Description
+ The bnode's execution has been (should be) terminated.
+ 
+ \par Name
+ BSTAT NORMAL
+ \par Value
+ 1
+ \par Description
+ The bnode is (should be) executing normally.
+ 
+ \par Name
+ BSTAT SHUTTINGDOWN
+ \par Value
+ 2
+ \par Description
+ The bnode is currently being shutdown; execution has not yet ceased.
+ 
+ \par Name
+ BSTAT STARTINGUP
+ \par Value
+ 3
+ \par Description
+ The bnode execution is currently being commenced; execution has not yet begun.
+ 
+ 	\subsection sec3-2-4 Section 3.2.4: Pruning Server Binaries 
+ 
+ \par
+ The BOZO Prune() interface function, fully defined in Section 3.6.6.4, allows a
+ properly-authenticated caller to remove ("prune") old copies of server binaries
+ and core files managed by the BOS Server. This section identifies the legal
+ values for the flags argument to the above function, specifying exactly what is
+ to be pruned. 
+ 
+ \par Name
+ BOZO PRUNEOLD
+ \par Value
+ 1
+ \par Description
+ Prune all server binaries with the *.OLD extension.
+ 
+ \par Name
+ BOZO PRUNEBAK
+ \par Value
+ 2
+ \par Description
+ Prune all server binaries with the *.BAK extension.
+ 
+ \par Name
+ BOZO PRUNECORE
+ \par Value
+ 3
+ \par Description
+ Prune core files.
+ 
+ 	\subsection sec3-2-5 Section 3.2.5: Flag Bits for struct bnode proc 
+ 
+ \par
+ This section specifies the acceptable bit values for the flags field in the
+ struct bnode proc structure, as defined in Section 3.3.9. Basically, they are
+ used to record whether or not the unix binary associated with the bnode has
+ ever been run, and if so whether it has ever exited. 
+ 
+ \par Name
+ BPROC STARTED
+ \par Value
+ 1
+ \par Description
+ Has the associated unix process ever been started up?
+ 
+ \par Name
+ BPROC EXITED
+ \par Value
+ 2
+ \par Description
+ Has the associated unix process ever exited?
+ 
+ 	\section sec3-3 Section 3.3: Structures 
+ 
+ \par
+ This section describes the major exported BOS Server data structures of
+ interest to application programmers. 
+ 
+ 	\subsection sec3-3-1 Section 3.3.1: struct bozo netKTime 
+ 
+ \par
+ This structure is used to communicate time values to and from the BOS Server.
+ In particular, the BOZO GetRestartTime() and BOZO SetRestartTime() interface
+ functions, described in Sections 3.6.2.5 and 3.6.2.6 respectively, use
+ parameters declared to be of this type. 
+ \par
+ Four of the fields in this structure specify the hour, minute, second, and day
+ of the event in question. The first field in the layout serves as a mask,
+ identifying which of the above four fields are to be considered when matching
+ the specified time to a given reference time (most often the current time). The
+ bit values that may be used for the mask field are defined in the afs/ktime.h
+ include file. For convenience, their values are reproduced here, including some
+ special cases at the end of the table. 
+ 
+ \par Name
+ KTIME HOUR
+ \par Value
+ 0x01
+ \par Description
+ Hour should match.
+ 
+ \par Name
+ KTIME MIN
+ \par Value
+ 0x02
+ \par Description
+ Minute should match.
+ 
+ \par Name
+ KTIME SEC
+ \par Value
+ 0x04
+ \par Description
+ Second should match.
+ 
+ \par Name
+ KTIME DAY
+ \par Value
+ 0x08
+ \par Description
+ Day should match.
+ 
+ \par Name
+ KTIME TIME
+ \par Value
+ 0x07
+ \par Description
+ All times should match.
+ 
+ \par Name
+ KTIME NEVER
+ \par Value
+ 0x10
+ \par Description
+ Special case: never matches.
+ 
+ \par Name
+ KTIME NOW
+ \par Value
+ 0x20
+ \par Description
+ Special case: right now.
+ 
+ \n \b Fields 
+ \li int mask - A field of bit values used to specify which of the following
+ field are to be used in computing matches. 
+ \li short hour - The hour, ranging in value from 0 to 23. 
+ \li short min - The minute, ranging in value from 0 to 59. 
+ \li short sec - The second, ranging in value from 0 to 59. 
+ \li short day - Zero specifies Sunday, other days follow in order. 
+ 
+ 	\subsection sec3-3-2 Section 3.3.2: struct bozo key 
+ 
+ \par
+ This structure defines the format of an AFS encryption key, as stored in the
+ key file located at /usr/afs/etc/KeyFile at the host on which the BOS Server
+ runs. It is used in the argument list of the BOZO ListKeys() and BOZO AddKeys()
+ interface functions, as described in Sections 3.6.4.4 and 3.6.4.5 respectively. 
+ \n \b Fields 
+ \li char data[8] - The array of 8 characters representing an encryption key. 
+ 
+ 	\subsection sec3-3-3 Section 3.3.3: struct bozo keyInfo 
+ 
+ \par
+ This structure defines the information kept regarding a given AFS encryption
+ key, as represented by a variable of type struct bozo key, as described in
+ Section 3.3.2 above. A parameter of this type is used by the BOZO ListKeys()
+ function (described in Section 3.6.4.4). It contains fields holding the
+ associated key's modification time, a checksum on the key, and an unused
+ longword field. Note that the mod sec time field listed below is a standard
+ unix time value. 
+ \n \b Fields 
+ \li long mod sec - The time in seconds when the associated key was last
+ modified. 
+ \li long mod usec - The number of microseconds elapsed since the second
+ reported in the mod sec field. This field is never set by the BOS Server, and
+ should always contain a zero. 
+ \li unsigned long keyCheckSum - The 32-bit cryptographic checksum of the
+ associated key. A block of zeros is encrypted, and the first four bytes of the
+ result are placed into this field. 
+ \li long spare2 - This longword field is currently unused, and is reserved for
+ future use. 
+ 
+ 	\subsection sec3-3-4 Section 3.3.4: struct bozo status 
+ 
+ \par
+ This structure defines the layout of the information returned by the status
+ parameter for the interface function BOZO GetInstanceInfo(), as defined in
+ Section 3.6.2.3. The enclosed fields include such information as the temporary
+ and long-term goals for the process instance, an array of bit values recording
+ status information, start and exit times, and associated error codes and
+ signals. 
+ \n \b Fields 
+ \li long goal - The short-term goal for a process instance. Settings for this
+ field are BSTAT SHUTDOWN, BSTAT NORMAL, BSTAT SHUTTINGDOWN, and BSTAT
+ STARTINGUP. These values are fully defined in Section 3.2.3. 
+ \li long fileGoal - The long-term goal for a process instance. Accepted
+ settings are restricted to a subset of those used by the goal field above, as
+ explained in Section 3.2.3. 
+ \li long procStartTime - The last time the given process instance was started. 
+ \li long procStarts - The number of process starts executed on the behalf of
+ the given bnode. 
+ \li long lastAnyExit - The last time the process instance exited for any
+ reason. 
+ \li long lastErrorExit - The last time a process exited unexpectedly. 
+ \li long errorCode - The last exit's return code. 
+ \li long errorSignal - The last signal terminating the process. 
+ \li long flags - BOZO HASCORE, BOZO ERRORSTOP, and BOZO BADDIRACCESS. These
+ constants are fully defined in Section 3.2.1. 
+ \li long spare[] - Eight longword spares, currently unassigned and reserved for
+ future use. 
+ 
+ 	\subsection sec3-3-5 Section 3.3.5: struct bnode ops 
+ 
+ \par
+ This struture defines the base set of operations that each BOS Server bnode
+ type (struct bnode type, see Section 3.3.6 below) must implement. They are
+ called at the appropriate times within the BOS Server code via the BOP * macros
+ (see Section 3.5 and the individual descriptions therein). They allow each
+ bnode type to define its own behavior in response to its particular needs. 
+ \n \b Fields 
+ \li struct bnode *(*create)() - This function is called whenever a bnode of the
+ given type is created. Typically, this function will create bnode structures
+ peculiar to its own type and initialize the new records. Each type
+ implementation may take a different number of parameters. Note: there is no BOP
+ * macro defined for this particular function; it is always called directly. 
+ \li int (*timeout)() - This function is called whenever a timeout action must
+ be taken for this bnode type. It takes a single argument, namely a pointer to a
+ type-specific bnode structure. The BOP TIMEOUT macro is defined to simplify the
+ construction of a call to this function. 
+ \li int (*getstat)() - This function is called whenever a caller is attempting
+ to get status information concerning a bnode of the given type. It takes two
+ parameters, the first being a pointer to a type-specific bnode structure, and
+ the second being a pointer to a longword in which the desired status value will
+ be placed. The BOP GETSTAT macro is defined to simplify the construction of a
+ call to this function. 
+ \li int (*setstat)() - This function is called whenever a caller is attempting
+ to set the status information concerning a bnode of the given type. It takes
+ two parameters, the first being a pointer to a type-specific bnode structure,
+ and the second being a longword from which the new status value is obtained.
+ The BOP SETSTAT macro is defined to simplify the construction of a call to this
+ function. 
+ \li int (*delete)() - This function is called whenever a bnode of this type is
+ being deleted. It is expected that the proper deallocation and cleanup steps
+ will be performed here. It takes a single argument, a pointer to a
+ type-specific bnode structure. The BOP DELETE macro is defined to simplify the
+ construction of a call to this function. 
+ \li int (*procexit)() - This function is called whenever the unix process
+ implementing the given bnode exits. It takes two parameters, the first being a
+ pointer to a type-specific bnode structure, and the second being a pointer to
+ the struct bnode proc (defined in Section 3.3.9), describing that process in
+ detail. The BOP PROCEXIT macro is defined to simplify the construction of a
+ call to this function. 
+ \li int (*getstring)() - This function is called whenever the status string for
+ the given bnode must be fetched. It takes three parameters. The first is a
+ pointer to a type-specific bnode structure, the second is a pointer to a
+ character buffer, and the third is a longword specifying the size, in bytes, of
+ the above buffer. The BOP GETSTRING macro is defined to simplify the
+ construction of a call to this function. 
+ \li int (*getparm)() - This function is called whenever a particular parameter
+ string for the given bnode must be fetched. It takes four parameters. The first
+ is a pointer to a type-specific bnode structure, the second is a longword
+ identifying the index of the desired parameter string, the third is a pointer
+ to a character buffer to receive the parameter string, and the fourth and final
+ argument is a longword specifying the size, in bytes, of the above buffer. The
+ BOP GETPARM macro is defined to simplify the construction of a call to this
+ function. 
+ \li int (*restartp)() - This function is called whenever the unix process
+ implementing the bnode of this type is being restarted. It is expected that the
+ stored process command line will be parsed in preparation for the coming
+ execution. It takes a single argument, a pointer to a type-specific bnode
+ structure from which the command line can be located. The BOP RESTARTP macro is
+ defined to simplify the construction of a call to this function. 
+ \li int (*hascore)() - This function is called whenever it must be determined
+ if the attached process currently has a stored core file. It takes a single
+ argument, a pointer to a type-specific bnode structure from which the name of
+ the core file may be constructed. The BOP HASCORE macro is defined to simplify
+ the construction of a call to this function. 
+ 
+ 	\subsection sec3-3-6 Section 3.3.6: struct bnode type 
+ 
+ \par
+ This structure encapsulates the defining characteristics for a given bnode
+ type. Bnode types are placed on a singly-linked list within the BOS Server, and
+ are identified by a null-terminated character string name. They also contain
+ the function array defined in Section 3.3.5, that implements the behavior of
+ that object type. There are three predefined bnode types known to the BOS
+ Server. Their names are simple, fs, and cron. It is not currently possible to
+ dynamically define and install new BOS Server types. 
+ \n \b Fields 
+ \li struct bnode type *next - Pointer to the next bnode type definition
+ structure in the list. 
+ \li char *name - The null-terminated string name by which this bnode type is
+ identified. 
+ \li bnode ops *ops - The function array that defines the behavior of this given
+ bnode type. 
+ 
+ 	\subsection sec3-3-7 Section 3.3.7: struct bnode token 
+ 
+ \par
+ This structure is used internally by the BOS Server when parsing the command
+ lines with which it will start up process instances. This structure is made
+ externally visible should more types of bnode types be implemented. 
+ \n \b Fields 
+ \li struct bnode token *next - The next token structure queued to the list. 
+ \li char *key - A pointer to the token, or parsed character string, associated
+ with this entry. 
+ 
+ 	\subsection sec3-3-8 Section 3.3.8: struct bnode 
+ 
+ \par
+ This structure defines the essence of a BOS Server process instance. It
+ contains such important information as the identifying string name, numbers
+ concerning periodic execution on its behalf, the bnode's type, data on start
+ and error behavior, a reference count used for garbage collection, and a set of
+ flag bits. 
+ \n \b Fields 
+ \li char *name - The null-terminated character string providing the instance
+ name associated with this bnode. 
+ \li long nextTimeout - The next time this bnode should be awakened. At the
+ specified time, the bnode's flags field will be examined to see if BNODE
+ NEEDTIMEOUT is set. If so, its timeout() operation will be invoked via the BOP
+ TIMEOUT() macro. This field will then be reset to the current time plus the
+ value kept in the period field. 
+ \li long period - This field specifies the time period between timeout calls.
+ It is only used by processes that need to have periodic activity performed. 
+ \li long rsTime - The time that the BOS Server started counting restarts for
+ this process instance. 
+ \li long rsCount - The count of the number of restarts since the time recorded
+ in the rsTime field. 
+ \li struct bnode type *type - The type object defining this bnode's behavior. 
+ \li struct bnode ops *ops - This field is a pointer to the function array
+ defining this bnode's basic behavior. Note that this is identical to the value
+ of type->ops. 
+ \par
+ This pointer is duplicated here for convenience. All of the BOP * macros,
+ discussed in Section 3.5, reference the bnode's operation array through this
+ pointer. 
+ \li long procStartTime - The last time this process instance was started
+ (executed). 
+ \li long procStarts - The number of starts (executions) for this process
+ instance. 
+ \li long lastAnyExit - The last time this process instance exited for any
+ reason. 
+ \li long lastErrorExit - The last time this process instance exited
+ unexpectedly. 
+ \li long errorCode - The last exit return code for this process instance. 
+ \li long errorSignal - The last signal that terminated this process instance. 
+ \li char *lastErrorName - The name of the last core file generated. 
+ \li short refCount - A reference count maintained for this bnode. 
+ \li short flags - This field contains a set of bit fields that identify
+ additional status information for the given bnode. The meanings of the legal
+ bit values, explained in Section 3.2.2, are: BOZO NEEDTIMEOUT, BOZO ACTIVE,
+ BOZO WAIT, BOZO DELETE, and BOZO ERRORSTOP. 
+ \li char goal - The current goal for the process instance. It may take on any
+ of the values defined in Section 3.2.3, namely BSTAT SHUTDOWN, BSTAT NORMAL,
+ BSTAT SHUTTINGDOWN, and BSTAT STARTINGUP. 
+ \par
+ This goal may be changed at will by an authorized caller. Such changes affect
+ the current status of the process instance. See the description of the BOZO
+ SetStatus() and BOZO SetTStatus() interface functions, defined in Sections
+ 3.6.3.1 and 3.6.3.2 respectively, for more details. 
+ \li char fileGoal - This field is similar to goal, but represents the goal
+ stored in the on-file BOS Server description of this process instance. As with
+ the goal field, see functions the description of the BOZO SetStatus() and BOZO
+ SetTStatus() interface functions defined in Sections 3.6.3.1 and 3.6.3.2
+ respectively for more details. 
+ 
+ 	\subsection sec3-3-9 Section 3.3.9: struct bnode proc 
+ 
+ \par
+ This structure defines all of the information known about each unix process the
+ BOS Server is currently managing. It contains a reference to the bnode defining
+ the process, along with the command line to be used to start the process, the
+ optional core file name, the unix pid, and such things as a flag field to keep
+ additional state information. The BOS Server keeps these records on a global
+ singly-linked list. 
+ \n \b Fields 
+ \li struct bnode proc *next - A pointer to the BOS Server's next process
+ record. 
+ \li struct bnode *bnode - A pointer to the bnode creating and defining this
+ unix process. 
+ \li char *comLine - The text of the command line used to start this process. 
+ \li char *coreName - An optional core file component name for this process. 
+ \li long pid - The unix pid, if successfully created. 
+ \li long lastExit - This field keeps the last termination code for this
+ process. 
+ \li long lastSignal - The last signal used to kill this process. 
+ \li long flags - A set of bits providing additional process state. These bits
+ are fully defined in Section 3.2.5, and are: BPROC STARTED and BPROC EXITED. 
+ 
+ 	\section sec3-4 Section 3.4: Error Codes 
+ 
+ \par
+ This section covers the set of error codes exported by the BOS Server,
+ displaying the printable phrases with which they are associated. 
+ 
+ \par Name
+ BZNOTACTIVE
+ \par Value
+ (39424L)
+ \par Description
+ process not active.
+ 
+ \par Name
+ BZNOENT
+ \par Value
+ (39425L)
+ \par Description
+ no such entity.
+ 
+ \par Name
+ BZBUSY
+ \par Value
+ (38426L)
+ \par Description
+ can't do operation now.
+ 
+ \par Name
+ BZEXISTS
+ \par Value
+ (29427L)
+ \par Description
+ entity already exists.
+ 
+ \par Name
+ BZNOCREATE
+ \par Value
+ (39428)
+ \par Description
+ failed to create entity.
+ 
+ \par Name
+ BZDOM
+ \par Value
+ (39429L)
+ \par Description
+ index out of range.
+ 
+ \par Name
+ BZACCESS
+ \par Value
+ (39430L)
+ \par Description
+ you are not authorized for this operation.
+ 
+ \par Name
+ BZSYNTAX
+ \par Value
+ (39431L)
+ \par Description
+ syntax error in create parameter.
+ 
+ \par Name
+ BZIO
+ \par Value
+ (39432L)
+ \par Description
+ I/O error.
+ 
+ \par Name
+ BZNET
+ \par Value
+ (39433L)
+ \par Description
+ network problem.
+ 
+ \par Name
+ BZBADTYPE
+ \par Value
+ (39434L)
+ \par Description
+ unrecognized bnode type.
+ 
+ 	\section sec3-5 Section 3.5: Macros 
+ 
+ \par
+ The BOS Server defines a set of macros that are externally visible via the
+ bnode.h file. They are used to facilitate the invocation of the members of the
+ struct bnode ops function array, which defines the basic operations for a given
+ bnode type. Invocations appear throughout the BOS Server code, wherever bnode
+ type-specific operations are required. Note that the only member of the struct
+ bnode ops function array that does not have a corresponding invocation macro
+ defined is create(), which is always called directly. 
+ 
+ 	\subsection sec3-5-1 Section 3.5.1: BOP TIMEOUT() 
+ 
+ \code
+ #define BOP_TIMEOUT(bnode) \ 
+ ((*(bnode)->ops->timeout)((bnode))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when a timeout action must be
+ taken. This macro takes a single argument, namely a pointer to a type-specific
+ bnode structure. 
+ 
+ 	\subsection sec3-5-2 Section 3.5.2: BOP GETSTAT() 
+ 
+ \code
+ #define BOP_GETSTAT(bnode, a) \ 
+ ((*(bnode)->ops->getstat)((bnode),(a))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when a caller is attempting to
+ get status information concerning the bnode. It takes two parameters, the first
+ being a pointer to a type-specific bnode structure, and the second being a
+ pointer to a longword in which the desired status value will be placed. 
+ 
+ 	\subsection sec3-5-3 Section 3.5.3: BOP SETSTAT() 
+ 
+ \code
+ #define BOP_SETSTAT(bnode, a) \ 
+ ((*(bnode)->ops->setstat)((bnode),(a))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when a caller is attempting to
+ set the status information concerning the bnode. It takes two parameters, the
+ first being a pointer to a type-specific bnode structure, and the second being
+ a longword from which the new status value is obtained. 
+ 
+ 	\subsection sec3-5-4 Section 3.5.4: BOP DELETE() 
+ 
+ \code
+ #define BOP_DELETE(bnode) \ 
+ ((*(bnode)->ops->delete)((bnode))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when a bnode is deleted. This
+ macro takes a single argument, namely a pointer to a type-specific bnode
+ structure. 
+ 
+ 	\subsection sec3-5-5 Section 3.5.5: BOP PROCEXIT() 
+ 
+ \code
+ #define BOP_PROCEXIT(bnode, a) \ 
+ ((*(bnode)->ops->procexit)((bnode),(a))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required whenever the unix process
+ implementing the given bnode exits. It takes two parameters, the first being a
+ pointer to a type-specific bnode structure, and the second being a pointer to
+ the struct bnode proc (defined in Section 3.3.9), describing that process in
+ detail. 
+ 
+ 	\subsection sec3-5-6 Section 3.5.6: BOP GETSTRING() 
+ 
+ \code
+ #define BOP_GETSTRING(bnode, a, b) \ 
+ ((*(bnode)->ops->getstring)((bnode),(a), (b))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when the status string for the
+ given bnode must be fetched. It takes three parameters. The first is a pointer
+ to a type-specific bnode structure, the second is a pointer to a character
+ buffer, and the third is a longword specifying the size, in bytes, of the above
+ buffer. 
+ 
+ 	\subsection sec3-5-7 Section 3.5.7: BOP GETPARM() 
+ 
+ \code
+ #define BOP_GETPARM(bnode, n, b, l) \ 
+ ((*(bnode)->ops->getparm)((bnode),(n),(b),(l))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when a particular parameter
+ string for the given bnode must be fetched. It takes four parameters. The first
+ is a pointer to a type-specific bnode structure, the second is a longword
+ identifying the index of the desired parameter string, the third is a pointer
+ to a character buffer to receive the parameter string, and the fourth and final
+ argument is a longword specifying the size, in bytes, of the above buffer. 
+ 
+ 	\subsection sec3-5-8 Section 3.5.8: BOP RESTARTP() 
+ 
+ \code
+ #define BOP_RESTARTP(bnode) \ 
+ ((*(bnode)->ops->restartp)((bnode))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when the unix process
+ implementing the bnode of this type is restarted. It is expected that the
+ stored process command line will be parsed in preparation for the coming
+ execution. It takes a single argument, a pointer to a type-specific bnode
+ structure from which the command line can be located. 
+ 
+ 	\subsection sec3-5-9 Section 3.5.9: BOP HASCORE() 
+ 
+ \code
+ #define BOP_HASCORE(bnode) ((*(bnode)->ops->hascore)((bnode))) 
+ \endcode
+ \par
+ Execute the bnode type-specific actions required when it must be determined
+ whether or not the attached process currently has a stored core file. It takes
+ a single argument, a pointer to a type-specific bnode structure from which the
+ name of the core file may be constructed. 
+ 
+ 	\section sec3-6 Section 3.6: Functions 
+ 
+ \par
+ This section covers the BOS Server RPC interface routines. They are generated
+ from the bosint.xg Rxgen file. At a high level, these functions may be seen as
+ belonging to seven basic classes: 
+ \li Creating and removing process entries 
+ \li Examining process information 
+ \li Starting, stopping, and restarting processes 
+ \li Security configuration 
+ \li Cell configuration 
+ \li Installing/uninstalling server binaries 
+ \li Executing commands at the server 
+ \par
+ The following is a summary of the interface functions and their purpose,
+ divided according to the above classifications: 
+ 
+ \par Creating & Removing Process Entries
+ 
+ \par Function Name
+ BOZO CreateBnode()
+ \par Description
+ Create a process instance.
+ 
+ \par Function Name
+ BOZO DeleteBnode() 
+ \par Description
+ Delete a process instance.
+ 
+ \par Examining Process Information
+ 
+ \par Function Name
+ BOZO GetStatus()
+ \par Description
+ Get status information for the given process instance.
+ 
+ \par Function Name
+ BOZO EnumerateInstance()
+ \par Description
+ Get instance name from the i'th bnode.
+ 
+ \par Function Name
+ BOZO GetInstanceInfo()
+ \par Description
+ Get information on the given process instance.
+ 
+ \par Function Name
+ BOZO GetInstanceParm()
+ \par Description
+ Get text of command line associated with the given process instance.
+ 
+ \par Function Name
+ BOZO GetRestartTime()
+ \par Description
+ Get one of the BOS Server restart times.
+ 
+ \par Function Name
+ BOZO SetRestartTime()
+ \par Description
+ Set one of the BOS Server restart times.
+ 
+ \par Function Name
+ BOZOGetDates()
+ \par Description
+ Get the modification times for versions of a server binary file.
+ 
+ \par Function Name
+ StartBOZO GetLog()
+ \par Description
+ Pass the IN params when fetching a BOS Server log file.
+ 
+ \par Function Name
+ EndBOZO GetLog()
+ \par Description
+ Get the OUT params when fetching a BOS Server log file.
+ 
+ \par Function Name
+ GetInstanceStrings() 
+ \par Description
+ Get strings related to a given process instance.
+ 
+ \par Starting, Stopping & Restarting Processes
+ 
+ \par Function Name
+ BOZO SetStatus()
+ \par Description
+ Set process instance status and goal.
+ 
+ \par Function Name
+ BOZO SetTStatus()
+ \par Description
+ Start all existing process instances.
+ 
+ \par Function Name
+ BOZO StartupAll()
+ \par Description
+ Start all existing process instances.
+ 
+ \par Function Name
+ BOZO ShutdownAll()
+ \par Description
+ Shut down all process instances.
+ 
+ \par Function Name
+ BOZO RestartAll()
+ \par Description
+ Shut down, the restarted all process instances.
+ 
+ \par Function Name
+ BOZO ReBozo()
+ \par Description
+ Shut down, then restart all process instances and the BOS Server itself.
+ 
+ \par Function Name
+ BOZO Restart()
+ \par Description
+ Restart a given isntance.
+ 
+ \par Function Name
+ BOZO WaitAll()
+ \par Description
+ Wait until all process instances have reached their goals. 
+ 
+ \par Security Configuration
+ 
+ \par Function Name
+ BOZO AddSUser()
+ \par Description
+ Add a user to the UserList.
+ 
+ \par Function Name
+ BOZO DeleteSUser()
+ \par Description
+ Delete a user from the UserList.
+ 
+ \par Function Name
+ BOZO ListSUsers()
+ \par Description
+ Get the name of the user in a given position in the UserList file.
+ 
+ \par Function Name
+ BOZO ListKeys()
+ \par Description
+ List info about the key at a given index in the key file.
+ 
+ \par Function Name
+ BOZO AddKey()
+ \par Description
+ Add a key to the key file.
+ 
+ \par Function Name
+ BOZO DeleteKey()
+ \par Description
+ Delete the entry for an AFS key.
+ 
+ \par Function Name
+ BOZO SetNoAuthFlag() 
+ \par Description
+ Enable or disable authenticated call requirements.
+ 
+ \par Cell Configuration
+ 
+ \par Function Name
+ BOZO GetCellName()
+ \par Description
+ Get the name of the cell to which the BOS Server belongs.
+ 
+ \par Function Name
+ BOZO SetCellName()
+ \par Description
+ Set the name of the cell to which the BOS Server belongs.
+ 
+ \par Function Name
+ BOZO GetCellHost()
+ \par Description
+ Get the name of a database host given its index.
+ 
+ \par Function Name
+ BOZO AddCellHost()
+ \par Description
+ Add an entry to the list of database server hosts.
+ 
+ \par Function Name
+ BOZO DeleteCellHost()
+ \par Description
+ Delete an entry from the list of database server hosts. 
+ 
+ \par Installing/Uninstalling Server Binaries
+ 
+ \par Function Name
+ StartBOZO Install()
+ \par Description
+ Pass the IN params when installing a server binary.
+ 
+ \par Function Name
+ EndBOZO Install()
+ \par Description
+ Get the OUT params when installing a server binary.
+ 
+ \par Function Name
+ BOZO UnInstall()
+ \par Description
+ Roll back from a server binary installation.
+ 
+ \par Function Name
+ BOZO Prune()
+ \par Description
+ Throw away old versions of server binaries and core files.
+ 
+ \par Executing Commands at the Server
+ 
+ \par Function Name
+ BOZO Exec()
+ \par Description
+ Execute a shell command at the server.
+ 
+ \par
+ All of the string parameters in these functions are expected to point to
+ character buffers that are at least BOZO BSSIZE long. 
+ 
+ 	\subsection sec3-6-1 Section 3.6.1: Creating and Removing Processes 
+ 
+ \par
+ The two interface routines defined in this section are used for creating and
+ deleting bnodes, thus determining which processe instances the BOS Server must
+ manage. 
+ 
+ 	\subsubsection sec3-6-1-1 Section 3.6.1.1: BOZO CreateBnode - Create a
+ process instance 
+ 
+ \code
+ int BOZO CreateBnode(IN struct rx connection *z conn, 
+ 			IN char *type, 
+ 			IN char *instance, 
+ 			IN char *p1, 
+ 			IN char *p2, 
+ 			IN char *p3, 
+ 			IN char *p4, 
+ 			IN char *p5, 
+ 			IN char *p6) 
+ \endcode
+ \par Description 
+ This interface function allows the caller to create a bnode (process instance)
+ on the server machine executing the routine. 
+ \par
+ The instance's type is declared to be the string referenced in the type
+ argument. There are three supported instance type names, namely simple, fs, and
+ cron (see Section 2.1 for a detailed examination of the types of bnodes
+ available). 
+ \par
+ The bnode's name is specified via the instance parameter. Any name may be
+ chosen for a BOS Server instance. However, it is advisable to choose a name
+ related to the name of the actual binary being instantiated. There are eight
+ well-known names already in common use, corresponding to the ASF system agents.
+ They are as follows: 
+ \li 	kaserver for the Authentication Server. 
+ \li 	runntp for the Network Time Protocol Daemon (ntpd). 
+ \li 	ptserver for the Protection Server. 
+ \li 	upclient for the client portion of the UpdateServer, which brings over
+ binary files from /usr/afs/bin directory and configuration files from
+ /usr/afs/etc directory on the system control machine. 
+ \li 	upclientbin for the client portion of the UpdateServer, which uses the
+ /usr/afs/bin directory on the binary distribution machine for this platform's
+ CPU/operating system type. 
+ \li 	upclientetc for the client portion of the UpdateServer, which
+ references the /usr/afs/etc directory on the system control machine. 
+ \li 	upserver for the server portion of the UpdateServer. 
+ \li 	vlserver for the Volume Location Server. 
+ \par
+ Up to six command-line strings may be communicated in this routine, residing in
+ arguments p1 through p6. Different types of bnodes allow for different numbers
+ of actual server processes to be started, and the command lines required for
+ such instantiation are passed in this manner. 
+ \par
+ The given bnode's setstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP SETSTAT() macro. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to create new instances. If successfully created, the new BOS
+ Server instance will be appended to the BosConfig file kept on the machine's
+ local disk. The UserList and BosConfig files are examined in detail in Sections
+ 2.3.1 and 2.3.4 respectively. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZEXISTS The given instance already exists. 
+ \n BZBADTYPE Illegal value provided in the type parameter. 
+ \n BZNOCREATE Failed to create desired entry. 
+ 
+ 	\subsubsection sec3-6-1-2 Section 3.6.1.2: BOZO DeleteBnode - Delete a
+ process instance 
+ 
+ \code
+ int BOZO DeleteBnode(IN struct rx connection *z conn, IN char *instance) 
+ \endcode
+ \par Description 
+ This routine deletes the BOS Server bnode whose name is specified by the
+ instance parameter. If an instance with that name does not exist, this
+ operation fails. Similarly, if the process or processes associated with the
+ given bnode have not been shut down (see the descriptions for the BOZO
+ ShutdownAll() and BOZO ShutdownAll() interface functions), the operation also
+ fails. 
+ \par
+ The given bnode's setstat() and delete() routines from its individual ops array
+ will be called in the course of this execution via the BOP SETSTAT() and BOP
+ DELETE() macros. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to delete existing instances. If successfully deleted, the old
+ BOS Server instance will be removed from the BosConfig file kept on the
+ machine's local disk. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZNOENT The given instance name not registered with the BOS Server. 
+ \n BZBUSY The process(es) associated with the given instance are still active
+ (i.e., a shutdown has not yet been performed or has not yet completed). 
+ 
+ 	\subsection sec3-6-2 Section 3.6.2: Examining Process Information 
+ 
+ \par
+ This section describes the ten interface functions that collectively allow
+ callers to obtain and modify the information stored by the BOS Server to
+ describe the set of process that it manages. Among the operations supported by
+ the functions examined here are getting and setting status information,
+ obtaining the instance parameters, times, and dates, and getting the text of
+ log files on the server machine 
+ 
+ 	\subsubsection sec3-6-2-1 Section 3.6.2.1: BOZO GetStatus - Get status
+ information for the given process instance 
+ 
+ \code
+ int BOZO GetStatus(IN struct rx connection *z conn, 
+ 			IN char *instance, 
+ 			OUT long *intStat, 
+ 			OUT char **statdescr) 
+ \endcode
+ \par Description 
+ This interface function looks up the bnode for the given process instance and
+ places its numerical status indicator into intStat and its status string (if
+ any) into a buffer referenced by statdescr. 
+ \par
+ The set of values that may be returned in the intStat argument are defined
+ fully in Section 3.2.3. Briefly, they are BSTAT STARTINGUP, BSTAT NORMAL, BSTAT
+ SHUTTINGDOWN, and BSTAT SHUTDOWN. 
+ \par
+ A buffer holding BOZO BSSIZE (256) characters is allocated, and statdescr is
+ set to point to it. Not all bnodes types implement status strings, which are
+ used to provide additional status information for the class. An example of one
+ bnode type that does define these strings is fs, which exports the following
+ status strings: 
+ \li  "file server running" 
+ \li  "file server up; volser down" 
+ \li  "salvaging file system" 
+ \li  "starting file server" 
+ \li  "file server shutting down" 
+ \li  "salvager shutting down" 
+ \li  "file server shut down" 
+ \par
+ The given bnode's getstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP GETSTAT() macro. 
+ \par Error Codes 
+ BZNOENT The given process instance is not registered with the BOS Server. 
+ 
+ 	\subsubsection sec3-6-2-2 Section 3.6.2.2: BOZO EnumerateInstance - Get
+ instance name from i'th bnode 
+ 
+ \code
+ int BOZO EnumerateInstance(IN struct rx connection *z conn, 
+ 				IN long instance, 
+ 				OUT char **iname); 
+ \endcode
+ \par Description 
+ This routine will find the bnode describing process instance number instance
+ and return that instance's name in the buffer to which the iname parameter
+ points. This function is meant to be used to enumerate all process instances at
+ a BOS Server. The first legal instance number value is zero, which will return
+ the instance name from the first registered bnode. Successive values for
+ instance will return information from successive bnodes. When all bnodes have
+ been thus enumerated, the BOZO EnumerateInstance() function will return BZDOM,
+ indicating that the list of bnodes has been exhausted. 
+ \par Error Codes 
+ BZDOM The instance number indicated in the instance parameter does not exist. 
+ 
+ 	\subsubsection sec3-6-2-3 Section 3.6.2.3: BOZO GetInstanceInfo - Get
+ information on the given process instance 
+ 
+ \code
+ int BOZO GetInstanceInfo(IN struct rx connection *z conn, 
+ 				IN char *instance, 
+ 				OUT char **type, 
+ 				OUT struct bozo status *status) 
+ \endcode
+ \par Description 
+ Given the string name of a BOS Server instance, this interface function returns
+ the type of the instance and its associated status descriptor. The set of
+ values that may be placed into the type parameter are simple, fs, and cron (see
+ Section 2.1 for a detailed examination of the types of bnodes available). The
+ status structure filled in by the call includes such information as the goal
+ and file goals, the process start time, the number of times the process has
+ started, exit information, and whether or not the process has a core file. 
+ \par Error Codes 
+ BZNOENT The given process instance is not registered with the BOS Server. 
+ 
+ 	\subsubsection sec3-6-2-4 Section 3.6.2.4: BOZO GetInstanceParm - Get
+ text of command line associated with the given process instance 
+ 
+ \code
+ int BOZO GetInstanceParm(IN struct rx connection *z conn, 
+ 				IN char *instance, 
+ 				IN long num, 
+ 				OUT char **parm) 
+ \endcode
+ \par Description 
+ Given the string name of a BOS Server process instance and an index identifying
+ the associated command line of interest, this routine returns the text of the
+ desired command line. The first associated command line text for the instance
+ may be acquired by setting the index parameter, num, to zero. If an index is
+ specified for which there is no matching command line stored in the bnode, then
+ the function returns BZDOM. 
+ \par Error Codes 
+ BZNOENT The given process instance is not registered with the BOS Server. 
+ \n BZDOM There is no command line text associated with index num for this
+ bnode. 
+ 
+ 	\subsubsection sec3-6-2-5 Section 3.6.2.5: BOZO GetRestartTime - Get
+ one of the BOS Server restart times 
+ 
+ \code
+ int BOZO GetRestartTime(IN struct rx connection *z conn, 
+ 			IN long type, 
+ 			OUT struct bozo netKTime *restartTime) 
+ \endcode
+ \par Description 
+ The BOS Server maintains two different restart times, for itself and all server
+ processes it manages, as described in Section 2.4. Given which one of the two
+ types of restart time is desired, this routine fetches the information from the
+ BOS Server. The type argument is used to specify the exact restart time to
+ fetch. If type is set to one (1), then the general restart time for all agents
+ on the machine is fetched. If type is set to two (2), then the new-binary
+ restart time is returned. A value other than these two for the type parameter
+ results in a return value of BZDOM. 
+ \par Error Codes 
+ BZDOM All illegal value was passed in via the type parameter. 
+ 
+ 	\subsubsection sec3-6-2-6 Section 3.6.2.6: BOZO SetRestartTime - Set
+ one of the BOS Server restart times 
+ 
+ \code
+ int BOZO SetRestartTime(IN struct rx connection *z conn, 
+ 			IN long type, 
+ 			IN struct bozo netKTime *restartTime) 
+ \endcode
+ \par Description 
+ This function is the inverse of the BOZO GetRestartTime() interface routine
+ described in Section 3.6.2.5 above. Given the type of restart time and its new
+ value, this routine will set the desired restart time at the BOS Server
+ receiving this call. The values for the type parameter are identical to those
+ used by BOZO GetRestartTime(), namely one (1) for the general restart time and
+ two (2) for the new-binary restart time. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to set its restart times. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZDOM All illegal value was passed in via the type parameter. 
+ 
+ 	\subsubsection sec3-6-2-7 Section 3.6.2.7: BOZO GetDates - Get the
+ modification times for versions of a server binary file 
+ 
+ \code
+ int BOZO GetDates(IN struct rx connection *z conn, 
+ 			IN char *path, 
+ 			OUT long *newtime, 
+ 			OUT long *baktime, 
+ 			OUT long *oldtime) 
+ \endcode
+ \par Description 
+ Given a fully-qualified pathname identifying the particular server binary to
+ examine in the path argument, this interface routine returns the modification
+ time of that file, along with the modification times for the intermediate
+ (.BAK) and old (.OLD) versions. The above-mentioned times are deposited into
+ the newtime, baktime and oldtime arguments. Any one or all of the reported
+ times may be set to zero, indicating that the associated file does not exist. 
+ \par Error Codes 
+ ---None. 
+ 
+ 	\subsubsection sec3-6-2-8 Section 3.6.2.8: StartBOZO GetLog - Pass the
+ IN params when fetching a BOS Server log file 
+ 
+ \code
+ int BOZO StartGetLog(IN struct rx connection *z conn, IN char *name) 
+ \endcode
+ \par Description 
+ The BOZO GetLog() function defined in the BOS Server Rxgen interface file is
+ used to acquire the contents of the given log file from the machine processing
+ the call. It is defined to be a streamed function, namely one that can return
+ an arbitrary amount of data. For full details on the definition and use of
+ streamed functions, please refer to the Streamed Function Calls section in [4]. 
+ \par
+ This function is created by Rxgen in response to the BOZO GetLog() interface
+ definition in the bosint.xg file. The StartBOZO GetLog() routine handles
+ passing the IN parameters of the streamed call to the BOS Server. Specifically,
+ the name parameter is used to convey the string name of the desired log file.
+ For the purposes of opening the specified files at the machine being contacted,
+ the current working directory for the BOS Server is considered to be
+ /usr/afs/logs. If the caller is included in the locally-maintained UserList
+ file, any pathname may be specified in the name parameter, and the contents of
+ the given file will be fetched. All other callers must provide a string that
+ does not include the slash character, as it might be used to construct an
+ unauthorized request for a file outside the /usr/afs/logs directory. 
+ \par Error Codes 
+ RXGEN CC MARSHAL The transmission of the GetLog() IN parameters failed. This
+ and all rxgen constant definitions are available from the rxgen consts.h
+ include file. 
+ 
+ 	\subsubsection sec3-6-2-9 Section 3.6.2.9: EndBOZO GetLog - Get the OUT
+ params when fetching a BOS Server log file 
+ 
+ \code
+ int BOZO EndGetLog(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This function is created by Rxgen in response to the BOZO GetLog() interface
+ definition in the bosint.xg file. The EndBOZO GetLog() routine handles the
+ recovery of the OUT parameters for this interface call (of which there are
+ none). The utility of such functions is often the value they return. In this
+ case, however, EndBOZO GetLog() always returns success. Thus, it is not even
+ necessary to invoke this particular function, as it is basically a no-op. 
+ \par Error Codes 
+ ---Always returns successfully. 
+ 
+ 	\subsubsection sec3-6-2-10 Section 3.6.2.10: BOZO GetInstanceStrings -
+ Get strings related to a given process instance 
+ 
+ \code
+ int BOZO GetInstanceStrings(IN struct rx connection *z conn, 
+ IN char *instance, 
+ OUT char **errorName, 
+ OUT char **spare1, 
+ OUT char **spare2, 
+ OUT char **spare3) 
+ \endcode
+ \par Description 
+ This interface function takes the string name of a BOS Server instance and
+ returns a set of strings associated with it. At the current time, there is only
+ one string of interest returned by this routine. Specifically, the errorName
+ parameter is set to the error string associated with the bnode, if any. The
+ other arguments, spare1 through spare3, are set to the null string. Note that
+ memory is allocated for all of the OUT parameters, so the caller should be
+ careful to free them once it is done. 
+ \par Error Codes 
+ BZNOENT The given process instance is not registered with the BOS Server. 
+ 
+ 	\subsection sec3-6-3 Section 3.6.3: Starting, Stopping, and Restarting
+ Processes 
+ 
+ \par
+ The eight interface functions described in this section allow BOS Server
+ clients to manipulate the execution of the process instances the BOS Server
+ controls. 
+ 
+ 	\subsubsection sec3-6-3-1 Section 3.6.3.1: BOZO SetStatus - Set process
+ instance status and goal 
+ 
+ \code
+ int BOZO SetStatus(IN struct rx connection *z conn, 
+ 			IN char *instance, 
+ 			IN long status) 
+ \endcode
+ \par Description 
+ This routine sets the actual status field, as well as the "file goal", of the
+ given instance to the value supplied in the status parameter. Legal values for
+ status are taken from the set described in Section 3.2.3, specifically BSTAT
+ NORMAL and BSTAT SHUTDOWN. For more information about these constants (and
+ about goals/file goals), please refer to Section 3.2.3. 
+ \par
+ The given bnode's setstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP SETSTAT() macro. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to perform this operation. If successfully modified, the BOS
+ Server bnode defining the given instance will be written out to the BosConfig
+ file kept on the machine's local disk. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZNOENT The given instance name not registered with the BOS Server. 
+ 
+ 	\subsubsection sec3-6-3-2 Section 3.6.3.2: BOZO SetTStatus -
+ Temporarily set process instance status and goal 
+ 
+ \code
+ int BOZO SetTStatus(IN struct rx connection *z conn, 
+ 			IN char *instance, 
+ 			IN long status) 
+ \endcode
+ \par Description 
+ This interface routine is much like the BOZO SetStatus(), defined in Section
+ 3.6.3.1 above, except that its effect is to set the instance status on a
+ temporary basis. Specifically, the status field is set to the given status
+ value, but the "file goal" field is not changed. Thus, the instance's stated
+ goal has not changed, just its current status. 
+ \par
+ The given bnode's setstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP SETSTAT() macro. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to perform this operation. If successfully modified, the BOS
+ Server bnode defining the given instance will be written out to the BosConfig
+ file kept on the machine's local disk. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZNOENT The given instance name not registered with the BOS Server. 
+ 
+ 	\subsubsection sec3-6-3-3 Section 3.6.3.3: BOZO StartupAll - Start all
+ existing process instances 
+ 
+ \code
+ int BOZO StartupAll(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This interface function examines all bnodes and attempts to restart all of
+ those that have not been explicitly been marked with the BSTAT SHUTDOWN file
+ goal. Specifically, BOP SETSTAT() is invoked, causing the setstat() routine
+ from each bnode's ops array to be called. The bnode's flags field is left with
+ the BNODE ERRORSTOP bit turned off after this call. 
+ \par
+ The given bnode's setstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP SETSTAT() macro. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to start up bnode process instances. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsubsection sec3-6-3-4 Section 3.6.3.4: BOZO ShutdownAll - Shut down
+ all process instances 
+ 
+ \code
+ int BOZO ShutdownAll(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This interface function iterates through all bnodes and attempts to shut them
+ all down. Specifically, the BOP SETSTAT() is invoked, causing the setstat()
+ routine from each bnode's ops array to be called, setting that bnode's goal
+ field to BSTAT SHUTDOWN. 
+ \par 
+ The given bnode's setstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP SETSTAT() macro. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to perform this operation. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsubsection sec3-6-3-5 Section 3.6.3.5: BOZO RestartAll - Shut down,
+ then restart all process instances 
+ 
+ \code
+ int BOZO RestartAll(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This interface function shuts down every BOS Server process instance, waits
+ until the shutdown is complete (i.e., all instances are registered as being in
+ state BSTAT SHUTDOWN), and then starts them all up again. While all the
+ processes known to the BOS Server are thus restarted, the invocation of the BOS
+ Server itself does not share this fate. For simulation of a truly complete
+ machine restart, as is necessary when an far-reaching change to a database file
+ has been made, use the BOZO ReBozo() interface routine defined in Section
+ 3.6.3.6 below. 
+ \par
+ The given bnode's getstat() and setstat() routines from its individual ops
+ array will be called in the course of this execution via the BOP GETSTAT() and
+ BOP SETSTAT() macros. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to restart bnode process instances. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsubsection sec3-6-3-6 Section 3.6.3.6: BOZO ReBozo - Shut down,
+ then restart all process instances and the BOS Server itself 
+ 
+ \code
+ int BOZO ReBozo(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This interface routine is identical to the BOZO RestartAll() call, defined in
+ Section 3.6.3.5 above, except for the fact that the BOS Server itself is
+ restarted in addition to all the known bnodes. All of the BOS Server's open
+ file descriptors are closed, and the standard BOS Server binary image is
+ started via execve(). 
+ \par
+ The given bnode's getstat() and setstat() routines from its individual ops
+ array will be called in the course of this execution via the BOP GETSTAT() and
+ BOP SETSTAT() macros. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to restart bnode process instances. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsubsection sec3-6-3-7 Section 3.6.3.7: BOZO Restart - Restart a
+ given process instance 
+ 
+ \code
+ int BOZO Restart(IN struct rx connection *z conn, IN char *instance) 
+ \endcode
+ \par Description 
+ This interface function is used to shut down and then restart the process
+ instance identified by the instance string passed as an argument. 
+ \par
+ The given bnode's getstat() and setstat() routines from its individual ops
+ array will be called in the course of this execution via the BOP GETSTAT() and
+ BOP SETSTAT() macros. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to restart bnode process instances. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZNOENT The given instance name not registered with the BOS Server. 
+ 
+ 	\subsubsection sec3-6-3-8 Section 3.6.3.8: BOZO WaitAll - Wait until
+ all process instances have reached their goals 
+ 
+ \code
+ int BOZO WaitAll(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This interface function is used to synchronize with the status of the bnodes
+ managed by the BOS Server. Specifically, the BOZO WaitAll() call returns when
+ each bnode's current status matches the value in its short-term goal field. For
+ each bnode it manages, the BOS Server thread handling this call invokes the BOP
+ GETSTAT() macro, waiting until the bnode's status and goals line up. 
+ \par
+ Typically, the BOZO WaitAll() routine is used to allow a program to wait until
+ all bnodes have terminated their execution (i.e., all goal fields have been set
+ to BSTAT SHUTDOWN and all corresponding processes have been killed). Note,
+ however, that this routine may also be used to wait until all bnodes start up.
+ The true utility of this application of BOZO WaitAll() is more questionable,
+ since it will return when all bnodes have simply commenced execution, which
+ does not imply that they have completed their initialization phases and are
+ thus rendering their normal services. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to wait on bnodes through this interface function. 
+ \par
+ The given bnode's getstat() routine from its individual ops array will be
+ called in the course of this execution via the BOP GETSTAT() macro. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsection sec3-6-4 Section 3.6.4: Security Configuration 
+ 
+ \par
+ This section describes the seven BOS Server interface functions that allow a
+ properly-authorized person to examine and modify certain data relating to
+ system security. Specifically, it allows for manipulation of the list of
+ adminstratively 'privileged' individuals, the set of Kerberos keys used for
+ file service, and whether authenticated connections should be required by the
+ BOS Server and all other AFS server agents running on the machine. 
+ 
+ 	\subsubsection sec3-6-4-1 Section 3.6.4.1: BOZO AddSUser - Add a user
+ to the UserList 
+ 
+ \code
+ int BOZO AddSUser(IN struct rx connection *z conn, IN char *name); 
+ \endcode
+ \par Description 
+ This interface function is used to add the given user name to the UserList file
+ of priviledged BOS Server principals. Only individuals already appearing in the
+ UserList are permitted to add new entries. If the given user name already
+ appears in the file, the function fails. Otherwise, the file is opened in
+ append mode and the name is written at the end with a trailing newline. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n EEXIST The individual specified by name is already on the UserList. 
+ \n EIO If the UserList file could not be opened or closed. 
+ 
+ 	\subsubsection sec3-6-4-2 Section 3.6.4.2: BOZO DeleteSUser - Delete a
+ user from the UserList 
+ 
+ \code
+ int BOZO DeleteSUser(IN struct rx connection *z conn, IN char *name) 
+ \endcode
+ \par Description 
+ This interface function is used to delete the given user name from the UserList
+ file of priviledged BOS Server principals. Only individuals already appearing
+ in the UserList are permitted to delete existing entries. The file is opened in
+ read mode, and a new file named UserList.NXX is created in the same directory
+ and opened in write mode. The original UserList is scanned, with each entry
+ copied to the new file if it doesn't match the given name. After the scan is
+ done, all files are closed, and the UserList.NXX file is renamed to UserList,
+ overwriting the original. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n -1 The UserList file could not be opened. 
+ \n EIO The UserList.NXX file could not be opened, or an error occured in the
+ file close operations. 
+ \n ENOENT The given name was not found in the original UserList file. 
+ 
+ 	\subsubsection sec3-6-4-3 Section 3.6.4.3: BOZO ListSUsers - Get the
+ name of the user in the given position in the UserList file 
+ 
+ \code
+ int BOZO ListSUsers(IN struct rx connection *z conn, 
+ 			IN long an, 
+ 			OUT char **name) 
+ \endcode
+ \par Description 
+ This interface function is used to request the name of priviledged user in the
+ an'th slot in the BOS Server's UserList file. The string placed into the name
+ parameter may be up to 256 characters long, including the trailing null. 
+ \par Error Codes 
+ The UserList file could not be opened, or an invalid value was specified for
+ an. 
+ 
+ 	\subsubsection sec3-6-4-4 Section 3.6.4.4: BOZO ListKeys - List info
+ about the key at a given index in the key file 
+ 
+ \code
+ int BOZO ListKeys(IN struct rx connection *z conn, 
+ 			IN long an, 
+ 			OUT long *kvno, 
+ 			OUT struct bozo key *key, 
+ 			OUT struct bozo keyInfo *keyinfo) 
+ \endcode
+ \par Description 
+ This interface function allows its callers to specify the index of the desired
+ AFS encryption key, and to fetch information regarding that key. If the caller
+ is properly authorized, the version number of the specified key is placed into
+ the kvno parameter. Similarly, a description of the given key is placed into
+ the keyinfo parameter. When the BOS Server is running in noauth mode, the key
+ itself will be copied into the key argument, otherwise the key structure will
+ be zeroed. The data placed into the keyinfo argument, declared as a struct bozo
+ keyInfo as defined in Section 3.3.3, is obtained as follows. The mod sec field
+ is taken from the value of st mtime after stat()ing /usr/afs/etc/KeyFile, and
+ the mod usec field is zeroed. The keyCheckSum is computed by an Authentication
+ Server routine, which calculates a 32-bit cryptographic checksum of the key,
+ encrypting a block of zeros and then using the first 4 bytes as the checksum. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to obtain information regarding the list of AFS keys held by the
+ given BOS Server. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n BZDOM An invalid index was found in the an parameter. 
+ \n KABADKEY Defined in the exported kautils.h header file corresponding to the
+ Authentication Server, this return value indicates a problem with generating
+ the checksum field of the keyinfo parameter. 
+ 
+ 	\subsubsection sec3-6-4-5 Section 3.6.4.5: BOZO AddKey - Add a key to
+ the key file 
+ 
+ \code
+ int BOZO AddKey(IN struct rx connection *z conn, 
+ 		IN long an, 
+ 		IN struct bozo key *key) 
+ \endcode
+ \par Description 
+ This interface function allows a properly-authorized caller to set the value of
+ key version number an to the given AFS key. If a slot is found in the key file
+ /usr/afs/etc/KeyFile marked as key version number an, its value is overwritten
+ with the key provided. If an entry for the desired key version number does not
+ exist, the key file is grown, and the new entry filled with the specified
+ information. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to add new entries into the list of AFS keys held by the BOS
+ Server. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n AFSCONF FULL The system key file already contains the maximum number of keys
+ (AFSCONF MAXKEYS, or 8). These two constant defintions are available from the
+ cellconfig.h and keys.h AFS include files respectively. 
+ 
+ 	\subsubsection sec3-6-4-6 Section 3.6.4.6: BOZO DeleteKey - Delete the
+ entry for an AFS key 
+ 
+ \code
+ int BOZO DeleteKey(IN struct rx connection *z conn, 
+ 			IN long an) 
+ \endcode
+ \par Description 
+ This interface function allows a properly-authorized caller to delete key
+ version number an from the key file, /usr/afs/etc/KeyFile. The existing keys
+ are scanned, and if one with key version number an is found, it is removed. Any
+ keys occurring after the deleted one are shifted to remove the file entry
+ entirely. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to delete entries from the list of AFS keys held by the BOS
+ Server. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n AFSCONF NOTFOUND An entry for key version number an was not found. This
+ constant defintion is available from the cellconfig.h AFS include file. 
+ 
+ 	\subsubsection sec3-6-4-7 Section 3.6.4.7: BOZO SetNoAuthFlag - Enable
+ or disable requirement for authenticated calls 
+ 
+ \code
+ int BOZO SetNoAuthFlag(IN struct rx connection *z conn, 
+ 			IN long flag) 
+ \endcode
+ \par Description 
+ This interface routine controls the level of authentication imposed on the BOS
+ Server and all other AFS server agents on the machine by manipulating the
+ NoAuth file in the /usr/afs/local directory on the server. If the flag
+ parameter is set to zero (0), the NoAuth file will be removed, instructing the
+ BOS Server and AFS agents to authenenticate the RPCs they receive. Otherwise,
+ the file is created as an indication to honor all RPC calls to the BOS Server
+ and AFS agents, regardless of the credentials carried by callers. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsection sec3-6-5 Section 3.6.5: Cell Configuration 
+ 
+ \par
+ The five interface functions covered in this section all have to do with
+ manipulating the configuration information of the machine on which the BOS
+ Server runs. In particular, one may get and set the cell name for that server
+ machine, enumerate the list of server machines running database servers for the
+ cell, and add and delete machines from this list. 
+ 
+ 	\subsubsection sec3-6-5-1 Section 3.6.5.1: BOZO GetCellName - Get the
+ name of the cell to which the BOS Server belongs 
+ 
+ \code
+ int BOZO GetCellName(IN struct rx connection *z conn, OUT char **name) 
+ \endcode
+ \par Description 
+ This interface routine returns the name of the cell to which the given BOS
+ Server belongs. The BOS Server consults a file on its local disk,
+ /usr/afs/etc/ThisCell to obtain this information. If this file does not exist,
+ then the BOS Server will return a null string. 
+ \par Error Codes 
+ AFSCONF UNKNOWN The BOS Server could not access the cell name file. This
+ constant defintion is available from the cellconfig.h AFS include file. 
+ 
+ 	\subsubsection sec3-6-5-2 Section 3.6.5.2: BOZO SetCellName - Set the
+ name of the cell to which the BOS Server belongs 
+ 
+ \code
+ int BOZO SetCellName(IN struct rx connection *z conn, IN char *name) 
+ \endcode
+ \par Description 
+ This interface function allows the caller to set the name of the cell to which
+ the given BOS Server belongs. The BOS Server writes this information to a file
+ on its local disk, /usr/afs/etc/ThisCell. The current contents of this file are
+ first obtained, along with other information about the current cell. If this
+ operation fails, then BOZO SetCellName() also fails. The string name provided
+ as an argument is then stored in ThisCell. 
+ \par 
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to set the name of the cell to which the machine executing the
+ given BOS Server belongs. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n AFSCONF NOTFOUND Information about the current cell could not be obtained.
+ This constant definition, along with AFSCONF FAILURE appearing below, is
+ availabel from the cellconfig.h AFS include file. 
+ \n AFSCONF FAILURE New cell name could not be written to file. 
+ 
+ 	\subsubsection sec3-6-5-3 Section 3.6.5.3: BOZO GetCellHost - Get the
+ name of a database host given its index 
+ 
+ \code
+ int BOZO GetCellHost(IN struct rx connection *z conn, 
+ 			IN long awhich, 
+ 			OUT char **name) 
+ \endcode
+ \par Description 
+ This interface routine allows the caller to get the name of the host appearing
+ in position awhich in the list of hosts acting as database servers for the BOS
+ Server's cell. The first valid position in the list is index zero. The host's
+ name is deposited in the character buffer pointed to by name. If the value of
+ the index provided in awhich is out of range, the function fails and a null
+ string is placed in name. 
+ \par Error Codes 
+ BZDOM The host index in awhich is out of range. 
+ \n AFSCONF NOTFOUND Information about the current cell could not be obtained.
+ This constant defintion may be found in the cellconfig.h AFS include file. 
+ 
+ 	\subsubsection sec3-6-5-4 Section 3.6.5.4: BOZO AddCellHost - Add an
+ entry to the list of database server hosts 
+ 
+ \code
+ int BOZO AddCellHost(IN struct rx connection *z conn, IN char *name) 
+ \endcode
+ \par Description 
+ This interface function allows properly-authorized callers to add a name to the
+ list of hosts running AFS database server processes for the BOS Server's home
+ cell. If the given name does not already appear in the database server list, a
+ new entry will be created. Regardless, the mapping from the given name to its
+ IP address will be recomputed, and the cell database file,
+ /usr/afs/etc/CellServDB will be updated. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to add an entry to the list of host names providing database
+ services for the BOS Server's home cell. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n AFSCONF NOTFOUND Information about the current cell could not be obtained.
+ This constant defintion may be found in the cellconfig.h AFS include file. 
+ 
+ 	\subsubsection sec3-6-5-5 Section 3.6.5.5: BOZO DeleteCellHost - Delete
+ an entry from the list of database server hosts 
+ 
+ \code
+ int BOZO DeleteCellHost(IN struct rx connection *z conn, IN char *name) 
+ \endcode
+ \par Description 
+ This interface routine allows properly-authorized callers to remove a given
+ name from the list of hosts running AFS database server processes for the BOS
+ Server's home cell. If the given name does not appear in the database server
+ list, this function will fail. Otherwise, the matching entry will be removed,
+ and the cell database file, /usr/afs/etc/CellServDB will be updated. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to delete an entry from the list of host names providing database
+ services for the BOS Server's home cell. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n AFSCONF NOTFOUND Information about the current cell could not be obtained.
+ This constant defintion may be found in the cellconfig.h AFS include file. 
+ 
+ 	\subsection sec3-6-6 Section 3.6.6: Installing/Uninstalling Server
+ Binaries 
+ 
+ \par
+ There are four BOS Server interface routines that allow administrators to
+ install new server binaries and to roll back to older, perhaps more reliable,
+ executables. They also allow for stored images of the old binaries (as well as
+ core files) to be 'pruned', or selectively deleted. 
+ 
+ 3.6.6.1 StartBOZO Install - Pass the IN params when installing a server binary 
+ 
+ \code
+ int StartBOZO Install(IN struct rx connection *z conn, 
+ 			IN char *path, 
+ 			IN long size, 
+ 			IN long flags, 
+ 			IN long date) 
+ \endcode
+ \par Description 
+ The BOZO Install() function defined in the BOS Server Rxgen interface file is
+ used to deliver the executable image of an AFS server process to the given
+ server machine and then installing it in the appropriate directory there. It is
+ defined to be a streamed function, namely one that can deliver an arbitrary
+ amount of data. For full details on the definition and use of streamed
+ functions, please refer to the Streamed Function Calls section in [4]. 
+ \par
+ This function is created by Rxgen in response to the BOZO Install() interface
+ definition in the bosint.xg file. The StartBOZO Install() routine handles
+ passing the IN parameters of the streamed call to the BOS Server. Specifically,
+ the apath argument specifies the name of the server binary to be installed
+ (including the full pathname prefix, if necessary). Also, the length of the
+ binary is communicated via the size argument, and the modification time the
+ caller wants the given file to carry is placed in date. The flags argument is
+ currently ignored by the BOS Server. 
+ \par
+ After the above parameters are delivered with StartBOZO Install(), the BOS
+ Server creates a file with the name given in the path parameter followed by a
+ .NEW postfix. The size bytes comprising the text of the executable in question
+ are then read over the RPC channel and stuffed into this new file. When the
+ transfer is complete, the file is closed. The existing versions of the server
+ binary are then 'demoted'; the *.BAK version (if it exists) is renamed to
+ *.OLD. overwriting the existing *.OLD version if and only if an *.OLD version
+ does not exist, or if a *.OLD exists and the .BAK file is at least seven days
+ old. The main binary is then renamed to *.BAK. Finally, the *.NEW file is
+ renamed to be the new standard binary image to run, and its modification time
+ is set to date. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to install server software onto the machine on which the BOS
+ Server runs. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ \n 100 An error was encountered when writing the binary image to the local disk
+ file. The truncated file was closed and deleted on the BOS Server. 
+ \n 101 More than size bytes were delivered to the BOS Server in the RPC
+ transfer of the executable image. 
+ \n 102 Fewer than size bytes were delivered to the BOS Server in the RPC
+ transfer of the executable image. 
+ 
+ 	\subsubsection sec3-6-6-2 Section 3.6.6.2: EndBOZO Install - Get the
+ OUT params when installing a server binary 
+ 
+ \code
+ int EndBOZO Install(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This function is created by Rxgen in response to the BOZO Install() interface
+ definition in the bosint.xg file. The EndBOZO Install() routine handles the
+ recovery of the OUT parameters for this interface call, of which there are
+ none. The utility of such functions is often the value they return. In this
+ case, however, EndBOZO Install() always returns success. Thus, it is not even
+ necessary to invoke this particular function, as it is basically a no-op. 
+ \par Error Codes 
+ ---Always returns successfully. 
+ 
+ 	\subsubsection sec3-6-6-3 Section 3.6.6.3: BOZO UnInstall - Roll back
+ from a server binary installation 
+ 
+ \code
+ int BOZO UnInstall(IN struct rx connection *z conn, IN char *path) 
+ \endcode
+ \par Description 
+ This interface function allows a properly-authorized caller to "roll back" from
+ the installation of a server binary. If the *.BAK version of the server named
+ path exists, it will be renamed to be the main executable file. In this case,
+ the *.OLD version, if it exists, will be renamed to *.BAK.If a *.BAK version of
+ the binary in question is not found, the *.OLD version is renamed as the new
+ standard binary file. If neither a *.BAK or a *.OLD version of the executable
+ can be found, the function fails, returning the low-level unix error generated
+ at the server. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to roll back server software on the machine on which the BOS
+ Server runs. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsubsection sec3-6-6-4 Section 3.6.6.4: BOZO Prune - Throw away old
+ versions of server binaries and core files 
+ 
+ \code
+ int BOZO Prune(IN struct rx connection *z conn, IN long flags) 
+ \endcode
+ \par Description 
+ This interface routine allows a properly-authorized caller to prune the saved
+ versions of server binaries resident on the machine on which the BOS Server
+ runs. The /usr/afs/bin directory on the server machine is scanned in directory
+ order. If the BOZO PRUNEOLD bit is set in the flags argument, every file with
+ the *.OLD extension is deleted. If the BOZO PRUNEBAK bit is set in the flags
+ argument, every file with the *.BAK extension is deleted. Next, the
+ /usr/afs/logs directory is scanned in directory order. If the BOZO PRUNECORE
+ bit is set in the flags argument, every file with a name beginning with the
+ prefix core is deleted. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to prune server software binary versions and core files on the
+ machine on which the BOS Server runs. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\subsection sec3-6-7 Section 3.6.7: Executing Commands at the Server 
+ 
+ \par
+ There is a single interface function defined by the BOS Server that allows
+ execution of arbitrary programs or scripts on any server machine on which a BOS
+ Server process is active. 
+ 
+ 3.6.7.1 BOZO Exec - Execute a shell command at the server 
+ 
+ \code
+ int BOZO Exec(IN struct rx connection *z conn, IN char *cmd) 
+ \endcode
+ \par Description 
+ This interface routine allows a properly-authorized caller to execute any
+ desired shell command on the server on which the given BOS Server runs. There
+ is currently no provision made to pipe the output of the given command's
+ execution back to the caller through the RPC channel. 
+ \par
+ The BOS Server will only allow individuals listed in its locally-maintained
+ UserList file to execute arbitrary shell commands on the server machine on
+ which the BOS Server runs via this call. 
+ \par Error Codes 
+ BZACCESS The caller is not authorized to perform this operation. 
+ 
+ 	\page biblio Bibliography 
+ 
+ \li [1] CMU Information Technology Center. 	Synchronization and Caching
+ Issues in the Andrew File System, USENIX Proceedings, Dallas, TX, Winter 1988. 
+ \li [2] Transarc Corporation. AFS 3.0 Command Reference Manual, F-30-0-D103,
+ Pittsburgh, PA, April 1990. 
+ \li [3] Zayas, Edward R., Transarc Corporation. 	AFS-3 Programmer's
+ Reference: Specification for the Rx Remote Procedure Call Facility, FS-00-D164,
+ Pittsburgh, PA, April 1991. 
+ \li [4] Zayas, 	Edward R., Transarc Corporation. AFS-3 Programmer's Reference:
+ File Server/Cache Manager Interface, FS-00-D162, Pittsburgh, PA, April 1991. 
+ \li [5] Transarc Corporation. AFS 3.0 System Administrator's Guide,
+ F-30-0-D102, Pittsburgh, PA, April 1990. 
+ \li [6] Kazar, Michael L., Information Technology Center, Carnegie Mellon
+ University. Ubik -A Library For Managing Ubiquitous Data, ITCID, Pittsburgh,
+ PA, Month, 1988. 
+ \li [7] Kazar, Michael L., Information Technology Center, Carnegie Mellon
+ University. Quorum Completion, ITCID, Pittsburgh, PA, Month, 1988. 
+ \li [8] S. R. Kleinman. 	Vnodes: An Architecture for Multiple file
+ System Types in Sun UNIX, Conference Proceedings, 1986 Summer Usenix Technical
+ Conference, pp. 238-247, El Toro, CA, 1986. 
+ 
+ */
+ 
Index: openafs/doc/protocol/fs-cm-spec.h
diff -c /dev/null openafs/doc/protocol/fs-cm-spec.h:1.1.2.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/protocol/fs-cm-spec.h	Sun May 31 12:59:32 2009
***************
*** 0 ****
--- 1,3981 ----
+ /*! 
+ 
+ 	\page title AFS-3 Programmer's Reference: File Server/Cache Manager
+ Interface 
+ 
+ \author Edward R. Zayas 
+ Transarc Corporation 
+ \version 1.1
+ \date 20 Aug 1991 9:38 Copyright 1991 Transarc Corporation All Rights Reserved
+ FS-00-D162 
+ 
+ 	\page chap1 Chapter 1: Overview 
+ 
+ 	\section sec1-1 Section 1.1: Introduction 
+ 
+ 	\subsection sec1-1-1 Section 1.1.1: The AFS 3.1 Distributed File System 
+ 
+ \par
+ AFS 3.1 is a distributed file system (DFS) designed to meet the following set
+ of requirements: 
+ \li Server-client model: Permanent file storage for AFS is maintained by a
+ collection of file server machines. This centralized storage is accessed by
+ individuals running on client machines, which also serve as the computational
+ engines for those users. A single machine may act as both an AFS file server
+ and client simultaneously. However, file server machines are generally assumed
+ to be housed in a secure environment, behind locked doors. 
+ \li Scale: Unlike other existing DFSs, AFS was designed with the specific goal
+ of supporting a very large user community. Unlike the rule-of-thumb ratio of 20
+ client machines for every server machine (20:1) used by Sun Microsystem's NFS
+ distributed file system [4][5], the AFS architecture aims at smoothly
+ supporting client/server ratios more along the lines of 200:1 within a single
+ installation. 
+ \par
+ AFS also provides another, higher-level notion of scalability. Not only can
+ each independently-administered AFS site, or cell, grow very large (on the
+ order of tens of thousands of client machines), but individual cells may easily
+ collaborate to form a single, unified file space composed of the union of the
+ individual name spaces. Thus, users have the image of a single unix file system
+ tree rooted at the /afs directory on their machine. Access to files in this
+ tree is performed with the standard unix commands, editors, and tools,
+ regardless of a file's location. 
+ \par
+ These cells and the files they export may be geographically dispersed, thus
+ requiring client machines to access remote file servers across network pathways
+ varying widely in speed, latency, and reliability. The AFS architecture
+ encourages this concept of a single, wide-area file system. As of this writing,
+ the community AFS filespace includes sites spanning the continental United
+ States and Hawaii, and also reaches overseas to various installations in
+ Europe, Japan, and Australia. 
+ \li Performance: This is a critical consideration given the scalability and
+ connectivity requirements described above. A high-performance system in the
+ face of high client/server ratios and the existence of low-bandwidth,
+ high-latency network connections as well as the normal high-speed ones is
+ achieved by two major mechanisms: 
+ \li Caching: Client machines make extensive use of caching techniques wherever
+ possible. One important application of this methodology is that each client is
+ required to maintain a cache of files it has accessed from AFS file servers,
+ performing its operations exclusively on these local copies. This file cache is
+ organized in a least-recently-used (LRU) fashion. Thus, each machine will build
+ a local working set of objects being referenced by its users. As long as the
+ cached images remain 'current' (i.e., compatible with the central version
+ stored at the file servers), operations may be performed on these files without
+ further communication with the central servers. This results in significant
+ reductions in network traffic and server loads, paving the way for the target
+ client/server ratios. 
+ \par
+ This file cache is typically located on the client's local hard disk, although
+ a strictly in-memory cache is also supported. The disk cache has the advantage
+ that its contents will survive crashes and reboots, with the expectation that
+ the majority of cached objects will remain current. The local cache parameters,
+ including the maximum number of blocks it may occupy on the local disk, may be
+ changed on the fly. In order to avoid having the size of the client file cache
+ become a limit on the length of an AFS file, caching is actually performed on
+ chunks of the file. These chunks are typically 64 Kbytes in length, although
+ the chunk size used by the client is settable when the client starts up. 
+ \li Callbacks: The use of caches by the file system, as described above, raises
+ the thorny issue of cache consistency. Each client must efficiently determine
+ whether its cached file chunks are identical to the corresponding sections of
+ the file as stored at the server machine before allowing a user to operate on
+ those chunks. AFS employs the notion of a callback as the backbone of its cache
+ consistency algorithm. When a server machine delivers one or more chunks of a
+ file to a client, it also includes a callback 'promise' that the client will be
+ notified if any modifications are made to the data in the file. Thus, as long
+ as the client machine is in possession of a callback for a file, it knows it is
+ correctly synchronized with the centrally-stored version, and allows its users
+ to operate on it as desired without any further interaction with the server.
+ Before a file server stores a more recent version of a file on its own disks,
+ it will first break all outstanding callbacks on this item. A callback will
+ eventually time out, even if there are no changes to the file or directory it
+ covers. 
+ \li Location transparency: The typical AFS user does not know which server or
+ servers houses any of his or her files. In fact, the user's storage may be
+ distributed among several servers. This location transparency also allows user
+ data to be migrated between servers without users having to take corrective
+ actions, or even becoming aware of the shift. 
+ \li Reliability: The crash of a server machine in any distributed file system
+ will cause the information it hosts to become unavailable to the user
+ community. The same effect is caused when server and client machines are
+ isolated across a network partition. AFS addresses this situation by allowing
+ data to be replicated across two or more servers in a read-only fashion. If the
+ client machine loses contact with a particular server from which it is
+ attempting to fetch data, it hunts among the remaining machines hosting
+ replicas, looking for one that is still in operation. This search is performed
+ without the user's knowledge or intervention, smoothly masking outages whenever
+ possible. Each client machine will automatically perform periodic probes of
+ machines on its list of known servers, updating its internal records concerning
+ their status. Consequently, server machines may enter and exit the pool without
+ administrator intervention. 
+ \par
+ Replication also applies to the various databases employed by the AFS server
+ processes. These system databases are read/write replicated with a single
+ synchronization site at any instant. If a synchronization site is lost due to
+ failure, the remaining database sites elect a new synchronization site
+ automatically without operator intervention. 
+ \li Security: A production file system, especially one which allows and
+ encourages transparent access between administrative domains, must be conscious
+ of security issues. AFS considers the server machines as 'trusted', being kept
+ behind locked doors and only directly manipulated by administrators. On the
+ other hand, client machines are, by definition, assumed to exist in inherently
+ insecure environments. These client machines are recognized to be fully
+ accessible to their users, making AFS servers open to attacks mounted by
+ possibly modified hardware, operating systems, and software from its clients. 
+ \li To provide credible file system security, AFS employs an authentication
+ system based on the Kerberos facility developed by Project Athena at MIT
+ [6][7]. Users operating from client machines are required to interact with
+ Authentication Server agents running on the secure server machines to generate
+ secure tokens of identity. These tokens express the user's identity in an
+ encrypted fashion, and are stored in the kernel of the client machine. When the
+ user attempts to fetch or store files, the server may challenge the user to
+ verify his or her identity. This challenge, hidden from the user and handled
+ entirely by the RPC layer, will transmit this token to the file server involved
+ in the operation. The server machine, upon decoding the token and thus
+ discovering the user's true identity, will allow the caller to perform the
+ operation if permitted. Access control: The standard unix access control
+ mechanism associates mode bits with every file and directory, applying them
+ based on the user's numerical identifier and the user's membership in various
+ groups. AFS has augmented this traditional access control mechanism with Access
+ Control Lists (ACLs). Every AFS directory has an associated ACL which defines
+ the principals or parties that may operate on all files contained in the
+ directory, and which operations these principals may perform. Rights granted by
+ these ACLs include read, write, delete, lookup, insert (create new files, but
+ don't overwrite old files), and administer (change the ACL). Principals on
+ these ACLs include individual users and groups of users. These groups may be
+ defined by AFS users without administrative intervention. AFS ACLs provide for
+ much finer-grained access control for its files. 
+ \li Administrability: Any system with the scaling goals of AFS must pay close
+ attention to its ease of administration. The task of running an AFS
+ installation is facilitated via the following mechanisms: 
+ \li Pervasive RPC interfaces: Access to AFS server agents is performed mostly
+ via RPC interfaces. Thus, servers may be queried and operated upon regardless
+ of their location. In combination with the security system outlined above, even
+ administrative functions such as instigating backups, reconfiguring server
+ machines, and stopping and restarting servers may be performed by an
+ administrator sitting in front of any AFS-capable machine, as long as the
+ administrator holds the proper tokens. 
+ \li Replication: As AFS supports read-only replication for user data and
+ read-write replication for system databases, much of the system reconfiguration
+ work in light of failures is performed transparently and without human
+ intervention. Administrators thus typically have more time to respond to many
+ common failure situations. 
+ \li Data mobility: Improved and balanced utilization of disk resources is
+ facilitated by the fact that AFS supports transparent relocation of user data
+ between partitions on a single file server machine or between two different
+ machines. In a situation where a machine must be brought down for an extended
+ period, all its storage may be migrated to other servers so that users may
+ continue their work completely unaffected. 
+ \li Automated 'nanny' services: Each file server machine runs a BOS Server
+ process, which assists in the machine's administration. This server is
+ responsible for monitoring the health of the AFS agents under its care,
+ bringing them up in the proper order after a system reboot, answering requests
+ as to their status and restarting them when they fail. It also accepts commands
+ to start, suspend, or resume these processes, and install new server binaries.
+ Accessible via an RPC interface, this supervisory process relieves
+ administrators of some oversight responsibilities and also allows them to
+ perform their duties from any machine running AFS, regardless of location or
+ geographic distance from the targeted file server machine. 
+ \li On-line backup: Backups may be performed on the data stored by the AFS file
+ server machines without bringing those machines down for the duration.
+ Copy-on-write 'snapshots' are taken of the data to be preserved, and tape
+ backup is performed from these clones. One added benefit is that these backup
+ clones are on-line and accessible by users. Thus, if someone accidentally
+ deletes a file that is contained in their last snapshot, they may simply copy
+ its contents as of the time the snapshot was taken back into their active
+ workspace. This facility also serves to improve the administrability of the
+ system, greatly reducing the number of requests to restore data from tape. 
+ \li On-line help: The set of provided program tools used to interact with the
+ active AFS agents are self-documenting in that they will accept command-line
+ requests for help, displaying descriptive text in response. 
+ \li Statistics: Each AFS agent facilitates collection of statistical data on
+ its performance, configuration, and status via its RPC interface. Thus, the
+ system is easy to monitor. One tool that takes advantage of this facility is
+ the scout program. Scout polls file server machines periodically, displaying
+ usage statistics, current disk capacities, and whether the server is
+ unavailable. Administrators monitoring this information can thus quickly react
+ to correct overcrowded disks and machine crashes. 
+ \li Coexistence: Many organizations currently employ other distributed file
+ systems, most notably NFS. AFS was designed to run simultaneously with other
+ DFSs without interfering in their operation. In fact, an NFS-AFS translator
+ agent exists that allows pure-NFS client machines to transparently access files
+ in the AFS community. 
+ \li Portability: Because AFS is implemented using the standard VFS and vnode
+ interfaces pioneered and advanced by Sun Microsystems, AFS is easily portable
+ between different platforms from a single vendor or from different vendors. 
+ 
+ 	\subsection sec1-1-2 Section 1.1.2: Scope of this Document 
+ 
+ \par
+ This document is a member of a documentation suite providing specifications of
+ the operations and interfaces offered by the various AFS servers and agents.
+ Specifically, this document will focus on two of these system agents: 
+ \li File Server: This AFS entity is responsible for providing a central disk
+ repository for a particular set of files and for making these files accessible
+ to properly-authorized users running on client machines. The File Server is
+ implemented as a user-space process 
+ \li Cache Manager: This code, running within the kernel of an AFS client
+ machine, is a user's representative in communicating with the File Servers,
+ fetching files back and forth into the local cache as needed. The Cache Manager
+ also keeps information as to the composition of its own cell as well as the
+ other AFS cells in existence. It resolves file references and operations,
+ determining the proper File Server (or group of File Servers) that may satisfy
+ the request. In addition, it is also a reliable repository for the user's
+ authentication information, holding on to their tokens and wielding them as
+ necessary when challenged. 
+ 
+ 	\subsection sec1-1-3 Section 1.1.3: Related Documents 
+ 
+ \par
+ The full AFS specification suite of documents is listed below: 
+ \li AFS-3 Programmer's Reference: Architectural Overview: This paper provides
+ an architectual overview of the AFS distributed file system, describing the
+ full set of servers and agents in a coherent way, illustrating their
+ relationships to each other and examining their interactions. 
+ \li AFS-3 Programmer's Reference:Volume Server/Volume Location Server
+ Interface: This document describes the services through which 'containers' of
+ related user data are located and managed. 
+ \li AFS-3 Programmer's Reference: Protection Server Interface: This paper
+ describes the server responsible for providing two-way mappings between
+ printable usernames and their internal AFS identifiers. The Protection Server
+ also allows users to create, destroy, and manipulate 'groups' of users, which
+ are suitable for placement on ACLs. AFS-3 Programmer's Reference: BOS Server
+ Interface: This paper explicates the 'nanny' service described above, which
+ assists in the administrability of the AFS environment. 
+ \li AFS-3 Programmer's Reference: Specification for the Rx Remote Procedure
+ Call Facility: This document specifies the design and operation of the remote
+ procedure call and lightweight process packages used by AFS. 
+ \par
+ In addition to these papers, the AFS 3.1 product is delivered with its own
+ user, administrator, installation, and command reference documents. 
+ 
+ 	\section sec1-2 Section 1.2: Basic Concepts 
+ 
+ \par
+ To properly understand AFS operation, specifically the tasks and objectives of
+ the File Server and Cache Manager, it is necessary to introduce and explain the
+ following concepts: 
+ \li Cell: A cell is the set of server and client machines operated by an
+ administratively independent organization. The cell administrators make
+ decisions concerning such issues as server deployment and configuration, user
+ backup schedules, and replication strategies on their own hardware and disk
+ storage completely independently from those implemented by other cell
+ administrators regarding their own domains. Every client machine belongs to
+ exactly one cell, and uses that information to determine the set of database
+ servers it uses to locate system resources and generate authentication
+ information. 
+ \li Volume: AFS disk partitions do not directly host individual user files or
+ directories. Rather, connected subtrees of the system's directory structure are
+ placed into containers called volumes. Volumes vary in size dynamically as
+ objects are inserted, overwritten, and deleted. Each volume has an associated
+ quota, or maximum permissible storage. A single unix disk partition may host
+ one or more volumes, and in fact may host as many volumes as physically fit in
+ the storage space. However, a practical maximum is 3,500 volumes per disk
+ partition, since this is the highest number currently handled by the salvager
+ program. The salvager is run on occasions where the volume structures on disk
+ are inconsistent, repairing the damage. A compile-time constant within the
+ salvager imposes the above limit, causing it to refuse to repair any
+ inconsistent partition with more than 3,500 volumes. Volumes serve many
+ purposes within AFS. First, they reduce the number of objects with which an
+ administrator must be concerned, since operations are normally performed on an
+ entire volume at once (and thus on all files and directories contained within
+ the volume). In addition, volumes are the unit of replication, data mobility
+ between servers, and backup. Disk utilization may be balanced by transparently
+ moving volumes between partitions. 
+ \li Mount Point: The connected subtrees contained within individual volumes
+ stored at AFS file server machines are 'glued' to their proper places in the
+ file space defined by a site, forming a single, apparently seamless unix tree.
+ These attachment points are referred to as mount points. Mount points are
+ persistent objects, implemented as symbolic links whose contents obey a
+ stylized format. Thus, AFS mount points differ from NFS-style mounts. In the
+ NFS environment, the user dynamically mounts entire remote disk partitions
+ using any desired name. These mounts do not survive client restarts, and do not
+ insure a uniform namespace between different machines. 
+ \par
+ As a Cache Manager resolves an AFS pathname as part of a file system operation
+ initiated by a user process, it recognizes mount points and takes special
+ action to resolve them. The Cache Manager consults the appropriate Volume
+ Location Server to discover the File Server (or set of File Servers) hosting
+ the indicated volume. This location information is cached, and the Cache
+ Manager then proceeds to contact the listed File Server(s) in turn until one is
+ found that responds with the contents of the volume's root directory. Once
+ mapped to a real file system object, the pathname resolution proceeds to the
+ next component. 
+ \li Database Server: A set of AFS databases is required for the proper
+ functioning of the system. Each database may be replicated across two or more
+ file server machines. Access to these databases is mediated by a database
+ server process running at each replication site. One site is declared to be the
+ synchronization site, the sole location accepting requests to modify the
+ databases. All other sites are read-only with respect to the set of AFS users.
+ When the synchronization site receives an update to its database, it
+ immediately distributes it to the other sites. Should a synchronization site go
+ down through either a hard failure or a network partition, the remaining sites
+ will automatically elect a new synchronization site if they form a quorum, or
+ majority. This insures that multiple synchronization sites do not become active
+ in the network partition scenario. 
+ \par
+ The classes of AFS database servers are listed below: 
+ \li Authentication Server: This server maintains the authentication database
+ used to generate tokens of identity. 
+ \li Protection Server: This server maintains mappings between human-readable
+ user account names and their internal numerical AFS identifiers. It also
+ manages the creation, manipulation, and update of user-defined groups suitable
+ for use on ACLs. 
+ \li Volume Location Server: This server exports information concerning the
+ location of the individual volumes housed within the cell. 
+ 
+ 	\section sec1-3 Section 1.3: Document Layout 
+ 
+ \par
+ Following this introduction and overview, Chapter 2 describes the architecture
+ of the File Server process design. Similarly, Chapter 3 describes the
+ architecture of the in-kernel Cache Manager agent. Following these
+ architectural examinations, Chapter 4 provides a set of basic coding
+ definitions common to both the AFS File Server and Cache Manager, required to
+ properly understand the interface specifications which follow. Chapter 5 then
+ proceeds to specify the various File Server interfaces. The myriad Cache
+ Manager interfaces are presented in Chapter 6, thus completing the document. 
+ 
+ 	\page chap2 Chapter 2: File Server Architecture 
+ 
+ 	\section sec2-1 Section 2.1: Overview 
+ 
+ \par
+ The AFS File Server is a user-level process that presides over the raw disk
+ partitions on which it supports one or more volumes. It provides 'half' of the
+ fundamental service of the system, namely exporting and regimenting access to
+ the user data entrusted to it. The Cache Manager provides the other half,
+ acting on behalf of its human users to locate and access the files stored on
+ the file server machines. 
+ \par
+ This chapter examines the structure of the File Server process. First, the set
+ of AFS agents with which it must interact are discussed. Next, the threading
+ structure of the server is examined. Some details of its handling of the race
+ conditions created by the callback mechanism are then presented. This is
+ followed by a discussion of the read-only volume synchronization mechanism.
+ This functionality is used in each RPC interface call and intended to detect
+ new releases of read-only volumes. File Servers do not generate callbacks for
+ objects residing in read-only volumes, so this synchronization information is
+ used to implement a 'whole-volume' callback. Finally, the fact that the File
+ Server may drop certain information recorded about the Cache Managers with
+ which it has communicated and yet guarantee correctness of operation is
+ explored. 
+ 
+ 	\section sec2-2 Section 2.2: Interactions 
+ 
+ \par
+ By far the most frequent partner in File Server interactions is the set of
+ Cache Managers actively fetching and storing chunks of data files for which the
+ File Server provides central storage facilities. The File Server also
+ periodically probes the Cache Managers recorded in its tables with which it has
+ recently dealt, determining if they are still active or whether their records
+ might be garbage-collected. 
+ \par
+ There are two other server entities with which the File Server interacts,
+ namely the Protection Server and the BOS Server. Given a fetch or store request
+ generated by a Cache Manager, the File Server needs to determine if the caller
+ is authorized to perform the given operation. An important step in this process
+ is to determine what is referred to as the caller's Current Protection
+ Subdomain, or CPS. A user's CPS is a list of principals, beginning with the
+ user's internal identifier, followed by the the numerical identifiers for all
+ groups to which the user belongs. Once this CPS information is determined, the
+ File Server scans the ACL controlling access to the file system object in
+ question. If it finds that the ACL contains an entry specifying a principal
+ with the appropriate rights which also appears in the user's CPS, then the
+ operation is cleared. Otherwise, it is rejected and a protection violation is
+ reported to the Cache Manager for ultimate reflection back to the caller. 
+ \par
+ The BOS Server performs administrative operations on the File Server process.
+ Thus, their interactions are quite one-sided, and always initiated by the BOS
+ Server. The BOS Server does not utilize the File Server's RPC interface, but
+ rather generates unix signals to achieve the desired effect. 
+ 
+ 	\section sec2-3 Section 2.3: Threading 
+ 
+ \par
+ The File Server is organized as a multi-threaded server. Its threaded behavior
+ within a single unix process is achieved by use of the LWP lightweight process
+ facility, as described in detail in the companion "AFS-3 Programmer's
+ Reference: Specification for the Rx Remote Procedure Call Facility" document.
+ The various threads utilized by the File Server are described below: 
+ \li WorkerLWP: This lightweight process sleeps until a request to execute one
+ of the RPC interface functions arrives. It pulls the relevant information out
+ of the request, including any incoming data delivered as part of the request,
+ and then executes the server stub routine to carry out the operation. The
+ thread finishes its current activation by feeding the return code and any
+ output data back through the RPC channel back to the calling Cache Manager. The
+ File Server initialization sequence specifies that at least three but no more
+ than six of these WorkerLWP threads are to exist at any one time. It is
+ currently not possible to configure the File Server process with a different
+ number of WorkerLWP threads. 
+ \li FiveMinuteCheckLWP: This thread runs every five minutes, performing such
+ housekeeping chores as cleaning up timed-out callbacks, setting disk usage
+ statistics, and executing the special handling required by certain AIX
+ implementations. Generally, this thread performs activities that do not take
+ unbounded time to accomplish and do not block the thread. If reassurance is
+ required, FiveMinuteCheckLWP can also be told to print out a banner message to
+ the machine's console every so often, stating that the File Server process is
+ still running. This is not strictly necessary and an artifact from earlier
+ versions, as the File Server's status is now easily accessible at any time
+ through the BOS Server running on its machine. 
+ \li HostCheckLWP: This thread, also activated every five minutes, performs
+ periodic checking of the status of Cache Managers that have been previously
+ contacted and thus appear in this File Server's internal tables. It generates
+ RXAFSCB Probe() calls from the Cache Manager interface, and may find itself
+ suspended for an arbitrary amount of time when it enounters unreachable Cache
+ Managers. 
+ 
+ 	\section sec2-4 Section 2.4: Callback Race Conditions 
+ 
+ \par
+ Callbacks serve to implement the efficient AFS cache consistency mechanism, as
+ described in Section 1.1.1. Because of the asynchronous nature of callback
+ generation and the multi-threaded operation and organization of both the File
+ Server and Cache Manager, race conditions can arise in their use. As an
+ example, consider the case of a client machine fetching a chunk of file X. The
+ File Server thread activated to carry out the operation ships the contents of
+ the chunk and the callback information over to the requesting Cache Manager.
+ Before the corresponding Cache Manager thread involved in the exchange can be
+ scheduled, another request arrives at the File Server, this time storing a
+ modified image of the same chunk from file X. Another worker thread comes to
+ life and completes processing of this second request, including execution of an
+ RXAFSCB CallBack() to the Cache Manager who still hasn't picked up on the
+ results of its fetch operation. If the Cache Manager blindly honors the RXAFSCB
+ CallBack() operation first and then proceeds to process the fetch, it will wind
+ up believing it has a callback on X when in reality it is out of sync with the
+ central copy on the File Server. To resolve the above class of callback race
+ condition, the Cache Manager effectively doublechecks the callback information
+ received from File Server calls, making sure they haven't already been
+ nullified by other file system activity. 
+ 
+ 	\section sec2-5 Section 2.5: Read-Only Volume Synchronization 
+ 
+ \par
+ The File Server issues a callback for each file chunk it delivers from a
+ read-write volume, thus allowing Cache Managers to efficiently synchronize
+ their local caches with the authoritative File Server images. However, no
+ callbacks are issued when data from read-only volumes is delivered to clients.
+ Thus, it is possible for a new snapshot of the read-only volume to be
+ propagated to the set of replication sites without Cache Managers becoming
+ aware of the event and marking the appropriate chunks in their caches as stale.
+ Although the Cache Manager refreshes its volume version information
+ periodically (once an hour), there is still a window where a Cache Manager will
+ fail to notice that it has outdated chunks. 
+ \par
+ The volume synchronization mechanism was defined to close this window,
+ resulting in what is nearly a 'whole-volume' callback device for read-only
+ volumes. Each File Server RPC interface function handling the transfer of file
+ data is equipped with a parameter (a volSyncP), which carries this volume
+ synchronization information. This parameter is set to a non-zero value by the
+ File Server exclusively when the data being fetched is coming from a read-only
+ volume. Although the struct AFSVolSync defined in Section 5.1.2.2 passed via a
+ volSyncP consists of six longwords, only the first one is set. This leading
+ longword carries the creation date of the read-only volume. The Cache Manager
+ immediately compares the synchronization value stored in its cached volume
+ information against the one just received. If they are identical, then the
+ operation is free to complete, secure in the knowledge that all the information
+ and files held from that volume are still current. A mismatch, though,
+ indicates that every file chunk from this volume is potentially out of date,
+ having come from a previous release of the read-only volume. In this case, the
+ Cache Manager proceeds to mark every chunk from this volume as suspect. The
+ next time the Cache Manager considers accessing any of these chunks, it first
+ checks with the File Server it came from which the chunks were obtained to see
+ if they are up to date. 
+ 
+ 	\section sec2-6 Section 2.6: Disposal of Cache Manager Records 
+ 
+ \par
+ Every File Server, when first starting up, will, by default, allocate enough
+ space to record 20,000 callback promises (see Section 5.3 for how to override
+ this default). Should the File Server fully populate its callback records, it
+ will not allocate more, allowing its memory image to possibly grow in an
+ unbounded fashion. Rather, the File Server chooses to break callbacks until it
+ acquires a free record. All reachable Cache Managers respond by marking their
+ cache entries appropriately, preserving the consistency guarantee. In fact, a
+ File Server may arbitrarily and unilaterally purge itself of all records
+ associated with a particular Cache Manager. Such actions will reduce its
+ performance (forcing these Cache Managers to revalidate items cached from that
+ File Server) without sacrificing correctness. 
+ 
+ 	\page chap3 Chapter 3: Cache Manager Architecture 
+ 
+ 	\section sec3-1 Section 3.1: Overview 
+ 
+ \par
+ The AFS Cache Manager is a kernel-resident agent with the following duties and
+ responsibilities: 
+ \li Users are to be given the illusion that files stored in the AFS distributed
+ file system are in fact part of the local unix file system of their client
+ machine. There are several areas in which this illusion is not fully realized: 
+ \li Semantics: Full unix semantics are not maintained by the set of agents
+ implementing the AFS distributed file system. The largest deviation involves
+ the time when changes made to a file are seen by others who also have the file
+ open. In AFS, modifications made to a cached copy of a file are not necessarily
+ reflected immediately to the central copy (the one hosted by File Server disk
+ storage), and thus to other cache sites. Rather, the changes are only
+ guaranteed to be visible to others who simultaneously have their own cached
+ copies open when the modifying process executes a unix close() operation on the
+ file. 
+ \par
+ This differs from the semantics expected from the single-machine, local unix
+ environment, where writes performed on one open file descriptor are immediately
+ visible to all processes reading the file via their own file descriptors. Thus,
+ instead of the standard "last writer wins" behavior, users see "last closer
+ wins" behavior on their AFS files. Incidentally, other DFSs, such as NFS, do
+ not implement full unix semantics in this case either. 
+ \li Partial failures: A panic experienced by a local, single-machine unix file
+ system will, by definition, cause all local processes to terminate immediately.
+ On the other hand, any hard or soft failure experienced by a File Server
+ process or the machine upon which it is executing does not cause any of the
+ Cache Managers interacting with it to crash. Rather, the Cache Managers will
+ now have to reflect their failures in getting responses from the affected File
+ Server back up to their callers. Network partitions also induce the same
+ behavior. From the user's point of view, part of the file system tree has
+ become inaccessible. In addition, certain system calls (e.g., open() and
+ read()) may return unexpected failures to their users. Thus, certain coding
+ practices that have become common amongst experienced (single-machine) unix
+ programmers (e.g., not checking error codes from operations that "can't" fail)
+ cause these programs to misbehave in the face of partial failures. 
+ \par
+ To support this transparent access paradigm, the Cache Manager proceeds to: 
+ \li Intercept all standard unix operations directed towards AFS objects,
+ mapping them to references aimed at the corresponding copies in the local
+ cache. 
+ \li Keep a synchronized local cache of AFS files referenced by the client
+ machine's users. If the chunks involved in an operation reading data from an
+ object are either stale or do not exist in the local cache, then they must be
+ fetched from the File Server(s) on which they reside. This may require a query
+ to the volume location service in order to locate the place(s) of residence.
+ Authentication challenges from File Servers needing to verify the caller's
+ identity are handled by the Cache Manager, and the chunk is then incorporated
+ into the cache. 
+ \li Upon receipt of a unix close, all dirty chunks belonging to the object will
+ be flushed back to the appropriate File Server. 
+ \li Callback deliveries and withdrawals from File Servers must be processed,
+ keeping the local cache in close synchrony with the state of affairs at the
+ central store. 
+ \li Interfaces are also be provided for those principals who wish to perform
+ AFS-specific operations, such as Access Control List (ACL) manipulations or
+ changes to the Cache Manager's configuration. 
+ \par
+ This chapter takes a tour of the Cache Manager's architecture, and examines how
+ it supports these roles and responsibilities. First, the set of AFS agents with
+ which it must interact are discussed. Next, some of the Cache Manager's
+ implementation and interface choices are examined. Finally, the server's
+ ability to arbitrarily dispose of callback information without affecting the
+ correctness of the cache consistency algorithm is explained. 
+ 
+ 	\section sec3-2 Section 3.2: Interactions 
+ 
+ \par
+ The main AFS agent interacting with a Cache Manager is the File Server. The
+ most common operation performed by the Cache Manager is to act as its users'
+ agent in fetching and storing files to and from the centralized repositories.
+ Related to this activity, a Cache Manager must be prepared to answer queries
+ from a File Server concerning its health. It must also be able to accept
+ callback revocation notices generated by File Servers. Since the Cache Manager
+ not only engages in data transfer but must also determine where the data is
+ located in the first place, it also directs inquiries to Volume Location Server
+ agents. There must also be an interface allowing direct interactions with both
+ common and administrative users. Certain AFS-specific operations must be made
+ available to these parties. In addition, administrative users may desire to
+ dynamically reconfigure the Cache Manager. For example, information about a
+ newly-created cell may be added without restarting the client's machine. 
+ 
+ 	\section sec3-3 Section 3.3: Implementation Techniques 
+ 
+ \par
+ The above roles and behaviors for the Cache Manager influenced the
+ implementation choices and methods used to construct it, along with the desire
+ to maximize portability. This section begins by showing how the VFS/vnode
+ interface, pioneered and standardized by Sun Microsystems, provides not only
+ the necessary fine-grain access to user file system operations, but also
+ facilitates Cache Manager ports to new hardware and operating system platforms.
+ Next, the use of unix system calls is examined. Finally, the threading
+ structure employed is described. 
+ 
+ 	\subsection sec3-3-1 Section 3.3.1: VFS Interface 
+ 
+ \par
+ As mentioned above, Sun Microsystems has introduced and propagated an important
+ concept in the file system world, that of the Virtual File System (VFS)
+ interface. This abstraction defines a core collection of file system functions
+ which cover all operations required for users to manipulate their data. System
+ calls are written in terms of these standardized routines. Also, the associated
+ vnode concept generalizes the original unix inode idea and provides hooks for
+ differing underlying environments. Thus, to port a system to a new hardware
+ platform, the system programmers have only to construct implementations of this
+ base array of functions consistent with the new underlying machine. 
+ \par
+ The VFS abstraction also allows multiple file systems (e.g., vanilla unix, DOS,
+ NFS, and AFS) to coexist on the same machine without interference. Thus, to
+ make a machine AFS-capable, a system designer first extends the base vnode
+ structure in well-defined ways in order to store AFS-specific operations with
+ each file description. Then, the base function array is coded so that calls
+ upon the proper AFS agents are made to accomplish each function's standard
+ objectives. In effect, the Cache Manager consists of code that interprets the
+ standard set of unix operations imported through this interface and executes
+ the AFS protocols to carry them out. 
+ 
+ 	\subsection sec3-3-2 Section 3.3.2: System Calls 
+ 
+ \par
+ As mentioned above, many unix system calls are implemented in terms of the base
+ function array of vnode-oriented operations. In addition, one existing system
+ call has been modified and two new system calls have been added to perform
+ AFS-specific operations apart from the Cache Manager's unix 'emulation'
+ activities. The standard ioctl() system call has been augmented to handle
+ AFS-related operations on objects accessed via open unix file descriptors. One
+ of the brand-new system calls is pioctl(), which is much like ioctl() except it
+ names targeted objects by pathname instead of file descriptor. Another is afs
+ call(), which is used to initialize the Cache Manager threads, as described in
+ the section immediately following. 
+ 
+ 	\subsection sec3-3-3 Section 3.3.3: Threading 
+ 
+ \par
+ In order to execute its many roles, the Cache Manager is organized as a
+ multi-threaded entity. It is implemented with (potentially multiple
+ instantiations of) the following three thread classes: 
+ \li CallBack Listener: This thread implements the Cache Manager callback RPC
+ interface, as described in Section 6.5. 
+ \li Periodic Maintenance: Certain maintenance and checkup activities need to be
+ performed at five set intervals. Currently, the frequency of each of these
+ operations is hard-wired. It would be a simple matter, though, to make these
+ times configurable by adding command-line parameters to the Cache Manager. 
+ \li Thirty seconds: Flush pending writes for NFS clients coming in through the
+ NFS-AFS Translator facility. 
+ \li One minute: Make sure local cache usage is below the assigned quota, write
+ out dirty buffers holding directory data, and keep flock()s alive. 
+ \li Three minutes: Check for the resuscitation of File Servers previously
+ determined to be down, and check the cache of previously computed access
+ information in light of any newly expired tickets. 
+ \li Ten minutes: Check health of all File Servers marked as active, and
+ garbage-collect old RPC connections. 
+ \li One hour: Check the status of the root AFS volume as well as all cached
+ information concerning read-only volumes. 
+ \li Background Operations: The Cache Manager is capable of prefetching file
+ system objects, as well as carrying out delayed stores, occurring sometime
+ after a close() operation. At least two threads are created at Cache Manager
+ initialization time and held in reserve to carry out these objectives. This
+ class of background threads implements the following three operations: 
+ \li Prefetch operation: Fetches particular file system object chunks in the
+ expectation that they will soon be needed. 
+ \li Path-based prefetch operation: The prefetch daemon mentioned above operates
+ on objects already at least partly resident in the local cache, referenced by
+ their vnode. The path-based prefetch daemon performs the same actions, but on
+ objects named solely by their unix pathname. 
+ \li Delayed store operation: Flush all modified chunks from a file system
+ object to the appropriate File Server's disks. 
+ 
+ 	\section sec3-4 Section 3.4: Disposal of Cache Manager Records 
+ 
+ \par
+ The Cache Manager is free to throw away any or all of the callbacks it has
+ received from the set of File Servers from which it has cached files. This
+ housecleaning does not in any way compromise the correctness of the AFS cache
+ consistency algorithm. The File Server RPC interface described in this paper
+ provides a call to allow a Cache Manager to advise of such unilateral
+ jettisoning. However, failure to use this routine still leaves the machine's
+ cache consistent. Let us examine the case of a Cache Manager on machine C
+ disposing of its callback on file X from File Server F. The next user access on
+ file X on machine C will cause the Cache Manager to notice that it does not
+ currently hold a callback on it (although the File Server will think it does).
+ The Cache Manager on C attempts to revalidate its entry when it is entirely
+ possible that the file is still in sync with the central store. In response,
+ the File Server will extend the existing callback information it has and
+ deliver the new promise to the Cache Manager on C. Now consider the case where
+ file X is modified by a party on a machine other than C before such an access
+ occurs on C. Under these circumstances, the File Server will break its callback
+ on file X before performing the central update. The Cache Manager on C will
+ receive one of these "break callback" messages. Since it no longer has a
+ callback on file X, the Cache Manager on C will cheerfully acknowledge the File
+ Server's notification and move on to other matters. In either case, the
+ callback information for both parties will eventually resynchronize. The only
+ potential penalty paid is extra inquiries by the Cache Manager and thus
+ providing for reduced performance instead of failure of operation. 
+ 
+ 	\page chap4 Chapter 4: Common Definitions and Data Structures 
+ 
+ \par
+ This chapter discusses the definitions used in common by the File Server and
+ the Cache Manager. They appear in the common.xg file, used by Rxgen to generate
+ the C code instantiations of these definitions. 
+ 
+ 	\section sec4-1 Section 4.1: File-Related Definitions 
+ 
+ 	\subsection sec4-1-1 Section 4.1.1: struct AFSFid 
+ 
+ \par
+ This is the type for file system objects within AFS. 
+ \n \n Fields 
+ \li unsigned long Volume - This provides the identifier for the volume in which
+ the object resides. 
+ \li unsigned long Vnode - This specifies the index within the given volume
+ corresponding to the object. 
+ \li unsigned long Unique - This is a 'uniquifier' or generation number for the
+ slot identified by the Vnode field. 
+ 
+ 	\section sec4-2 Section 4.2: Callback-related Definitions 
+ 
+ 	\subsection sec4-2-1 Section 4.2.1: Types of Callbacks 
+ 
+ \par
+ There are three types of callbacks defined by AFS-3: 
+ 
+ \li EXCLUSIVE: This version of callback has not been implemented. Its intent
+ was to allow a single Cache Manager to have exclusive rights on the associated
+ file data. 
+ \li SHARED: This callback type indicates that the status information kept by a
+ Cache Manager for the associated file is up to date. All cached chunks from
+ this file whose version numbers match the status information are thus
+ guaranteed to also be up to date. This type of callback is non-exclusive,
+ allowing any number of other Cache Managers to have callbacks on this file and
+ cache chunks from the file. 
+ \li DROPPED: This is used to indicate that the given callback promise has been
+ cancelled by the issuing File Server. The Cache Manager is forced to mark the
+ status of its cache entry as unknown, forcing it to stat the file the next time
+ a user attempts to access any chunk from it. 
+ 
+ 	\subsection sec4-2-2 Section 4.2.2: struct AFSCallBack 
+ 
+ \par
+ This is the canonical callback structure passed in many File Server RPC
+ interface calls. 
+ \n \b Fields 
+ \li unsigned long CallBackVersion - Callback version number. 
+ \li unsigned long ExpirationTime - Time when the callback expires, measured in
+ seconds. 
+ \li unsigned long CallBackType - The type of callback involved, one of
+ EXCLUSIVE, SHARED, or DROPPED. 
+ 
+ 	\subsection sec4-2-3 Section 4.2.3: Callback Arrays 
+ 
+ \par
+ AFS-3 sometimes does callbacks in bulk. Up to AFSCBMAX (50) callbacks can be
+ handled at once. Layouts for the two related structures implementing callback
+ arrays, struct AFSCBFids and struct AFSCBs, follow below. Note that the
+ callback descriptor in slot i of the array in the AFSCBs structure applies to
+ the file identifier contained in slot i in the fid array in the matching
+ AFSCBFids structure. 
+ 
+ 	\subsubsection sec4-2-3-1 Section 4.2.3.1: struct AFSCBFids 
+ 
+ \n \b Fields 
+ \li u int AFSCBFids len - Number of AFS file identifiers stored in the
+ structure, up to a maximum of AFSCBMAX. 
+ \li AFSFid *AFSCBFids val - Pointer to the first element of the array of file
+ identifiers. 
+ 
+ 	\subsubsection sec4-2-3-2 Section 4.2.3.2: struct AFSCBs 
+ 
+ \n \b Fields 
+ \li u int AFSCBs len - Number of AFS callback descriptors stored in the
+ structure, up to a maximum of AFSCBMAX. 
+ \li AFSCallBack *AFSCBs val - Pointer to the actual array of callback
+ descriptors 
+ 
+ 	\section sec4-3 Section 4.3: Locking Definitions 
+ 
+ 	\subsection sec4-3-1 Section 4.3.1: struct AFSDBLockDesc 
+ 
+ \par
+ This structure describes the state of an AFS lock. 
+ \n \b Fields 
+ \li char waitStates - Types of lockers waiting for the lock. 
+ \li char exclLocked - Does anyone have a boosted, shared or write lock? (A
+ boosted lock allows the holder to have data read-locked and then 'boost' up to
+ a write lock on the data without ever relinquishing the lock.) 
+ \li char readersReading - Number of readers that actually hold a read lock on
+ the associated object. 
+ \li char numWaiting - Total number of parties waiting to acquire this lock in
+ some fashion. 
+ 
+ 	\subsection sec4-3-2 Section 4.3.2: struct AFSDBCacheEntry 
+ 
+ \par
+ This structure defines the description of a Cache Manager local cache entry, as
+ made accessible via the RXAFSCB GetCE() callback RPC call. Note that File
+ Servers do not make the above call. Rather, client debugging programs (such as
+ cmdebug) are the agents which call RXAFSCB GetCE(). 
+ \n \b Fields 
+ \li long addr - Memory location in the Cache Manager where this description is
+ located. 
+ \li long cell - Cell part of the fid. 
+ \li AFSFid netFid - Network (standard) part of the fid 
+ \li long Length - Number of bytes in the cache entry. 
+ \li long DataVersion - Data version number for the contents of the cache entry. 
+ \li struct AFSDBLockDesc lock - Status of the lock object controlling access to
+ this cache entry. 
+ \li long callback - Index in callback records for this object. 
+ \li long cbExpires - Time when the callback expires. 
+ \li short refCount - General reference count. 
+ \li short opens - Number of opens performed on this object. 
+ \li short writers - Number of writers active on this object. 
+ \li char mvstat - The file classification, indicating one of normal file, mount
+ point, or volume root. 
+ \li char 	states - Remembers the state of the given file with a set of
+ bits indicating, from lowest-order to highest order: stat info valid, read-only
+ file, mount point valid, pending core file, wait-for-store, and mapped file. 
+ 
+ 	\subsection sec4-3-3 Section 4.3.3: struct AFSDBLock 
+ 
+ \par
+ This is a fuller description of an AFS lock, including a string name used to
+ identify it. 
+ \n \b Fields 
+ \li char name[16] - String name of the lock. 
+ \li struct AFSDBLockDesc lock - Contents of the lock itself. 
+ 
+ 	\section sec4-4 Section 4.4: Miscellaneous Definitions 
+ 
+ 	\subsection sec4-4-1 Section 4.4.1: Opaque structures 
+ 
+ \par
+ A maximum size for opaque structures passed via the File Server interface is
+ defined as AFSOPAQUEMAX. Currently, this is set to 1,024 bytes. The AFSOpaque
+ typedef is defined for use by those parameters that wish their contents to
+ travel completely uninterpreted across the network. 
+ 
+ 	\subsection sec4-4-2 Section 4.4.2: String Lengths 
+ 
+ \par
+ Two common definitions used to specify basic AFS string lengths are AFSNAMEMAX
+ and AFSPATHMAX. AFSNAMEMAX places an upper limit of 256 characters on such
+ things as file and directory names passed as parameters. AFSPATHMAX defines the
+ longest pathname expected by the system, composed of slash-separated instances
+ of the individual directory and file names mentioned above. The longest
+ acceptable pathname is currently set to 1,024 characters. 
+ 
+ 	\page chap5 Chapter 5: File Server Interfaces 
+ 
+ \par
+ There are several interfaces offered by the File Server, allowing it to export
+ the files stored within the set of AFS volumes resident on its disks to the AFS
+ community in a secure fashion and to perform self-administrative tasks. This
+ chapter will cover the three File Server interfaces, summarized below. There is
+ one File Server interface that will not be discussed in this document, namely
+ that used by the Volume Server. It will be fully described in the companion
+ AFS-3 Programmer's Reference:Volume Server/Volume Location Server Interface. 
+ \li RPC: This is the main File Server interface, supporting all of the Cache
+ Manager's needs for providing its own clients with appropriate access to file
+ system objects stored within AFS. It is closedly tied to the callback interface
+ exported by the Cache Manager as described in Section 6.5, which has special
+ implications for any application program making direct calls to this interface. 
+ \li Signals: Certain operations on a File Server must be performed by it
+ sending unix signals on the machine on which it is executing. These operations
+ include performing clean shutdowns and adjusting debugging output levels.
+ Properly-authenticated administrative users do not have to be physically logged
+ into a File Server machine to generate these signals. Rather, they may use the
+ RPC interface exported by that machine's BOS Server process to generate them
+ from any AFS-capable machine. 
+ \li Command Line: Many of the File Server's operating parameters may be set
+ upon startup via its command line interface. Such choices as the number of data
+ buffers and callback records to hold in memory may be made here, along with
+ various other decisions such as lightweight thread stack size. 
+ 
+ 	\section sec5-1 Section 5.1: RPC Interface 
+ 
+ 	\subsection sec5-1-1 Section 5.1.1: Introduction and Caveats 
+ 
+ \par
+ The documentation for the AFS-3 File Server RPC interface commences with some
+ basic definitions and data structures used in conjunction with the function
+ calls. This is followed by an examination of the set of non-streamed RPC
+ functions, namely those routines whose parameters are all fixed in size. Next,
+ the streamed RPC functions, those with parameters that allow an arbitrary
+ amount of data to be delivered, are described. A code fragment and accompanying
+ description and analysis are offered as an example of how to use the streamed
+ RPC calls. Finally, a description of the special requirements on any
+ application program making direct calls to this File Server interface appears.
+ The File Server assumes that any entity making calls to its RPC functionality
+ is a bona fide and full-fledged Cache Manager. Thus, it expects this caller to
+ export the Cache Manager's own RPC interface, even if the application simply
+ uses File Server calls that don't transfer files and thus generate callbacks. 
+ \par
+ Within those sections describing the RPC functions themselves, the purpose of
+ each call is detailed, and the nature and use of its parameters is documented.
+ Each of these RPC interface routines returns an integer error code, and a
+ subset of the possible values are described. A complete and systematic list of
+ potential error returns for each function is difficult to construct and
+ unwieldy to examine. This is due to fact that error codes from many different
+ packages and from many different levels may arise. Instead of attempting
+ completeness, the error return descriptions discuss error codes generated
+ within the functions themselves (or a very small number of code levels below
+ them) within the File Server code itself, and not from such associated packages
+ as the Rx, volume, and protection modules. Many of these error code are defined
+ in the companion AFS-3 documents. 
+ \par
+ By convention, a return value of zero reveals that the function call was
+ successful and that all of its OUT parameters have been set by the File Server. 
+ 
+ 	\subsection sec5-1-2 Section 5.1.2: Definitions and Structures 
+ 
+ 	\subsubsection sec5-1-2-1 Section 5.1.2.1: Constants and Typedefs 
+ 
+ \par
+ The following constants and typedefs are required to properly use the File
+ Server RPC interface, both to provide values and to interpret information
+ returned by the calls. The constants appear first, followed by the list of
+ typedefs, which sometimes depend on the constants above. Items are alphabetized
+ within each group. 
+ \par
+ All of the constants appearing below whose names contain the XSTAT string are
+ used in conjuction with the extended data collection facility supported by the
+ File Server. The File Server defines some number of data collections, each of
+ which consists of an array of longword values computed by the File Server. 
+ \par
+ There are currently two data collections defined for the File Server. The first
+ is identified by the AFS XSTATSCOLL CALL INFO constant. This collection of
+ longwords relates the number of times each internal function within the File
+ Server code has been executed, thus providing profiling information. The second
+ File Server data collection is identified by the AFS XSTATSCOLL PERF INFO
+ constant. This set of longwords contains information related to the File
+ Server's performance. 
+ 
+ \par Section 5.1.2.1.1 AFS DISKNAMESIZE [Value = 32] 
+ Specifies the maximum length for an AFS disk partition, used directly in the
+ definition for the DiskName typedef. A DiskName appears as part of a struct
+ ViceDisk, a group of which appear inside a struct ViceStatistics, used for
+ carrying basic File Server statistics information. 
+ 
+ \par Section 5.1.2.1.2 AFS MAX XSTAT LONGS [Value = 1,024] 
+ Defines the maximum size for a File Server data collection, as exported via the
+ RXAFS GetXStats() RPC call. It is used directly in the AFS CollData typedef. 
+ 
+ \par Section 5.1.2.1.3 AFS XSTATSCOLL CALL INFO [Value = 0] 
+ This constant identifies the File Server's data collection containing profiling
+ information on the number of times each of its internal procedures has been
+ called. 
+ \par
+ Please note that this data collection is not supported by the File Server at
+ this time. A request for this data collection will result the return of a
+ zero-length array. 
+ 
+ \par Section 5.1.2.1.4 AFS XSTATSCOLL PERF INFO [Value = 1] 
+ This constant identifies the File Server's data collection containing
+ performance-related information. 
+ 
+ \par Section 5.1.2.1.5 AFS CollData [typedef long AFS CollData<AFS MAX XSTAT
+ LONGS>;] 
+ This typedef is used by Rxgen to create a structure used to pass File Server
+ data collections to the caller. It resolves into a C typedef statement defining
+ a structure of the same name with the following fields: 
+ \n \b Fields 
+ \li u int AFS CollData len - The number of longwords contained within the data
+ pointed to by the next field. 
+ \li long *AFS CollData val - A pointer to a sequence of AFS CollData len
+ long-words. 
+ 
+ \par Section 5.1.2.1.6 AFSBulkStats [typedef AFSFetchStatus
+ AFSBulkStats<AFSCBMAX>;] 
+ This typedef is used by Rxgen to create a structure used to pass a set of
+ statistics structures, as described in the RXAFS BulkStatus documentation in
+ Section 5.1.3.21. It resolves into a C typedef statement defining a structure
+ of the same name with the following fields: 
+ \n \b Fields 
+ \li u int AFSBulkStats len - The number of struct AFSFetchStatus units
+ contained within the data to which the next field points. 
+ \li AFSFetchStatus *AFSBulkStats val - This field houses pointer to a sequence
+ of AFSBulkStats len units of type struct AFSFetchStatus. 
+ 
+ \par Section 5.1.2.1.7 DiskName [typedef opaque DiskName[AFS DISKNAMESIZE];] 
+ The name of an AFS disk partition. This object appears as a field within a
+ struct ViceDisk,a group of which appear inside a struct ViceStatistics, used
+ for carrying basic File Server statistics information. The term opaque
+ appearing above inidcates that the object being defined will be treated as an
+ undifferentiated string of bytes. 
+ 
+ \par Section 5.1.2.1.8 ViceLockType [typedef long ViceLockType;] 
+ This defines the format of a lock used internally by the Cache Manager. The
+ content of these locks is accessible via the RXAFSCB GetLock() RPC function. An
+ isomorphic and more refined version of the lock structure used by the Cache
+ Manager, mapping directly to this definition, is struct AFSDBLockDesc, defined
+ in Section 4.3.1. 
+ 
+ 	\subsubsection sec5-1-2-2 Section 5.1.2.2: struct AFSVolSync 
+ 
+ \par
+ This structure conveys volume synchronization information across many of the
+ File Server RPC interface calls, allowing something akin to a "whole-volume
+ callback" on read-only volumes. 
+ \n \b Fields 
+ \li unsigned long spare1 ... spare6 - The first longword, spare1, contains the
+ volume's creation date. The rest are currently unused. 
+ 
+ 	\subsubsection sec5-1-2-3 Section 5.1.2.3: struct AFSFetchStatus 
+ 
+ \par
+ This structure defines the information returned when a file system object is
+ fetched from a File Server. 
+ \n \b Fields 
+ \li unsigned long InterfaceVersion - RPC interface version, defined to be 1. 
+ \li unsigned long FileType - Distinguishes the object as either a file,
+ directory, symlink, or invalid. 
+ \li unsigned long LinkCount - Number of links to this object. 
+ \li unsigned long Length - Length in bytes. 
+ \li unsigned long DataVersion - Object's data version number. 
+ \li unsigned long Author - Identity of the object's author. 
+ \li unsigned long Owner - Identity of the object's owner. 
+ \li unsigned long CallerAccess - The set of access rights computed for the
+ caller on this object. 
+ \li unsigned long AnonymousAccess - The set of access rights computed for any
+ completely unauthenticated principal. 
+ \li unsigned long UnixModeBits - Contents of associated unix mode bits. 
+ \li unsigned long ParentVnode - Vnode for the object's parent directory. 
+ \li unsigned long ParentUnique - Uniquifier field for the parent object. 
+ \li unsigned long SegSize - (Not implemented). 
+ \li unsigned long ClientModTime - Time when the caller last modified the data
+ within the object. 
+ \li unsigned long ServerModTime - Time when the server last modified the data
+ within the object. 
+ \li unsigned long Group - (Not implemented). 
+ \li unsigned long SyncCounter - (Not implemented). 
+ \li unsigned long spare1 ... spare4 - Spares. 
+ 
+ 	\subsubsection sec5-1-2-4 Section 5.1.2.4: struct AFSStoreStatus 
+ 
+ \par
+ This structure is used to convey which of a file system object's status fields
+ should be set, and their new values. Several File Server RPC calls, including
+ RXAFS StoreStatus(), RXAFS CreateFile(), RXAFS SymLink(), RXAFS MakeDir(), and
+ the streamed call to store file data onto the File Server. 
+ \n \b Fields 
+ \li unsigned long Mask - Bit mask, specifying which of the following fields
+ should be assigned into the File Server's status block on the object. 
+ \li unsigned long ClientModTime - The time of day that the object was last
+ modified. 
+ \li unsigned long Owner - The principal identified as the owner of the file
+ system object. 
+ \li unsigned long Group - (Not implemented). 
+ \li unsigned long UnixModeBits - The set of associated unix mode bits. 
+ \li unsigned long SegSize - (Not implemented). 
+ 
+ 	\subsubsection sec5-1-2-5 Section 5.1.2.5: struct ViceDisk 
+ 
+ \par
+ This structure occurs in struct ViceStatistics, and describes the
+ characteristics and status of a disk partition used for AFS storage. 
+ \n \b Fields 
+ \li long BlocksAvailable - Number of 1 Kbyte disk blocks still available on the
+ partition. 
+ \li long TotalBlocks - Total number of disk blocks in the partition. 
+ \li DiskName Name - The human-readable character string name of the disk
+ partition (e.g., /vicepa). 
+ 
+ 	\subsubsection sec5-1-2-6 Section 5.1.2.6: struct ViceStatistics 
+ 
+ \par
+ This is the File Server statistics structure returned by the RXAFS
+ GetStatistics() RPC call. 
+ \n \b Fields 
+ \li unsigned long CurrentMsgNumber - Not used.
+ \li unsigned long OldestMsgNumber - Not used.
+ \li unsigned long CurrentTime - Time of day, as understood by the File Server. 
+ \li unsigned long BootTime - Kernel's boot time. 
+ \li unsigned long StartTime - Time when the File Server started up. 
+ \li long CurrentConnections - Number of connections to Cache Manager instances. 
+ \li unsigned long TotalViceCalls - Count of all calls made to the RPC
+ interface. 
+ \li unsigned long TotalFetchs - Total number of fetch operations, either status
+ or data, performed. 
+ \li unsigned long FetchDatas - Total number of data fetch operations
+ exclusively. 
+ \li unsigned long FetchedBytes - Total number of bytes fetched from the File
+ Server since it started up. 
+ \li long FetchDataRate - Result of dividing the FetchedBytes field by the
+ number of seconds the File Server has been running. 
+ \li unsigned long TotalStores - Total number of store operations, either status
+ or data, performed. 
+ \li unsigned long StoreDatas - Total number of data store operations
+ exclusively. 
+ \li unsigned long StoredBytes - Total number of bytes stored to the File Server
+ since it started up. 
+ \li long StoreDataRate - The result of dividing the StoredBytes field by the
+ number of seconds the File Server has been running. 
+ \li unsigned long TotalRPCBytesSent - Outdated 
+ \li unsigned long TotalRPCBytesReceived - Outdated 
+ \li unsigned long TotalRPCPacketsSent - Outdated 
+ \li unsigned long TotalRPCPacketsReceived - Outdated 
+ \li unsigned long TotalRPCPacketsLost - Outdated 
+ \li unsigned long TotalRPCBogusPackets - Outdated 
+ \li long SystemCPU - Result of reading from the kernel the usage times
+ attributed to system activities. 
+ \li long UserCPU - Result of reading from the kernel the usage times attributed
+ to user-level activities. 
+ \li long NiceCPU - Result of reading from the kernel the usage times attributed
+ to File Server activities that have been nice()d (i.e., run at a lower
+ priority). 
+ \li long IdleCPU - Result of reading from the kernel the usage times attributed
+ to idling activities. 
+ \li long TotalIO - Summary of the number of bytes read/written from the disk. 
+ \li long ActiveVM - Amount of virtual memory used by the File Server. 
+ \li long TotalVM - Total space available on disk for virtual memory activities. 
+ \li long EtherNetTotalErrors - Not used. 
+ \li long EtherNetTotalWrites - Not used. 
+ \li long EtherNetTotalInterupts - Not used. 
+ \li long EtherNetGoodReads - Not used. 
+ \li long EtherNetTotalBytesWritten - Not used. 
+ \li long EtherNetTotalBytesRead - Not used. 
+ \li long ProcessSize - The size of the File Server's data space in 1 Kbyte
+ chunks. 
+ \li long WorkStations - The total number of client Cache Managers
+ (workstations) for which information is held by the File Server. 
+ \li long ActiveWorkStations - The total number of client Cache Managers
+ (workstations) that have recently interacted with the File Server. This number
+ is strictly less than or equal to the WorkStations field. 
+ \li long Spare1 ... Spare8 - Not used. 
+ \li ViceDisk Disk1 ... Disk10 - Statistics concerning up to 10 disk partitions
+ used by the File Server. These records keep information on all partitions, not
+ just partitions reserved for AFS storage. 
+ 
+ 	\subsubsection sec5-1-2-7 Section 5.1.2.7: struct afs PerfStats 
+ 
+ \par
+ This is the structure corresponding to the AFS XSTATSCOLL PERF INFO data
+ collection that is defined by the File Server (see Section 5.1.2.1.4). It is
+ accessible via the RXAFS GetXStats() interface routine, as defined in Section
+ 5.1.3.26. 
+ The fields within this structure fall into the following classifications: 
+ \li Number of requests for the structure. 
+ \li Vnode cache information. 
+ \li Directory package numbers. 
+ \li Rx information. 
+ \li Host module fields 
+ \li Spares. 
+ 
+ \par
+ Please note that the Rx fields represent the contents of the rx stats structure
+ maintained by Rx RPC facility itself. Also, a full description of all the
+ structure's fields is not possible here. For example, the reader is referred to
+ the companion Rx document for further clarification on the Rx-related fields
+ within afs PerfStats. 
+ \n \b Fields
+ \li long numPerfCalls - Number of performance collection calls received.
+ \li long vcache L Entries - Number of entries in large (directory) vnode cache.
+ \li long vcache L Allocs - Number of allocations for the large vnode cache.
+ \li long vcache L Gets - Number of get operations for the large vnode cache.
+ \li long vcache L Reads - Number of reads performed on the large vnode cache.
+ \li long vcache L Writes - Number of writes executed on the large vnode.cache. 
+ \li long vcache S Entries - Number of entries in the small (file) vnode cache. 
+ \li long vcache S Allocs - Number of allocations for the small vnode cache. 
+ \li long vcache S Gets - Number of get operations for the small vnode cache. 
+ \li long vcache S Reads - Number of reads performed on the small vnode cache. 
+ \li long vcache S Writes - Number of writes executed on the small vnode cache. 
+ \li long vcache H Entries - Number of entries in the header of the vnode cache. 
+ \li long vcache H Gets - Number of get operations on the header of the vnode
+ cache. 
+ \li long vcache H Replacements - Number of replacement operations on the header
+ of the vnode cache. 
+ \li long dir Buffers - Number of directory package buffers in use. 
+ \li long dir Calls - Number of read calls made to the directory package. 
+ \li long dir IOs - Number of directory I/O operations performed. 
+ \li long rx packetRequests - Number of Rx packet allocation requests. 
+ \li long rx noPackets RcvClass - Number of failed packet reception requests. 
+ \li long rx noPackets SendClass - Number of failed packet transmission
+ requests. 
+ \li long rx noPackets SpecialClass - Number of 'special' Rx packet rquests. 
+ \li long rx socketGreedy - Did setting the Rx socket to SO GREEDY succeed? 
+ \li long rx bogusPacketOnRead - Number of short packets received. 
+ \li long rx bogusHost - Latest host address from bogus packets. 
+ \li long rx noPacketOnRead - Number of attempts to read a packet when one was
+ not physically available. 
+ \li long rx noPacketBuffersOnRead - Number of packets dropped due to buffer
+ shortages. 
+ \li long rx selects - Number of selects performed, waiting for a packet arrival
+ or a timeout. 
+ \li long rx sendSelects - Number of selects forced upon a send. 
+ \li long rx packetsRead RcvClass - Number of packets read belonging to the
+ 'Rcv'  class. 
+ \li long rx packetsRead SendClass - Number of packets read that belong to the
+ 'Send' class. 
+ \li long rx packetsRead SpecialClass - Number of packets read belonging to the
+ 'Special' class. 
+ \li long rx dataPacketsRead - Number of unique data packets read off the wire. 
+ \li long rx ackPacketsRead - Number of acknowledgement packets read. 
+ \li long rx dupPacketsRead - Number of duplicate data packets read. 
+ \li long rx spuriousPacketsRead - Number of inappropriate packets read. 
+ \li long rx packetsSent RcvClass - Number of packets sent belonging to the
+ 'Rcv'  class. 
+ \li long rx packetsSent SendClass - Number of packets sent belonging to the
+ 'Send' class. 
+ \li long rx packetsSent SpecialClass - Number of packets sent belonging to the
+ 'Special' class. 
+ \li long rx ackPacketsSent - Number of acknowledgement packets sent. 
+ \li long rx pingPacketsSent - Number of ping packets sent. 
+ \li long rx abortPacketsSent - Number of abort packets sent. 
+ \li long rx busyPacketsSent - Number of busy packets sent. 
+ \li long rx dataPacketsSent - Number of unique data packets sent. 
+ \li long rx dataPacketsReSent - Number of retransmissions sent. 
+ \li long rx dataPacketsPushed - Number of retransmissions pushed by a NACK. 
+ \li long rx ignoreAckedPacket - Number of packets whose acked flag was set at
+ rxi Start() time. 
+ \li long rx totalRtt Sec - Total round trip time in seconds. 
+ \li long rx totalRtt Usec - Microsecond portion of the total round trip time, 
+ \li long rx minRtt Sec - Minimum round trip time in seconds. 
+ \li long rx minRtt Usec - Microsecond portion of minimal round trip time. 
+ \li long rx maxRtt Sec - Maximum round trip time in seconds. 
+ \li long rx maxRtt Usec - Microsecond portion of maximum round trip time. 
+ \li long rx nRttSamples - Number of round trip samples. 
+ \li long rx nServerConns - Total number of server connections. 
+ \li long rx nClientConns - Total number of client connections. 
+ \li long rx nPeerStructs - Total number of peer structures. 
+ \li long rx nCallStructs - Total number of call structures. 
+ \li long rx nFreeCallStructs - Total number of call structures residing on the
+ free list. 
+ \li long host NumHostEntries - Number of host entries. 
+ \li long host HostBlocks - Number of blocks in use for host entries. 
+ \li long host NonDeletedHosts - Number of non-deleted host entries. 
+ \li long host HostsInSameNetOrSubnet - Number of host entries in the same
+ [sub]net as the File Server. 
+ \li long host HostsInDiffSubnet - Number of host entries in a different subnet
+ as the File Server. 
+ \li long host HostsInDiffNetwork - Number of host entries in a different
+ network entirely as the File Server. 
+ \li long host NumClients - Number of client entries. 
+ \li long host ClientBlocks - Number of blocks in use for client entries. 
+ \li long spare[32] - Spare fields, reserved for future use. 
+ 
+ 	\subsubsection sec5-1-2-8 Section 5.1.2.8: struct AFSFetchVolumeStatus 
+ 
+ \par
+ The results of asking the File Server for status information concerning a
+ particular volume it hosts. 
+ \n \b Fields 
+ \li long Vid - Volume ID. 
+ \li long ParentId - Volume ID in which the given volume is 'primarily' mounted. 
+ \li This is used to properly resolve pwd operations, as a volume may be mounted
+ simultaneously at multiple locations. 
+ \li char Online - Is the volume currently online and fully available? 
+ \li char InService - This field records whether the volume is currently in
+ service. It is indistinguishable from the Blessed field, 
+ \li char Blessed - See the description of the InService field immediately
+ above. 
+ \li char NeedsSalvage -Should this volume be salvaged (run through a
+ consistency- checking procedure)? 
+ \li long Type - The classification of this volume, namely a read/write volume
+ (RWVOL = 0), read-only volume (ROVOL = 1), or backup volume (BACKVOL = 2). 
+ \li long MinQuota - Minimum number of 1 Kbyte disk blocks to be set aside for
+ this volume. Note: this field is not currently set or accessed by any AFS
+ agents. 
+ \li long MaxQuota - Maximum number of 1 Kbyte disk blocks that may be occupied
+ by this volume. 
+ \li long BlocksInUse - Number of 1 Kbyte disk blocks currently in use by this
+ volume. 
+ \li long PartBlocksAvail - Number of available 1 Kbyte blocks currently unused
+ in the volume's partition. 
+ \li long PartMaxBlocks - Total number of blocks, in use or not, for the
+ volume's partition. 
+ 
+ 	\subsubsection sec5-1-2-9 Section 5.1.2.9: struct AFSStoreVolumeStatus 
+ 
+ \par
+ This structure is used to convey which of a file system object's status fields
+ should be set, and their new values. The RXAFS SetVolumeStatus() RPC call is
+ the only user of this structure. 
+ \n \b Fields 
+ \li long Mask - Bit mask to determine which of the following two fields should
+ be stored in the centralized status for a given volume. 
+ \li long MinQuota - Minimum number of 1 Kbyte disk blocks to be set aside for
+ this volume. 
+ \li long MaxQuota - Maximum number of 1 Kbyte disk blocks that may be occupied
+ by this volume. 
+ 
+ 	\subsubsection sec5-1-2-10 Section 5.1.2.10: struct AFSVolumeInfo 
+ 
+ \par
+ This field conveys information regarding a particular volume through certain
+ File Server RPC interface calls. For information regarding the different volume
+ types that exist, please consult the companion document, AFS-3 Programmer's
+ Reference:Volume Server/Volume Location Server Interface. 
+ \n \b Fields 
+ \li unsigned long Vid - Volume ID. 
+ \li long Type - Volume type (see struct AFSFetchVolumeStatus in Section 5.1.2.8
+ above). 
+ \li unsigned long Type0 ... Type4 - The volume IDs for the possible volume
+ types in existance for this volume. 
+ \li unsigned long ServerCount - The number of File Server machines on which an
+ instance of this volume is located. 
+ \li unsigned long Server0 ... Server7 - Up to 8 IP addresses of File Server
+ machines hosting an instance on this volume. The first ServerCount of these
+ fields hold valid server addresses. 
+ \li unsigned short Port0 ... Port7 - Up to 8 UDP port numbers on which
+ operations on this volume should be directed. The first ServerCount of these
+ fields hold valid port identifiers. 
+ 
+ 	\subsection sec5-1-3 Section 5.1.3: Non-Streamed Function Calls 
+ 
+ \par
+ The following is a description of the File Server RPC interface routines that
+ utilize only parameters with fixed maximum lengths. The majority of the File
+ Server calls fall into this suite, with only a handful using streaming
+ techniques to pass objects of unbounded size between a File Server and Cache
+ Manager. 
+ \par
+ Each function is labeled with an opcode number. This is the low-level numerical
+ identifier for the function, and appears in the set of network packets
+ constructed for the RPC call. 
+ 
+ 	\subsubsection sec5-1-3-1 Section 5.1.3.1: RXAFS FetchACL - Fetch the
+ ACL associated with the given AFS file identifier 
+ 
+ \code
+ int RXAFS FetchACL(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a dirFidP, 
+ 			OUT AFSOpaque *a ACLP, 
+ 			OUT AFSFetchStatus *a dirNewStatP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 131] Fetch the ACL for the directory identified by a dirFidP, placing
+ it in the space described by the opaque structure to which a ACLP points. Also
+ returned is the given directory's status, written to a dirNewStatP. An ACL may
+ thus take up at most AFSOPAQUEMAX (1,024) bytes, since this is the maximum size
+ of an AFSOpaque. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller is not permitted to perform this operation. EINVAL An
+ internal error in looking up the client record was encountered, or an invalid
+ fid was provided. VICETOKENDEAD Caller's authentication token has expired. 
+ 
+ 	\subsubsection sec5-1-3-2 Section 5.1.3.2: RXAFS FetchStatus - Fetch
+ the status information regarding a given file system object 
+ 
+ \code
+ int RXAFS FetchStatus(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a fidToStatP, 
+ 			OUT AFSFetchStatus *a currStatP, 
+ 			OUT AFSCallBack *a callBackP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 132] Fetch the current status information for the file or directory
+ identified by a fidToStatP, placing it into the area to which a currStatP
+ points. If the object resides in a read/write volume, then the related callback
+ information is returned in a callBackP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller is not permitted to perform this operation. EINVAL An
+ internal error in looking up the client record was encountered, or an invalid
+ fid was provided. VICETOKENDEAD Caller's authentication token has expired. 
+ 
+ 	\subsubsection sec5-1-3-3 Section 5.1.3.3: RXAFS StoreACL - Associate
+ the given ACL with the named directory 
+ 
+ \code
+ int RXAFS StoreACL(IN struct rx connection *a rxConnP, 
+ 			IN AFSOpaque *a ACLToStoreP, 
+ 			IN AFSFid *a dirFidP, 
+ 			OUT AFSFetchStatus *a dirNewStatP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 134] Store the ACL information to which a ACLToStoreP points to the
+ File Server, associating it with the directory identified by a dirFidP. The
+ resulting status information for the a dirFidP directory is returned in a
+ dirNewStatP. Note that the ACL supplied via a ACLToStoreP may be at most
+ AFSOPAQUEMAX (1,024) bytes long, since this is the maximum size accommodated by
+ an AFSOpaque. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller is not permitted to perform this operation. 
+ \n E2BIG The given ACL is too large. 
+ \n EINVAL The given ACL could not translated to its on-disk format. 
+ 
+ 	\subsubsection sec5-1-3-4 Section 5.1.3.4: RXAFS StoreStatus - Store
+ the given status information for the specified file 
+ 
+ \code
+ int RXAFS StoreStatus(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a fidP, 
+ 			IN AFSStoreStatus *a currStatusP, 
+ 			OUT AFSFetchStatus *a srvStatusP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 135] Store the status information to which a currStatusP points,
+ associating it with the file identified by a fidP. All outstanding callbacks on
+ this object are broken. The resulting status structure stored at the File
+ Server is returned in a srvStatusP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller is not permitted to perform this operation. 
+ \n EINVAL An internal error in looking up the client record was encountered, or
+ an invalid fid was provided, or an attempt was made to change the mode of a
+ symbolic link. 
+ \n VICETOKENDEAD Caller's authentication token has expired. 
+ 
+ 	\subsubsection sec5-1-3-5 Section 5.1.3.5: RXAFS RemoveFile - Delete
+ the given file 
+ 
+ \code
+ int RXAFS RemoveFile(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a dirFidP, 
+ 			IN char *a name<AFSNAMEMAX>, 
+ 			OUT AFSFetchStatus *a srvStatusP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 136] Destroy the file named a name within the directory identified by a
+ dirFidP. All outstanding callbacks on this object are broken. The resulting
+ status structure stored at the File Server is returned in a srvStatusP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller is not permitted to perform this operation. 
+ \n EINVAL An internal error in looking up the client record was encountered, or
+ an invalid fid was provided, or an attempt was made to remove "." or "..". 
+ \n EISDIR The target of the deletion was supposed to be a file, but it is
+ really a directory. 
+ \n ENOENT The named file was not found. 
+ \n ENOTDIR The a dirFidP parameter references an object which is not a
+ directory, or the deletion target is supposed to be a directory but is not. 
+ \n ENOTEMPTY The target directory being deleted is not empty. 
+ \n VICETOKENDEAD Caller's authentication token has expired. 
+ 
+ 	\subsubsection sec5-1-3-6 Section 5.1.3.6: RXAFS CreateFile - Create
+ the given file 
+ 
+ \code
+ int RXAFS CreateFile(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *DirFid, 
+ 			IN char *Name, 
+ 			IN AFSStoreStatus *InStatus, 
+ 			OUT AFSFid *OutFid, 
+ 			OUT AFSFetchStatus *OutFidStatus, 
+ 			OUT AFSFetchStatus *OutDirStatus, 
+ 			OUT AFSCallBack *CallBack, 
+ 			OUT AFSVolSync *a volSyncP) 
+ /* associated with the new file. */
+ \endcode
+ \par Description 
+ [Opcode 137] This call is used to create a file, but not for creating a
+ directory or a symbolic link. If this call succeeds, it is the Cache Manager's
+ responsibility to either create an entry locally in the directory specified by
+ DirFid or to invalidate this directory's cache entry. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller is not permitted to perform this operation. 
+ \n EINVAL An internal error in looking up the client record was encountered, or
+ an invalid fid or name was provided. 
+ \n ENOTDIR The DirFid parameter references an object which is not a directory. 
+ \n VICETOKENDEAD Caller's authentication token has expired. 
+ 
+ 	\subsubsection sec5-1-3-7 Section 5.1.3.7: RXAFS Rename - Rename the
+ specified file in the given directory 
+ 
+ \code
+ int RXAFS Rename(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a origDirFidP, 
+ 			IN char *a origNameP, 
+ 			IN AFSFid *a newDirFidP, 
+ 			IN char *a newNameP, 
+ 			OUT AFSFetchStatus *a origDirStatusP, 
+ 			OUT AFSFetchStatus *a newDirStatusP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 138] Rename file a origNameP in the directory identified by a
+ origDirFidP. Its new name is to be a newNameP, and it will reside in the
+ directory identified by a newDirFidP. Each of these names must be no more than
+ AFSNAMEMAX (256) characters long. The status of the original and new
+ directories after the rename operation completes are deposited in a
+ origDirStatusP and a newDirStatusP respectively. Existing callbacks are broken
+ for all files and directories involved in the operation. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES New file exists but user doesn't have Delete rights in the directory. 
+ \n EINVAL Name provided is invalid. 
+ \n EISDIR Original object is a file and new object is a directory. 
+ \n ENOENT The object to be renamed doesn't exist in the parent directory. 
+ \n ENOTDIR Original object is a directory and new object is a file. 
+ \n EXDEV Rename attempted across a volume boundary, or create a pathname loop,
+ or hard links exist to the file. 
+ 
+ 	\subsubsection sec5-1-3-8 Section 5.1.3.8: RXAFS Symlink - Create a
+ symbolic link 
+ 
+ \code
+ int RXAFS Symlink(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a dirFidP, 
+ 			IN char *a nameP, 
+ 			IN char *a linkContentsP, 
+ 			IN AFSStoreStatus *a origDirStatP, 
+ 			OUT AFSFid *a newFidP, 
+ 			OUT AFSFetchStatus *a newFidStatP, 
+ 			OUT AFSFetchStatus *a newDirStatP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 139] Create a symbolic link named a nameP in the directory identified
+ by a dirFidP. The text of the symbolic link is provided in a linkContentsP, and
+ the desired status fields for the symbolic link given by a origDirStatP. The
+ name offered in a nameP must be less than AFSNAMEMAX (256) characters long, and
+ the text of the link to which a linkContentsP points must be less than
+ AFSPATHMAX (1,024) characters long. Once the symbolic link has been
+ successfully created, its file identifier is returned in a newFidP. Existing
+ callbacks to the a dirFidP directory are broken before the symbolic link
+ creation completes. The status fields for the symbolic link itself and its
+ parent's directory are returned in a newFidStatP and a newDirStatP
+ respectively. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EINVAL Illegal symbolic link name provided. 
+ 
+ 	\subsubsection sec5-1-3-9 Section 5.1.3.9: RXAFS Link - Create a hard
+ link 
+ 
+ \code
+ int RXAFS Link(IN struct rx connection *a rxConnP, 
+ 		IN AFSFid *a dirFidP, 
+ 		IN char *a nameP, 
+ 		IN AFSFid *a existingFidP, 
+ 		OUT AFSFetchStatus *a newFidStatP, 
+ 		OUT AFSFetchStatus *a newDirStatP, 
+ 		OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 140] Create a hard link named a nameP in the directory identified by a
+ dirFidP. The file serving as the basis for the hard link is identified by
+ existingFidP. The name offered in a nameP must be less than AFSNAMEMAX (256)
+ characters long. Existing callbacks to the a dirFidP directory are broken
+ before the hard link creation completes. The status fields for the file itself
+ and its parent's directory are returned in a newFidStatP and a newDirStatP
+ respectively. 
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EISDIR An attempt was made to create a hard link to a directory. 
+ \n EXDEV Hard link attempted across directories. 
+ 
+ 	\subsubsection sec5-1-3-10 Section 5.1.3.10: RXAFS MakeDir - Create a
+ directory 
+ 
+ \code
+ int RXAFS MakeDir(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a parentDirFid,P 
+ 			IN char *a newDirNameP, 
+ 			IN AFSStoreStatus *a currStatP, 
+ 			OUT AFSFid *a newDirFidP, 
+ 			OUT AFSFetchStatus *a dirFidStatP, 
+ 			OUT AFSFetchStatus *a parentDirStatP, 
+ 			OUT AFSCallBack *a newDirCallBackP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 141] Create a directory named a newDirNameP within the directory
+ identified by a parentDirFidP. The initial status fields for the new directory
+ are provided in a currStatP. The new directory's name must be less than
+ AFSNAMEMAX (256) characters long. The new directory's ACL is inherited from its
+ parent. Existing callbacks on the parent directory are broken before the
+ creation completes. Upon successful directory creation, the new directory's
+ file identifier is returned in a newDirFidP, and the resulting status
+ information for the new and parent directories are stored in a dirFidStatP and
+ a parentDirStatP respectively. In addition, a callback for the new directory is
+ returned in a newDirCallBackP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EINVAL The directory name provided is unacceptable. 
+ 
+ 	\subsubsection sec5-1-3-11 Section 5.1.3.11: RXAFS RemoveDir - Remove a
+ directory 
+ 
+ \code
+ int RXAFS RemoveDir(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a parentDirFidP, 
+ 			IN char *a dirNameP, 
+ 			OUT AFSFetchStatus *a newParentDirStatP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 142] Remove the directory named a dirNameP from within its parent
+ directory, identified by a parentDirFid. The directory being removed must be
+ empty, and its name must be less than AFSNAMEMAX (256) characters long.
+ Existing callbacks to the directory being removed and its parent directory are
+ broken before the deletion completes. Upon successful deletion, the status
+ fields for the parent directory are returned in a newParentDirStatP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ 
+ 	\subsubsection sec5-1-3-12 Section 5.1.3.12: RXAFS GetStatistics - Get
+ common File Server statistics 
+ 
+ \code
+ int RXAFS GetStatistics(IN struct rx connection *a rxConnP, 
+ 			OUT ViceStatistics *a FSInfoP) 
+ \endcode
+ \par Description 
+ [Opcode 146] Fetch the structure containing a set of common File Server
+ statistics. These numbers represent accumulated readings since the time the
+ File Server last restarted. For a full description of the individual fields
+ contained in this structure, please see Section 5.1.2.6. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ ---No error codes generated. 
+ 
+ 	\subsubsection sec5-1-3-13 Section 5.1.3.13: RXAFS GiveUpCallBacks -
+ Ask the File Server to break the given set of callbacks on the corresponding
+ set of file identifiers 
+ 
+ \code
+ int RXAFS GiveUpCallBacks(IN struct rx connection *a rxConnP, 
+ 				IN AFSCBFids *a fidArrayP, 
+ 				IN AFSCBs *a callBackArrayP) 
+ \endcode
+ \par Description 
+ [Opcode 147] Given an array of up to AFSCBMAX file identifiers in a fidArrayP
+ and a corresponding number of callback structures in a callBackArrayP, ask the
+ File Server to remove these callbacks from its register. Note that this routine
+ only affects callbacks outstanding on the given set of files for the host
+ issuing the RXAFS GiveUpCallBacks call. Callback promises made to other
+ machines on any or all of these files are not affected. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ EINVAL More file identifiers were provided in the a fidArrayP than callbacks in
+ the a callBackArray. 
+ 
+ 	\subsubsection sec5-1-3-14 Section 5.1.3.14: RXAFS GetVolumeInfo - Get
+ information about a volume given its name 
+ 
+ \code
+ int RXAFS GetVolumeInfo(IN struct rx connection *a rxConnP, 
+ 			IN char *a volNameP, 
+ 			OUT VolumeInfo *a volInfoP) 
+ \endcode
+ \par Description 
+ [Opcode 148] Ask the given File Server for information regarding a volume whose
+ name is a volNameP. The volume name must be less than AFSNAMEMAX characters
+ long, and the volume itself must reside on the File Server being probed. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Please note that definitions for the error codes with VL prefixes may
+ be found in the vlserver.h include file 
+ \par Error Codes 
+ Could not contact any of the corresponding Volume Location Servers. 
+ VL BADNAME An improperly-formatted volume name provided. 
+ \n VL ENTDELETED An entry was found for the volume, reporting that the volume
+ has been deleted. 
+ \n VL NOENT The given volume was not found. 
+ 
+ 	\subsubsection sec5-1-3-15 Section 5.1.3.15: RXAFS GetVolumeStatus -
+ Get basic status information for the named volume 
+ 
+ \code
+ int RXAFS GetVolumeStatus(IN struct rx connection *a rxConnP, 
+ 				IN long a volIDP, 
+ 				OUT AFSFetchVolumeStatus *a volFetchStatP, 
+ 				OUT char *a volNameP, 
+ 				OUT char *a offLineMsgP, 
+ 				OUT char *a motdP) 
+ \endcode
+ \par Description 
+ [Opcode 149] Given the numeric volume identifier contained in a volIDP, fetch
+ the basic status information corresponding to that volume. This status
+ information is stored into a volFetchStatP. A full description of this status
+ structure is found in Section 5.1.2.8. In addition, three other facts about the
+ volume are returned. The volume's character string name is placed into a
+ volNameP. This name is guaranteed to be less than AFSNAMEMAX characters long.
+ The volume's offline message, namely the string recording why the volume is
+ off-line (if it is), is stored in a offLineMsgP . Finally, the volume's
+ "Message of the Day" is placed in a motdP. Each of the character strings
+ deposited into a offLineMsgP and a motdP is guaranteed to be less than
+ AFSOPAQUEMAX (1,024) characters long. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EINVAL A volume identifier of zero was specified. 
+ 
+ 	\subsubsection sec5-1-3-16 Section 5.1.3.16: RXAFS SetVolumeStatus -
+ Set the basic status information for the named volume
+ 
+ \code
+ int RXAFS SetVolumeStatus(struct rx connection *a rxConnP,
+ 				long avolIDP, 
+ 				AFSStoreVolumeStatus *a volStoreStatP, 
+ 				char *a volNameP, 
+ 				char *a offLineMsgP, 
+ 				char *a motdP) 
+ /* for the named volume */
+ \endcode
+ \par Description
+ [Opcode 150] Given the numeric volume identifier contained in a volIDP, set
+ that volume's basic status information to the values contained in a
+ volStoreStatP. A full description of the fields settable by this call,
+ including the necessary masking, is found in Section 5.1.2.9. In addition,
+ three other items relating to the volume may be set. Non-null character strings
+ found in a volNameP, a offLineMsgP, and a motdP will be stored in the volume's
+ printable name, off-line message, and "Message of the Day" fields respectively.
+ The volume name provided must be less than AFSNAMEMAX (256) characters long,
+ and the other two strings must be less than AFSOPAQUEMAX (1,024) characters
+ long each. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EINVAL A volume identifier of zero was specified. 
+ 
+ 	\subsubsection sec5-1-3-17 Section 5.1.3.17: RXAFS GetRootVolume -
+ Return the name of the root volume for the file system 
+ 
+ \code
+ int RXAFS GetRootVolume(IN struct rx connection *a rxConnP, 
+ 			OUT char *a rootVolNameP) 
+ \endcode
+ \par Description 
+ [Opcode 151] Fetch the name of the volume which serves as the root of the AFS
+ file system and place it into a rootVolNameP. This name will always be less
+ than AFSNAMEMAX characters long. Any File Server will respond to this call, not
+ just the one hosting the root volume. The queried File Server first tries to
+ discover the name of the root volume by reading from the
+ /usr/afs/etc/RootVolume file on its local disks. If that file doesn't exist,
+ then it will return the default value, namely "root.afs". 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ ---No error codes generated. 
+ 
+ 	\subsubsection sec5-1-3-18 5.1.3.18: RXAFS CheckToken - (Obsolete)
+ Check that the given user identifier matches the one in the supplied
+ authentication token 
+ 
+ \code
+ int RXAFS CheckToken(IN struct rx connection *a rxConnP, 
+ 			IN long ViceId, 
+ 			IN AFSOpaque *token) 
+ \endcode
+ \par Description 
+ [Opcode 152] This function only works for the now-obsolete RPC facility used by
+ AFS, R. For modern systems using the Rx RPC mechanism, we always get an error
+ return from this routine. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ ECONNREFUSED Always returned on Rx connections. 
+ 
+ 	\subsubsection sec5-1-3-19 Section 5.1.3.19: RXAFS GetTime - Get the
+ File Server's time of day 
+ 
+ \code
+ int RXAFS GetTime(IN struct rx connection *a rxConnP, 
+ 			OUT unsigned long *a secondsP, 
+ 			OUT unsigned long *a uSecondsP) 
+ \endcode
+ \par Description 
+ [Opcode 153] Get the current time of day from the File Server specified in the
+ Rx connection information contained in a rxConnP. The time is returned in
+ elapsed seconds (a secondsP) and microseconds (a uSecondsP) since that standard
+ unix "start of the world". 
+ \par Error Codes 
+ ---No error codes generated. 
+ 
+ 	\subsubsection sec5-1-3-20 Section 5.1.3.20: RXAFS NGetVolumeInfo - Get
+ information about a volume given its name 
+ 
+ \code
+ int RXAFS NGetVolumeInfo(IN struct rx connection *a rxConnP, 
+ 				IN char *a volNameP, 
+ 				OUT AFSVolumeInfo *a volInfoP) 
+ \endcode
+ \par Description 
+ [Opcode 154] This function is identical to RXAFS GetVolumeInfo() (see Section
+ 5.1.3.14), except that it returns a struct AFSVolumeInfo instead of a struct
+ VolumeInfo. The basic difference is that struct AFSVolumeInfo also carries an
+ accompanying UDP port value for each File Server listed in the record. 
+ 
+ 	\subsubsection sec5-1-3-21 Section 5.1.3.21: RXAFS BulkStatus - Fetch
+ the status information regarding a set of given file system objects 
+ 
+ \code
+ int RXAFS BulkStatus(IN struct rx connection *a rxConnP, 
+ 			IN AFSCBFids *a fidToStatArrayP, 
+ 			OUT AFSBulkStats *a currStatArrayP, 
+ 			OUT AFSCBs *a callBackArrayP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 155] This routine is identical to RXAFS FetchStatus() as described in
+ Section 5.1.3.2, except for the fact that it allows the caller to ask for the
+ current status fields for a set of up to AFSCBMAX (50) file identifiers at
+ once. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EINVAL The number of file descriptors for which status information was
+ requested is illegal. 
+ 
+ 	\subsubsection sec5-1-3-22 Section 5.1.3.22: RXAFS SetLock - Set an
+ advisory lock on the given file identifier 
+ 
+ \code
+ int RXAFS SetLock(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a fidToLockP, 
+ 			IN ViceLockType a lockType, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 156] Set an advisory lock on the file identified by a fidToLockP. There
+ are two types of locks that may be specified via a lockType: LockRead and
+ LockWrite. An advisory lock times out after AFS LOCKWAIT (5) minutes, and must
+ be extended in order to stay in force (see RXAFS ExtendLock(), Section
+ 5.1.3.23). 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EINVAL An illegal lock type was specified. 
+ \n EWOULDBLOCK The lock was already incompatibly granted to another party. 
+ 
+ 	\subsubsection sec5-1-3-23 Section 5.1.3.23: RXAFS ExtendLock - Extend
+ an advisory lock on a file 
+ 
+ \code
+ int RXAFS ExtendLock(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a fidToBeExtendedP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 157] Extend the advisory lock that has already been granted to the
+ caller on the file identified by a fidToBeExtendedP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EINVAL The caller does not already have the given file locked. 
+ 
+ 	\subsubsection sec5-1-3-24 Section 5.1.3.24: RXAFS ReleaseLock -
+ Release the advisory lock on a file 
+ 
+ \code
+ int RXAFS ReleaseLock(IN struct rx connection *a rxConnP, 
+ 			IN AFSFid *a fidToUnlockP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ [Opcode 158] Release the advisory lock held on the file identified by a
+ fidToUnlockP. If this was the last lock on this file, the File Server will
+ break all existing callbacks to this file. 
+ \par 
+ Rx connection information for the related File Server is contained in a
+ rxConnP. Volume version information is returned for synchronization purposes in
+ a volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ 
+ 	\subsubsection sec5-1-3-25 Section 5.1.3.25: RXAFS XStatsVersion - Get
+ the version number associated with the File Server's extended statistics
+ structure 
+ 
+ \code
+ int RXAFS XStatsVersion(IN struct rx connection *a rxConnP, 
+ 			OUT long *a versionNumberP) 
+ \endcode
+ \par Description 
+ [Opcode 159] This call asks the File Server for the current version number of
+ the extended statistics structures it exports (see RXAFS GetXStats(), Section
+ 5.1.3.26). The version number is placed into a versionNumberP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ ---No error codes generated. 
+ 
+ 	\subsubsection sec5-1-3-26 Section 5.1.3.26: RXAFS GetXStats - Get the
+ current contents of the specified extended statistics structure 
+ 
+ \code
+ int RXAFS GetXStats(IN struct rx connection *a rxConnP, 
+ 			IN long a clientVersionNumber, 
+ 			IN long a collectionNumber, 
+ 			OUT long *a srvVersionNumberP, 
+ 			OUT long *a timeP, 
+ 			OUT AFS CollData *a dataP) 
+ \endcode
+ \par Description 
+ [Opcode 160] This function fetches the contents of the specified File Server
+ extended statistics structure. The caller provides the version number of the
+ data it expects to receive in a clientVersionNumber. Also provided in a
+ collectionNumber is the numerical identifier for the desired data collection.
+ There are currently two of these data collections defined: AFS XSTATSCOLL CALL
+ INFO, which is the list of tallies of the number of invocations of internal
+ File Server procedure calls, and AFS XSTATSCOLL PERF INFO, which is a list of
+ performance-related numbers. The precise contents of these collections are
+ described in Sections 5.1.2.7. The current version number of the File Server
+ collections is returned in a srvVersionNumberP, and is always set upon return,
+ even if the caller has asked for a difierent version. If the correct version
+ number has been specified, and a supported collection number given, then the
+ collection data is returned in a dataP. The time of collection is also
+ returned, being placed in a timeP. 
+ \par
+ Rx connection information for the related File Server is contained in a
+ rxConnP. 
+ \par Error Codes 
+ ---No error codes are generated. 
+ 
+ 	\subsection sec5-1-4 Section 5.1.4: Streamed Function Calls 
+ 
+ \par
+ There are two streamed functions in the File Server RPC interface, used to
+ fetch and store arbitrary amounts of data from a file. While some non-streamed
+ calls pass such variable-length objects as struct AFSCBFids, these objects have
+ a pre-determined maximum size. 
+ \par
+ The two streamed RPC functions are also distinctive in that their single Rxgen
+ declarations generate not one but two client-side stub routines. The first is
+ used to ship the IN parameters off to the designated File Server, and the
+ second to gather the OUT parameters and the error code. If a streamed
+ definition declares a routine named X YZ(), the two resulting stubs will be
+ named StartX YZ() and EndX YZ(). It is the application programmer's job to
+ first invoke StartX YZ(), then manage the unbounded data transfer, then finish
+ up by calling EndX YZ(). The first longword in the unbounded data stream being
+ fetched from a File Server contains the number of data bytes to follow. The
+ application then reads the specified number of bytes from the stream. 
+ \par
+ The following sections describe the four client-side functions resulting from
+ the Fetch-Data() and StoreData() declarations in the Rxgen interface definition
+ file. These are the actual routines the application programmer will include in
+ the client code. For reference, here are the interface definitions that
+ generate these functions. Note that the split keyword is what causes Rxgen to
+ generate the separate start and end routines. In each case, the number after
+ the equal sign specifies the function's identifying opcode number. The opcode
+ is passed to the File Server by the StartRXAFS FetchData() and StartRXAFS
+ StoreData() stub routines. 
+ 
+ \code
+ FetchData(IN AFSFid *a_fidToFetchP, 
+ 		IN long a_offset, 
+ 		IN long a_lenInBytes, 
+ 		OUT AFSFetchStatus *a_fidStatP, 
+ 		OUT AFSCallBack *a_callBackP, 
+ 		OUT AFSVolSync *a_volSyncP) split = 130; 
+ 
+ StoreData(IN AFSFid *Fid, 
+ 		IN AFSStoreStatus *InStatus, 
+ 		IN long Pos, 
+ 		IN long Length, 
+ 		IN long FileLength, 
+ 		OUT AFSFetchStatus *OutStatus, 
+ 		OUT AFSVolSync *a_volSyncP) split = 133; 
+ \endcode
+ 
+ 	\subsubsection sec5-1-4-1 Section 5.1.4.1: StartRXAFS FetchData - Begin
+ a request to fetch file data 
+ 
+ \code
+ int StartRXAFS FetchData(IN struct rx call *a rxCallP, 
+ 				IN AFSFid *a fidToFetchP, 
+ 				IN long a offset, 
+ 				IN long a lenInBytes) 
+ \endcode
+ 
+ \par Description
+ Begin a request for a lenInBytes bytes of data starting at byte offset a offset
+ from the file identified by a fidToFetchP. After successful completion of this
+ call, the data stream will make the desired bytes accessible. The first
+ longword in the stream contains the number of bytes to actually follow. 
+ \par
+ Rx call information to the related File Server is contained in a rxCallP. 
+ \par Error Codes 
+ ---No error codes generated. 
+ 
+ 	\subsubsection sec5-1-4-2 Section 5.1.4.2: EndRXAFS FetchData -
+ Conclude a request to fetch file data 
+ 
+ \code
+ int EndRXAFS FetchData(IN struct rx call *a rxCallP, 
+ 			OUT AFSFetchStatus *a fidStatP, 
+ 			OUT AFSCallBack *a callBackP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description
+ Conclude a request to fetch file data, as commenced by an StartRXAFS
+ FetchData() invocation. By the time this routine has been called, all of the
+ desired data has been read off the data stream. The status fields for the file
+ from which the data was read are stored in a fidStatP. If the file was from a
+ read/write volume, its callback information is placed in a callBackP. 
+ \par
+ Rx call information to the related File Server is contained in a rxCallP.
+ Volume version information is returned for synchronization purposes in a
+ volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. EIO Given file
+ could not be opened or statted on the File Server, or there was an error
+ reading the given data off the File Server's disk. 
+ \n -31 An Rx write into the stream ended prematurely. 
+ 
+ 	\subsubsection sec5-1-4-3 Section 5.1.4.3: StartRXAFS StoreData - Begin
+ a request to store file data 
+ 
+ \code
+ int StartRXAFS StoreData(IN struct rx call *a rxCallP, 
+ 				IN AFSFid *a fidToStoreP, 
+ 				IN reStatus *a fidStatusP, 
+ 				IN AFSStolong a offset, 
+ 				IN long a lenInBytes, 
+ 				IN long a fileLenInBytes) 
+ \endcode
+ \par Description
+ Begin a request to write a lenInBytes of data starting at byte offset a offset
+ to the file identified by a fidToStoreP, causing that file's length to become a
+ fileLenInBytes bytes. After successful completion of this call, the data stream
+ will be ready to begin accepting the actual data being written. 
+ \par
+ Rx call information to the related File Server is contained in a rxCallP. 
+ \par Error Codes 
+ ---No error codes generated. 
+ 
+ 	\subsubsection sec5-1-4-4 Section 5.1.4.4: EndRXAFS StoreData -
+ Conclude a request to store file data 
+ 
+ \code
+ int EndRXAFS StoreData(IN struct rx call *a rxCallP, 
+ 			OUT AFSFetchStatus *a fidStatP, 
+ 			OUT AFSCallBack *a callBackP, 
+ 			OUT AFSVolSync *a volSyncP) 
+ \endcode
+ \par Description 
+ Conclude a request to store file data, as commenced by a StartRXAFS StoreData()
+ invocation. By the time this routine has been called, all of the file data has
+ been inserted into the data stream. The status fields for the file to which the
+ data was written are stored in a fidStatP. All existing callbacks to the given
+ file are broken before the store concludes. 
+ \par
+ Rx call information to the related File Server is contained in a rxCallP.
+ Volume version information is returned for synchronization purposes in a
+ volSyncP. 
+ \par Error Codes 
+ EACCES The caller does not have the necessary access rights. 
+ \n EISDIR The file being written to is a symbolic link. 
+ \n ENOSPEC A write to the File Server's file on local disk failed. 
+ \n -32 A short read was encountered by the File Server on the data stream. 
+ 
+ 	\subsection sec5-1-5 Section 5.1.5: Example of Streamed Function Call
+ Usage 
+ 
+ 	\subsubsection sec5-1-5-1 Section 5.1.5.1: Preface 
+ 
+ \par
+ The following code fragment is offered as an example of how to use the streamed
+ File Server RPC calls. In this case, a client fetches some amount of data from
+ the given File Server and writes it to a local file it uses to cache the
+ information. For simplicity, many issues faced by a true application programmer
+ are not addressed here. These issues include locking, managing file chunking,
+ data version number mismatches, volume location, Rx connection management,
+ defensive programming (e.g., checking parameters before using them),
+ client-side cache management algorithms, callback management, and full error
+ detection and recovery. Pseudocode is incorporated when appropriate to keep the
+ level of detail reasonable. For further descriptions of some of these details
+ and issues, the reader is referred to such companion documents as AFS-3
+ Programmer's Reference: Specification for the Rx Remote Procedure Call
+ Facility, AFS-3 Programmer's Reference:Volume Server/Volume Location Server
+ Interface, and AFS-3 Programmer's Reference: Architectural Overview. 
+ \par
+ A discussion of the methods used within the example code fragment follows
+ immediately afterwards in Section 5.1.5.3. 
+ 
+ 	\subsubsection sec5-1-5-2 Section 5.1.5.2: Code Fragment Illustrating
+ Fetch Operation 
+ 
+ \code
+ int code; /*Return code*/ 
+ long bytesRead; /*Num bytes read from Rx*/ 
+ struct myConnInfo *connP; /*Includes Rx conn info*/ 
+ struct rx_call *rxCallP; /*Rx call ptr*/ 
+ struct AFSFid *afsFidP; /*Fid for file to fetch*/ 
+ int lclFid; /*Fid for local cache file*/ 
+ long offsetBytes; /*Starting fetch offset*/ 
+ long bytesToFetch; /*Num bytes to fetch*/ 
+ long bytesFromFS; /*Num bytes FileServer returns*/ 
+ char *fetchBuffP; /*Buffer to hold stream data*/ 
+ int currReadBytes; /*Num bytes for current read*/ 
+ /* 
+ * Assume that connP, afsFidP, offsetBytes, lclFid,and 
+ * bytesToFetch have all been given their desired values. 
+ */ . . . 
+ rxCallP = rx_NewCall(connP->rxConnP); 
+ code = StartRXAFS_FetchData( rxCallP, /*Rx call to use*/ 
+ 			afsFidP, /*Fid being fetched from*/ 
+ 			offsetBytes, /*Offset in bytes*/ 
+ 			bytesToFetch); /*Num bytes wanted*/ 
+ if (code == 0) 
+ { 
+ 	bytesRead = rx_Read(rxCallP, &bytesFromFS, sizeof(long)); 
+ 	if (bytesRead != sizeof(long)) ExitWithError(SHORT_RX_READ); 
+ 	bytesFromFS = ntohl(bytesFromFS); 
+ 	xmitBuffer = malloc(FETCH_BUFF_BYTES); 
+ 	lclFid = open(CacheFileName, O_RDWR, mode); 
+ 	pos = lseek(lclFid, offsetBytes, L_SET); 
+ 	while (bytesToFetch > 0) { 
+ 		currReadBytes = (bytesToFetch > FETCH_BUFF_BYTES) ?  
+ 				FETCH_BUFF_BYTES : bytesToFetch; 
+ 		bytesRead = rx_Read(rxCallP, fetchBuffP, currReadBytes); 
+ 		if (bytesRead != currReadBytes) ExitWithError(SHORT_RX_READ); 
+ 		code = write(lclFid, fetchBuffP, currReadBytes); 
+ 		if (code) ExitWithError(LCL_WRITE_FAILED); 
+ 		bytesToFetch -= bytesRead; 
+ 	} /*Read from the Rx stream*/ 
+ 	close(lclFid); 
+ } else ExitWithError(code); 
+ code = EndRXAFS_FetchData( rxCallP, /*Rx call to use*/ 
+ 				fidStatP, /*Resulting stat fields*/ 
+ 				fidCallBackP, /*Resulting callback info*/ 
+ 				volSynchP); /*Resulting volume sync info*/ 
+ 				code = rx_EndCall(rxCallP, code); 
+ return(code); . . . 
+ \endcode
+ 
+ 	\subsubsection sec5-1-5-3 Section 5.1.5.3: Discussion and Analysis 
+ 
+ \par
+ The opening assumption in this discussion is that all the information required
+ to do the fetch has already been set up. These mandatory variables are the
+ client-side connection information for the File Server hosting the desired
+ file, the corresponding AFS file identifier, the byte offset into the file, the
+ number of bytes to fetch, and the identifier for the local file serving as a
+ cached copy. 
+ \par
+ Given the Rx connection information stored in the client's connP record, rx
+ NewCall() is used to create a new Rx call to handle this fetch operation. The
+ structure containing this call handle is placed into rxCallP. This call handle
+ is used immediately in the invocation of StartRXAFS FetchData(). If this setup
+ call fails, the fragment exits. Upon success, though, the File Server will
+ commence writing the desired data into the Rx data stream. The File Server
+ first writes a single longword onto the stream announcing to the client how
+ many bytes of data will actually follow. The fragment reads this number with
+ its first rx Read() call. Since all Rx stream data is written in network byte
+ order, the fragment translates the byte count to its own host byte order first
+ to properly interpret it. Once the number of bytes to appear on the stream is
+ known, the client code proceeds to open the appropriate cache file on its own
+ local disk and seeks to the appropriate spot within it. A buffer into which the
+ stream data will be placed is also created at this time. 
+ \par
+ The example code then falls into a loop where it reads all of the data from the
+ File Server and stores it in the corresponding place in the local cache file.
+ For each iteration, the code decides whether to read a full buffer's worth or
+ the remaining number of bytes, whichever is smaller. After all the data is
+ pulled off the Rx stream, the local cache file is closed. At this point, the
+ example finishes off the RPC by calling EndRXAFS FetchData(). This gathers in
+ the required set of OUT parameters, namely the status fields for the file just
+ fetched, callback and volume synchronization information, and the overall error
+ code for the streamed routine. The Rx call created to perform the fetch is then
+ terminated and cleaned up by invoking rx EndCall(). 
+ 
+ 	\subsection sec5-1-6 Section 5.1.6: Required Caller Functionality 
+ 
+ \par
+ The AFS File Server RPC interface was originally designed to interact only with
+ Cache Manager agents, and thus made some assumptions about its callers. In
+ particular, the File Server expected that the agents calling it would
+ potentially have stored callback state on file system objects, and would have
+ to be periodically pinged in order to garbage-collect its records, removing
+ information on dead client machines. Thus, any entity making direct calls to
+ this interface must mimic certain Cache Manager actions, and respond to certain
+ Cache Manager RPC interface calls. 
+ \par
+ To be safe, any application calling the File Server RPC interface directly
+ should export the entire Cache Manager RPC interface. Realistically, though, it
+ will only need to provide stubs for the three calls from this interface that
+ File Servers know how to make: RXAFSCB InitCallBackState(), RXAFSCB Probe() and
+ RXAFSCB CallBack(). The very first File Server call made by this application
+ will prompt the given File Server to call RXAFSCB InitCallBackState(). This
+ informs the application that the File Server has no record of its existence and
+ hence this "Cache Manager" should clear all callback information for that
+ server. Once the application responds positively to the inital RXAFSCB
+ InitCallBackState(), the File Server will treat it as a bona fide,
+ fully-fledged Cache Manager, and probe it every so often with RXAFSCB Probe()
+ calls to make sure it is still alive. 
+ 
+ 	\section sec5-2 Section 5.2: Signal Interface 
+ 
+ \par
+ While the majority of communication with AFS File Servers occurs over the RPC
+ interface, some important operations are invoked by sending unix signals to the
+ process. This section describes the set of signals recognized by the File
+ Server and the actions they trigger upon receipt, as summarized below: 
+ \li SIGQUIT: Shut down a File Server. 
+ \li SIGTSTP: Upgrade debugging output level. 
+ \li SIGHUP: Reset debugging output level. 
+ \li SIGTERM: Generate debugging output specifically concerning open files
+ within the File Server process. 
+ 
+ 	\subsection sec5-2-1 Section 5.2.1: SIGQUIT: Server Shutdown 
+ 
+ \par
+ Upon receipt of this signal, the File Server shuts itself down in an orderly
+ fashion. It first writes a message to the console and to its log file
+ (/usr/afs/logs/FileLog) stating that a shutdown has commenced. The File Server
+ then flushes all modified buffers and prints out a set of internal statistics,
+ including cache and disk numbers. Finally, each attached volume is taken
+ offline, which means the volume header is written to disk with the appropriate
+ bits set. 
+ \par
+ In typical usage, human operators do not send the SIGQUIT signal directly to
+ the File Server in order to affect an orderly shutdown. Rather, the BOS Server
+ managing the server processes on that machine issues the signal upon receipt of
+ a properly-authorized shutdown RPC request. 
+ 
+ 	\subsection sec5-2-2 Section 5.2.2: SIGTSTP: Upgrade Debugging Level 
+ 
+ \par
+ Arrival of a SIGTSTP signal results in an increase of the debugging level used
+ by the File Server. The routines used for writing to log files are sensitive to
+ this debugging level, as recorded in the global LogLevel variable.
+ Specifically, these routines will only generate output if the value of LogLevel
+ is greater than or equal to the value of its threshold parameter. By default,
+ the File Server sets LogLevel to zero upon startup. If a SIGTSTP signal is
+ received when the debugging level is zero, it will be bumped to 1. If the
+ signal arrives when the debugging level is positive, its value will be
+ multiplied by 5. Thus, as more SIGTSTPs are received, the set of debugging
+ messages eligible to be delivered to log files grows. 
+ \par
+ Since the SIGTSTP signal is not supported under IBM's AIX 2.2.1 operating
+ system, this form of debugging output manipulation is not possible on those
+ platforms. 
+ 
+ 	\subsection sec5-2-3 Section 5.2.3: SIGHUP: Reset Debugging Level 
+ 
+ \par
+ Receiving a SIGHUP signal causes a File Server to reset its debugging level to
+ zero. This effectively reduces the set of debugging messages eligible for
+ delivery to log files to a bare minimum. This signal is used in conjunction
+ with SIGTSTP to manage the verbosity of log information. 
+ \par
+ Since the SIGHUP signal is not supported under IBM's AIX 2.2.1 operating
+ system, this form of debugging output manipulation is not possible on those
+ platforms. 
+ 
+ 	\subsection sec5-2-4 Section 5.2.4: SIGTERM: File Descriptor Check 
+ 
+ \par
+ Receipt of a SIGTERM signal triggers a routine which sweeps through the given
+ File Server's unix file descriptors. For each possible unix fid slot, an
+ fstat() is performed on that descriptor, and the particulars of each open file
+ are printed out. This action is designed solely for debugging purposes. 
+ 
+ 	\section sec5-3 Section 5.3: Command Line Interface 
+ 
+ \par
+ Another interface exported by the File Server is the set of command line
+ switches it accepts. Using these switches, many server parameters and actions
+ can be set. Under normal conditions, the File Server process is started up by
+ the BOS Server on that machine, as described in AFS-3 Programmer's Reference:
+ BOS Server Interface. So, in order to utilize any combination of these
+ command-line options, the system administrator must define the File Server
+ bnode in such a way that these parameters are properly included. Note that the
+ switch names must be typed exactly as listed, and that abbreviations are not
+ allowed. Thus, specifying -b 300 on the command line is unambiguous, directing
+ that 300 buffers are to be allocated. It is not an abbreviation for the -banner
+ switch, asking that a message is to be printed to the console periodically. 
+ \par
+ A description of the set of currently-supported command line switches follows. 
+ \li -b <# buffers> Choose the number of 2,048-byte data buffers to allocate at
+ system startup. If this switch is not provided, the File Server will operate
+ with 70 such buffers by default. 
+ \li -banner This switch instructs the File Server to print messages to the
+ console every 10 minutes to demonstrate it is still running correctly. The text
+ of the printed message is: File Server is running at <time>. 
+ \li -cb <# callbacks stored> Specify the maximum number of callback records
+ stored simultaneously by the File Server. The default pool size is 20,000
+ records. 
+ \li -d <debug level> Set the debugging output level at which File Server runs
+ to the value provided. Specifically, the LogLevel global variable is set to the
+ given value (See Section 5.2.2). If this switch is not provided, the default
+ initial File Server debugging level is set to zero, producing the minimal
+ debugging output to the log files. 
+ \li -k <stack size> Set the stack size to provide server LWPs upon creation,
+ measured in 1,024-byte blocks. The default LWP stack size is 24 blocks, or
+ 24,576 bytes. 
+ \li -l <large (directory) vnodes> Select the number of "large" vnodes the File
+ Server will cache. These vnodes are suitable for recording information about
+ AFS directories. The extra space in the vnode allows ACL information to be
+ stored along with the directory. The default allocation value is 200 directory
+ vnodes. 
+ \li -pctspare <percent overrun blocks past quota> Similar to the -spare switch,
+ except that the number of allowable overrun blocks is expressed as a percentage
+ of the given volume's quota. Note: this switch cannot be used in combination
+ with the -spare switch. 
+ \li -rxdbg Instruct the File Server to open a file named rx dbg in the current
+ directory, into which the Rx package will write general debugging information.
+ If the file is already open (due to the appearance of the -rxdbge switch
+ earlier in the command line), this results in a no-op. 
+ \li -rxdbge Instruct the File Server to open a file named rx dbg in the current
+ directory, into which the Rx package will write debugging information related
+ to its event-scheduling activities. If the file is already open (due to the
+ appearance of the -rxdbg switch earlier in the command line), this results in a
+ no-op. 
+ \li -rxpck <# packets> Set the number of extra Rx packet buffers to hold in
+ reserve. These pre-allocated buffers assist in responding to spikes in network
+ traffic demands. By default, 100 such packet buffers are maintained. 
+ \li -s <small (file) vnodes> Select the number of "small" vnodes the File
+ Server will cache. These vnodes are suitable for recording information about
+ non-directory files. As with directory vnodes, the File Server will allocate
+ 200 small vnodes by default. 
+ \li -spare <# overrun blocks to allow> Tell the File Server to allow users
+ performing a store operation to overrun the host volume's disk quota by a
+ certain number of (1,024-byte) blocks. In other words, the first store
+ resulting in a quota overrun will be allowed to succeed if and only if it uses
+ no more than these many blocks beyond the quota. Further store operations will
+ be rejected until the volume's storage is once again reduced below quota. By
+ default, overruns of 1,024 blocks of 1,024 bytes each (1 megabyte total) are
+ tolerated. Note: this switch cannot be used in combination with the -pctspare
+ switch. 
+ \li -w <callback wait interval in seconds> This switch determines how often the
+ File Server periodic daemon lightweight processes run. Among other things,
+ these daemon LWPs check on the validity of callback records, keep disk usage
+ statistics up to date, and check the health of the various client machines that
+ have previously interacted with the File Server. For a full description of
+ these daemon LWPs, consult Section 2.3. The associated argument specifies the
+ number of seconds to sleep between daemon invocations. By default, these
+ periodic daemons run every 300 seconds (5 minutes). 
+ 
+ 	\page chap6 Chapter 6: Cache Manager Interfaces 
+ 
+ 	\section sec6-1 Section 6.1: Overview 
+ 
+ \par
+ There are several interfaces offered by the Cache Manager, allowing clients to
+ access the files stored by the community of AFS File Servers, to configure the
+ Cache Manager's behavior and resources, to store and retrieve authentication
+ information, to specify the location of community Authentication Server and
+ Volume Location Server services, and to observe and debug the Cache Manager's
+ state and actions. This chapter will cover the following five interfaces to the
+ Cache Manager: 
+ \li 	ioctl(): The standard unix ioctl() system call has been extended to
+ include more operations, namely waiting until data stores to a File Server
+ complete before returning to the caller (VIOCCLOSEWAIT) and getting the name of
+ the cell in which an open file resides (VIOCIGETCELL). 
+ \li 	pioctl(): An additional system call is provided through which
+ applications can access operations specific to AFS, which are often tied to a
+ particular pathname. These operations include Access Control List (ACL) and
+ mount point management, Kerberos ticket management, cache configuration, cell
+ configuration, and status of File Servers. 
+ \li 	RPC: Interface by which outside servers and investigators can
+ manipulate the Cache Manager. There are two main categories of routines:
+ callback management, typically called by the File Server, and
+ debugging/statistics, called by programs such as cmdebug and via the xstat
+ user-level library for collection of extended statistics. 
+ \li 	Files: Much of the Cache Manager's configuration information, as well
+ as its view of the AFS services available from the outside world, is obtained
+ from parsing various files. One set of these files is typically located in
+ /usr/vice/etc, and includes CellServDB, ThisCell, and cacheinfo. Another set is
+ usually found in /usr/vice/cache, namely CacheItems, VolumeItems, and AFSLog. 
+ \li 	Mariner: This is the interface by which file transfer activity between
+ the Cache Manager and File Servers may be monitored. Specifically, it is used
+ to monitor the names of the files and directories being fetched and/or stored
+ over the network. 
+ \par
+ Another important component not described in this document is the afsd program.
+ It is afsd's job to initialize the Cache Manager on a given machine and to
+ start up its related daemon threads. It accepts a host of configuration
+ decisions via its command-line interface. In addition, it parses some of the
+ information kept in the configuration files mentioned above and passes that
+ information to the Cache Manager. The reader may find a full description of
+ afsd in the AFS 3.0 Command Reference Manual[2]. 
+ 
+ 	\section sec6-2 Section 6.2: Definitions 
+ 
+ \par
+ This section defines data structures that are used by the pioctl() calls. 
+ 
+ 	\subsection sec6-2-1 Section 6.2.1: struct VenusFid 
+ 
+ \par
+ The Cache Manager is the sole active AFS agent aware of the cellular
+ architecture of the system. Since AFS file identifiers are not guaranteed to be
+ unique across cell boundaries, it must further qualify them for its own
+ internal bookkeeping. The struct VenusFid provides just such additional
+ qualification, attaching the Cache Manager's internal cell identifier to the
+ standard AFS fid. 
+ \n \b Fields 
+ \li long Cell - The internal identifier for the cell in which the file resides. 
+ \li struct ViceFid Fid - The AFS file identifier within the above cell. 
+ 
+ 	\subsection sec6-2-2 Section 6.2.2: struct ClearToken 
+ 
+ \par
+ This is the clear-text version of an AFS token of identity. Its fields are
+ encrypted into the secret token format, and are made easily available to the
+ Cache Manager in this structure. 
+ \n \b Fields 
+ \li long AuthHandle - Key version number. 
+ \li char HandShakeKey[8] - Session key. 
+ \li long ViceId - Identifier for the AFS principal represented by this token. 
+ \li long BeginTimestamp - Timestamp of when this token was minted, and hence
+ came into effect. 
+ \li long EndTimestamp - Timestamp of when this token is considered to be
+ expired, and thus disregarded. 
+ 
+ 	\section sec6-3 Section 6.3: ioctl() Interface 
+ 
+ \par
+ The standard unix ioctl() system call performs operations on file system
+ objects referenced with an open file descriptor. AFS has augmented this system
+ call with two additional operations, one to perform "safe stores", and one to
+ get the name of the cell in which a file resides. A third ioctl() extension is
+ now obsolete, namely aborting a store operation currently in progress. 
+ 
+ 	\subsection sec6-3-1 Section 6.3.1: VIOCCLOSEWAIT 
+ 
+ \par
+ [Opcode 1] Normally, a client performing a unix close() call on an AFS file
+ resumes once the store operation on the given file data to the host File Server
+ has commenced but before it has completed. Thus, it is possible that the store
+ could actually fail (say, because of network partition or server crashes)
+ without the client's knowledge. This new ioctl opcode specifies to the Cache
+ Manager that all future close() operations will wait until the associated store
+ operation to the File Server has completed fully before returning. 
+ 
+ 	\subsection sec6-3-2 Section 6.3.2: VIOCABORT 
+ 
+ \par
+ [Opcode 2] This ioctl() extension is now obsolete. This call results in a noop.
+ The original intention of this call was to allow a store operation currently in
+ progress to a File Server on the named fid to be aborted. 
+ 
+ 	\subsection sec6-3-3 Section 6.3.3: VIOIGETCELL 
+ 
+ \par
+ [Opcode 3] Get the name of the cell in which the given fid resides. If the file
+ is not an AFS file, then ENOTTY is returned. The output buffer specified in the
+ data area must be large enough to hold the null-terminated string representing
+ the file's cell, otherwise EFAULT is returned. However, an out size value of
+ zero specifies that the cell name is not to be copied into the output buffer.
+ In this case, the caller is simply interested in whether the file is in AFS,
+ and not its exact cell of residence. 
+ 
+ 	\section sec6-4 Section 6.4: pioctl() Interface 
+ 
+ 	\subsection sec6-4-1 Section 6.4.1: Introduction 
+ 
+ \par
+ There is a new unix system call, pioctl(), which has been defined especially to
+ support the AFS Cache Manager. Its functional definition is as follows: 
+ \code
+ int afs syscall pioctl(IN char *a pathP, 
+ 			IN int a opcode, 
+ 			IN struct ViceIoctl *a paramsP, 
+ 			IN int a followSymLinks) 
+ \endcode
+ \par
+ This new call is much like the standard ioctl() call, but differs in that the
+ affected file (when applicable) is specified by its path, not by a file
+ descriptor. Another difference is the fourth parameter, a followSymLinks,
+ determines which file should be used should a pathP be a symbolic link. If a
+ followSymLinks be set to 1, then the symbolic link is followed to its target,
+ and the pioctl() is applied to that resulting file. If a followSymLinks is set
+ to 0, then the pioctl() applies to the symbolic link itself. 
+ \par
+ Not all pioctl() calls affect files. In those cases, the a pathP parameter
+ should be set to a null pointer. The second parameter to pioctl(), a opcode,
+ specifies which operation is to be performed. The opcode for each of these
+ operations is included in the text of the description. Note that not all
+ pioctl() opcodes are in use. These unused values correspond to obsolete
+ operations. 
+ \par
+ The descriptions that follow identify some of the possible error codes for each
+ pioctl() opcode, but do not offer a comprehensive lists. All pioctl() calls
+ return 0 upon success. 
+ \par
+ The rest of this section proceeds to describe the individual opcodes available.
+ First, though, one asymmetry in this opcode set is pointed out, namely that
+ while various operations are defined on AFS mount points, there is no direct
+ way to create a mount point. 
+ \par
+ This documentation partitions the pioctl() into several groups: 
+ \li Volume operations 
+ \li File Server operations 
+ \li Cell Operations 
+ \li Authentication Operations 
+ \li ACL Operations 
+ \li Cache operations 
+ \li Miscellaneous operations 
+ 
+ \par
+ For all pioctl()s, the fields within the a paramsP parameter will be referred
+ to directly. Thus, the values of in, in size, out, and out size are discussed,
+ rather than the settings for a paramsP->in, a paramsP->in size, a paramsP->out,
+ and a paramsP->out size. 
+ \par
+ For convenience of reference, a list of the actively-supported pioctl()s, their
+ opcodes, and brief description appears (in opcode order) below. 
+ \li [1] VIOCSETAL : Set the ACL on a directory 
+ \li [2] VIOCGETAL : Get the ACL for a directory 
+ \li [3] VIOCSETTOK : Set the caller's token for a cell 
+ \li [4] VIOCGETVOLSTAT : Get volume status 
+ \li [5] VIOCSETVOLSTAT : Set volume status 
+ \li [6] VIOCFLUSH : Flush an object from the cache 
+ \li [8] VIOCGETTOK : Get the caller's token for a cell 
+ \li [9] VIOCUNLOG : Discard authentication information 
+ \li [10] VIOCCKSERV : Check the status of one or more File Servers 
+ \li [11] VIOCCKBACK : Mark cached volume info as stale 
+ \li [12] VIOCCKCONN : Check caller's tokens/connections 
+ \li [14] VIOCWHEREIS : Find host(s) for a volume 
+ \li [20] VIOCACCESS : Check caller's access on object 
+ \li [21] VIOCUNPAG : See [9] VIOCUNLOG 
+ \li [22] VIOCGETFID : Get fid for named object 
+ \li [24] VIOCSETCACHESIZE : Set maximum cache size in blocks 
+ \li [25] VIOCFLUSHCB : Unilaterally drop a callback 
+ \li [26] VIOCNEWCELL : Set cell service information 
+ \li [27] VIOCGETCELL : Get cell configuration entry 
+ \li [28] VIOCAFS DELETE MT PT : Delete a mount point 
+ \li [29] VIOC AFS STAT MT PT : Get the contents of a mount point 
+ \li [30] VIOC FILE CELL NAME : Get cell hosting a given object 
+ \li [31] VIOC GET WS CELL : Get caller's home cell name 
+ \li [32] VIOC AFS MARINER HOST : Get/set file transfer monitoring output 
+ \li [33] VIOC GET PRIMARY CELL : Get the caller's primary cell 
+ \li [34] VIOC VENUSLOG : Enable/disable Cache Manager logging 
+ \li [35] VIOC GETCELLSTATUS : Get status info for a cell entry 
+ \li [36] VIOC SETCELLSTATUS : Set status info for a cell entry 
+ \li [37] VIOC FLUSHVOLUME : Flush cached data from a volume 
+ \li [38] VIOC AFS SYSNAME : Get/set the @sys mapping 
+ \li [39] VIOC EXPORTAFS : Enable/disable NFS/AFS translation 
+ \li [40] VIOCGETCACHEPARAMS : Get current cache parameter values 
+ 
+ 	\subsection sec6-4-2 Section 6.4.2: Mount Point Asymmetry 
+ 
+ \par
+ There is an irregularity which deserves to be mentioned regarding the pioctl()
+ interface. There are pioctl() operations for getting information about a mount
+ point (VIOC AFS STAT MT PT) and for deleting a mount point (VIOC AFS DELETE MT
+ PT), but no operation for creating mount points. To create a mount point, a
+ symbolic link obeying a particular format must be created. The first character
+ must be either a "%" or a "#", depending on the type of mount point being
+ created (see the discussion in Section 6.4.4.4). If the mount point carries the
+ name of the cell explicitly, the full cell name will appear next, followed by a
+ colon. In all cases, the next portion of the mount point is the volume name. By
+ convention, the last character of a mount point must always be a period (".").
+ This trailing period is not visible in the output from fs lsmount. 
+ 
+ 	\subsection sec6-4-3 Section 6.4.3: Volume Operations 
+ 
+ \par
+ There are several pioctl() opcodes dealing with AFS volumes. It is possible to
+ get and set volume information (VIOCGETVOLSTAT, VIOCSETVOLSTAT), discover which
+ volume hosts a particular file system object (VIOCWHEREIS), remove all objects
+ cached from a given volume (VIOC FLUSHVOLUME), and revalidate cached volume
+ information (VIOCCKBACK). 
+ 
+ 	\subsubsection sec6-4-3-1 Section 6.4.3.1: VIOCGETVOLSTAT: Get volume
+ status for pathname 
+ 
+ \par
+ [Opcode 4] Fetch information concerning the volume that contains the file
+ system object named by a pathP. There is no other input for this call, so in
+ size should be set to zero. The status information is placed into the buffer
+ named by out, if out size is set to a value of sizeof(struct VolumeStatus) or
+ larger. Included in the volume information are the volume's ID, quota, and
+ number of blocks used in the volume as well as the disk partition on which it
+ resides. Internally, the Cache Manager calls the RXAFS GetVolumeInfo() RPC (See
+ Section 5.1.3.14) to fetch the volume status. 
+ \par
+ Among the possible error returns, EINVAL indicates that the object named by a
+ pathP could not be found. 
+ 
+ 	\subsubsection sec6-4-3-2 Section 6.4.3.2: VIOCSETVOLSTAT: Set volume
+ status for pathname 
+ 
+ \par
+ [Opcode 5] Set the status fields for the volume hosting the file system object
+ named by a pathP. The first object placed into the input buffer in is the new
+ status image. Only those fields that may change, namely MinQuota and MaxQuota
+ fields, are interpreted upon receipt by the File Server, and are set to the
+ desired values. Immediately after the struct VolumeStatus image, the caller
+ must place the null-terminated string name of the volume involved in the input
+ buffer. New settings for the offline message and MOTD (Message of the Day)
+ strings may appear after the volume name. If there are no changes in the
+ offline and/or MOTD messages, a null string must appear for that item. The in
+ size parameter must be set to the total number of bytes so inserted, including
+ the nulls after each string. Internally, the Cache Manager calls the RXAFS
+ SetVolumeStatus() RPC (See Section 5.1.3.16) to store the new volume status. 
+ \par
+ Among the possible error returns, EINVAL indicates that the object named by a
+ pathP could not be found. 
+ 
+ 	\subsubsection sec6-4-3-3 Section 6.4.3.3: VIOCWHEREIS: Find the
+ server(s) hosting the pathname's volume 
+ 
+ \par
+ [Opcode 14] Find the set of machines that host the volume in which the file
+ system object named by a pathP resides. The input buffer in is not used by this
+ call, so in size should be set to zero. The output buffer indicated by out is
+ filled with up to 8 IP addresses, one for each File Server hosting the
+ indicated volume. Thus, out size should be set to at least (8*sizeof(long)).
+ This group of hosts is terminated by the first zeroed IP address that appears
+ in the list, but under no circumstances are more than 8 host IP addresses
+ returned. 
+ \par
+ Among the possible error returns is EINVAL, indicating that the pathname is not
+ in AFS, hence is not contained within a volume. If ENODEV is returned, the
+ associated volume information could not be obtained. 
+ 
+ 	\subsubsection sec6-4-3-4 Section 6.4.3.4: VIOC FLUSHVOLUME: Flush all
+ data cached from the pathname's volume 
+ 
+ \par
+ [Opcode 37] Determine the volume in which the file system object named by a
+ pathP resides, and then throw away all currently cached copies of files that
+ the Cache Manager has obtained from that volume. This call is typically used
+ should a user suspect there is some cache corruption associated with the files
+ from a given volume. 
+ 
+ 	\subsubsection sec6-4-3-5 Section 6.4.3.5: VIOCCKBACK: Check validity
+ of all cached volume information 
+ 
+ \par
+ [Opcode 11] Ask the Cache Manager to check the validity of all cached volume
+ information. None of the call's parameters are referenced in this call, so a
+ pathP and in should be set to the null pointer, and in size and out size should
+ be set to zero. 
+ \par
+ This operation is performed in two steps: 
+ \li 1 The Cache Manager first refreshes its knowledge of the root volume,
+ usually named root.afs. On success, it wakes up any of its own threads waiting
+ on the arrival of this information, should it have been previously unreachable.
+ This typically happens should the Cache Manager discover in its startup
+ sequence that information on the root volume is unavailable. Lacking this
+ knowledge at startup time, the Cache Manager settles into a semi-quiescent
+ state, checking every so often to see if volume service is available and thus
+ may complete its own initialization. 
+ \li 2 Each cached volume record is flagged as being stale. Any future attempt
+ to access information from these volumes will result in the volume record's
+ data first being refreshed from the Volume Location Server. 
+ 
+ 	\subsection sec6-4-4 Section 6.4.4: File Server Operations 
+ 
+ \par
+ One group of pioctl() opcodes is aimed at performing operations against one or
+ more File Servers directly. Specifically, a caller may translate a pathname
+ into the corresponding AFS fid (VIOCGETFID), unilaterally discard a set of
+ callback promises (VIOCFLUSHCB), get status on mount points (VIOC AFS STAT MT
+ PT), delete unwanted mount points (VIOC AFS DELETE MT PT), and check the health
+ of a group of File Servers(VIOCCKSERV). 
+ 
+ 	\subsubsection sec6-4-4-1 Section 6.4.4.1: VIOCGETFID: Get augmented
+ fid for named file system object 
+ 
+ \par
+ [Opcode 22] Return the augmented file identifier for the file system object
+ named by a pathP. The desired struct VenusFid is placed in the output buffer
+ specified by out. The output buffer size, as indicated by the out size
+ parameter, must be set to the value of sizeof(struct VenusFid) or greater. The
+ input buffer is not referenced in this call, so in should be set to the null
+ pointer and in size set to zero. 
+ \par
+ Among the possible error returns, EINVAL indicates that the object named by a
+ pathP was not found. 
+ 
+ 	\subsubsection sec6-4-4-2 Section 6.4.4.2: VIOCFLUSHCB: Unilaterally
+ drop a callback 
+ 
+ \par
+ [Opcode 25] Remove any callback information kept by the Cache Manager on the
+ file system object named by a pathP. Internally, the Cache Manager executes a
+ call to the RXAFS GiveUpCallBacks() RPC (See Section 5.1.3.13) to inform the
+ appropriate File Server that it is being released from its particular callback
+ promise. Note that if the named file resides on a read-only volume, then the
+ above call is not made, and success is returned immediately. This optimization
+ is possible because AFS File Servers do not grant callbacks on files from
+ read-only volumes. 
+ \par
+ Among the possible error returns is EINVAL, which indicates that the object
+ named by a pathP was not found. 
+ 
+ 	\subsubsection sec6-4-4-3 Section 6.4.4.3: VIOC AFS DELETE MT PT:
+ Delete a mount point 
+ 
+ \par
+ [Opcode 28] Remove an AFS mount point. The name of the directory in which the
+ mount point exists is specified by a pathP, and the string name of the mount
+ point within this directory is provided through the in parameter. The input
+ buffer length, in size, is set to the length of the mount point name itself,
+ including the trailing null. The output buffer is not accessed by this call, so
+ out should be set to the null pointer and out size to zero. 
+ \par
+ One important note is that the a followSymLinks argument must be set to zero
+ for correct operation. This is counter-intuitive, since at first glance it
+ seems that a symbolic link that resolves to a directory should be a valid
+ pathname parameter. However, recall that mount points are implemented as
+ symbolic links that do not actually point to another file system object, but
+ rather simply contain cell and volume information (see the description in
+ Section 6.4.2). This "special" symbolic link must not be resolved by the
+ pioctl(), but rather presented as-is to the Cache Manager, which then properly
+ interprets it and generates a reference to the given volume's root directory.
+ As an unfortunate side-effect, a perfectly valid symbolic link referring to a
+ directory will be rejected out of hand by this operation as a value for the a
+ pathP parameter. 
+ \par
+ Among the possible error returns, EINVAL reports that the named directory was
+ not found, and ENOTDIR indicates that the pathname contained within a pathP is
+ not a directory. 
+ 
+ 	\subsubsection sec6-4-4-4 Section 6.4.4.4: VIOC AFS STAT MT PT: Get the
+ contents of a mount point 
+ 
+ \par
+ [Opcode 29] Return the contents of the given mount point. The directory in
+ which the mount point in question resides is provided via the a pathP argument,
+ and the in buffer contains the name of the mount point object within this
+ directory. As usual, in size is set to the length of the input buffer,
+ including the trailing null. If the given object is truly a mount point and the
+ out buffer is large enough (its length appears in out size), the mount point's
+ contents are stored into out. 
+ \par
+ The mount point string returned obeys a stylized format, as fully described in
+ Section 5.6.2 of the AFS 3.0 System Administrator's Guide[1]. Briefly, a
+ leading pound sign ("#") indicates a standard mount point, inheriting the
+ read-only or read-write preferences of the mount point's containing volume. On
+ the other hand, a leading percent sign ("%") advises the Cache Manager to cross
+ into the read-write version of the volume, regardless of the existence of
+ read-only clones. If a colon (":") separator occurs, the portion up to the
+ colon itself denotes the fully-qualified cell name hosting the volume. The rest
+ of the string is the volume name itself. 
+ \par
+ Among the possible error codes is EINVAL, indicating that the named object is
+ not an AFS mount point. Should the name passed in a pathP be something other
+ than a directory, then ENOTDIR is returned. 
+ 
+ 	\subsubsection sec6-4-4-5 Section 6.4.4.5: VIOCCKSERV: Check the status
+ of one or more File Servers 
+ 
+ \par
+ [Opcode 10] Check the status of the File Servers that have been contacted over
+ the lifetime of the Cache Manager. The a pathP parameter is ignored by this
+ call, so it should be set to the null pointer. The input parameters as
+ specified by in are completely optional. If something is placed in the input
+ buffer, namely in size is not zero, then the first item stored there is a
+ longword used as a bit array of flags. These flags carry instructions as to the
+ domain and the "thoroughness" of this check. 
+ \par
+ Only the settings of the least-significant two bits are recognized. Enabling
+ the lowest bit tells the Cache Manager not to ping its list of servers, but
+ simply report their status as contained in the internal server records.
+ Enabling the next-higher bit limits the search to only those File Servers in a
+ given cell. If in size is greater than sizeof(long),a null-terminated cell name
+ string follows the initial flag array, specifying the cell to check. If this
+ search bit is set but no cell name string follows the longword of flags, then
+ the search is restricted to those servers contacted from the same cell as the
+ caller. 
+ \par
+ This call returns at least one longword into the output buffer out, specifying
+ the number of hosts it discovered to be down. If this number is not zero, then
+ the longword IP address for each dead (or unreachable) host follows in the
+ output buffer. At most 16 server addresses will be returned, as this is the
+ maximum number of servers for which the Cache Manager keeps information. 
+ \par
+ Among the possible error returns is ENOENT, indicating that the optional cell
+ name string input value is not known to the Cache Manager. 
+ 
+ 	\subsection sec6-4-5 Section 6.4.5: Cell Operations 
+ 
+ \par
+ The Cache Manager is the only active AFS agent that understands the system's
+ cellular architecture. Thus, it keeps important information concerning the
+ identities of the cells in the community, which cell is in direct
+ administrative control of the machine upon which it is running, status and
+ configuration of its own cell, and what cell-specific operations may be legally
+ executed. The following pioctl()s allow client processes to access and update
+ this cellular information. Supported operations include adding or updating
+ knowledge of a cell, including the cell overseeing the caller's machine
+ (VIOCNEWCELL), fetching the contents of a cell configuration entry
+ (VIOCGETCELL), finding out which cell hosts a given file system object (VIOC
+ FILE CELL NAME), discovering the cell to which the machine belongs (VIOC GET WS
+ CELL), finding out the caller's "primary" cell (VIOC GET PRIMARY CELL), and
+ getting/setting certain other per-cell system parameters (VIOC GETCELLSTATUS,
+ VIOC SETCELLSTATUS). 
+ 
+ 	\subsubsection sec6-4-5-1 Section 6.4.5.1: VIOCNEWCELL: Set cell
+ service information 
+ 
+ \par
+ [Opcode 26] Give the Cache Manager all the information it needs to access an
+ AFS cell. Exactly eight longwords are placed at the beginning of the in input
+ buffer. These specify the IP addresses for the machine providing AFS
+ authentication and volume location authentication services. The first such
+ longword set to zero will signal the end of the list of server IP addresses.
+ After these addresses, the input buffer hosts the null-terminated name of the
+ cell to which the above servers belong. The a pathP parameter is not used, and
+ so should be set to the null pointer. 
+ \par
+ Among the possible error returns is EACCES, indicating that the caller does not
+ have the necessary rights to perform the operation. Only root is allowed to set
+ cell server information. If either the IP address array or the server name is
+ unacceptable, EINVAL will be returned. 
+ 
+ 	\subsubsection sec6-4-5-2 Section 6.4.5.2: VIOCGETCELL: Get cell
+ configuration entry 
+ 
+ \par
+ [Opcode 27] Get the i'th cell configuration entry known to the Cache Manager.
+ The index of the desired entry is placed into the in input buffer as a
+ longword, with the first legal value being zero. If there is a cell associated
+ with the given index, the output buffer will be filled with an array of 8
+ longwords, followed by a null-terminated string. 
+ \par
+ The longwords correspond to the list of IP addresses of the machines providing
+ AFS authentication and volume location services. The string reflects the name
+ of the cell for which the given machines are operating. There is no explicit
+ count returned of the number of valid IP addresses in the longword array.
+ Rather, the list is terminated by the first zero value encountered, or when the
+ eighth slot is filled. 
+ \par
+ This routine is intended to be called repeatedly, with the index starting at
+ zero and increasing each time. The array of cell information records is kept
+ compactly, without holes. A return value of EDOM indicates that the given index
+ does not map to a valid entry, and thus may be used as the terminating
+ condition for the iteration. 
+ 
+ 	\subsubsection sec6-4-5-3 Section 6.4.5.3: VIOC FILE CELL NAME: Get
+ cell hosting a given object 
+ 
+ \par
+ [Opcode 30] Ask the Cache Manager to return the name of the cell in which the
+ file system object named by a pathP resides. The input arguments are not used,
+ so in should be set to the null pointer and in size should be set to zero. The
+ null-terminated cell name string is returned in the out output buffer. 
+ \par
+ Among the possible error values, EINVAL indicates that the pathname provided in
+ a pathP is illegal.  If there is no cell information associated with the given
+ object, ESRCH is returned.
+ 
+ 	\subsubsection sec6-4-5-4 Section 6.4.5.4: VIOC GET WS CELL: Get
+ caller's home cell name 
+ 
+ \par
+ [Opcode 31] Return the name of the cell to which the caller's machine belongs.
+ This cell name is returned as a null-terminated string in the output buffer.
+ The input arguments are not used, so in should be set to the null pointer and
+ in size should be set to zero. 
+ \par
+ Among the possible error returns is ESRCH, stating that the caller's home cell
+ information was not available. 
+ 
+ 	\subsubsection sec6-4-5-5 Section 6.4.5.5: VIOC GET PRIMARY CELL: Get
+ the caller's primary cell 
+ 
+ \par
+ [Opcode 33] Ask the Cache Manager to return the name of the caller's primary
+ cell. Internally, the Cache Manager scans its user records, and the cell
+ information referenced by that record is used to extract the cell's string
+ name. The input arguments are not used, so in should be set to the null pointer
+ and in size should be set to zero. The a pathP pathname argument is not used
+ either, and should similarly be set to the null pointer. The null-terminated
+ cell name string is placed into the output buffer pointed to by out if it has
+ suffcient room. 
+ \par
+ Among the possible error returns is ESRCH, stating that the caller's primary
+ cell information was not available. 
+ 
+ 	\subsubsection sec6-4-5-6 Section 6.4.5.6: VIOC GETCELLSTATUS: Get
+ status info for a cell entry 
+ 
+ \par
+ [Opcode 35] Given a cell name, return a single longword of status flags from
+ the Cache Manager's entry for that cell. The null-terminated cell name string
+ is expected to be in the in parameter, with in size set to its length plus one
+ for the trailing null. The status flags are returned in the out buffer, which
+ must have out size set to sizeof(long) or larger. 
+ \par
+ The Cache Manager defines the following output flag values for this operation: 
+ \li 0x1 This entry is considered the caller's primary cell. 
+ \li 0x2 The unix setuid() operation is not honored. 
+ \li 0x4 An obsolete version of the Volume Location Server's database is being
+ used. While defined, this flag should no longer be set in modern systems. 
+ 
+ \par
+ Among the possible error returns is ENOENT, informing the caller that the Cache
+ Manager has no knowledge of the given cell name. 
+ 
+ 	\subsubsection sec6-4-5-7 Section 6.4.5.7: VIOC SETCELLSTATUS: Set
+ status info for a cell entry 
+ 
+ \par
+ [Opcode 36] Given a cell name and an image of the cell status bits that should
+ be set, record the association in the Cache Manager. The input buffer in must
+ be set up as follows. The first entry is the longword containing the cell
+ status bits to be set (see the VIOC GETCELLSTATUS description above for valid
+ flag definitions). The next entry is another longword, ignored by the Cache
+ Manager. The third and final entry in the input buffer is a null-terminated
+ string containing the name of the cell for which the status flags are to be
+ applied. 
+ \par
+ Among the possible error returns is ENOENT, reflecting the Cache Manager's
+ inability to locate its record for the given cell. Only root is allowed to
+ execute this operation, and an EACCES return indicates the caller was not
+ effectively root when the call took place. 
+ 
+ 	\subsection sec6-4-6 Section 6.4.6: Authentication Operations 
+ 
+ \par
+ The Cache Manager serves as the repository for authentication information for
+ AFS clients. Each client process belongs to a single Process Authentication
+ Group (PAG). Each process in a given PAG shares authentication information with
+ the other members, and thus has the identical rights with respect to AFS Access
+ Control Lists (ACLs) as all other processes in the PAG. As the Cache Manager
+ interacts with File Servers as a client process' agent, it automatically and
+ transparently presents the appropriate authentication information as required
+ in order to gain the access to which the caller is entitled. Each PAG can host
+ exactly one token per cell. These tokens are objects that unequivocally codify
+ the principal's identity, and are encrypted for security. Token operations
+ between a Cache Manager and File Server are also encrypted, as are the
+ interchanges between clients and the Authentication Servers that generate these
+ tokens. 
+ \par
+ There are actually two different flavors of tokens, namely clear and secret.
+ The data structure representing clear tokens is described in Section 6.2.2, and
+ the secret token appears as an undifferentiated byte stream. 
+ \par
+ This section describes the operations involving these tokens, namely getting
+ and setting the caller's token for a particular cell (VIOCGETTOK, VIOCSETTOK),
+ checking a caller's access on a specified file system object (VIOCACCESS),
+ checking the status of caller's tokens associated with the set of File Server
+ connections maintained on its behalf (VIOCCKCONN), and discarding tokens
+ entirely (VIOCUNLOG, VIOCUNPAG). These abilities are used by such programs as
+ login, klog, unlog, and tokens, which must generate, manipulate, and/or destroy
+ AFS tokens. 
+ 
+ 	\subsubsection sec6-4-6-1 Section 6.4.6.1: VIOCSETTOK: Set the caller's
+ token for a cell 
+ 
+ \par
+ [Opcode 3] Store the caller's secret and clear tokens within the Cache Manager.
+ The input buffer is used to hold the following quantities, laid out end to end.
+ The first item placed in the buffer is a longword, specifying the length in
+ bytes of the secret token, followed by the body of the secret token itself. The
+ next field is another longword, this time describing the length in bytes of the
+ struct ClearToken, followed by the structure. These are all required fields.
+ The caller may optionally include two additional fields, following directly
+ after the required ones. The first optional field is a longword which is set to
+ a non-zero value if the cell in which these tokens were generated is to be
+ marked as the caller's primary cell. The second optional argument is a
+ null-terminated string specifying the cell in which these tokens apply. If
+ these two optional arguments do not appear, the Cache Manager will default to
+ using its home cell and marking the entry as non-primary. The a pathP pathname
+ parameter is not used, and thus should be set to the null pointer. 
+ \par
+ If the caller does not have any tokens registered for the cell, the Cache
+ Manager will store them. If the caller already has tokens for the cell, the new
+ values will overwrite their old values. Because these are stored per PAG, the
+ new tokens will thus determine the access rights of all other processes
+ belonging to the PAG. 
+ \par
+ Among the possible error returns is ESRCH, indicating the named cell is not
+ recognized, and EIO, if information on the local cell is not available. 
+ 
+ 	\subsubsection sec6-4-6-2 Section 6.4.6.2: VIOCGETTOK: Get the caller's
+ token for a cell 
+ 
+ \par
+ [Opcode 8] Get the specified authentication tokens associated with the caller.
+ The a pathP parameter is not used, so it should be set to the null pointer.
+ Should the input parameter in be set to a null pointer, then this call will
+ place the user's tokens for the machine's home cell in the out output buffer,
+ if such tokens exist. In this case, the following objects are placed in the
+ output buffer. First, a longword specifying the number of bytes in the body of
+ the secret token is delivered, followed immediately by the secret token itself.
+ Next is a longword indicating the length in bytes of the clear token, followed
+ by the clear token. The input parameter may also consist of a single longword,
+ indicating the index of the token desired. Since the Cache Manager is capable
+ of storing multiple tokens per principal, this allows the caller to iteratively
+ extract the full set of tokens stored for the PAG. The first valid index value
+ is zero. The list of tokens is kept compactly, without holes. A return value of
+ EDOM indicates that the given index does not map to a valid token entry, and
+ thus may be used as the terminating condition for the iteration. 
+ \par
+ Other than EDOM, another possible error return is ENOTCONN, specifying that the
+ caller does not have any AFS tokens whatsoever. 
+ 
+ 	\subsubsection sec6-4-6-3 Section 6.4.6.3: VIOCACCESS: Check caller's
+ access on object 
+ 
+ \par
+ [Opcode 20] This operation is used to determine whether the caller has specific
+ access rights on a particular file system object. A single longword is placed
+ into the input buffer, in, representing the set of rights in question. The
+ acceptable values for these access rights are listen in Section 6.4.5. The
+ object to check is named by the a pathP parameter. The output parameters are
+ not accessed, so out should be set to the null pointer, and out size set to
+ zero. 
+ If the call returns successfully, the caller has at least the set of rights
+ denoted by the bits set in the input buffer. Otherwise, EACCESS is returned. 
+ 
+ 	\subsubsection sec6-4-6-4 Section 6.4.6.4: VIOCCKCONN: Check status of
+ caller's tokens/connections 
+ 
+ \par
+ [Opcode 12] Check whether the suite of File Server connections maintained on
+ behalf of the caller by the Cache Manager has valid authentication tokens. This
+ function always returns successfully, communicating the health of said
+ connections by writing a single longword value to the specified output buffer
+ in out. If zero is returned to the output buffer, then two things are true.
+ First, the caller has tokens for at least one cell. Second, all tokens
+ encountered upon a review of the caller's connections have been properly minted
+ (i.e., have not been generated fraudulently), and, in addition, have not yet
+ expired. If these conditions do not currently hold for the caller, then the
+ output buffer value will be set to EACCES. Neither the a pathP nor input
+ parameters are used by this call. 
+ 
+ 	\subsubsection sec6-4-6-5 Section 6.4.6.5: VIOCUNLOG: Discard
+ authentication information 
+ 
+ \par
+ [Opcode 9] Discard all authentication information held in trust for the caller.
+ The Cache Manager sweeps through its user records, destroying all of the
+ caller's associated token information. This results in reducing the rights of
+ all processes within the caller's PAG to the level of file system access
+ granted to the special system:anyuser group. 
+ \par
+ This operation always returns successfully. None of the parameters are
+ referenced, so they should all be set to null pointers and zeroes as
+ appropriate. 
+ 
+ 	\subsubsection sec6-4-6-6 Section 6.4.6.6: VIOCUNPAG: Discard
+ authentication information 
+ 
+ \par
+ [Opcode 21] This call is essentially identical to the VIOCUNLOG operation, and
+ is in fact implemented internally by the same code for VIOCUNLOG. 
+ 
+ 	\subsection sec6-4-7 Section 6.4.7: ACL Operations 
+ 
+ \par
+ This set of opcodes allows manipulation of AFS Access Control Lists (ACLs).
+ Callers are allowed to fetch the ACL on a given directory, or to set the ACL on
+ a directory. In AFS-3, ACLs are only maintained on directories, not on
+ individual files. Thus, a directory ACL determines the allowable accesses on
+ all objects within that directory in conjunction with their normal unix mode
+ (owner) bits. Should the a pathP parameter specify a file instead of a
+ directory, the ACL operation will be performed on the directory in which the
+ given file resides. 
+ \par
+ These pioctl() opcodes deal only in external formats for ACLs, namely the
+ actual text stored in an AFS ACL container. This external format is a character
+ string, composed of a descriptive header followed by some number of individual
+ principal-rights pairs. AFS ACLs actually specify two sublists, namely the
+ positive and negative rights lists. The positive list catalogues the set of
+ rights that certain principals (individual users or groups of users) have,
+ while the negative list contains the set of rights specifically denied to the
+ named parties. 
+ \par
+ These external ACL representations differ from the internal format generated by
+ the Cache Manager after a parsing pass. The external format may be easily
+ generated from the internal format as follows. The header format is expressed
+ with the following printf() statement: 
+ \code
+ printf("%d\n%d\n", NumPositiveEntries, NumNegativeEntries); 
+ \endcode
+ \par
+ The header first specifies the number of entries on the positive rights list,
+ which appear first in the ACL body. The number of entries on the negative list
+ is the second item in the header. The negative entries appear after the last
+ positive entry. 
+ \par
+ Each entry in the ACL proper obeys the format imposed by the following printf()
+ statement: 
+ \code
+ printf("%s\t%d\n", UserOrGroupName, RightsMask); 
+ \endcode
+ \par
+ Note that the string name for the user or group is stored in an externalized
+ ACL entry. The Protection Server stores the mappings between the numerical
+ identifiers for AFS principals and their character string representations.
+ There are cases where there is no mapping from the numerical identifier to a
+ string name. For example, a user or group may have been deleted sometime after
+ they were added to the ACL and before the Cache Manager externalized the ACL
+ for storage. In this case, the Cache Manager sets UserOrGroupName to the string
+ version of the principal's integer identifier. Should the erz principal be
+ deleted from the Protection Server's database in the above scenario, then the
+ string '1019' will be stored, since it corresponded to erz's former numerical
+ identifier. 
+ \par
+ The RightsMask parameter to the above call represents the set of rights the
+ named principal may exercise on the objects covered by the ACL. The following
+ flags may be OR'ed together to construct the desired access rights placed in
+ RightsMask: 
+ \code
+ #define PRSFS_READ 1 /*Read files*/ 
+ #define PRSFS_WRITE 2 /*Write & write-lock existing files*/ 
+ #define PRSFS_INSERT 4 /*Insert & write-lock new files*/ 
+ #define PRSFS_LOOKUP 8 /*Enumerate files and examine ACL*/ 
+ #define PRSFS_DELETE 16 /*Remove files*/ 
+ #define PRSFS_LOCK 32 /*Read-lock files*/ 
+ #define PRSFS_ADMINISTER 64 /*Set access list of directory*/ 
+ \endcode
+ 
+ 	\subsubsection sec6-4-7-1 Section 6.4.7.1: VIOCSETAL: Set the ACL on a
+ directory 
+ 
+ \par
+ [Opcode 1] Set the contents of the ACL associated with the file system object
+ named by a pathP. Should this pathname indicate a file and not a directory, the
+ Cache Manager will apply this operation to the file's parent directory. The new
+ ACL contents, expressed in their externalized form, are made available in in,
+ with in size set to its length in characters, including the trailing null.
+ There is no output from this call, so out size should be set to zero.
+ Internally, the Cache Manager will call the RXAFS StoreACL() RPC (see Section
+ 5.1.3.3 to store the new ACL on the proper File Server. 
+ \par
+ Possible error codes include EINVAL, indicating that one of three things may be
+ true: the named path is not in AFS, there are too many entries in the specified
+ ACL, or a non-existent user or group appears on the ACL. 
+ 
+ 	\subsubsection sec6-4-7-2 Section 6.4.7.2: VIOCGETAL: Get the ACL for a
+ directory 
+ 
+ \par
+ [Opcode 2] Get the contents of the ACL associated with the file system object
+ named by a pathP. Should this pathname indicate a file and not a directory, the
+ Cache Manager will apply this operation to the file's parent directory. The ACL
+ contents, expressed in their externalized form, are delivered into the out
+ buffer if out size has been set to a value which indicates that there is enough
+ room for the specified ACL. This ACL string will be null-terminated. There is
+ no input to this call, so in size should be set to zero. Internally, the Cache
+ Manager will call the RXAFS FetchACL() RPC (see Section 5.1.3.1) to fetch the
+ ACL from the proper File Server. 
+ \par
+ Possible error codes include EINVAL, indicating that the named path is not in
+ AFS. 
+ 
+ 	\subsection sec6-4-8 Section 6.4.8: Cache Operations 
+ 
+ \par
+ It is possible to inquire about and affect various aspects of the cache
+ maintained locally by the Cache Manager through the group of pioctl()s
+ described below. Specifically, one may force certain file system objects to be
+ removed from the cache (VIOCFLUSH), set the maximum number of blocks usable by
+ the cache (VIOCSETCACHESIZE), and ask for information about the cache's current
+ state (VIOCGETCACHEPARAMS). 
+ 
+ 	\subsubsection sec6-4-8-1 Section 6.4.8.1: VIOCFLUSH: Flush an object
+ from the cache 
+ 
+ \par
+ [Opcode 6] Flush the file system object specified by a pathP out of the local
+ cache. The other parameters are not referenced, so they should be set to the
+ proper combination of null pointers and zeroes. 
+ \par
+ Among the possible error returns is EINVAL, indicating that the value supplied
+ in the a pathP parameter is not acceptable. 
+ 
+ 	\subsubsection sec6-4-8-2 Section 6.4.8.2: VIOCSETCACHESIZE: Set
+ maximum cache size in blocks 
+ 
+ \par
+ [Opcode 24] Instructs the Cache Manager to set a new maximum size (in 1 Kbyte
+ blocks) for its local cache. The input buffer located at in contains the new
+ maximum block count. If zero is supplied for this value, the Cache Manager will
+ revert its cache limit to its value at startup time. Neither the a pathP nor
+ output buffer parameters is referenced by this operation. The Cache Manager
+ recomputes its other cache parameters based on this new value, including the
+ number of cache files allowed to be dirty at once and the total amount of space
+ filled with dirty chunks. Should the new setting be smaller than the number of
+ blocks currently being used, the Cache Manager will throw things out of the
+ cache until it obeys the new limit. 
+ \par
+ The caller is required to be effectively running as root, or this call will
+ fail, returning EACCES. If the Cache Manager is configured to run with a memory
+ cache instead of a disk cache, this operation will also fail, returning EROF. 
+ 
+ 	\subsubsection sec6-4-8-3 Section 6.4.8.3: VIOCGETCACHEPARAMS: Get
+ current cache parameter values 
+ 
+ \par
+ [Opcode 40] Fetch the current values being used for the cache parameters. The
+ output buffer is filled with MAXGCSTATS (16) longwords, describing these
+ parameters. Only the first two longwords in this array are currently set. The
+ first contains the value of afs cacheBlocks, or the maximum number of 1 Kbyte
+ blocks which may be used in the cache (see Section 6.4.8.2 for how this value
+ may be set). The second longword contains the value of the Cache Manager's
+ internal afs blocksUsed variable, or the number of these cache blocks currently
+ in use. All other longwords in the array are set to zero. Neither the a pathP
+ nor input buffer arguments are referenced by this call. 
+ \par
+ This routine always returns successfully. 
+ 
+ 	\subsection sec6-4-9 Section 6.4.9: Miscellaneous Operations 
+ 
+ \par
+ There are several other AFS-specific operations accessible via the pioctl()
+ interface that don't fit cleanly into the above categories. They are described
+ in this section, and include manipulation of the socket-based Mariner file
+ trace interface (VIOC AFS MARINER HOST), enabling and disabling of the
+ file-based AFSLog output interface for debugging (VIOC VENUSLOG), getting and
+ setting the value of the special @sys pathname component mapping (VIOC AFS
+ SYSNAME), and turning the NFS-AFS translator service on and off (VIOC
+ EXPORTAFS). 
+ 
+ 	\subsubsection sec6-4-9-1 Section 6.4.9.1: VIOC AFS MARINER HOST:
+ Get/set file transfer monitoring output 
+ 
+ \par
+ [Opcode 32] This operation is used to get or set the IP address of the host
+ destined to receive Mariner output. A detailed description of the Cache Manager
+ Mariner interface may be found in Section 6.7. 
+ \par
+ The input buffer located at in is used to pass a single longword containing the
+ IP address of the machine to receive output regarding file transfers between
+ the Cache Manager and any File Server. If the chosen host IP address is
+ 0xffffffff, the Cache Manager is prompted to turn off generation of Mariner
+ output entirely. If the chosen host IP address is zero, then the Cache Manager
+ will not set the Mariner host, but rather return the current Mariner host as a
+ single longword written to the out output buffer. Any other value chosen for
+ the host IP address enables Mariner output (if it was not already enabled) and
+ causes all further traffic to be directed to the given machine. 
+ \par
+ This function always returns successfully. 
+ 
+ 	\subsubsection sec6-4-9-2 Section 6.4.9.2: VIOC VENUSLOG:
+ Enable/disable Cache Manager logging 
+ 
+ \par
+ [Opcode 34] Tell the Cache Manager whether to generate debugging information,
+ and what kind of debugging output to enable. The input buffer located at in is
+ used to transmit a single longword to the Cache Manager, expressing the
+ caller's wishes. Of the four bytes making up the longword, the highest byte
+ indicates the desired value for the internal afsDebug variable, enabling or
+ disabling general trace output. The next highest byte indicates the desired
+ value for the internal netDebug variable, enabling or disabling network-level
+ debugging traces. The third byte is unused, and the low-order byte represents
+ an overall on/off value for the functionality. There is a special value for the
+ low-order byte, 99, which instructs the Cache Manager to return the current
+ debugging setting as a single longword placed into the output buffer pointed to
+ by out. The a pathP parameter is not referenced by this routine. 
+ \par
+ Trace output is delivered to the AFSLog file, typically located in the
+ /usr/vice/etc directory. When this form of debugging output is enabled, the
+ existing AFSLog file is truncated, and its file descriptor is stored for future
+ use. When this debugging is disabled, a close() is done on the file, forcing
+ all its data to disk. For additional information on the AFSLog file for
+ collecting Cache Manager traces, please see the description in Section 6.6.2.1. 
+ \par
+ This call will only succeed if the caller is effectively running as root. If
+ this is not the case, an error code of EACCES is returned. 
+ 
+ 	\subsubsection sec6-4-9-3 Section 6.4.9.3: VIOC AFS SYSNAME: Get/set
+ the @sys mapping 
+ 
+ \par
+ [Opcode 38] Get or set the value of the special @sys pathname component
+ understood by the Cache Manager. The input buffer pointed to by in is used to
+ house a longword whose value determines whether the @sys value is being set (1)
+ or whether the current value is being fetched (0). If it is being set, then a
+ null-terminated string is expected to follow in the input buffer, specifying
+ the new value of @sys. Otherwise, if we are asking the Cache Manager for the
+ current @sys setting, a null-terminated string bearing that value will be
+ placed in the out output buffer. The a pathP parameter is not used by this
+ call, and thus should be set to a null pointer. 
+ \par
+ There are no special privileges required of the caller to fetch the value of
+ the current @sys mapping. However, a native caller must be running effectively
+ as root in order to successfully alter the mapping. An unauthorized attempt to
+ change the @sys setting will be ignored, and cause this routine to return
+ EACCES. This requirement is relaxed for VIOC AFS SYSNAME pioctl() calls
+ emanating from foreign file systems such as NFS and accessing AFS files through
+ the NFS-AFS translator. Each such remote caller may set its own notion of what
+ the @sys mapping is without affecting native AFS clients. Since the uid values
+ received in calls from NFS machines are inherently insecure, it is impossible
+ to enforce the fact that the caller is truly root on the NFS machine. This,
+ while any principal running on an NFS machine may change that foreign machine's
+ perception of @sys, it does not impact native AFS users in any way. 
+ 
+ 	\subsubsection sec6-4-9-4 Section 6.4.9.4: VIOC EXPORTAFS:
+ Enable/disable NFS/AFS translation 
+ 
+ \par
+ [Opcode 39] Enable or disable the ability of an AFS-capable machine to export
+ AFS access to NFS clients. Actually, this is a general facility allowing
+ exportation of AFS service to any number of other file systems, but the only
+ support currently in place is for NFS client machines. A single longword is
+ expected in the input buffer in. This input longword is partitioned into
+ individual bytes, organized as follows. The high-order byte communicates the
+ type of foreign client to receive AFS file services. There are currently two
+ legal values for this field, namely 0 for the null foreign file system and 1
+ for NFS. The next byte determines whether the Cache Manager is being asked to
+ get or set this information. A non-zero value here is interpreted as a command
+ to set the export information according to what's in the input longword, and a
+ zero-valued byte in this position instructs the Cache Manager to place a
+ longword in the output buffer out, which contains the current export settings
+ for the foreign system type specified in the high-order byte. The third input
+ byte is not used, and the lowest-order input buffer byte determines whether
+ export services for the specified system are being enabled or disabled. A
+ non-zero value will turn on the services, and a zero value will shut them down.
+ The a pathP pathname parameter is not used by this call, and the routine
+ generates output only if the export information is being requested instead of
+ being set. 
+ \par
+ The caller must be effectively running as root in order for this operation to
+ succeed. The call returns EACCES if the caller is not so authorized. If the
+ caller specifies an illegal foreign system type in the high-order byte of the
+ input longword, then ENODEV is returned. Again, NFS is the only foreign file
+ system currently supported. 
+ \par
+ Practically speaking, the machine providing NFS-AFS translation services must
+ enable this service with this pioctl() before any NFS client machines may begin
+ accessing AFS files. Conversely, if an administrator turns off this export
+ facility, the export code on the translator machine will immediately stop
+ responding to traffic from its active NFS clients. 
+ 
+ 	\section sec6-5 Section 6.5: RPC Interface 
+ 
+ 	\subsection sec6-5-1 Section 6.5.1: Introduction 
+ 
+ \par
+ This section covers the structure and workings of the Cache Manager's RPC
+ interface. Typically, these calls are made by File Server processes. However,
+ some of the calls are designed specifically for debugging programs (e.g., the
+ cmdebug facility) and for collection of statistical and performance information
+ from the Cache Manager. Any client application that makes direct calls on the
+ File Server RPC interface must be prepared to export a subset of the Cache
+ Manager RPC interface, as discussed in Section 5.1.6. 
+ \par
+ This section will first examine the Cache Manager's use of locks, whose
+ settings may be observed via one of the RPC interface calls. Next, it will
+ present some definitions and data structures used in the RPC interface, and
+ finally document the individual calls available through this interface. 
+ 
+ 	\subsection sec6-5-2 Section 6.5.2: Locks 
+ 
+ \par
+ The Cache Manager makes use of locking to insure its internal integrity in the
+ face of its multi-threaded design. A total of 11 locks are maintained for this
+ purpose, one of which is now obsolete and no longer used (see below). These
+ locks are strictly internal, and the Cache Manager itself is the only one able
+ to manipulate them. The current settings for these system locks are externally
+ accessible for debugging purposes via the AFSRXCB GetLock() RPC interface call,
+ as described in Section 6.5.5.4. For each lock, its index in the locking table
+ is given in the following text. 
+ \li afs xvcache [Index 0]: This lock controls access to the status cache
+ entries maintained by the Cache Manager. This stat cache keeps stat()-related
+ information for AFS files it has dealt with. The stat information is kept
+ separate from actual data contents of the related file, since this information
+ may change independently (say, as a result of a unix chown() call. 
+ \li afs xdcache [Index 1]: This lock moderates access to the Cache Manager's
+ data cache, namely the contents of the file system objects it has cached
+ locally. As stated above, this data cache is separate from the associated
+ stat() information. 
+ \li afs xserver [Index 2]: This lock controls access to the File Server machine
+ description table, which keeps tabs on all File Servers contacted in recent
+ history. This lock thus indirectly controls access to the set of per-server RPC
+ connection descriptors the File Server table makes visible. 
+ \li afs xvcb [Index 3]: This lock supervises access to the volume callback
+ information kept by the Cache Manager. This table is referenced, for example,
+ when a client decides to remove one or more callbacks on files from a given
+ volume (see the RXAFS GiveUpCallBacks() description on Section 5.1.3.13). 
+ \li afs xbrs [Index 4]: This lock serializes the actions of the Cache Manager's
+ background daemons, which perform prefetching and background file storage
+ duties. 
+ \li afs xcell [Index 5]: This lock controls the addition, deletion, and update
+ of items on the linked list housing information on cells known to the Cache
+ Manager. 
+ \li afs xconn [Index 6]: This lock supervises operations concerning the set of
+ RPC connection structures kept by the system. This lock is used in combination
+ with the 
+ \li afs xserver lock described above. In some internal Cache Manager code
+ paths, the File Server description records are first locked, and then the afs
+ xconn lock is used to access the associated Rx connection records. afs xuser
+ [Index 7]: This lock serializes access to the per-user structures maintained by
+ the Cache Manager. 
+ \li afs xvolume [Index 8]: This lock is used to control access to the Cache
+ Manager's volume information cache, namely the set of entries currently in
+ memory, a subset of those stably housed in the VolumeItems disk file (see
+ Section 6.6.2.3). 
+ \li afs puttofileLock [Index 9]: This lock is obsolete, and while still defined
+ by the system is no longer used. It formerly serialized writes to a debugging
+ output interface buffer, but the internal mechanism has since been updated and
+ improved. 
+ \li afs ftf [Index 10]: This lock is used when flushing cache text pages from
+ the machine's virtual memory tables. For each specific machine architecture on
+ which the Cache Manager runs, there is a set of virtual memory operations which
+ must be invoked to perform this operation. The result of such activities is to
+ make sure that the latest contents of new incarnations of binaries are used,
+ instead of outdated copies of previous versions still resident in the virtual
+ memory system. 
+ 
+ 	\subsection sec6-5-3 Section 6.5.3: Definitions and Typedefs 
+ 
+ \par
+ This section documents some macro definitions and typedefs referenced by the
+ Cache Manager's RPC interface. Specifically, these definitions and typedefs are
+ used in the RXAFSCB GetXStats() and RXAFSCB XStatsVersion calls as described in
+ Sections 6.5.5.6 and 6.5.5.7. 
+ 
+ \code
+ /* 
+ * Define the version of CacheManager and FileServer extended 
+ * statistics being implemented. 
+ */ 
+ const AFSCB_XSTAT_VERSION = 1; 
+ 
+ /* 
+ * Define the maximum arrays for passing extended statistics 
+ * info for the CacheManager and FileServer back to our caller. 
+ */ 
+ const AFSCB_MAX_XSTAT_LONGS = 2048; 
+ typedef long AFSCB_CollData<AFSCB_MAX_XSTAT_LONGS>; 
+ 
+ /* 
+ * Define the identifiers for the accessible extended stats data 
+ * collections. 
+ */ 
+ const AFSCB_XSTATSCOLL_CALL_INFO = 0; /*CM call counting & info*/ 
+ const AFSCB_XSTATSCOLL_PERF_INFO = 1; /*CM performance info*/ 
+ \endcode
+ 
+ 	\subsection sec6-5-4 Section 6.5.4: Structures 
+ 
+ \par
+ This section documents some structures used in the Cache Manager RPC interface.
+ As with the constants and typedefs in the previous section, these items are
+ used in the RXAFSCB GetXStats() and RXAFSCB XStatsVersion calls as described in
+ Sections 6.5.5.6 and 6.5.5.7. 
+ 
+ 	\subsubsection sec6-5-4-1 Section 6.5.4.1: struct afs MeanStats 
+ 
+ \par
+ This structure may be used to collect a running average figure. It is included
+ in some of the statistics structures described below. 
+ \n \b Fields 
+ \li long average - The computed average. 
+ \li long elements - The number of elements sampled for the above aveage. 
+ 
+ 	\subsubsection sec6-5-4-2 Section 6.5.4.2: struct afs CMCallStats 
+ 
+ \par
+ This structure maintains profiling information, communicating the number of
+ times internal Cache Manager functions are invoked. Each field name has a "C "
+ prefix, followed by the name of the function being watched. As this structure
+ has entries for over 500 functions, it will not be described further here.
+ Those readers who wish to see the full layout of this structure are referred to
+ Appendix A. 
+ \par
+ The AFSCB XSTATSCOLL CALL INFO data collection includes the information in this
+ structure. 
+ 
+ 	\subsubsection sec6-5-4-3 Section 6.5.4.3: struct afs CMMeanStats 
+ 
+ \par
+ This is the other part of the information (along with the struct afs
+ CMCallStats construct described above) returned by the AFSCB XSTATSCOLL CALL
+ INFO data collection defined by the Cache Manager (see Section 6.5.3). It is
+ accessible via the RXAFSCB GetXStats() interface routine, as defined in Section
+ 6.5.5.7. 
+ \par
+ This structure represents the beginning of work to compute average values for
+ some of the extended statistics collected by the Cache Manager. 
+ \n \b Fields 
+ \li struct afs MeanStats something - Intended to collect averages for some of
+ the Cache Manager extended statistics; not yet implemented. 
+ 
+ 	\subsubsection sec6-5-4-4 Section 6.5.4.4: struct afs CMStats 
+ 
+ \par
+ This structure defines the information returned by the AFSCB XSTATSCOLL CALL
+ INFO data collection defined by the Cache Manager (see Section 6.5.3). It is
+ accessible via the RXAFSCB GetXStats() interface routine, as defined in Section
+ 6.5.5.7. 
+ \n \b Fields 
+ \li struct afs CallStats callInfo - Contains the counts on the number of times
+ each internal Cache Manager function has been called. 
+ \li struct afs MeanStats something - Intended to collect averages for some of
+ the Cache Manager extended statistics; not yet implemented. 
+ 
+ 	\subsubsection sec6-5-4-5 Section 6.5.4.5: struct afs CMPerfStats 
+ 
+ \par
+ This is the information returned by the AFSCB XSTATSCOLL PERF INFO data
+ collection defined by the Cache Manager (see Section 6.5.3). It is accessible
+ via the RXAFSCB GetXStats() interface routine, as defined in Section 6.5.5.7. 
+ \n \b Fields 
+ \li long numPerfCalls - Number of performance calls received. 
+ \li long epoch - Cache Manager epoch time. 
+ \li long numCellsContacted - Number of cells contacted. 
+ \li long dlocalAccesses - Number of data accesses to files within the local
+ cell. 
+ \li long vlocalAccesses - Number of stat accesses to files within the local
+ cell. 
+ \li long dremoteAccesses - Number of data accesses to files outside of the
+ local cell. 
+ \li long vremoteAccesses - Number of stat accesses to files outside of the
+ local cell. 
+ \li long cacheNumEntries - Number of cache entries. 
+ \li long cacheBlocksTotal - Number of (1K) blocks configured for the AFS cache. 
+ \li long cacheBlocksInUse - Number of cache blocks actively in use. 
+ \li long cacheBlocksOrig - Number of cache blocks configured at bootup. 
+ \li long cacheMaxDirtyChunks - Maximum number of dirty cache chunks tolerated. 
+ \li long cacheCurrDirtyChunks - Current count of dirty cache chunks. 
+ \li long dcacheHits - Number of data file requests satisfied by the local
+ cache. 
+ \li long vcacheHits - Number of stat entry requests satisfied by the local
+ cache. 
+ \li long dcacheMisses - Number of data file requests not satisfied by the local
+ cache. 
+ \li long vcacheMisses - Number of stat entry requests not satisfied by the
+ local cache. 
+ \li long cacheFlushes - Number of files flushed from the cache. 
+ \li long cacheFilesReused - Number of cache files reused. 
+ \li long numServerRecords - Number of records used for storing information
+ concerning File Servers. 
+ \li long ProtServerAddr - IP addres of the Protection Server used (not
+ implemented). 
+ \li long spare[32] - A set of longword spares reserved for future use. 
+ 
+ 	\subsection sec6-5-5 Section 6.5.5: Function Calls 
+ 
+ \par
+ This section discusses the Cache Manager interface calls. No special
+ permissions are required of the caller for any of these operations. A summary
+ of the calls making up the interface appears below: 
+ \li RXAFSCB Probe() "Are-you-alive" call. 
+ \li RXAFSCB CallBack() Report callbacks dropped by a File Server. 
+ \li RXAFSCB InitCallBackState() Purge callback state from a File Server. 
+ \li RXAFSCB GetLock() Get contents of Cache Manager lock table. 
+ \li RXAFSCB GetCE() Get cache file description. 
+ \li RXAFSCB XStatsVersion() Get version of extended statistics package. 
+ \li RXAFSCB GetXStats() Get contents of extended statistics data collection. 
+ 
+ 	\subsubsection sec6-5-5-1 Section 6.5.5.1: RXAFSCB Probe - Acknowledge
+ that the underlying callback service is still operational 
+ 
+ \code
+ int RXAFSCB Probe(IN struct rx call *a rxCallP) 
+ \endcode
+ \par Description 
+ [Opcode 206] This call simply implements an "are-you-alive" operation, used to
+ determine if the given Cache Manager is still running. Any File Server will
+ probe each of the Cache Managers with which it has interacted on a regular
+ basis, keeping track of their health. This information serves an important
+ purpose for a File Server. In particular, it is used to trigger purging of
+ deceased Cache Managers from the File Server's callback records, and also to
+ instruct a new or "resurrected" Cache Manager to purge its own callback state
+ for the invoking File Server. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ ---No error codes are generated. 
+ 
+ 	\subsubsection sec6-5-5-2 Section 6.5.5.2: RXAFSCB CallBack - Report
+ callbacks dropped by a File Server 
+ 
+ \code
+ int RXAFSCB CallBack(IN struct rx call *a rxCallP,
+ 			IN AFSCBFids *a fidArrayP,
+ 			IN AFSCBs *a callBackArrayP)
+ \endcode
+ \par Description 
+ [Opcode 204] Provide information on dropped callbacks to the Cache Manager for
+ the calling File Server. The number of fids involved appears in a
+ fidArrayP->AFSCBFids len, with the fids themselves located at a
+ fidArrayP->AFSCBFids val. Similarly, the number of associated callbacks is
+ placed in a callBackArrayP->AFSCBs len, with the callbacks themselves located
+ at a callBackArrayP->AFSCBs val. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ ---No error codes are generated. 
+ 
+ 	\subsubsection sec6-5-5-3 Section 6.5.5.3: RXAFSCB InitCallBackState -
+ Purge callback state from a File Server 
+ 
+ \code
+ int RXAFSCB InitCallBackState(IN struct rx call *a rxCallP) 
+ \endcode
+ \par Description 
+ [Opcode 205] This routine instructs the Cache Manager to purge its callback
+ state for all files and directories that live on the calling host. This
+ function is typically called by a File Server when it gets a request from a
+ Cache Manager that does not appear in its internal records. This handles
+ situations where Cache Managers survive a File Server, or get separated from it
+ via a temporary network partition. This also happens upon bootup, or whenever
+ the File Server must throw away its record of a Cache Manager because its
+ tables have been filled. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ ---No error codes are generated. 
+ 
+ 	\subsubsection sec6-5-5-4 Section 6.5.5.4: RXAFSCB GetLock - Get
+ contents of Cache Manager lock table 
+ 
+ \code
+ int RXAFSCB GetLock(IN struct rx call *a rxCall, 
+ 			IN long a index, 
+ 			OUT AFSDBLock *a lockP) 
+ \endcode
+ \par Description 
+ [Opcode 207] Fetch the contents of entry a index in the Cache Manager lock
+ table. There are 11 locks in the table, as described in Section 6.5.2. The
+ contents of the desired lock, including a string name representing the lock,
+ are returned in a lockP. 
+ \par
+ This call is not used by File Servers, but rather by debugging tools such as
+ cmdebug. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ The index value supplied in a index is out of range; it must be between 0 and
+ 10. 
+ 
+ 	\subsubsection sec6-5-5-5 Section 6.5.5.5: RXAFSCB GetCE - Get cache
+ file description 
+ 
+ \code
+ int RXAFSCB GetCE(IN struct rx call *a rxCall, 
+ 			IN long a index, 
+ 			OUT AFSDBCacheEntry *a ceP) 
+ \endcode
+ \par Description 
+ [Opcode 208] Fetch the description for entry a index in the Cache Manager file
+ cache, storing it into the buffer to which a ceP points. The structure returned
+ into this pointer variable is described in Section 4.3.2. 
+ \par
+ This call is not used by File Servers, but rather by debugging tools such as
+ cmdebug. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ The index value supplied in a index is out of range. 
+ 
+ 	\subsubsection sec6-5-5-6 Section 6.5.5.6: RXAFSCB XStatsVersion - Get
+ version of extended statistics package 
+ 
+ \code
+ int RXAFSCB XStatsVersion(IN struct rx call *a rxCall, 
+ 				OUT long *a versionNumberP) 
+ \endcode
+ \par Description 
+ [Opcode 209] This call asks the Cache Manager for the current version number of
+ the extended statistics structures it exports (see RXAFSCB GetXStats(), Section
+ 6.5.5.7). The version number is placed in a versionNumberP. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ ---No error codes are generated. 
+ 
+ 	\subsubsection sec6-5-5-7 Section 6.5.5.7: RXAFSCB GetXStats - Get
+ contents of extended statistics data collection 
+ 
+ \code
+ int RXAFSCB GetXStats(IN struct rx call *a rxCall, 
+ 			IN long a clientVersionNumber, 
+ 			IN long a collectionNumber, 
+ 			OUT long *a srvVersionNumberP, 
+ 			OUT long *a timeP, 
+ 			OUT AFSCB CollData *a dataP) 
+ \endcode
+ \par Description 
+ [Opcode 210] This function fetches the contents of the specified Cache Manager
+ extended statistics structure. The caller provides the version number of the
+ data it expects to receive in a clientVersionNumber. Also provided in a
+ collectionNumber is the numerical identifier for the desired data collection.
+ There are currently two of these data collections defined: AFSCB XSTATSCOLL
+ CALL INFO, which is the list of tallies of the number of invocations of
+ internal Cache Manager procedure calls, and AFSCB XSTATSCOLL PERF INFO, which
+ is a list of performance-related numbers. The precise contents of these
+ collections are described in Section 6.5.4. The current version number of the
+ Cache Manager collections is returned in a srvVersionNumberP, and is always set
+ upon return, even if the caller has asked for a different version. If the
+ correct version number has been specified, and a supported collection number
+ given, then the collection data is returned in a dataP. The time of collection
+ is also returned, being placed in a timeP. 
+ \par
+ Rx call information for the related Cache Manager is contained in a rxCallP. 
+ \par Error Codes 
+ The collection number supplied in a collectionNumber is out of range. 
+ 
+ 	\section sec6-6 Section 6.6: Files 
+ 
+ \par
+ The Cache Manager gets some of its start-up configuration information from
+ files located on the client machine's hard disk. Each client is required to
+ supply a /usr/vice/etc directory in which this configuration data is kept.
+ Section 6.6.1 describes the format and purpose of the three files contributing
+ this setup information: ThisCell, CellServDB, and cacheinfo. 
+ 
+ 	\subsection sec6-6-1 Section 6.6.1: Configuration Files 
+ 
+ 	\subsubsection sec6-6-1-1 Section 6.6.1.1: ThisCell 
+ 
+ \par
+ The Cache Manager, along with various applications, needs to be able to
+ determine the cell to which its client machine belongs. This information is
+ provided by the ThisCell file. It contains a single line stating the machine's
+ fully-qualified cell name. 
+ \par
+ As with the CellServDB configuration file, the Cache Manager reads the contents
+ of ThisCell exactly once, at start-up time. Thus, an incarnation of the Cache
+ Manager will maintain precisely one notion of its home cell for its entire
+ lifetime. Thus, changes to the text of the ThisCell file will be invisible to
+ the running Cache Manager. However, these changes will affect such application
+ programs as klog, which allows a user to generate new authentication tickets.
+ In this example, klog reads ThisCell every time it is invoked, and then
+ interacts with the set of Authentication Servers running in the given home
+ cell, unless the caller specifies the desired cell on the command line. 
+ \par
+ The ThisCell file is not expected to be changed on a regular basis. Client
+ machines are not imagined to be frequently traded between different
+ administrative organizations. The Unix mode bits are set to specify that while
+ everyone is allowed to read the file, only root is allowed to modify it. 
+ 
+ 	\subsubsection sec6-6-1-2 Section 6.6.1.2: CellServDB 
+ 
+ \par
+ To conduct business with a given AFS cell, a Cache Manager must be informed of
+ the cell's name and the set of machines running AFS database servers within
+ that cell. Such servers include the Volume Location Server, Authentication
+ Server, and Protection Server. This particular cell information is obtained
+ upon startup by reading the CellServDB file. Thus, when the Cache Manager
+ initialization is complete, it will be able to communicate with the cells
+ covered by CellServDB. 
+ \par
+ The following is an excerpt from a valid CellServDB file, demonstrating the
+ format used. 
+ 
+ \code
+ ... 
+ >transarc.com 	#Transarc Corporation 
+ 192.55.207.7 	#henson.transarc.com 
+ 192.55.207.13 	#bigbird.transarc.com 
+ 192.55.207.22 	#ernie.transarc.com 
+ >andrew.cmu.edu #Carnegie Mellon University 
+ 128.2.10.2 	#vice2.fs.andrew.cmu.edu 
+ 128.2.10.7 	#vice7.fs.andrew.cmu.edu 
+ 128.2.10.10 	#vice10.fs.andrew.cmu.edu 
+ ... 	
+ \endcode
+ \par
+ There are four rules describing the legal CellServDB file format: 
+ \li 1. Each cell has a separate entry. 	The entries may appear in any order. It
+ may be convenient, however, to have the workstation's local cell be the first
+ to appear. 
+ \li 2. No blank lines should appear in the file, even at the end of the last
+ entry. 
+ \li 3. The first line of each cell's entry begins with the '>' character, and
+ specifies the cell's human-readable, Internet Domain-style name. Optionally,
+ some white space and a comment (preceded by a '#') may follow, briefly
+ describing the specified cell. 
+ \li 4. Each subsequent line in a cell's entry names one of the cell's database
+ server machines. The following must appear on the line, in the order given: 
+ \li The Internet address of the server, in the standard 4-component dot
+ notation. 
+ \li Some amount of whitespace. 
+ \li A '#', followed by the machine's complete Internet host name. In this
+ instance, the '#' sign and the text beyond it specifying the machine name are
+ NOT treated as a comment. This is required information. 
+ \par
+ The Cache Manager will use the given host name to determine its current address
+ via an Internet Domain lookup. If and only if this lookup fails does the Cache
+ Manager fall back to using the dotted Internet address on the first part of the
+ line. This dotted address thus appears simply as a hint in case of Domain
+ database downtime. 
+ \par
+ The CellServDB file is only parsed once, when the Cache Manager first starts.
+ It is possible, however, to amend existing cell information records or add
+ completely new ones at any time after Cache Manager initialization completes.
+ This is accomplished via the VIOCNEWCELL pioctl() (see Section 6.4.5.1. 
+ 
+ 	\subsubsection sec6-6-1-3 Section 6.6.1.3: cacheinfo 
+ 
+ \par
+ This one-line file contains three fields separated by colons: 
+ \li AFS Root Directory: This is the directory where the Cache Manager mounts
+ the AFS root volume. Typically, this is specified to be /afs. 
+ \li Cache Directory: This field names the directory where the Cache Manager is
+ to create its local cache files. This is typically set to /usr/vice/cache. 
+ \li Cache Blocks: The final field states the upper limit on the number of
+ 1,024-byte blocks that the Cache Manager is allowed to use in the partition
+ hosting the named cache directory. 
+ \par
+ Thus, the following cacheinfo file would instruct the Cache Manager to mount
+ the AFS filespace at /afs, and inform it that it may expect to be able to use
+ up to 25,000 blocks for the files in its cache directory, /usr/vice/cache. 
+ \code
+ /afs:/usr/vice/cache:25000 
+ \endcode
+ 
+ 	\subsection sec6-6-2 Section 6.6.2: Cache Information Files 
+ 
+ 	\subsubsection sec6-6-2-1 Section 6.6.2.1: AFSLog 
+ 
+ \par
+ This is the AFS log file used to hold Cache Manager debugging output. The file
+ is set up when the Cache Manager first starts. If it already exists, it is
+ truncated. If it doesn't, it is created. Output to this file is enabled and
+ disabled via the the VIOC VENUSLOG pioctl() (see Section 6.4.9.2). Normal text
+ messages are written to this file by the Cache Manager when output is enabled.
+ Each time logging to this file is enabled, the AFSLog file is truncated. Only
+ root can read and write this file. 
+ 
+ 	\subsubsection sec6-6-2-2 Section 6.6.2.2: CacheItems 
+ 
+ \par
+ The Cache Manager only keeps a subset of its data cache entry descriptors in
+ memory at once. The number of these in-memory descriptors is determined by
+ afsd. All of the data cache entry descriptors are kept on disk, in the
+ CacheItems file. The file begins with a header region, taking up four
+ longwords: 
+ \code 
+ struct fheader { long magic AFS_FHMAGIC 0x7635fab8 long firstCSize: First chunk
+ size long otherCSize: Next chunk sizes long spare } 
+ \endcode
+ \par
+ The header is followed by one entry for each cache file. Each is: 
+ \code
+ struct fcache { 
+ 	short hvNextp; /* Next in vnode hash table, or freeDCList */ 
+ 	short hcNextp; /* Next index in [fid, chunk] hash table */ 
+ 	short chunkNextp; /* File queue of all chunks for a single vnode */ 
+ 	struct VenusFid fid; /* Fid for this file */ 
+ 	long modTime; /* last time this entry was modified */ 
+ 	long versionNo; /* Associated data version number */ 
+ 	long chunk; /* Relative chunk number */ 
+ 	long inode; /* Unix inode for this chunk */ 
+ 	long chunkBytes; /* Num bytes in this chunk */ 
+ 	char states; /* Has this chunk been modified? */ 
+ }; 
+ \endcode
+ 
+ 	\subsubsection sec6-6-2-3 Section 6.6.2.3: VolumeItems 
+ 
+ \par
+ The Cache Manager only keeps at most MAXVOLS (50) in-memory volume
+ descriptions. However, it records all volume information it has obtained in the
+ VolumeItems file in the chosen AFS cache directory. This file is truncated when
+ the Cache Manager starts. Each volume record placed into this file has the
+ following struct fvolume layout: 
+ \code
+ struct fvolume { 
+ 	long cell; /*Cell for this entry*/ 
+ 	long volume; /*Numerical volume ID */ 
+ 	long next; /*Hash index*/ 
+ 	struct VenusFid dotdot; /*Full fid for .. dir */ 
+ 	struct VenusFid mtpoint; /*Full fid for mount point*/ 
+ }; 
+ \endcode
+ 
+ 	\section sec6-7 Section 6.7: Mariner Interface 
+ 
+ \par
+ The Cache Manager Mariner interface allows interested parties to be advised in
+ real time as to which files and/or directories are being actively transferred
+ between the client machine and one or more File Servers. If enabled, this
+ service delivers messages of two different types, as exemplified below: 
+ \code
+ Fetching myDataDirectory 
+ Fetching myDataFile.c 
+ Storing myDataObj.o 
+ \endcode
+ \par
+ In the first message, the myDataDirectory directory is shown to have just been
+ fetched from a File Server. Similarly, the second message indicates that the C
+ program myDataFile.c had just been fetched from its File Server of residence.
+ Finally, the third message reveals that the myDataObj.o object file has just
+ been written out over the network to its respective server. 
+ \par
+ In actuality, the text of the messages carries a string prefix to indicate
+ whether a Fetch or Store operation had been performed. So, the full contents of
+ the above messages are as follows: 
+ \code
+ fetch$Fetching myDataDirectory 
+ fetch$Fetching myDataFile.c 
+ store$Storing myDataObj.o 
+ \endcode
+ The Mariner service may be enabled or disabled for a particular machine by
+ using the VIOC AFS MARINER HOST pioctl() (see Section 6.4.9.1). This operation
+ allows any host to be specified as the recipient of these messages. A potential
+ recipient must have its host be declared the target of such messages, then
+ listen to a socket on port 2106. 
+ \par
+ Internally, the Cache Manager maintains a cache of NMAR (10) vnode structure
+ pointers and the string name (up to 19 characters) of the associated file or
+ directory. This cache is implemented as an array serving as a circular buffer.
+ Each time a file is involved in a create or lookup operation on a File Server,
+ the current slot in this circular buffer is filled with the relevant vnode and
+ string name information, and the current position is advanced. If Mariner
+ output is enabled, then an actual network fetch or store operation will trigger
+ messages of the kind shown above. Since a fetch or store operation normally
+ occurs shortly after the create or lookup, the mapping of vnode to name is
+ likely to still be in the Mariner cache when it comes time to generate the
+ appropriate message. However, since an unbounded number of other lookups or
+ creates could have been performed in the interim, there is no guarantee that
+ the mapping entry will not have been overrun. In these instances, the Mariner
+ message will be a bit vaguer. Going back to our original example, 
+ \code
+ Fetching myDataDirectory 
+ Fetching a file 
+ Storing myDataObj.o 
+ \endcode
+ In this case, the cached association between the vnode containing myDataFile.c
+ and its string name was thrown out of the Mariner cache before the network
+ fetch operation could be performed. Unable to find the mapping, the generic
+ phrase "a file" was used to identify the object involved. 
+ \par
+ Mariner messages only get generated when RPC traffic for fetching or storing a
+ file system object occurs between the Cache Manager and a File Server. Thus,
+ file accesses that are handled by the Cache Manager's on-board data cache do
+ not trigger such announcements. 
+ 
+ 	\page biblio Bibliography 
+ 
+ \li [1] Transarc Corporation. AFS 3.0 System Administrator's Guide,
+ F-30-0-D102, Pittsburgh, PA, April 1990. 
+ \li [2] Transarc Corporation. AFS 3.0 Command Reference Manual, F-30-0-D103,
+ Pittsburgh, PA, April 1990. 
+ \li [3] CMU Information Technology Center. Synchronization and Caching Issues
+ in the Andrew File System, USENIX Proceedings, Dallas, TX, Winter 1988. 
+ \li [4] Sun Microsystems, Inc. NFS: Network File System Protocol Specification,
+ RFC 1094, March 1989. 
+ \li [5] Sun Microsystems, Inc. Design and Implementation of the Sun Network
+ File System, USENIX Summer Conference Proceedings, June 1985. 
+ \li [6] S.P. Miller, B.C. Neuman, J.I. Schiller, J.H. Saltzer. Kerberos
+ Authentication and Authorization System, Project Athena Technical Plan, Section
+ E.2.1, M.I.T., December 1987. 
+ \li [7] Bill Bryant. Designing an Authentication System: a Dialogue in Four
+ Scenes, Project Athena internal document, M.I.T, draft of 8 February 1988. 
+ 
+ */
Index: openafs/doc/protocol/rx-spec.h
diff -c /dev/null openafs/doc/protocol/rx-spec.h:1.1.2.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/protocol/rx-spec.h	Sun May 31 12:59:32 2009
***************
*** 0 ****
--- 1,6449 ----
+ /*! \mainpage AFS-3 Programmer's Reference: Specification for the Rx Remote
+  * Procedure Call Facility
+  *
+  * AFS-3 Programmer's Reference:  
+  * 
+  * Specification for the Rx Remote Procedure Call Facility 
+  * \author Edward R. Zayas 
+  * Transarc Corporation 
+  * \version 1.2
+  * \date 28 August 1991 10:11 .cCopyright 1991 Transarc Corporation All Rights
+  * Reserved FS-00-D164 
+  * 
+  * 	\page chap1 Chapter 1 -- Overview of the Rx RPC system                                
+  *                                                                                 
+  * 	\section sec1-1 Section 1.1: Introduction to Rx                                      
+  * 
+  * \par 
+  * The Rx package provides a high-performance, multi-threaded, and secure
+  * mechanism by which 
+  * remote procedure calls (RPCs) may be performed between programs executing
+  * anywhere in a 
+  * network of computers. The Rx protocol is adaptive, conforming itself to
+  * widely varying 
+  * network communication media. It allows user applications to define and
+  * insert their own 
+  * security modules, allowing them to execute the precise end-to-end
+  * authentication algorithms 
+  * required to suit their needs and goals. Although pervasive throughout the
+  * AFS distributed 
+  * file system, all of its agents, and many of its standard application
+  * programs, Rx is entirely 
+  * separable from AFS and does not depend on any of its features. In fact, Rx
+  * can be used to build applications engaging in RPC-style communication under
+  * a variety of unix-style file systems. There are in-kernel and user-space
+  * implementations of the Rx facility, with both sharing the same interface.
+  * \par 
+  * This document provides a comprehensive and detailed treatment of the Rx RPC
+  * package. 
+  * 
+  * 	\section sec1-2 Section 1.2: Basic Concepts 
+  * 
+  * \par 
+  * The Rx design operates on the set of basic concepts described in this
+  * section. 
+  * 
+  * 	\subsection sec1-2-1 Section 1.2.1: Security
+  * 
+  * \par 
+  * The Rx architecture provides for tight integration between the RPC mechanism
+  * and methods for making this communication medium secure. As elaborated in
+  * Section 5.3.1.3 and illustrated by the built-in rxkad security system
+  * described in Chapter 3, Rx defines the format for a generic security module,
+  * and then allows application programmers to define and activate
+  * instantiations of these modules. Rx itself knows nothing about the internal
+  * details of any particular security model, or the module-specific state it
+  * requires. It does, however, know when to call the generic security
+  * operations, and so can easily execute the security algorithm defined. Rx
+  * does maintain basic state per connection on behalf of any given security
+  * class. 
+  * 
+  * 	\subsection sec1-2-2 Section 1.2.2: Services 
+  * 
+  * \par 
+  * An Rx-based server exports services, or specific RPC interfaces that
+  * accomplish certain tasks. Services are identified by (host-address,
+  * UDP-port, serviceID) triples. An Rx service is installed and initialized on
+  * a given host through the use of the rx NewService() routine (See Section
+  * 5.6.3). Incoming calls are stamped with the Rx service type, and must match
+  * an installed service to be accepted. Internally, Rx services also carry
+  * string names which identify them, which is useful for remote debugging and
+  * statistics-gathering programs. The use of a service ID allows a single
+  * server process to export multiple, independently-specified Rx RPC services. 
+  * \par 
+  * Each Rx service contains one or more security classes, as implemented by
+  * individual security objects. These security objects implement end-to-end
+  * security protocols. Individual peer-to-peer connections established on
+  * behalf of an Rx service will select exactly one of the supported security
+  * objects to define the authentication procedures followed by all calls
+  * associated with the connection. Applications are not limited to using only
+  * the core set of built-in security objects offered by Rx. They are free to
+  * define their own security objects in order to execute the specific protocols
+  * they require. 
+  * \par 
+  * It is possible to specify both the minimum and maximum number of lightweight
+  * processes available to handle simultaneous calls directed to an Rx service.
+  * In addition, certain procedures may be registered with the service and
+  * called at specific times in the course of handling an RPC request. 
+  * 
+  * 	\subsection sec1-2-3 Section 1.2.3: Connections 
+  * 
+  * \par 
+  * An Rx connection represents an authenticated communication path, allowing a
+  * sequence of multiple asynchronous conversations (calls). Each connection is
+  * identified by a connection ID. The low-order bits of the connection ID are
+  * reserved so that they may be stamped with the index of a particular call
+  * channel. With up to RX MAXCALLS concurrent calls (set to 4 in this
+  * implementation), the bottom two bits are set aside for this purpose. The
+  * connection ID is not sufficient to uniquely identify an Rx connection by
+  * itself. Should a client crash and restart, it may reuse a connection ID,
+  * causing inconsistent results. Included with the connection ID is the epoch,
+  * or start time for the client side of the connection. After a crash, the next
+  * incarnation of the client will choose a different epoch value. This will
+  * differentiate the new incarnation from the orphaned connection record on the
+  * server side. 
+  * \par 
+  * Each connection is associated with a parent service, which defines a set of
+  * supported security models. At creation time, an Rx connection selects the
+  * particular security protocol it will implement, referencing the associated
+  * service. The connection structure maintains state for each individual call
+  * simultaneously handled. 
+  * 
+  * 	\subsection sec1-2-4 Section 1.2.4: Peers 
+  * 
+  * \par 
+  * For each connection, Rx maintains information describing the entity, or
+  * peer, on the other side of the wire. A peer is identified by a (host,
+  * UDP-port) pair, with an IP address used to identify the host. Included in
+  * the information kept on this remote communication endpoint are such network
+  * parameters as the maximum packet size supported by the host, current
+  * readings on round trip time and retransmission delays, and packet skew (see
+  * Section 1.2.7). There are also congestion control fields, including
+  * retransmission statistics and descriptions of the maximum number of packets
+  * that may be sent to the peer without pausing. Peer structures are shared
+  * between connections whenever possible, and, hence, are reference-counted. A
+  * peer object may be garbage-collected if it is not actively referenced by any
+  * connection structure and a sufficient period of time has lapsed since the
+  * reference count dropped to zero. 
+  * 
+  * 	\subsection sec1-2-5 Section 1.2.5: Calls 
+  * 
+  * \par 
+  * An Rx call represents an individual RPC being executed on a given
+  * connection. As described above, each connection may have up to RX MAXCALLS
+  * calls active at any one instant. The information contained in each call
+  * structure is specific to the given call. 
+  * \par 
+  * "Permanent" call state, such as the call number, is maintained in the
+  * connection structure itself. 
+  * 
+  * 	\subsection sec1-2-6 Section 1.2.6: Quotas 
+  * 
+  * \par 
+  * Each attached server thread must be able to make progress to avoid system
+  * deadlock. The Rx facility ensures that it can always handle the arrival of
+  * the next unacknowledged data packet for an attached call with its system of
+  * packet quotas. A certain number of packets are reserved per server thread
+  * for this purpose, allowing the server threads to queue up an entire window
+  * full of data for an active call and still have packet buffers left over to
+  * be able to read its input without blocking. 
+  * 
+  * 	\subsection sec1-2-7 Section 1.2.7: Packet Skew 
+  * 
+  * \par 
+  * If a packet is received n packets later than expected (based on packet
+  * serial numbers), then we define it to have a skew of n. The maximum skew
+  * values allow us to decide when a packet hasn't been received yet because it
+  * is out of order, as opposed to when it is likely to have been dropped. 
+  * 
+  * 	\subsection sec1-2-8 Section 1.2.8: Multicasting 
+  * 
+  * \par 
+  * The rx multi.c module provides for multicast abilities, sending an RPC to
+  * several targets simultaneously. While true multicasting is not achieved, it
+  * is simulated by a rapid succession of packet transmissions and a collection
+  * algorithm for the replies. A client program, though, may be programmed as if
+  * multicasting were truly taking place. Thus, Rx is poised to take full
+  * advantage of a system supporting true multicasting with minimal disruption
+  * to the existing client code base. 
+  * 
+  * 	\section sec1-3 Section 1.3: Scope 
+  * 
+  * \par 
+  * This paper is a member of a documentation suite providing specifications as
+  * to the operation and interfaces offered by the various AFS servers and
+  * agents. Rx is an integral part of the AFS environment, as it provides the
+  * high-performance, secure pathway by which these system components
+  * communicate across the network. Although AFS is dependent on Rx's services,
+  * the reverse is not true. Rx is a fully independent RPC package, standing on
+  * its own and usable in other environments. 
+  * \par 
+  * The intent of this work is to provide readers with a sufficiently detailed
+  * description of Rx that they may proceed to write their own applications on
+  * top of it. In fact, code for a sample Rx server and client are provided. 
+  * \par 
+  * One topic related to Rx will not be covered by this document, namely the
+  * Rxgen stub generator. Rather, rxgen is addressed in a separate document. 
+  * 
+  * 	\section sec1-4 Section 1.4: Document Layout 
+  * 
+  * \par 
+  * After this introduction, Chapter 2 will introduce and describe various
+  * facilities and tools that support Rx. In particular, the threading and
+  * locking packages used by Rx will be examined, along with a set of timer and
+  * preemption tools. Chapter 3 proceeds to examine the details of one of the
+  * built-in security modules offered by Rx. Based on the Kerberos system
+  * developed by MIT's Project Athena, this rxkad module allows secure, ecrypted
+  * communication between the server and client ends of the RPC. Chapter 5 then
+  * provides the full Rx programming interface, and Chapter 6 illustrates the
+  * use of this programming interface by providing a fully-operational
+  * programming example employing Rx. This rxdemo suite is examined in detail,
+  * ranging all the way from a step-by-step analysis of the human-authored
+  * files, and the Rxgen-generated files upon which they are based, to the
+  * workings of the associated Makefile. Output from the example rxdemo server
+  * and client is also provided. 
+  * 
+  * 	\section sec1-5 Section 1.5: Related Documents 
+  * 
+  * \par 
+  * Titles for the full suite of AFS specification documents are listed below.
+  * All of the servers and agents making up the AFS computing environment,
+  * whether running in the unix kernel or in user space, utilize an Rx RPC
+  * interface through which they export their services. 
+  * \par
+  * \li 	AFS-3 Programmer's Reference: Architectural Overview: This paper
+  * provides an architectual overview of the AFS distributed file system,
+  * describing the full set of servers and agents in a coherent way,
+  * illustrating their relationships to each other and examining their
+  * interactions. 
+  * \li 	AFS-3 Programmer's Reference: file Server/Cache Manager Interface: This
+  * document describes the workings and interfaces of the two primary AFS
+  * agents, the file Server and Cache Manager. The file Server provides a
+  * centralized disk repository for sets of files, regulating access to them.
+  * End users sitting on client machines rely on the Cache Manager agent,
+  * running in their kernel, to act as their agent in accessing the data stored
+  * on file Server machines, making those files appear as if they were really
+  * housed locally. 
+  * \li 	AFS-3 Programmer's Reference:Volume Server/Volume Location Server
+  * Interface: This document describes the services through which "containers"
+  * of related user data are located and managed. 
+  * \li 	AFS-3 Programmer's Reference: Protection Server Interface: This paper
+  * describes the server responsible for mapping printable user names to and
+  * from their internal AFS identifiers. The Protection Server also allows users
+  * to create, destroy, and manipulate "groups" of users, which are suitable for
+  * placement on access control lists (ACLs). 
+  * \li 	AFS-3 Programmer's Reference: BOS Server Interface: This paper
+  * explicates the "nanny" service which assists in the administrability of the
+  * AFS environment. 
+  * \par 
+  * In addition to these papers, the AFS 3.1 product is delivered with its own
+  * user, system administrator, installation, and command reference documents. 
+  * 
+  * 	\page chap2 Chapter 2 -- The LWP Lightweight Process Package 
+  * 
+  * 	\section sec2-1 Section 2.1: Introduction 
+  * \par 
+  * This chapter describes a package allowing multiple threads of control to
+  * coexist and cooperate within one unix process. Each such thread of control
+  * is also referred to as a lightweight process, in contrast to the traditional
+  * unix (heavyweight) process. Except for the limitations of a fixed stack size
+  * and non-preemptive scheduling, these lightweight processes possess all the
+  * properties usually associated with full-fledged processes in typical
+  * operating systems. For the purposes of this document, the terms lightweight
+  * process, LWP, and thread are completely interchangeable, and they appear
+  * intermixed in this chapter. Included in this lightweight process facility
+  * are various sub-packages, including services for locking, I/O control,
+  * timers, fast time determination, and preemption. 
+  * \par 
+  * The Rx facility is not the only client of the LWP package. Other LWP clients
+  * within AFS include the file Server, Protection Server, BOS Server, Volume
+  * Server, Volume Location Server, and the Authentication Server, along with
+  * many of the AFS application programs. 
+  * 
+  * 	\section sec2-2 Section 2.2: Description 
+  * 
+  * 	\subsection Section 2.2.1: sec2-2-1 LWP Overview 
+  * 
+  * \par 
+  * The LWP package implements primitive functions that provide the basic
+  * facilities required to enable procedures written in C to execute
+  * concurrently and asynchronously. The LWP package is meant to be
+  * general-purpose (note the applications mentioned above), with a heavy
+  * emphasis on simplicity. Interprocess communication facilities can be built
+  * on top of this basic mechanism and in fact, many different IPC mechanisms
+  * could be implemented. 
+  * \par 
+  * In order to set up the threading support environment, a one-time invocation
+  * of the LWP InitializeProcessSupport() function must precede the use of the
+  * facilities described here. This initialization function carves an initial
+  * process out of the currently executing C procedure and returns its thread
+  * ID. For symmetry, an LWP TerminateProcessSupport() function may be used
+  * explicitly to release any storage allocated by its counterpart. If this
+  * function is used, it must be issued from the thread created by the original
+  * LWP InitializeProcessSupport() invocation. 
+  * \par 
+  * When any of the lightweight process functions completes, an integer value is
+  * returned to indicate whether an error condition was encountered. By
+  * convention, a return value of zero indicates that the operation succeeded. 
+  * \par 
+  * Macros, typedefs, and manifest constants for error codes needed by the
+  * threading mechanism are exported by the lwp.h include file. A lightweight
+  * process is identified by an object of type PROCESS, which is defined in the
+  * include file. 
+  * \par 
+  * The process model supported by the LWP operations is based on a
+  * non-preemptive priority dispatching scheme. A priority is an integer in the
+  * range [0..LWP MAX PRIORITY], where 0 is the lowest priority. Once a given
+  * thread is selected and dispatched, it remains in control until it
+  * voluntarily relinquishes its claim on the CPU. Control may be relinquished
+  * by either explicit means (LWP_DispatchProcess()) or implicit means (through
+  * the use of certain other LWP operations with this side effect). In general,
+  * all LWP operations that may cause a higher-priority process to become ready
+  * for dispatching preempt the process requesting the service. When this
+  * occurs, the dispatcher mechanism takes over and automatically schedules the
+  * highest-priority runnable process. Routines in this category, where the
+  * scheduler is guaranteed to be invoked in the absence of errors, are: 
+  * \li LWP_WaitProcess() 
+  * \li LWP_MwaitProcess() 
+  * \li LWP_SignalProcess() 
+  * \li LWP_DispatchProcess() 
+  * \li LWP_DestroyProcess() 
+  * \par 
+  * The following functions are guaranteed not to cause preemption, and so may
+  * be issued with no fear of losing control to another thread: 
+  * \li LWP_InitializeProcessSupport() 
+  * \li LWP_NoYieldSignal() 
+  * \li LWP_CurrentProcess() 
+  * \li LWP_ActiveProcess() 
+  * \li LWP_StackUsed() 
+  * \li LWP_NewRock() 
+  * \li LWP_GetRock() 
+  * \par 
+  * The symbol LWP NORMAL PRIORITY, whose value is (LWP MAX PRIORITY-2),
+  * provides a reasonable default value to use for process priorities. 
+  * \par 
+  * The lwp debug global variable can be set to activate or deactivate debugging
+  * messages tracing the flow of control within the LWP routines. To activate
+  * debugging messages, set lwp debug to a non-zero value. To deactivate, reset
+  * it to zero. All debugging output from the LWP routines is sent to stdout. 
+  * \par 
+  * The LWP package checks for stack overflows at each context switch. The
+  * variable that controls the action of the package when an overflow occurs is
+  * lwp overflowAction. If it is set to LWP SOMESSAGE, then a message will be
+  * printed on stderr announcing the overflow. If lwp overflowAction is set to
+  * LWP SOABORT, the abort() LWP routine will be called. finally, if lwp
+  * overflowAction is set to LWP SOQUIET, the LWP facility will ignore the
+  * errors. By default, the LWP SOABORT setting is used. 
+  * \par 
+  * Here is a sketch of a simple program (using some psuedocode) demonstrating
+  * the high-level use of the LWP facility. The opening #include line brings in
+  * the exported LWP definitions. Following this, a routine is defined to wait
+  * on a "queue" object until something is deposited in it, calling the
+  * scheduler as soon as something arrives. Please note that various LWP
+  * routines are introduced here. Their definitions will appear later, in
+  * Section 2.3.1. 
+  * 
+  * \code
+  * #include <afs/lwp.h> 
+  * static read_process(id) 
+  * int *id; 
+  * {  /* Just relinquish control for now */
+  * 	LWP_DispatchProcess(); 
+  * 	for 	(;;) 
+  * 	{  
+  * 		/* Wait until there is something in the queue */
+  * 		while 	(empty(q)) LWP_WaitProcess(q); 
+  * 		/* Process the newly-arrived queue entry */
+  * 		LWP_DispatchProcess(); 
+  * 	} 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * The next routine, write process(), sits in a loop, putting messages on the
+  * shared queue and signalling the reader, which is waiting for activity on the
+  * queue. Signalling a thread is accomplished via the LWP SignalProcess()
+  * library routine. 
+  * 
+  * \code
+  * static write_process() 
+  * { ... 
+  * 	/* Loop, writing data to the shared queue.  */
+  * 	for 	(mesg = messages; *mesg != 0; mesg++) 
+  * 	{ 
+  * 		insert(q, *mesg); 
+  * 		LWP_SignalProcess(q); 
+  * 	} 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * finally, here is the main routine for this demo pseudocode. It starts by
+  * calling the LWP initialization routine. Next, it creates some number of
+  * reader threads with calls to LWP CreateProcess() in addition to the single
+  * writer thread. When all threads terminate, they will signal the main routine
+  * on the done variable. Once signalled, the main routine will reap all the
+  * threads with the help of the LWP DestroyProcess() function. 
+  * 
+  * \code
+  * main(argc, argv) 
+  * int argc; 
+  * char **argv; 
+  * { 
+  * 	PROCESS *id;  /* Initial thread ID */
+  * 	/* Set up the LWP package, create the initial thread ID. */
+  * 	LWP_InitializeProcessSupport(0, &id); 
+  * 	/* Create a set of reader threads.  */
+  * 	for (i = 0; i < nreaders; i++) 
+  * 		LWP_CreateProcess(read_process, STACK_SIZE, 0, i, "Reader",
+  * 		&readers[i]); 
+  * 
+  * 	/* Create a single writer thread.  */
+  * 	LWP_CreateProcess(write_process, STACK_SIZE, 1, 0, "Writer", &writer); 
+  * 	/* Wait for all the above threads to terminate.  */
+  * 	for (i = 0; i <= nreaders; i++) 
+  * 		LWP_WaitProcess(&done); 
+  * 
+  * 	/* All threads are done. Destroy them all.  */
+  * 	for (i = nreaders-1; i >= 0; i--) 
+  * 		LWP_DestroyProcess(readers[i]); 
+  * } 
+  * \endcode
+  * 
+  * 	\subsection sec2-2-2 Section 2.2.2: Locking 
+  * \par
+  * The LWP locking facility exports a number of routines and macros that allow
+  * a C programmer using LWP threading to place read and write locks on shared
+  * data structures.  This locking facility was also written with simplicity in
+  * mind. 
+  * \par
+  * In order to invoke the locking mechanism, an object of type struct Lock must
+  * be associated with the object. After being initialized with a call to
+  * LockInit(), the lock object is used in invocations of various macros,
+  * including ObtainReadLock(), ObtainWriteLock(), ReleaseReadLock(),
+  * ReleaseWriteLock(), ObtainSharedLock(), ReleaseSharedLock(), and
+  * BoostSharedLock(). 
+  * \par
+  * Lock semantics specify that any number of readers may hold a lock in the
+  * absence of a writer. Only a single writer may acquire a lock at any given
+  * time. The lock package guarantees fairness, legislating that each reader and
+  * writer will eventually obtain a given lock. However, this fairness is only
+  * guaranteed if the priorities of the competing processes are identical. Note
+  * that ordering is not guaranteed by this package. 
+  * \par
+  * Shared locks are read locks that can be "boosted" into write locks. These
+  * shared locks have an unusual locking matrix. Unboosted shared locks are
+  * compatible with read locks, yet incompatible with write locks and other
+  * shared locks. In essence, a thread holding a shared lock on an object has
+  * effectively read-locked it, and has the option to promote it to a write lock
+  * without allowing any other writer to enter the critical region during the
+  * boost operation itself. 
+  * \par
+  * It is illegal for a process to request a particular lock more than once
+  * without first releasing it. Failure to obey this restriction will cause
+  * deadlock. This restriction is not enforced by the LWP code. 
+  * \par
+  * Here is a simple pseudocode fragment serving as an example of the available
+  * locking operations. It defines a struct Vnode object, which contains a lock
+  * object. The get vnode() routine will look up a struct Vnode object by name,
+  * and then either read-lock or write-lock it. 
+  * \par
+  * As with the high-level LWP example above, the locking routines introduced
+  * here will be fully defined later, in Section 2.3.2. 
+  * 
+  * \code
+  * #include <afs/lock.h> 
+  * 
+  * struct Vnode { 
+  * 	... 
+  * 	struct Lock lock;  Used to lock this vnode  
+  * ... }; 
+  * 
+  * #define READ 0 
+  * #define WRITE 1 
+  * 
+  * struct Vnode *get_vnode(name, how) char *name; 
+  * int how; 
+  * { 
+  * 	struct Vnode *v; 
+  * 	v = lookup(name); 
+  * 	if (how == READ) 
+  * 		ObtainReadLock(&v->lock); 
+  * 	else 
+  * 		ObtainWriteLock(&v->lock); 
+  * } 
+  * \endcode
+  * 
+  * 
+  * 	\subsection sec2-2-3 Section 2.2.3: IOMGR 
+  * 
+  * \par
+  * The IOMGR facility associated with the LWP service allows threads to wait on
+  * various unix events. The exported IOMGR Select() routine allows a thread to
+  * wait on the same set of events as the unix select() call. The parameters to
+  * these two routines are identical. IOMGR Select() puts the calling LWP to
+  * sleep until no threads are active. At this point, the built-in IOMGR thread,
+  * which runs at the lowest priority, wakes up and coalesces all of the select
+  * requests together. It then performs a single select() and wakes up all
+  * threads affected by the result. 
+  * \par
+  * The IOMGR Signal() routine allows an LWP to wait on the delivery of a unix
+  * signal. The IOMGR thread installs a signal handler to catch all deliveries
+  * of the unix signal. This signal handler posts information about the signal
+  * delivery to a global data structure. The next time that the IOMGR thread
+  * runs, it delivers the signal to any waiting LWP. 
+  * \par
+  * Here is a pseudocode example of the use of the IOMGR facility, providing the
+  * blueprint for an implemention a thread-level socket listener. 
+  * 
+  * \code
+  * void rpc_SocketListener() 
+  * { 
+  * 	int ReadfdMask, WritefdMask, ExceptfdMask, rc; 
+  * 	struct timeval *tvp; 
+  * 	while(TRUE) 
+  * 	{ ... 
+  * 		ExceptfdMask = ReadfdMask = (1 << rpc_RequestSocket); 
+  * 		WritefdMask = 0; 
+  * 
+  * 		rc = IOMGR_Select(8*sizeof(int), &ReadfdMask, &WritefdMask,
+  * 		&ExceptfdMask, tvp); 
+  * 
+  * 		switch(rc) 
+  * 		{ 
+  * 			case 0: /* Timeout */ continue; 
+  * 			/* Main while loop */
+  * 
+  * 			case -1: /* Error */ 
+  * 			SystemError("IOMGR_Select"); 
+  * 			exit(-1); 
+  * 
+  * 			case 1: /* RPC packet arrived! */ ... 
+  * 			process packet ... 
+  * 			break; 
+  * 
+  * 			default: Should never occur 
+  * 		} 
+  * 	} 
+  * } 
+  * \endcode
+  * 
+  * 	\subsection sec2-2-4 Section 2.2.4: Timer 
+  * \par
+  * The timer package exports a number of routines that assist in manipulating
+  * lists of objects of type struct TM Elem. These struct TM Elem timers are
+  * assigned a timeout value by the user and inserted in a package-maintained
+  * list. The time remaining to each timer's timeout is kept up to date by the
+  * package under user control. There are routines to remove a timer from its
+  * list, to return an expired timer from a list, and to return the next timer
+  * to expire. 
+  * \par
+  * A timer is commonly used by inserting a field of type struct TM Elem into a
+  * structure. After setting the desired timeout value, the structure is
+  * inserted into a list by means of its timer field. 
+  * \par
+  * Here is a simple pseudocode example of how the timer package may be used.
+  * After calling the package initialization function, TM Init(), the pseudocode
+  * spins in a loop. first, it updates all the timers via TM Rescan() calls.
+  * Then, it pulls out the first expired timer object with TM GetExpired() (if
+  * any), and processes it. 
+  * 
+  * \code
+  * static struct TM_Elem *requests; 
+  * ... 
+  * TM_Init(&requests); /* Initialize timer list */ ... 
+  * for (;;) { 
+  * 	TM_Rescan(requests);  /* Update the timers */
+  * 	expired = TM_GetExpired(requests); 
+  * 	if (expired == 0) 
+  * 	break; 
+  * 	. . . process expired element . . . 
+  * 	} 
+  * \endcode
+  * 
+  * 	\subsection sec2-2-5 Section 2.2.5: Fast Time 
+  * 
+  * \par
+  * The fast time routines allows a caller to determine the current time of day
+  * without incurring the expense of a kernel call. It works by mapping the page
+  * of the kernel that holds the time-of-day variable and examining it directly.
+  * Currently, this package only works on Suns. The routines may be called on
+  * other architectures, but they will run more slowly. 
+  * \par
+  * The initialization routine for this package is fairly expensive, since it
+  * does a lookup of a kernel symbol via nlist(). If the client application
+  * program only runs for only a short time, it may wish to call FT Init() with
+  * the notReally parameter set to TRUE in order to prevent the lookup from
+  * taking place. This is useful if you are using another package that uses the
+  * fast time facility. 
+  * 
+  * 	\subsection sec2-2-6 Section 2.2.6: Preemption 
+  * 
+  * \par
+  * The preemption package provides a mechanism by which control can pass
+  * between lightweight processes without the need for explicit calls to LWP
+  * DispatchProcess(). This effect is achieved by periodically interrupting the
+  * normal flow of control to check if other (higher priority) procesess are
+  * ready to run. 
+  * \par
+  * The package makes use of the BSD interval timer facilities, and so will
+  * cause programs that make their own use of these facilities to malfunction.
+  * In particular, use of alarm(3) or explicit handling of SIGALRM is
+  * disallowed. Also, calls to sleep(3) may return prematurely. 
+  * \par
+  * Care should be taken that routines are re-entrant where necessary. In
+  * particular, note that stdio(3) is not re-entrant in general, and hence
+  * multiple threads performing I/O on the same fiLE structure may function
+  * incorrectly. 
+  * \par
+  * An example pseudocode routine illustrating the use of this preemption
+  * facility appears below. 
+  * 
+  * \code
+  * #include <sys/time.h> 
+  * #include "preempt.h" 
+  * 	...  struct timeval tv; 
+  * 	LWP_InitializeProcessSupport( ... ); 
+  * 	tv.tv_sec = 10; 
+  * 	tv.tv_usec = 0; 
+  * 	PRE_InitPreempt(&tv); 
+  * 	PRE_PreemptMe(); ... 
+  * 	PRE_BeginCritical(); ... 
+  * 	PRE_EndCritical(); ... 
+  * 	PRE_EndPreempt(); 
+  * \endcode
+  * 
+  * 	\section sec2-3 Section 2.3: Interface Specifications 
+  * 
+  * 	\subsection sec2-3-1 Section 2.3.1: LWP 
+  * 
+  * \par
+  * This section covers the calling interfaces to the LWP package. Please note
+  * that LWP macros (e.g., ActiveProcess) are also included here, rather than
+  * being relegated to a different section. 
+  * 
+  * 	\subsubsection sec2-3-1-1 Section 2.3.1.1: LWP_InitializeProcessSupport
+  * 	_ Initialize the LWP package 
+  * 
+  * \par
+  * int LWP_InitializeProcessSupport(IN int priority; OUT PROCESS *pid) 
+  * \par Description 
+  * This function initializes the LWP package. In addition, it turns the current
+  * thread of control into the initial process with the specified priority. The
+  * process ID of this initial thread is returned in the pid parameter. This
+  * routine must be called before any other routine in the LWP library. The
+  * scheduler will NOT be invoked as a result of calling
+  * LWP_InitializeProcessSupport(). 
+  * \par Error Codes 
+  * LWP EBADPRI The given priority is invalid, either negative or too large. 
+  * 
+  * 	 \subsubsection sec2-3-1-2 Section 2.3.1.2: LWP_TerminateProcessSupport
+  * 	 _ End process support, perform cleanup 
+  * 
+  * \par
+  * int LWP_TerminateProcessSupport() 
+  * \par Description 
+  * This routine terminates the LWP threading support and cleans up after it by
+  * freeing any auxiliary storage used. This routine must be called from within
+  * the process that invoked LWP InitializeProcessSupport(). After LWP
+  * TerminateProcessSupport() has been called, it is acceptable to call LWP
+  * InitializeProcessSupport() again in order to restart LWP process support. 
+  * \par Error Codes 
+  * ---Always succeeds, or performs an abort(). 
+  * 
+  * 	\subsubsection sec2-3-1-3 Section 2.3.1.3: LWP_CreateProcess _ Create a
+  * 	new thread 
+  * 
+  * \par
+  * int LWP_CreateProcess(IN int (*ep)(); IN int stacksize; IN int priority; IN
+  * char *parm; IN char *name; OUT PROCESS *pid) 
+  * \par Description 
+  * This function is used to create a new lightweight process with a given
+  * printable name. The ep argument identifies the function to be used as the
+  * body of the thread. The argument to be passed to this function is contained
+  * in parm. The new thread's stack size in bytes is specified in stacksize, and
+  * its execution priority in priority. The pid parameter is used to return the
+  * process ID of the new thread. 
+  * \par
+  * If the thread is successfully created, it will be marked as runnable. The
+  * scheduler is called before the LWP CreateProcess() call completes, so the
+  * new thread may indeed begin its execution before the completion. Note that
+  * the new thread is guaranteed NOT to run before the call completes if the
+  * specified priority is lower than the caller's. On the other hand, if the new
+  * thread's priority is higher than the caller's, then it is guaranteed to run
+  * before the creation call completes. 
+  * \par Error Codes 
+  * LWP EBADPRI The given priority is invalid, either negative or too large. 
+  * \n LWP NOMEM Could not allocate memory to satisfy the creation request. 
+  * 
+  * 	\subsubsection sec2-3-1-4 Section: 2.3.1.4: LWP_DestroyProcess _ Create
+  * 	a new thread 
+  * 
+  * \par
+  * int LWP_DestroyProcess(IN PROCESS pid) 
+  * \par Description 
+  * This routine destroys the thread identified by pid. It will be terminated
+  * immediately, and its internal storage will be reclaimed. A thread is allowed
+  * to destroy itself. In this case, of course, it will only get to see the
+  * return code if the operation fails. Note that a thread may also destroy
+  * itself by returning from the parent C routine. 
+  * \par
+  * The scheduler is called by this operation, which may cause an arbitrary
+  * number of threads to execute before the caller regains the processor. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. 
+  * 
+  * 	\subsubsection sec2-3-1-5 Section 2.3.1.5: WaitProcess _ Wait on an
+  * 	event 
+  * 
+  * \par
+  * int LWP WaitProcess(IN char *event) 
+  * \par Description 
+  * This routine puts the thread making the call to sleep until another LWP
+  * calls the LWP SignalProcess() or LWP NoYieldSignal() routine with the
+  * specified event. Note that signalled events are not queued. If a signal
+  * occurs and no thread is awakened, the signal is lost. The scheduler is
+  * invoked by the LWP WaitProcess() routine. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. 
+  * \n LWP EBADEVENT The given event pointer is null. 
+  * 
+  * 	\subsubsection sec2-3-1-6 Section 2.3.1.6: MwaitProcess _ Wait on a set
+  * 	of events 
+  * 
+  * \par
+  * int LWP MwaitProcess(IN int wcount; IN char *evlist[]) 
+  * \par Description 
+  * This function allows a thread to wait for wcount signals on any of the items
+  * in the given evlist. Any number of signals of a particular event are only
+  * counted once. The evlist is a null-terminated list of events to wait for.
+  * The scheduler will be invoked. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. 
+  * \n LWP EBADCOUNT An illegal number of events has been supplied. 
+  * 
+  * 	\subsubsection sec2-3-1-7 Section 2.3.1.7: SignalProcess _ Signal an
+  * 	event 
+  * 
+  * \par
+  * int LWP SignalProcess(IN char *event) 
+  * \par Description 
+  * This routine causes the given event to be signalled. All threads waiting for
+  * this event (exclusively) will be marked as runnable, and the scheduler will
+  * be invoked. Note that threads waiting on multiple events via LWP
+  * MwaitProcess() may not be marked as runnable. Signals are not queued.
+  * Therefore, if no thread is waiting for the signalled event, the signal will
+  * be lost. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. LWP EBADEVENT A null
+  * event pointer has been provided. LWP ENOWAIT No thread was waiting on the
+  * given event. 
+  * 
+  * 	\subsubsection sec2-3-1-8 Section 2.3.1.8: NoYieldSignal _ Signal an
+  * 	event without invoking scheduler 
+  * 
+  * \par
+  * int LWP NoYieldSignal(IN char *event) 
+  * \par Description 
+  * This function is identical to LWP SignalProcess() except that the scheduler
+  * will not be invoked. Thus, control will remain with the signalling process. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. LWP EBADEVENT A null
+  * event pointer has been provided. LWP ENOWAIT No thread was waiting on the
+  * given event. 
+  * 
+  * 	\subsubsection sec2-3-1-9 Section 2.3.1.9: DispatchProcess _ Yield
+  * 	control to the scheduler 
+  * 
+  * \par
+  * int LWP DispatchProcess() 
+  * \par Description 
+  * This routine causes the calling thread to yield voluntarily to the LWP
+  * scheduler. If no other thread of appropriate priority is marked as runnable,
+  * the caller will continue its execution. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. 
+  * 
+  * 	\subsubsection sec2-3-1-10 Section 2.3.1.10: CurrentProcess _ Get the
+  * 	current thread's ID 
+  * 
+  * \par
+  * int LWP CurrentProcess(IN PROCESS *pid) 
+  * \par Description 
+  * This call places the current lightweight process ID in the pid parameter. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package has not been initialized. 
+  * 
+  * 	\subsubsection sec2-3-1-11 Section 2.3.1.11: ActiveProcess _ Get the
+  * 	current thread's ID (macro) 
+  * 
+  * \par
+  * int LWP ActiveProcess() 
+  * \par Description 
+  * This macro's value is the current lightweight process ID. It generates a
+  * value identical to that acquired by calling the LWP CurrentProcess()
+  * function described above if the LWP package has been initialized. If no such
+  * initialization has been done, it will return a value of zero. 
+  * 
+  * 	\subsubsection sec2-3-1-12 Section: 2.3.1.12: StackUsed _ Calculate
+  * 	stack usage 
+  * 
+  * \par
+  * int LWP StackUsed(IN PROCESS pid; OUT int *max; OUT int *used) 
+  * \par Description 
+  * This function returns the amount of stack space allocated to the thread
+  * whose identifier is pid, and the amount actually used so far. This is
+  * possible if the global variable lwp stackUseEnabled was TRUE when the thread
+  * was created (it is set this way by default). If so, the thread's stack area
+  * was initialized with a special pattern. The memory still stamped with this
+  * pattern can be determined, and thus the amount of stack used can be
+  * calculated. The max parameter is always set to the thread's stack allocation
+  * value, and used is set to the computed stack usage if lwp stackUseEnabled
+  * was set when the process was created, or else zero. 
+  * \par Error Codes 
+  * LWP NO STACK Stack usage was not enabled at thread creation time. 
+  * 
+  * 	\subsubsection sec2-3-1-13 Section 2.3.1.13: NewRock _ Establish
+  * 	thread-specific storage 
+  * 
+  * \par
+  * int LWP NewRock (IN int tag; IN char **value)
+  * \par Description
+  * This function establishes a "rock", or thread-specific information,
+  * associating it with the calling LWP. The tag is intended to be any unique
+  * integer value, and the value is a pointer to a character array containing
+  * the given data. 
+  * \par
+  * Users of the LWP package must coordinate their choice of tag values. Note
+  * that a tag's value cannot be changed. Thus, to obtain a mutable data
+  * structure, another level of indirection is required. Up to MAXROCKS (4)
+  * rocks may be associated with any given thread. 
+  * \par Error Codes
+  * ENOROCKS A rock with the given tag field already exists. All of the MAXROCKS
+  * are in use. 
+  * 
+  * 
+  * 	\subsubsection sec2-3-1-14 Section: 2.3.1.14: GetRock _ Retrieve
+  * 	thread-specific storage 
+  * 
+  * \par
+  * int LWP GetRock(IN int tag; OUT **value) 
+  * \par Description 
+  * This routine recovers the thread-specific information associated with the
+  * calling process and the given tag, if any. Such a rock had to be established
+  * through a LWP NewRock() call. The rock's value is deposited into value. 
+  * \par Error Codes 
+  * LWP EBADROCK A rock has not been associated with the given tag for this
+  * thread. 
+  * 
+  * 	\subsection sec2-3-2 Section 2.3.2: Locking 
+  * 
+  * \par
+  * This section covers the calling interfaces to the locking package. Many of
+  * the user-callable routines are actually implemented as macros. 
+  * 
+  * 	\subsubsection sec2-3-2-1 Section 2.3.2.1: Lock Init _ Initialize lock
+  * 	structure 
+  * 
+  * \par
+  * void Lock Init(IN struct Lock *lock) 
+  * \par Description 
+  * This function must be called on the given lock object before any other
+  * operations can be performed on it. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-2 Section 2.3.2.2: ObtainReadLock _ Acquire a
+  * 	read lock 
+  * 
+  * \par
+  * void ObtainReadLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro obtains a read lock on the specified lock object. Since this is a
+  * macro and not a function call, results are not predictable if the value of
+  * the lock parameter is a side-effect producing expression, as it will be
+  * evaluated multiple times in the course of the macro interpretation. 
+  * Read locks are incompatible with write, shared, and boosted shared locks. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-3 Section 2.3.2.3: ObtainWriteLock _ Acquire a
+  * 	write lock 
+  * 
+  * \par
+  * void ObtainWriteLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro obtains a write lock on the specified lock object. Since this is
+  * a macro and not a function call, results are not predictable if the value of
+  * the lock parameter is a side-effect producing expression, as it will be
+  * evaluated multiple times in the course of the macro interpretation. 
+  * \par
+  * Write locks are incompatible with all other locks. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-4 Section 2.3.2.4: ObtainSharedLock _ Acquire a
+  * 	shared lock 
+  * 
+  * \par
+  * void ObtainSharedLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro obtains a shared lock on the specified lock object. Since this is
+  * a macro and not a function call, results are not predictable if the value of
+  * the lock parameter is a side-effect producing expression, as it will be
+  * evaluated multiple times in the course of the macro interpretation. 
+  * \par
+  * Shared locks are incompatible with write and boosted shared locks, but are
+  * compatible with read locks. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-5 Section 2.3.2.5: ReleaseReadLock _ Release
+  * 	read lock 
+  * 
+  * \par
+  * void ReleaseReadLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro releases the specified lock. The lock must have been previously
+  * read-locked. Since this is a macro and not a function call, results are not
+  * predictable if the value of the lock parameter is a side-effect producing
+  * expression, as it will be evaluated multiple times in the course of the
+  * macro interpretation. The results are also unpredictable if the lock was not
+  * previously read-locked by the thread calling ReleaseReadLock(). 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-6 Section 2.3.2.6: ReleaseWriteLock _ Release
+  * 	write lock 
+  * 
+  * \par
+  * void ReleaseWriteLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro releases the specified lock. The lock must have been previously
+  * write-locked. Since this is a macro and not a function call, results are not
+  * predictable if the value of the lock parameter is a side-effect producing
+  * expression, as it will be evaluated multiple times in the course of the
+  * macro interpretation. The results are also unpredictable if the lock was not
+  * previously write-locked by the thread calling ReleaseWriteLock(). 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-7 Section 2.3.2.7: ReleaseSharedLock _ Release
+  * 	shared lock 
+  * 
+  * \par
+  * void ReleaseSharedLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro releases the specified lock. The lock must have been previously
+  * share-locked. Since this is a macro and not a function call, results are not
+  * predictalbe if the value of the lock parameter is a side-effect producing
+  * expression, as it will be evaluated multiple times in the course of the
+  * macro interpretation. The results are also unpredictable if the lock was not
+  * previously share-locked by the thread calling ReleaseSharedLock(). 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-8 Section 2.3.2.8: CheckLock _ Determine state
+  * 	of a lock 
+  * 
+  * \par
+  * void CheckLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro produces an integer that specifies the status of the indicated
+  * lock. The value will be -1 if the lock is write-locked, 0 if unlocked, or
+  * otherwise a positive integer that indicates the number of readers (threads
+  * holding read locks). Since this is a macro and not a function call, results
+  * are not predictable if the value of the lock parameter is a side-effect
+  * producing expression, as it will be evaluated multiple times in the course
+  * of the macro interpretation. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-9 Section 2.3.2.9: BoostLock _ Boost a shared
+  * 	lock 
+  * 
+  * \par
+  * void BoostLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro promotes ("boosts") a shared lock into a write lock. Such a boost
+  * operation guarantees that no other writer can get into the critical section
+  * in the process. Since this is a macro and not a function call, results are
+  * not predictable if the value of the lock parameter is a side-effect
+  * producing expression, as it will be evaluated multiple times in the course
+  * of the macro interpretation. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsubsection sec2-3-2-10 Section 2.3.2.10: UnboostLock _ Unboost a
+  * 	shared lock 
+  * 
+  * \par
+  * void UnboostLock(IN struct Lock *lock) 
+  * \par Description 
+  * This macro demotes a boosted shared lock back down into a regular shared
+  * lock. Such an unboost operation guarantees that no other writer can get into
+  * the critical section in the process. Since this is a macro and not a
+  * function call, results are not predictable if the value of the lock
+  * parameter is a side-effect producing expression, as it will be evaluated
+  * multiple times in the course of the macro interpretation. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsection sec2-3-3 Section 2.3.3: IOMGR 
+  * 
+  * \par
+  * This section covers the calling interfaces to the I/O management package. 
+  * 
+  * 	\subsubsection sec2-3-3-1 Section: 2.3.3.1: IOMGR Initialize _
+  * 	Initialize the package 
+  * 
+  * \par
+  * int IOMGR Initialize() 
+  * \par Description 
+  * This function initializes the IOMGR package. Its main task is to create the
+  * IOMGR thread itself, which runs at the lowest possible priority (0). The
+  * remainder of the lightweight processes must be running at priority 1 or
+  * greater (up to a maximum of LWP MAX PRIORITY (4)) for the IOMGR package to
+  * function correctly. 
+  * \par Error Codes 
+  * -1 The LWP and/or timer package haven't been initialized. 
+  * \n <misc> Any errors that may be returned by the LWP CreateProcess()
+  * routine. 
+  * 
+  * 	\subsubsection sec2-3-3-2 Section 2.3.3.2: IOMGR finalize _ Clean up
+  * 	the IOMGR facility 
+  * 
+  * \par
+  * int IOMGR finalize() 
+  * \par Description 
+  * This routine cleans up after the IOMGR package when it is no longer needed.
+  * It releases all storage and destroys the IOMGR thread itself. 
+  * \par Error Codes 
+  * <misc> Any errors that may be returned by the LWP DestroyProcess() routine. 
+  * 
+  * 	\subsubsection sec2-3-3-3 Section 2.3.3.3: IOMGR Select _ Perform a
+  * 	thread-level select() 
+  * 
+  * \par
+  * int IOMGR Select (IN int numfds; IN int *rfds; IN int *wfds; IN int *xfds;
+  * IN truct timeval *timeout) 
+  * \par Description 
+  * This routine performs an LWP version of unix select() operation. The
+  * parameters have the same meanings as with the unix call. However, the return
+  * values will be simplified (see below). If this is a polling select (i.e.,
+  * the value of timeout is null), it is done and the IOMGR Select() function
+  * returns to the user with the results. Otherwise, the calling thread is put
+  * to sleep. If at some point the IOMGR thread is the only runnable process, it
+  * will awaken and collect all select requests. The IOMGR will then perform a
+  * single select and awaken the appropriate processes. This will force a return
+  * from the affected IOMGR Select() calls. 
+  * \par Error Codes 
+  * -1 An error occurred.
+  * \n 0 A timeout occurred.
+  * \n 1 Some number of file descriptors are ready. 
+  * 
+  * 	\subsubsection sec2-3-3-4 Section 2.3.3.4: IOMGR Signal _ Associate
+  * 	unix and LWP signals 
+  * 
+  * \par
+  * int IOMGR Signal(IN int signo; IN char *event) 
+  * \par Description 
+  * This function associates an LWP signal with a unix signal. After this call,
+  * when the given unix signal signo is delivered to the (heavyweight unix)
+  * process, the IOMGR thread will deliver an LWP signal to the event via LWP
+  * NoYieldSignal(). This wakes up any lightweight processes waiting on the
+  * event. Multiple deliveries of the signal may be coalesced into one LWP
+  * wakeup. The call to LWP NoYieldSignal() will happen synchronously. It is
+  * safe for an LWP to check for some condition and then go to sleep waiting for
+  * a unix signal without having to worry about delivery of the signal happening
+  * between the check and the call to LWP WaitProcess(). 
+  * \par Error Codes 
+  * LWP EBADSIG The signo value is out of range. 
+  * \n LWP EBADEVENT The event pointer is null. 
+  * 
+  * 	\subsubsection sec2-3-3-5 Section 2.3.3.5: IOMGR CancelSignal _ Cancel
+  * 	unix and LWP signal association 
+  * 
+  * \par
+  * int IOMGR CancelSignal(IN int signo) 
+  * \par Description 
+  * This routine cancels the association between a unix signal and an LWP event.
+  * After calling this function, the unix signal signo will be handled however
+  * it was handled before the corresponding call to IOMGR Signal(). 
+  * \par Error Codes 
+  * LWP EBADSIG The signo value is out of range. 
+  * 
+  * 	\subsubsection sec2-3-3-6 Section 2.3.3.6: IOMGR Sleep _ Sleep for a
+  * 	given period 
+  * 
+  * \par
+  * void IOMGR Sleep(IN unsigned seconds) 
+  * \par Description 
+  * This function calls IOMGR Select() with zero file descriptors and a timeout
+  * structure set up to cause the thread to sleep for the given number of
+  * seconds. 
+  * \par Error Codes 
+  * ---No value is returned. 
+  * 
+  * 	\subsection sec2-3-4 Section 2.3.4: Timer 
+  * 
+  * \par
+  * This section covers the calling interface to the timer package associated
+  * with the LWP facility. 
+  * 
+  * 	\subsubsection sec2-3-4-1 Section 2.3.4.1: TM Init _ Initialize a timer
+  * 	list 
+  * 
+  * \par
+  * int TM Init(IN struct TM Elem **list) 
+  * \par Description 
+  * This function causes the specified timer list to be initialized. TM Init()
+  * must be called before any other timer operations are applied to the list. 
+  * \par Error Codes 
+  * -1 A null timer list could not be produced. 
+  * 
+  * 	\subsubsection sec2-3-4-2 Section 2.3.4.2: TM final _ Clean up a timer
+  * 	list 
+  * 
+  * \par
+  * int TM final(IN struct TM Elem **list) 
+  * \par Description 
+  * This routine is called when the given empty timer list is no longer needed.
+  * All storage associated with the list is released. 
+  * \par Error Codes 
+  * -1 The list parameter is invalid. 
+  * 
+  * 	\subsubsection sec2-3-4-3 Section 2.3.4.3: TM Insert _ Insert an object
+  * 	into a timer list
+  * 
+  * \par
+  * void TM Insert(IN struct TM Elem **list; IN struct TM Elem *elem)
+  * \par Description
+  * This routine enters an new element, elem, into the list denoted by list.
+  * Before the new element is queued, its TimeLeft field (the amount of time
+  * before the object comes due) is set to the value stored in its TotalTime
+  * field. In order to keep TimeLeft fields current, the TM Rescan() function
+  * may be used. 
+  * \par Error Codes 
+  * ---No return value is generated. 
+  * 
+  * 	\subsubsection sec2-3-4-4 Section 2.3.4.4: TM Rescan _ Update all
+  * 	timers in the list 
+  * 
+  * \par
+  * int TM Rescan(IN struct TM Elem *list) 
+  * \par Description 
+  * This function updates the TimeLeft fields of all timers on the given list.
+  * This is done by checking the time-of-day clock. Note: this is the only
+  * routine other than TM Init() that updates the TimeLeft field in the elements
+  * on the list. 
+  * \par
+  * Instead of returning a value indicating success or failure, TM Rescan()
+  * returns the number of entries that were discovered to have timed out. 
+  * \par Error Codes 
+  * ---Instead of error codes, the number of entries that were discovered to
+  *  have timed out is returned. 
+  * 
+  * 	\subsubsection sec2-3-4-5 Section 2.3.4.5: TM GetExpired _ Returns an
+  * 	expired timer 
+  * 
+  * \par
+  * struct TM Elem *TM GetExpired(IN struct TM Elem *list) 
+  * \par Description 
+  * This routine searches the specified timer list and returns a pointer to an
+  * expired timer element from that list. An expired timer is one whose TimeLeft
+  * field is less than or equal to zero. If there are no expired timers, a null
+  * element pointer is returned. 
+  * \par Error Codes 
+  * ---Instead of error codes, an expired timer pointer is returned, or a null
+  *  timer pointer if there are no expired timer objects. 
+  * 
+  * 	\subsubsection sec2-3-4-6 Section 2.3.4.6: TM GetEarliest _ Returns
+  * 	earliest unexpired timer 
+  * 
+  * \par
+  * struct TM Elem *TM GetEarliest(IN struct TM Elem *list) 
+  * \par Description 
+  * This function returns a pointer to the timer element that will be next to
+  * expire on the given list. This is defined to be the timer element with the
+  * smallest (positive) TimeLeft field. If there are no timers on the list, or
+  * if they are all expired, this function will return a null pointer. 
+  * \par Error Codes 
+  * ---Instead of error codes, a pointer to the next timer element to expireis
+  *  returned, or a null timer object pointer if they are all expired. 
+  * 
+  * 	\subsubsection sec2-3-4-7 Section 2.3.4.7: TM eql _ Test for equality
+  * 	of two timestamps 
+  * 
+  * \par
+  * bool TM eql(IN struct timemval *t1; IN struct timemval *t2) 
+  * \par Description 
+  * This function compares the given timestamps, t1 and t2, for equality. Note
+  * that the function return value, bool, has been set via typedef to be
+  * equivalent to unsigned char. 
+  * \par Error Codes 
+  * 0 If the two timestamps differ. 
+  * \n 1 If the two timestamps are identical. 
+  * 
+  * 	\subsection sec2-3-5 Section 2.3.5: Fast Time 
+  * \par
+  * This section covers the calling interface to the fast time package
+  * associated with the LWP facility. 
+  * 
+  * 	\subsubsection sec2-3-5-1 Section 2.3.5.1: FT Init _ Initialize the
+  * 	fast time package 
+  * 
+  * \par
+  * int FT Init(IN int printErrors; IN int notReally) 
+  * \par Description 
+  * This routine initializes the fast time package, mapping in the kernel page
+  * containing the time-of-day variable. The printErrors argument, if non-zero,
+  * will cause any errors in initalization to be printed to stderr. The
+  * notReally parameter specifies whether initialization is really to be done.
+  * Other calls in this package will do auto-initialization, and hence the
+  * option is offered here. 
+  * \par Error Codes 
+  * -1 Indicates that future calls to FT GetTimeOfDay() will still work, but
+  *  will not be able to access the information directly, having to make a
+  *  kernel call every time. 
+  * 
+  * 	\subsubsection sec2-3-5-2 Section 2.3.5.2: FT GetTimeOfDay _ Initialize
+  * 	the fast time package 
+  * 
+  * \par
+  * int FT GetTimeOfDay(IN struct timeval *tv; IN struct timezone *tz) 
+  * \par Description 
+  * This routine is meant to mimic the parameters and behavior of the unix
+  * gettimeofday() function. However, as implemented, it simply calls
+  * gettimeofday() and then does some bound-checking to make sure the value is
+  * reasonable. 
+  * \par Error Codes 
+  * <misc> Whatever value was returned by gettimeofday() internally. 
+  * 
+  * 	\subsection sec2-3-6 Section 2.3.6: Preemption 
+  * \par
+  * This section covers the calling interface to the preemption package
+  * associated with the LWP facility. 
+  * 
+  * 	\subsubsection sec2-3-6-1 Section 2.3.6.1: PRE InitPreempt _ Initialize
+  * 	the preemption package 
+  * 
+  * \par
+  * int PRE InitPreempt(IN struct timeval *slice) 
+  * \par Description 
+  * This function must be called to initialize the preemption package. It must
+  * appear sometime after the call to LWP InitializeProcessSupport() and
+  * sometime before the first call to any other preemption routine. The slice
+  * argument specifies the time slice size to use. If the slice pointer is set
+  * to null in the call, then the default time slice, DEFAULTSLICE (10
+  * milliseconds), will be used. This routine uses the unix interval timer and
+  * handling of the unix alarm signal, SIGALRM, to implement this timeslicing. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package hasn't been initialized. 
+  * \n LWP ESYSTEM Operations on the signal vector or the interval timer have
+  * failed. 
+  * 
+  * 	\subsubsection sec2-3-6-2 Section 2.3.6.2: PRE EndPreempt _ finalize
+  * 	the preemption package 
+  * 
+  * \par
+  * int PRE EndPreempt() 
+  * \par Description 
+  * This routine finalizes use of the preemption package. No further preemptions
+  * will be made. Note that it is not necessary to make this call before exit.
+  * PRE EndPreempt() is provided only for those applications that wish to
+  * continue after turning off preemption. 
+  * \par Error Codes 
+  * LWP EINIT The LWP package hasn't been initialized. 
+  * \n LWP ESYSTEM Operations on the signal vector or the interval timer have
+  * failed. 
+  * 
+  * 	\subsubsection sec2-3-6-3 Section 2.3.6.3: PRE PreemptMe _ Mark thread
+  * 	as preemptible 
+  * 
+  * \par
+  * int PRE PreemptMe() 
+  * \par Description 
+  * This macro is used to signify the current thread as a candidate for
+  * preemption. The LWP InitializeProcessSupport() routine must have been called
+  * before PRE PreemptMe(). 
+  * \par Error Codes 
+  * ---No return code is generated. 
+  * 
+  * 	\subsubsection sec2-3-6-4 Section 2.3.6.4: PRE BeginCritical _ Enter
+  * 	thread critical section 
+  * 
+  * \par
+  * int PRE BeginCritical() 
+  * \par Description 
+  * This macro places the current thread in a critical section. Upon return, and
+  * for as long as the thread is in the critical section, involuntary
+  * preemptions of this LWP will no longer occur. 
+  * \par Error Codes 
+  * ---No return code is generated. 
+  * 
+  * 	\subsubsection sec2-3-6-5 Section 2.3.6.5: PRE EndCritical _ Exit
+  * 	thread critical section 
+  * 
+  * \par
+  * int PRE EndCritical() 
+  * \par Description 
+  * This macro causes the executing thread to leave a critical section
+  * previously entered via PRE BeginCritical(). If involuntary preemptions were
+  * possible before the matching PRE BeginCritical(), they are once again
+  * possible. 
+  * \par Error Codes 
+  * ---No return code is generated. 
+  * 
+  * 	\page chap3 Chapter 3 -- Rxkad 
+  * 
+  * 
+  * 	\section sec3-1 Section 3.1: Introduction 
+  * 
+  * \par
+  * The rxkad security module is offered as one of the built-in Rx
+  * authentication models. It is based on the Kerberos system developed by MIT's
+  * Project Athena. Readers wishing detailed information regarding Kerberos
+  * design and implementation are directed to [2]. This chapter is devoted to
+  * defining how Kerberos authentication services are made available as Rx
+  * components, and assumes the reader has some familiarity with Kerberos.
+  * Included are descriptions of how client-side and server-side Rx security
+  * objects (struct rx securityClass; see Section 5.3.1.1) implementing this
+  * protocol may be generated by an Rx application. Also, a description appears
+  * of the set of routines available in the associated struct rx securityOps
+  * structures, as covered in Section 5.3.1.2. It is strongly recommended that
+  * the reader become familiar with this section on struct rx securityOps before
+  * reading on. 
+  * 
+  * 	\section sec3-2 Section 3.2: Definitions 
+  * 
+  * \par
+  * An important set of definitions related to the rxkad security package is
+  * provided by the rxkad.h include file. Determined here are various values for
+  * ticket lifetimes, along with structures for encryption keys and Kerberos
+  * principals. Declarations for the two routines required to generate the
+  * different rxkad security objects also appear here. The two functions are
+  * named rxkad NewServerSecurityObject() and rxkad NewClientSecurityObject().
+  * In addition, type field values, encryption levels, security index
+  * operations, and statistics structures may be found in this file. 
+  * 	\section sec3-3 Section 3.3: Exported Objects 
+  * \par
+  * To be usable as an Rx security module, the rxkad facility exports routines
+  * to create server-side and client-side security objects. The server
+  * authentication object is incorporated into the server code when calling rx
+  * NewService(). The client authentication object is incorporated into the
+  * client code every time a connection is established via rx NewConnection().
+  * Also, in order to implement these security objects, the rxkad module must
+  * provide definitions for some subset of the generic security operations as
+  * defined in the appropriate struct rx securityOps variable. 
+  * 
+  * 	\subsection sec3-3-1 Section 3.3.1: Server-Side Mechanisms 
+  * 
+  * 	\subsubsection sec3-3-1-1 Section 3.3.1.1: Security Operations 
+  * 
+  * \par
+  * The server side of the rxkad module fills in all but two of the possible
+  * routines associated with an Rx security object, as described in Section
+  * 5.3.1.2. 
+  * 
+  * \code
+  * static struct rx_securityOps rxkad_server_ops = { 
+  * 	rxkad_Close,
+  * 	rxkad_NewConnection,
+  * 	rxkad_PreparePacket, /* Once per packet creation */
+  * 	0, /* Send packet (once per retrans) */
+  * 	rxkad_CheckAuthentication,
+  * 	rxkad_CreateChallenge,
+  * 	rxkad_GetChallenge,
+  * 	0,
+  * 	rxkad_CheckResponse, /* Check data packet */
+  * 	rxkad_DestroyConnection,
+  * 	rxkad_GetStats,
+  * };
+  * \endcode
+  * 
+  * \par
+  * The rxkad service does not need to take any special action each time a
+  * packet belonging to a call in an rxkad Rx connection is physically
+  * transmitted. Thus, a routine is not supplied for the op SendPacket()
+  * function slot. Similarly, no preparatory work needs to be done previous to
+  * the reception of a response packet from a security challenge, so the op
+  * GetResponse() function slot is also empty. 
+  * 
+  * 	\subsubsection sec3-3-1-2 Section 3.3.1.2: Security Object 
+  * 
+  * \par
+  * The exported routine used to generate an rxkad-specific server-side security
+  * class object is named rxdad NewServerSecurityObject(). It is declared with
+  * four parameters, as follows: 
+  * 
+  * \code
+  * struct rx_securityClass * 
+  * rxkad_NewServerSecurityObject(a_level, a_getKeyRockP, a_getKeyP, a_userOKP) 
+  * rxkad_level a_level; /* Minimum level */
+  * char *a_getKeyRockP; /* Rock for get_key implementor */
+  * int (*a_getKeyP)(); /* Passed kvno & addr(key) to fill */
+  * int (*a_userOKP)(); /* Passed name, inst, cell => bool */
+  * \endcode
+  * 
+  * \par
+  * The first argument specifies the desired level of encryption, and may take
+  * on the following values (as defined in rxkad.h): 
+  * \li rxkad clear: Specifies that packets are to be sent entirely in the
+  * clear, without any encryption whatsoever. 
+  * \li rxkad auth: Specifies that packet sequence numbers are to be encrypted. 
+  * \li rxkad crypt: Specifies that the entire data packet is to be encrypted. 
+  * 
+  * \par
+  * The second and third parameters represent, respectively, a pointer to a
+  * private data area, sometimes called a "rock", and a procedure reference that
+  * is called with the key version number accompanying the Kerberos ticket and
+  * returns a pointer to the server's decryption key. The fourth argument, if
+  * not null, is a pointer to a function that will be called for every new
+  * connection with the client's name, instance, and cell. This routine should
+  * return zero if the user is not acceptable to the server. 
+  * 
+  * 	\subsection sec3-3-2 Section 3.3.2: Client-Side Mechanisms 
+  * 
+  * 	\subsubsection sec3-3-2-1 Section 3.3.2.1: Security Operations 
+  * 
+  * \par
+  * The client side of the rxkad module fills in relatively few of the routines
+  * associated with an Rx security object, as demonstrated below. The general Rx
+  * security object, of which this is an instance, is described in detail in
+  * Section 5.3.1.2. 
+  * 
+  * \code
+  * static struct rx_securityOps rxkad_client_ops = { 
+  * 	rxkad_Close, 
+  * 	rxkad_NewConnection, /* Every new connection */
+  * 	rxkad_PreparePacket, /* Once per packet creation */
+  * 	0, /* Send packet (once per retrans) */
+  * 	0,
+  * 	0,
+  * 	0,
+  * 	rxkad_GetResponse, /* Respond to challenge packet */
+  * 	0,
+  * 	rxkad_CheckPacket, /* Check data packet */
+  * 	rxkad_DestroyConnection,
+  * 	rxkad_GetStats,
+  * 	0,
+  * 	0,
+  * 	0,
+  * };
+  * \endcode
+  * 
+  * \par
+  * As expected, routines are defined for use when someone destroys a security
+  * object (rxkad Close()) and when an Rx connection using the rxkad model
+  * creates a new connection (rxkad NewConnection()) or deletes an existing one
+  * (rxkad DestroyConnection()). Security-specific operations must also be
+  * performed in behalf of rxkad when packets are created (rxkad
+  * PreparePacket()) and received (rxkad CheckPacket()). finally, the client
+  * side of an rxkad security object must also be capable of constructing
+  * responses to security challenges from the server (rxkad GetResponse()) and
+  * be willing to reveal statistics on its own operation (rxkad GetStats()). 
+  * 
+  * 	\subsubsection sec3-3-2-2 Section 3.3.2.2: Security Object 
+  * 
+  * \par
+  * The exported routine used to generate an rxkad-specific client-side security
+  * class object is named rxkad NewClientSecurityObject(). It is declared with
+  * five parameters, specified below: 
+  * 
+  * \code
+  * struct rx_securityClass * rxkad_NewClientSecurityObject(
+  * 				a_level, 
+  * 				a_sessionKeyP, 
+  * 				a_kvno, 
+  * 				a_ticketLen, 
+  * 				a_ticketP
+  * 				) 
+  * rxkad_level a_level; 
+  * struct ktc_encryptionKey *a_sessionKeyP; 
+  * long a_kvno; 
+  * int a_ticketLen; 
+  * char *a_ticketP; 
+  * \endcode
+  * 
+  * \par
+  * The first parameter, a level, specifies the level of encryption desired for
+  * this security object, with legal choices being identical to those defined
+  * for the server-side security object described in Section 3.3.1.2. The second
+  * parameter, a sessionKeyP, provides the session key to use. The ktc
+  * encryptionKey structure is defined in the rxkad.h include file, and consists
+  * of an array of 8 characters. The third parameter, a kvno, provides the key
+  * version number associated with a sessionKeyP. The fourth argument, a
+  * ticketLen, communicates the length in bytes of the data stored in the fifth
+  * parameter, a ticketP, which points to the Kerberos ticket to use for the
+  * principal for which the security object will operate. 
+  * 
+  * 	\page chap4 Chapter 4 -- Rx Support Packages 
+  * 
+  * 	\section sec4-1 Section 4.1: Introduction 
+  * \par
+  * This chapter documents three packages defined directly in support of the Rx
+  * facility. 
+  * \li rx queue: Doubly-linked queue package. 
+  * \li rx clock: Clock package, using the 4.3BSD interval timer. 
+  * \li rx event: Future events package. 
+  * \par
+  * References to constants, structures, and functions defined by these support
+  * packages will appear in the following API chapter. 
+  * 
+  * 	\section sec4-2 Section 4.2: The rx queue Package 
+  * 
+  * \par
+  * This package provides a doubly-linked queue structure, along with a full
+  * suite of related operations. The main concern behind the coding of this
+  * facility was efficiency. All functions are implemented as macros, and it is
+  * suggested that only simple expressions be used for all parameters. 
+  * \par
+  * The rx queue facility is defined by the rx queue.h include file. Some macros
+  * visible in this file are intended for rx queue internal use only. An
+  * understanding of these "hidden" macros is important, so they will also be
+  * described by this document. 
+  * 
+  * 	\subsection sec4-2-1 Section 4.2.1: struct queue 
+  * 
+  * \par
+  * The queue structure provides the linkage information required to maintain a
+  * queue of objects. The queue structure is prepended to any user-defined data
+  * type which is to be organized in this fashion. 
+  * \n \b fields 
+  * \li struct queue *prev - Pointer to the previous queue header. 
+  * \li struct queue *next - Pointer to the next queue header. 
+  * \par
+  * Note that a null Rx queue consists of a single struct queue object whose
+  * next and previous pointers refer to itself. 
+  * 
+  * 	\subsection sec4-2-2 Section 4.2.2: Internal Operations 
+  * 
+  * \par
+  * This section describes the internal operations defined for Rx queues. They
+  * will be referenced by the external operations documented in Section 4.2.3. 
+  * 
+  * 	\subsection sec4-2-2-1 Section 4.2.2.1: Q(): Coerce type to a queue
+  * 	element 
+  * 
+  * \par
+  * \#define _Q(x) ((struct queue *)(x)) 
+  * \par
+  * This operation coerces the user structure named by x to a queue element. Any
+  * user structure using the rx queue package must have a struct queue as its
+  * first field. 
+  * 
+  * 	\subsubsection sec4-2-2-2 Section 4.2.2.2: QA(): Add a queue element
+  * 	before/after another element 
+  * 
+  * \par
+  * \#define _QA(q,i,a,b) (((i->a=q->a)->b=i)->b=q, q->a=i) 
+  * \par
+  * This operation adds the queue element referenced by i either before or after
+  * a queue element represented by q. If the (a, b) argument pair corresponds to
+  * an element's (next, prev) fields, the new element at i will be linked after
+  * q. If the (a, b) argument pair corresponds to an element's (prev, next)
+  * fields, the new element at i will be linked before q. 
+  * 
+  * 	\subsubsection sec4-2-2-3 QR(): Remove a queue element 
+  * 
+  * \par
+  * \#define _QR(i) ((_Q(i)->prev->next=_Q(i)->next)->prev=_Q(i)->prev) 
+  * \par
+  * This operation removes the queue element referenced by i from its queue. The
+  * prev and next fields within queue element i itself is not updated to reflect
+  * the fact that it is no longer part of the queue. 
+  * 
+  * 	\subsubsection sec4-2-2-4 QS(): Splice two queues together 
+  * 
+  * \par
+  * \#define _QS(q1,q2,a,b) if (queue_IsEmpty(q2)); else
+  * ((((q2->a->b=q1)->a->b=q2->b)->a=q1->a, q1->a=q2->a), queue_Init(q2)) 
+  * \par
+  * This operation takes the queues identified by q1 and q2 and splices them
+  * together into a single queue. The order in which the two queues are appended
+  * is determined by the a and b arguments. If the (a, b) argument pair
+  * corresponds to q1's (next, prev) fields, then q2 is appended to q1. If the
+  * (a, b) argument pair corresponds to q1's (prev, next) fields, then q is
+  * prepended to q2. 
+  * \par
+  * This internal QS() routine uses two exported queue operations, namely queue
+  * Init() and queue IsEmpty(), defined in Sections 4.2.3.1 and 4.2.3.16
+  * respectively below. 
+  * 
+  * 	\subsection sec4-2-3 Section 4.2.3: External Operations 
+  * 
+  * 	\subsubsection sec4-2-3-1 Section 4.2.3.1: queue Init(): Initialize a
+  * 	queue header 
+  * 
+  * \par
+  * \#define queue_Init(q) (_Q(q))->prev = (_Q(q))->next = (_Q(q)) 
+  * \par
+  * The queue header referred to by the q argument is initialized so that it
+  * describes a null (empty) queue. A queue head is simply a queue element. 
+  * 
+  * 	\subsubsection sec4-2-3-2 Section 4.2.3.2: queue Prepend(): Put element
+  * 	at the head of a queue 
+  * 
+  * \par
+  * \#define queue_Prepend(q,i) _QA(_Q(q),_Q(i),next,prev) 
+  * \par
+  * Place queue element i at the head of the queue denoted by q. The new queue
+  * element, i, should not currently be on any queue. 
+  * 
+  * 	\subsubsection sec4-2-3-3 Section 4.2.3.3: queue Append(): Put an
+  * 	element a the tail of a queue 
+  * 
+  * \par
+  * \#define queue_Append(q,i) _QA(_Q(q),_Q(i),prev,next) 
+  * \par
+  * Place queue element i at the tail of the queue denoted by q. The new queue
+  * element, i, should not currently be on any queue. 
+  * 
+  * 	\subsection sec4-2-3-4 Section 4.2.3.4: queue InsertBefore(): Insert a
+  * 	queue element before another element 
+  * 
+  * \par
+  * \#define queue_InsertBefore(i1,i2) _QA(_Q(i1),_Q(i2),prev,next) 
+  * \par
+  * Insert queue element i2 before element i1 in i1's queue. The new queue
+  * element, i2, should not currently be on any queue. 
+  * 
+  * 	\subsubsection sec4-2-3-5 Section 4.2.3.5: queue InsertAfter(): Insert
+  * 	a queue element after another element 
+  * 
+  * \par
+  * \#define queue_InsertAfter(i1,i2) _QA(_Q(i1),_Q(i2),next,prev) 
+  * \par
+  * Insert queue element i2 after element i1 in i1's queue. The new queue
+  * element, i2, should not currently be on any queue. 
+  * 
+  * 	\subsubsection sec4-2-3-6 Section: 4.2.3.6: queue SplicePrepend():
+  * 	Splice one queue before another 
+  * 
+  * \par
+  * \#define queue_SplicePrepend(q1,q2) _QS(_Q(q1),_Q(q2),next,prev) 
+  * \par
+  * Splice the members of the queue located at q2 to the beginning of the queue
+  * located at q1, reinitializing queue q2. 
+  * 
+  * 	\subsubsection sec4-2-3-7 Section 4.2.3.7: queue SpliceAppend(): Splice
+  * 	one queue after another 
+  * 
+  * \par
+  * \#define queue_SpliceAppend(q1,q2) _QS(_Q(q1),_Q(q2),prev,next) 
+  * \par
+  * Splice the members of the queue located at q2 to the end of the queue
+  * located at q1, reinitializing queue q2. Note that the implementation of
+  * queue SpliceAppend() is identical to that of queue SplicePrepend() except
+  * for the order of the next and prev arguments to the internal queue splicer,
+  * QS(). 
+  * 
+  * 	\subsubsection sec4-2-3-8 Section 4.2.3.8: queue Replace(): Replace the
+  * 	contents of a queue with that of another 
+  * 
+  * \par
+  * \#define queue_Replace(q1,q2) (*_Q(q1) = *_Q(q2), 
+  * \n _Q(q1)->next->prev = _Q(q1)->prev->next = _Q(q1), 
+  * \n queue_Init(q2)) 
+  * \par
+  * Replace the contents of the queue located at q1 with the contents of the
+  * queue located at q2. The prev and next fields from q2 are copied into the
+  * queue object referenced by q1, and the appropriate element pointers are
+  * reassigned. After the replacement has occurred, the queue header at q2 is
+  * reinitialized. 
+  * 
+  * 	\subsubsection sec4-2-3-9 Section 4.2.3.9: queue Remove(): Remove an
+  * 	element from its queue 
+  * 
+  * \par
+  * \#define queue_Remove(i) (_QR(i), _Q(i)->next = 0) 
+  * \par
+  * This function removes the queue element located at i from its queue. The
+  * next field for the removed entry is zeroed. Note that multiple removals of
+  * the same queue item are not supported. 
+  * 
+  * 	\subsubsection sec4-2-3-10 Section 4.2.3.10: queue MoveAppend(): Move
+  * 	an element from its queue to the end of another queue 
+  * 
+  * \par
+  * \#define queue_MoveAppend(q,i) (_QR(i), queue_Append(q,i)) 
+  * \par
+  * This macro removes the queue element located at i from its current queue.
+  * Once removed, the element at i is appended to the end of the queue located
+  * at q. 
+  * 
+  * 	\subsubsection sec4-2-3-11 Section 4.2.3.11: queue MovePrepend(): Move
+  * 	an element from its queue to the head of another queue 
+  * 
+  * \par
+  * \#define queue_MovePrepend(q,i) (_QR(i), queue_Prepend(q,i)) 
+  * \par
+  * This macro removes the queue element located at i from its current queue.
+  * Once removed, the element at i is inserted at the head fo the queue located
+  * at q. 
+  * 
+  * 	\subsubsection sec4-2-3-12 Section 4.2.3.12: queue first(): Return the
+  * 	first element of a queue, coerced to a particular type 
+  * 
+  * \par
+  * \#define queue_first(q,s) ((struct s *)_Q(q)->next) 
+  * \par
+  * Return a pointer to the first element of the queue located at q. The
+  * returned pointer value is coerced to conform to the given s structure. Note
+  * that a properly coerced pointer to the queue head is returned if q is empty. 
+  * 
+  * 	\subsubsection sec4-2-3-13 Section 4.2.3.13: queue Last(): Return the
+  * 	last element of a queue, coerced to a particular type 
+  * 
+  * \par
+  * \#define queue_Last(q,s) ((struct s *)_Q(q)->prev) 
+  * \par
+  * Return a pointer to the last element of the queue located at q. The returned
+  * pointer value is coerced to conform to the given s structure. Note that a
+  * properly coerced pointer to the queue head is returned if q is empty. 
+  * 
+  * 	\subsubsection sec4-2-3-14 Section 4.2.3.14: queue Next(): Return the
+  * 	next element of a queue, coerced to a particular type 
+  * 
+  * \par
+  * \#define queue_Next(i,s) ((struct s *)_Q(i)->next) 
+  * \par
+  * Return a pointer to the queue element occuring after the element located at
+  * i. The returned pointer value is coerced to conform to the given s
+  * structure. Note that a properly coerced pointer to the queue head is
+  * returned if item i is the last in its queue. 
+  * 
+  * 	\subsubsection sec4-2-3-15 Section 4.2.3.15: queue Prev(): Return the
+  * 	next element of a queue, coerced to a particular type 
+  * 
+  * \par
+  * \#define queue_Prev(i,s) ((struct s *)_Q(i)->prev) 
+  * \par
+  * Return a pointer to the queue element occuring before the element located at
+  * i. The returned pointer value is coerced to conform to the given s
+  * structure. Note that a properly coerced pointer to the queue head is
+  * returned if item i is the first in its queue. 
+  * 
+  * 	\subsubsection sec4-2-3-16 Section 4.2.3.16: queue IsEmpty(): Is the
+  * 	given queue empty? 
+  * 
+  * \par
+  * \#define queue_IsEmpty(q) (_Q(q)->next == _Q(q)) 
+  * \par
+  * Return a non-zero value if the queue located at q does not have any elements
+  * in it. In this case, the queue consists solely of the queue header at q
+  * whose next and prev fields reference itself. 
+  * 
+  * 	\subsubsection sec4-2-3-17 Section 4.2.3.17: queue IsNotEmpty(): Is the
+  * 	given queue not empty? 
+  * 
+  * \par
+  * \#define queue_IsNotEmpty(q) (_Q(q)->next != _Q(q)) 
+  * \par
+  * Return a non-zero value if the queue located at q has at least one element
+  * in it other than the queue header itself. 
+  * 
+  * 	\subsubsection sec4-2-3-18 Section 4.2.3.18: queue IsOnQueue(): Is an
+  * 	element currently queued? 
+  * 
+  * \par
+  * \#define queue_IsOnQueue(i) (_Q(i)->next != 0) 
+  * \par
+  * This macro returns a non-zero value if the queue item located at i is
+  * currently a member of a queue. This is determined by examining its next
+  * field. If it is non-null, the element is considered to be queued. Note that
+  * any element operated on by queue Remove() (Section 4.2.3.9) will have had
+  * its next field zeroed. Hence, it would cause a non-zero return from this
+  * call. 
+  * 
+  * 	\subsubsection sec4-2-3-19 Section 4.2.3.19: queue Isfirst(): Is an
+  * 	element the first on a queue? 
+  * 
+  * \par
+  * \#define queue_Isfirst(q,i) (_Q(q)->first == _Q(i)) 
+  * \par
+  * This macro returns a non-zero value if the queue item located at i is the
+  * first element in the queue denoted by q. 
+  * 
+  * 	\subsubsection sec4-2-3-20 Section 4.2.3.20: queue IsLast(): Is an
+  * 	element the last on a queue? 
+  * 
+  * \par
+  * \#define queue_IsLast(q,i) (_Q(q)->prev == _Q(i)) 
+  * \par
+  * This macro returns a non-zero value if the queue item located at i is the
+  * last element in the queue denoted by q. 
+  * 
+  * 	\subsubsection sec4-2-3-21 Section 4.2.3.21: queue IsEnd(): Is an
+  * 	element the end of a queue? 
+  * 
+  * \par
+  * \#define queue_IsEnd(q,i) (_Q(q) == _Q(i)) 
+  * \par
+  * This macro returns a non-zero value if the queue item located at i is the
+  * end of the queue located at q. Basically, it determines whether a queue
+  * element in question is also the queue header structure itself, and thus does
+  * not represent an actual queue element. This function is useful for
+  * terminating an iterative sweep through a queue, identifying when the search
+  * has wrapped to the queue header. 
+  * 
+  * 	\subsubsection sec4-2-3-22 Section 4.2.3.22: queue Scan(): for loop
+  * 	test for scanning a queue in a forward direction 
+  * 
+  * \par
+  * \#define queue_Scan(q, qe, next, s) 
+  * \n (qe) = queue_first(q, s), next = queue_Next(qe, s); 
+  * \n !queue_IsEnd(q, qe); 
+  * \n (qe) = (next), next = queue_Next(qe, s) 
+  * \par
+  * This macro may be used as the body of a for loop test intended to scan
+  * through each element in the queue located at q. The qe argument is used as
+  * the for loop variable. The next argument is used to store the next value for
+  * qe in the upcoming loop iteration. The s argument provides the name of the
+  * structure to which each queue element is to be coerced. Thus, the values
+  * provided for the qe and next arguments must be of type (struct s *). 
+  * \par
+  * An example of how queue Scan() may be used appears in the code fragment
+  * below. It declares a structure named mystruct, which is suitable for
+  * queueing. This queueable structure is composed of the queue pointers
+  * themselves followed by an integer value. The actual queue header is kept in
+  * demoQueue, and the currItemP and nextItemP variables are used to step
+  * through the demoQueue. The queue Scan() macro is used in the for loop to
+  * generate references in currItemP to each queue element in turn for each
+  * iteration. The loop is used to increment every queued structure's myval
+  * field by one. 
+  * 
+  * \code
+  * struct mystruct { 
+  * 	struct queue q; 
+  * 	int myval; 
+  * }; 
+  * struct queue demoQueue; 
+  * struct mystruct *currItemP, *nextItemP; 
+  * ... 
+  * for (queue_Scan(&demoQueue, currItemP, nextItemP, mystruct)) { 
+  * 	currItemP->myval++; 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * Note that extra initializers can be added before the body of the queue
+  * Scan() invocation above, and extra expressions can be added afterwards. 
+  * 
+  * 	\subsubsection sec4-2-3-23 Section 4.2.3.23: queue ScanBackwards(): for
+  * 	loop test for scanning a queue in a reverse direction 
+  * 
+  * \par
+  * #define queue_ScanBackwards(q, qe, prev, s) 
+  * \n (qe) = queue_Last(q, s), prev = queue_Prev(qe, s); 
+  * \n !queue_IsEnd(q, qe); 
+  * \n (qe) = prev, prev = queue_Prev(qe, s) 
+  * \par
+  * This macro is identical to the queue Scan() macro described above in Section
+  * 4.2.3.22 except for the fact that the given queue is scanned backwards,
+  * starting at the last item in the queue. 
+  * 
+  * 	\section sec4-3 Section 4.3: The rx clock Package 
+  * 
+  * \par
+  * This package maintains a clock which is independent of the time of day. It
+  * uses the unix 4.3BSD interval timer (e.g., getitimer(), setitimer()) in
+  * TIMER REAL mode. Its definition and interface may be found in the rx clock.h
+  * include file. 
+  * 
+  * 	\subsection sec4-3-1 Section 4.3.1: struct clock 
+  * 
+  * \par
+  * This structure is used to represent a clock value as understood by this
+  * package. It consists of two fields, storing the number of seconds and
+  * microseconds that have elapsed since the associated clock Init() routine has
+  * been called. 
+  * \par
+  * \b fields 
+  * \n long sec -Seconds since call to clock Init(). 
+  * \n long usec -Microseconds since call to clock Init(). 
+  * 
+  * 	\subsection sec4-3-2 Section 4.3.12: clock nUpdates 
+  * 
+  * \par
+  * The integer-valued clock nUpdates is a variable exported by the rx clock
+  * facility. It records the number of times the clock value is actually
+  * updated. It is bumped each time the clock UpdateTime() routine is called, as
+  * described in Section 4.3.3.2. 
+  * 
+  * 	\subsection sec4-3-3 Section 4.3.3: Operations 
+  * 
+  * 	\subsubsection sec4-3-3-1 Section 4.3.3.1: clock Init(): Initialize the
+  * 	clock package 
+  * 
+  * \par
+  * This routine uses the unix setitimer() call to initialize the unix interval
+  * timer. If the setitimer() call fails, an error message will appear on
+  * stderr, and an exit(1) will be executed. 
+  * 
+  * 	\subsubsection sec4-3-3-2 Section 4.3.3.2: clock UpdateTime(): Compute
+  * 	the current time 
+  * 
+  * \par
+  * The clock UpdateTime() function calls the unix getitimer() routine in order
+  * to update the current time. The exported clock nUpdates variable is
+  * incremented each time the clock UpdateTime() routine is called. 
+  * 
+  * 	\subsubsection sec4-3-3-3 Section 4.3.3.3: clock GetTime(): Return the
+  * 	current clock time 
+  * 
+  * \par
+  * This macro updates the current time if necessary, and returns the current
+  * time into the cv argument, which is declared to be of type (struct clock *). 
+  * 4.3.3.4 clock Sec(): Get the current clock time, truncated to seconds 
+  * This macro returns the long value of the sec field of the current time. The
+  * recorded time is updated if necessary before the above value is returned. 
+  * 
+  * 	\subsubsection sec4-3-3-5 Section 4.3.3.5: clock ElapsedTime(): Measure
+  * 	milliseconds between two given clock values 
+  * 
+  * \par
+  * This macro returns the elapsed time in milliseconds between the two clock
+  * structure pointers provided as arguments, cv1 and cv2. 
+  * 
+  * 	\subsubsection sec4-3-3-6 Section 4.3.3.6: clock Advance(): Advance the
+  * 	recorded clock time by a specified clock value 
+  * 
+  * \par
+  * This macro takes a single (struct clock *) pointer argument, cv, and adds
+  * this clock value to the internal clock value maintined by the package. 
+  * 
+  * 	\subsubsection sec4-3-3-7 Section 4.3.3.7: clock Gt(): Is a clock value
+  * 	greater than another? 
+  * 
+  * \par
+  * This macro takes two parameters of type (struct clock *), a and b. It
+  * returns a nonzero value if the a parameter points to a clock value which is
+  * later than the one pointed to by b. 
+  * 
+  * 	\subsubsection sec4-3-3-8 Section 4.3.3.8: clock Ge(): Is a clock value
+  * 	greater than or equal to another? 
+  * 
+  * \par
+  * This macro takes two parameters of type (struct clock *), a and b. It
+  * returns a nonzero value if the a parameter points to a clock value which is
+  * greater than or equal to the one pointed to by b. 
+  * 
+  * 	\subsubsection sec4-3-3-9 Section 4.3.3.9: clock Gt(): Are two clock
+  * 	values equal? 
+  * 
+  * \par
+  * This macro takes two parameters of type (struct clock *), a and b. It
+  * returns a non-zero value if the clock values pointed to by a and b are
+  * equal. 
+  * 
+  * 	\subsubsection sec4.3.3.10 Section 4.3.3.10: clock Le(): Is a clock
+  * 	value less than or equal to another? 
+  * 
+  * \par
+  * This macro takes two parameters of type (struct clock *), a and b. It
+  * returns a nonzero value if the a parameter points to a clock value which is
+  * less than or equal to the one pointed to by b. 
+  * 
+  * 	\subsubsection sec4-3-3-11 Section 4.3.3.11: clock Lt(): Is a clock
+  * 	value less than another? 
+  * 
+  * \par
+  * This macro takes two parameters of type (struct clock *), a and b. It
+  * returns a nonzero value if the a parameter points to a clock value which is
+  * less than the one pointed to by b. 
+  * 
+  * 	\subsubsection sec4-3-3-12 Section 4.3.3.12: clock IsZero(): Is a clock
+  * 	value zero? 
+  * 
+  * \par
+  * This macro takes a single parameter of type (struct clock *), c. It returns
+  * a non-zero value if the c parameter points to a clock value which is equal
+  * to zero. 
+  * 
+  * 	\subsubsection sec4-3-3-13 Section 4.3.3.13: clock Zero(): Set a clock
+  * 	value to zero 
+  * 
+  * \par
+  * This macro takes a single parameter of type (struct clock *), c. It sets the
+  * given clock value to zero. 
+  * 	\subsubsection sec4-3-3-14 Section 4.3.3.14: clock Add(): Add two clock
+  * 	values together 
+  * \par
+  * This macro takes two parameters of type (struct clock *), c1 and c2. It adds
+  * the value of the time in c2 to c1. Both clock values must be positive. 
+  * 
+  * 	\subsubsection sec4-3-3-15 Section 4.3.3.15: clock Sub(): Subtract two
+  * 	clock values 
+  * 
+  * \par
+  * This macro takes two parameters of type (struct clock *), c1 and c2. It
+  * subtracts the value of the time in c2 from c1. The time pointed to by c2
+  * should be less than the time pointed to by c1. 
+  * 
+  * 	\subsubsection sec4-3-3-16 Section 4.3.3.16: clock Float(): Convert a
+  * 	clock time into floating point 
+  * 
+  * \par
+  * This macro takes a single parameter of type (struct clock *), c. It
+  * expresses the given clock value as a floating point number. 
+  * 
+  * 	\section sec4-4 Section 4.4: The rx event Package 
+  * 
+  * \par
+  * This package maintains an event facility. An event is defined to be
+  * something that happens at or after a specified clock time, unless cancelled
+  * prematurely. The clock times used are those provided by the rx clock
+  * facility described in Section 4.3 above. A user routine associated with an
+  * event is called with the appropriate arguments when that event occurs. There
+  * are some restrictions on user routines associated with such events. first,
+  * this user-supplied routine should not cause process preemption. Also, the
+  * event passed to the user routine is still resident on the event queue at the
+  * time of invocation. The user must not remove this event explicitly (via an
+  * event Cancel(), see below). Rather, the user routine may remove or schedule
+  * any other event at this time. 
+  * \par
+  * The events recorded by this package are kept queued in order of expiration
+  * time, so that the first entry in the queue corresponds to the event which is
+  * the first to expire. This interface is defined by the rx event.h include
+  * file. 
+  * 
+  * 	\subsection sec4-4-1 Section 4.4.1: struct rxevent 
+  * 
+  * \par
+  * This structure defines the format of an Rx event record. 
+  * \par
+  * \b fields 
+  * \n struct queue junk -The queue to which this event belongs. 
+  * \n struct clock eventTime -The clock time recording when this event comes
+  * due. 
+  * \n int (*func)() -The user-supplied function to call upon expiration. 
+  * \n char *arg -The first argument to the (*func)() function above. 
+  * \n char *arg1 -The second argument to the (*func)() function above. 
+  * 
+  * 	\subsection sec4-4-2 Section 4.4.2: Operations 
+  * 
+  * \par
+  * This section covers the interface routines provided for the Rx event
+  * package. 
+  * 
+  * 	\subsubsection sec4-4-2-1 Section 4.4.2.1: rxevent Init(): Initialize
+  * 	the event package 
+  * 
+  * \par
+  * The rxevent Init() routine takes two arguments. The first, nEvents, is an
+  * integer-valued parameter which specifies the number of event structures to
+  * allocate at one time. This specifies the appropriate granularity of memory
+  * allocation by the event package. The second parameter, scheduler, is a
+  * pointer to an integer-valued function. This function is to be called when an
+  * event is posted (added to the set of events managed by the package) that is
+  * scheduled to expire before any other existing event. 
+  * \par
+  * This routine sets up future event allocation block sizes, initializes the
+  * queues used to manage active and free event structures, and recalls that an
+  * initialization has occurred. Thus, this function may be safely called
+  * multiple times. 
+  * 
+  * 	\subsubsection sec4-4-2-2 Section 4.4.2.2: rxevent Post(): Schedule an
+  * 	event 
+  * 
+  * \par
+  * This function constructs a new event based on the information included in
+  * its parameters and then schedules it. The rxevent Post() routine takes four
+  * parameters. The first is named when, and is of type (struct clock *). It
+  * specifies the clock time at which the event is to occur. The second
+  * parameter is named func and is a pointer to the integer-valued function to
+  * associate with the event that will be created. When the event comes due,
+  * this function will be executed by the event package. The next two arguments
+  * to rxevent Post() are named arg and arg1, and are both of type (char *).
+  * They serve as the two arguments thath will be supplied to the func routine
+  * when the event comes due. 
+  * \par
+  * If the given event is set to take place before any other event currently
+  * posted, the scheduler routine established when the rxevent Init() routine
+  * was called will be executed. This gives the application a chance to react to
+  * this new event in a reasonable way. One might expect that this scheduler
+  * routine will alter sleep times used by the application to make sure that it
+  * executes in time to handle the new event. 
+  * 
+  * 	\subsubsection sec4-4-2-3 Section 4.4.2.3: rxevent Cancel 1(): Cancel
+  * 	an event (internal use) 
+  * 
+  * \par
+  * This routine removes an event from the set managed by this package. It takes
+  * a single parameter named ev of type (struct rxevent *). The ev argument
+  * identifies the pending event to be cancelled. 
+  * \par
+  * The rxevent Cancel 1() routine should never be called directly. Rather, it
+  * should be accessed through the rxevent Cancel() macro, described in Section
+  * 4.4.2.4 below. 
+  * 
+  * 	\subsubsection sec4-4-2-4 Section 4.4.2.4: rxevent Cancel(): Cancel an
+  * 	event (external use) 
+  * 
+  * \par
+  * This macro is the proper way to call the rxevent Cancel 1() routine
+  * described in Section 4.4.2.3 above. Like rxevent Cancel 1(), it takes a
+  * single argument. This event ptr argument is of type (struct rxevent *), and
+  * identi#es the pending event to be cancelled. This macro #rst checks to see
+  * if event ptr is null. If not, it calls rxevent Cancel 1() to perform the
+  * real work. The event ptr argument is zeroed after the cancellation operation
+  * completes. 
+  * 
+  * 	\subsubsection sec4-4-2-5 Section 4.4.2.4: rxevent RaiseEvents():
+  * 	Initialize the event package 
+  * 
+  * \par
+  * This function processes all events that have expired relative to the current
+  * clock time maintained by the event package. Each qualifying event is removed
+  * from the queue in order, and its user-supplied routine (func()) is executed
+  * with the associated arguments. 
+  * \par
+  * The rxevent RaiseEvents() routine takes a single output parameter named
+  * next, defined to be of type (struct clock *). Upon completion of rxevent
+  * RaiseEvents(), the relative time to the next event due to expire is placed
+  * in next. This knowledge may be used to calculate the amount of sleep time
+  * before more event processing is needed. If there is no recorded event which
+  * is still pending at this point, rxevent RaiseEvents() returns a zeroed clock
+  * value into next. 
+  * 
+  * 	\subsubsection sec4-4-2-6 Section 4.4.2.6: rxevent TimeToNextEvent():
+  * 	Get amount of time until the next event expires 
+  * 
+  * \par
+  * This function returns the time between the current clock value as maintained
+  * by the event package and the the next event's expiration time. This
+  * information is placed in the single output argument,interval, defined to be
+  * of type (struct clock *). The rxevent TimeToNextEvent() function returns
+  * integer-valued quantities. If there are no scheduled events, a zero is
+  * returned. If there are one or more scheduled events, a 1 is returned. If
+  * zero is returned, the interval argument is not updated. 
+  * 
+  * 	\page chap5 Chapter 5 -- Programming Interface 
+  * 
+  * 	\section sec5-1 Section 5.1: Introduction 
+  * 
+  * \par
+  * This chapter documents the API for the Rx facility. Included are
+  * descriptions of all the constants, structures, exported variables, macros,
+  * and interface functions available to the application programmer. This
+  * interface is identical regardless of whether the application lives within
+  * the unix kernel or above it. 
+  * \par
+  * This chapter actually provides more information than what may be strictly
+  * considered the Rx API. Many objects that were intended to be opaque and for
+  * Rx internal use only are also described here. The reason driving the
+  * inclusion of this "extra" information is that such exported Rx interface
+  * files as rx.h make these objects visible to application programmers. It is
+  * prefereable to describe these objects here than to ignore them and leave
+  * application programmers wondering as to their meaning. 
+  * \par
+  * An example application illustrating the use of this interface, showcasing
+  * code from both server and client sides, appears in the following chapter. 
+  * 
+  * 	\section sec5-2 Section 5.2: Constants 
+  * 
+  * \par
+  * This section covers the basic constant definitions of interest to the Rx
+  * application programmer. Each subsection is devoted to describing the
+  * constants falling into the following categories: 
+  * \li Configuration quantities 
+  * \li Waiting options 
+  * \li Connection ID operations 
+  * \li Connection flags 
+  * \li Connection types 
+  * \li Call states 
+  * \li Call flags 
+  * \li Call modes 
+  * \li Packet header flags 
+  * \li Packet sizes 
+  * \li Packet types 
+  * \li Packet classes 
+  * \li Conditions prompting ack packets 
+  * \li Ack types 
+  * \li Error codes 
+  * \li Debugging values 
+  * \par
+  * An attempt has been made to relate these constant definitions to the objects
+  * or routines that utilize them. 
+  * 
+  * 	\subsection sec5-2-1 Section 5.2.1: Configuration Quantities 
+  * 
+  * \par
+  * These definitions provide some basic Rx configuration parameters, including
+  * the number of simultaneous calls that may be handled on a single connection,
+  * lightweight thread parameters, and timeouts for various operations. 
+  * 
+  * \par Name 
+  * RX IDLE DEAD TIME
+  * \par Value 
+  * 60
+  * \par Description
+  * Default idle dead time for connections, in seconds.
+  * 
+  * \par Name 
+  * RX MAX SERVICES
+  * \par Value 
+  * 20
+  * \par Description
+  * The maximum number of Rx services that may be installed within one
+  * application.
+  * 
+  * \par Name 
+  * RX PROCESS MAXCALLS
+  * \par Value 
+  * 4
+  * \par Description
+  * The maximum number of asynchronous calls active simultaneously on any given
+  * Rx connection.  This value must be set to a power of two.
+  * 
+  * \par Name 
+  * RX DEFAULT STACK SIZE
+  * \par Value 
+  * 16,000
+  * \par Description
+  * Default lightweight thread stack size, measured in bytes.  This value may be
+  * overridden by calling the rx_SetStackSize() macro.
+  * 
+  * \par Name 
+  * RX PROCESS PRIORITY
+  * \par Value 
+  * LWP NORMAL PRIORITY
+  * \par Description
+  * This is the priority under which an Rx thread should run.  There should not
+  * generally be any reason to change this setting.
+  * 
+  * \par Name 
+  * RX CHALLENGE TIMEOUT
+  * \par Value 
+  * 2
+  * \par Description
+  * The number of seconds before another authentication request packet is
+  * generated.
+  * 
+  * \par Name 
+  * RX MAXACKS
+  * \par Value 
+  * 255
+  * \par Description
+  * Maximum number of individual acknowledgements that may be carried in an Rx
+  * acknowledgement packet.
+  * 
+  * 	\subsection sec5-2-2 Section 5.2.2: Waiting Options 
+  * 
+  * \par
+  * These definitions provide readable values indicating whether an operation
+  * should block when packet buffer resources are not available. 
+  * 
+  * \par Name 
+  * RX DONTWAIT
+  * \par Value 
+  * 0
+  * \par Description
+  * Wait until the associated operation completes.
+  * 
+  * \par Name 
+  * RX WAIT
+  * \par Value 
+  * 1
+  * \par Description
+  * Don't wait if the associated operation would block.
+  * 
+  * 	\subsection sec5-2-3 Section 5.2.3: Connection ID Operations 
+  * 
+  * \par
+  * These values assist in extracting the call channel number from a connection
+  * identifier. A call channel is the index of a particular asynchronous call
+  * structure within a single Rx connection. 
+  * 
+  * \par Name 
+  * RX CIDSHIFT
+  * \par Value 
+  * 2
+  * \par Description
+  * Number of bits to right-shift to isolate a connection ID.  Must be set to
+  * the log (base two) of RX MAXCALLS.
+  * 
+  * \par Name 
+  * RX CHANNELMASK
+  * \par Value 
+  * (RX MAXCALLS-1)
+  * \par Description
+  * Mask used to isolate a call channel from a connection ID field.
+  * 
+  * \par Name 
+  * RX CIDMASK
+  * \par Value 
+  * (~RX CHANNELMASK)
+  * \par Description
+  * Mask used to isolate the connection ID from its field, masking out the call
+  * channel information.
+  * 
+  * 	\subsection sec5-2-4 Section 5.2.4: Connection Flags 
+  * 
+  * \par
+  * The values defined here appear in the flags field of Rx connections, as
+  * defined by the rx connection structure described in Section 5.3.2.2. 
+  * 
+  * \par Name 
+  * RX CONN MAKECALL WAITING
+  * \par Value 
+  * 1
+  * \par Description
+  * rx MakeCall() is waiting for a channel.
+  * 
+  * \par Name 
+  * RX CONN DESTROY ME
+  * \par Value 
+  * 2
+  * \par Description
+  * Destroy this (client) connection after its last call completes.
+  * 
+  * \par Name 
+  * RX CONN USING PACKET CKSUM
+  * \par Value 
+  * 4
+  * \par Description
+  * This packet is using security-related check-summing (a non-zero header,
+  * spare field has been seen.)
+  * 
+  * 	\subsection sec5-2-5 Section 5.2.5: Connection Types 
+  * 
+  * \par
+  * Rx stores different information in its connection structures, depending on
+  * whether the given connection represents the server side (the one providing
+  * the service) or the client side (the one requesting the service) of the
+  * protocol. The type field within the connection structure (described in
+  * Section 5.3.2.2) takes on the following values to differentiate the two
+  * types of connections, and identifies the fields that are active within the
+  * connection structure. 
+  * 
+  * \par Name 
+  * RX CLIENT CONNECTION
+  * \par Value 
+  * 0
+  * \par Description
+  * This is a client-side connection.
+  * 
+  * \par Name 
+  * CONNECTION
+  * \par Value 
+  * 1
+  * \par Description
+  * This is a server-side connection.
+  * 
+  * 	\subsection sec5-2-6 Section 5.2.6: Call States 
+  * 
+  * \par
+  * An Rx call on a particular connection may be in one of several states at any
+  * instant in time. The following definitions identify the range of states that
+  * a call may assume. 
+  * 
+  * \par Name 
+  * RX STATE NOTINIT
+  * \par Value 
+  * 0
+  * \par Description
+  * The call structure has never been used, and is thus still completely
+  * uninitialized.
+  * 
+  * \par Name 
+  * RX STATE PRECALL
+  * \par Value 
+  * 1
+  * \par Description
+  * A call is not yet in progress, but packets have arrived for it anyway.  This
+  * only applies to calls within server-side connections.
+  * 
+  * \par Name 
+  * RX STATE ACTIVE
+  * \par Value 
+  * 2
+  * \par Description
+  * This call is fully active, having an attached lightweight thread operating
+  * on its behalf.
+  * 
+  * \par Name 
+  * RX STATE DAILY
+  * \par Value 
+  * 3
+  * \par Description
+  * The call structure is "dallying" after its lightweight thread has completed
+  * its most recent call.  This is a "hot-standby" condition, where the call
+  * structure preserves state from the previous call and thus optimizes the
+  * arrival of further, related calls.
+  * 
+  * 	\subsection sec5-2-7 Section 5.2.7: Call Flags: 
+  * 
+  * \par
+  * These values are used within the flags field of a variable declared to be of
+  * type struct rx call, as described in Section 5.3.2.4. They provide
+  * additional information as to the state of the given Rx call, such as the
+  * type of event for which it is waiting (if any) and whether or not all
+  * incoming packets have been received in support of the call. 
+  * 
+  * \par Name 
+  * RX CALL READER WAIT
+  * \par Value 
+  * 1
+  * \par Description
+  * Reader is waiting for next packet.
+  * 
+  * \par Name 
+  * RX CALL WAIT WINDOW ALLOC
+  * \par Value 
+  * 2
+  * \par Description
+  * Sender is waiting for a window so that it can allocate buffers.
+  * 
+  * \par Name 
+  * RX CALL WAIT WINDOW SEND
+  * \par Value 
+  * 4
+  * \par Description
+  * Sender is waiting for a window so that it can send buffers.
+  * 
+  * \par Name 
+  * RX CALL WAIT PACKETS
+  * \par Value 
+  * 8
+  * \par Description
+  * Sender is waiting for packet buffers.
+  * 
+  * \par Name 
+  * RX CALL RECEIVE DONE
+  * \par Value 
+  * 16
+  * \par Description
+  * The call is waiting for a lightweight thread to be assigned to the operation
+  * it has just received.
+  * 
+  * \par Name 
+  * RX CALL RECEIVE DONE 
+  * \par Value 
+  * 32
+  * \par Description
+  * All packets have been received on this call.
+  * 
+  * \par Name 
+  * RX CALL CLEARED
+  * \par Value 
+  * 64
+  * \par Description
+  * The receive queue has been cleared when in precall state.
+  * 
+  * 	\subsection sec5-2-8 Section 5.2.8: Call Modes 
+  * 
+  * \par
+  * These values define the modes of an Rx call when it is in the RX STATE
+  * ACTIVE state, having a lightweight thread assigned to it. 
+  * 
+  * \par Name 
+  * RX MODE SENDING
+  * \par Value 
+  * 1
+  * \par Description
+  * We are sending or ready to send.
+  * 
+  * \par Name 
+  * RX MODE RECEIVING
+  * \par Value 
+  * 2
+  * \par Description
+  * We are receiving or ready to receive.
+  * 
+  * \par Name 
+  * RX MODE ERROR
+  * \par Value 
+  * 3
+  * \par Description
+  * Something went wrong in the current conversation.
+  * 
+  * \par Name 
+  * RX MODE EOF
+  * \par Value 
+  * 4
+  * \par Description
+  * The server side has flushed (or the client side has read) the last reply
+  * packet.
+  * 
+  * 	\subsection sec5-2-9 Section 5.2.9: Packet Header Flags 
+  * 
+  * \par
+  * Rx packets carry a flag field in their headers, providing additional
+  * information regarding the packet's contents. The Rx packet header's flag
+  * field's bits may take the following values: 
+  * 
+  * \par Name 
+  * RX CLIENT INITIATED
+  * \par Value 
+  * 1
+  * \par Description
+  * Signifies that a packet has been sent/received from the client side of the
+  * call.
+  * 
+  * \par Name 
+  * RX REQUEST ACK
+  * \par Value 
+  * 2
+  * \par Description
+  * The Rx calls' peer entity requests an acknowledgement.
+  * 
+  * \par Name 
+  * RX LAST PACKET
+  * \par Value 
+  * 4
+  * \par Description
+  * This is the final packet from this side of the call.
+  * 
+  * \par Name 
+  * RX MORE PACKETS
+  * \par Value 
+  * 8
+  * \par Description
+  * There are more packets following this, i.e., the next sequence number seen
+  * by the receiver should be greater than this one, rather than a
+  * retransmission of an earlier sequence number.
+  * 
+  * \par Name 
+  * RX PRESET FLAGS
+  * \par Value 
+  * (RX CLIENT INITIATED | RX LAST PACKET)
+  * \par Description
+  * This flag is preset once per Rx packet.  It doesn't change on retransmission
+  * of the packet.
+  * 
+  * 	\subsection sec5-3-10 Section 5.2.10: Packet Sizes 
+  * 
+  * \par
+  * These values provide sizing information on the various regions within Rx
+  * packets. These packet sections include the IP/UDP headers and bodies as well
+  * Rx header and bodies. Also covered are such values as different maximum
+  * packet sizes depending on whether they are targeted to peers on the same
+  * local network or a more far-flung network. Note that the MTU term appearing
+  * below is an abbreviation for Maximum Transmission Unit. 
+  * 
+  * \par Name 
+  * RX IPUDP SIZE
+  * \par Value 
+  * 28
+  * \par Description
+  * The number of bytes taken up by IP/UDP headers.
+  * 
+  * \par Name 
+  * RX MAX PACKET SIZE
+  * \par Value 
+  * (1500 - RX IPUDP SIZE)
+  * \par Description
+  * This is the Ethernet MTU minus IP and UDP header sizes.
+  * 
+  * \par Name 
+  * RX HEADER SIZE
+  * \par Value 
+  * sizeof (struct rx header)
+  * \par Description
+  * The number of bytes in an Rx packet header.
+  * 
+  * \par Name 
+  * RX MAX PACKET DATA SIZE
+  * \par Value 
+  * (RX MAX PACKET SIZE RX - HEADER SIZE)
+  * \par Description
+  * Maximum size in bytes of the user data in a packet.
+  * 
+  * \par Name 
+  * RX LOCAL PACKET SIZE
+  * \par Value 
+  * RX MAX PACKET SIZE
+  * \par Description
+  * Packet size in bytes to use when being sent to a host on the same net.
+  * 
+  * \par Name 
+  * RX REMOTE PACKET SIZE
+  * \par Value 
+  * (576 - RX IPUDP SIZE)
+  * \par Description
+  * Packet size in bytes to use when being sent to a host on a different net.
+  * 
+  * 	\subsection sec5-2-11 Section 5.2.11: Packet Types 
+  * 
+  * \par
+  * The following values are used in the packetType field within a struct rx
+  * packet, and define the different roles assumed by Rx packets. These roles
+  * include user data packets, different flavors of acknowledgements, busies,
+  * aborts, authentication challenges and responses, and debugging vehicles. 
+  * 
+  * \par Name 
+  * RX PACKET TYPE DATA
+  * \par Value 
+  * 1
+  * \par Description
+  * A user data packet.
+  * 
+  * \par Name 
+  * RX PACKET TYPE ACK
+  * \par Value 
+  * 2
+  * \par Description
+  * Acknowledgement packet.
+  * 
+  * \par Name 
+  * RX PACKET TYPE BUSY
+  * \par Value 
+  * 3
+  * \par Description
+  * Busy packet.  The server-side entity cannot accept the call at the moment,
+  * but the requestor is encouraged to try again later.
+  * 
+  * \par Name 
+  * RX PACKET TYPE ABORT 
+  * \par Value 
+  * 4
+  * \par Description
+  * Abort packet. No response is needed for this packet type.
+  * 
+  * \par Name 
+  * RX PACKET TYPE ACKALL
+  * \par Value 
+  * 5
+  * \par Description
+  * Acknowledges receipt of all packets on a call.
+  * 
+  * \par Name 
+  * RX PACKET TYPE CHALLENGE
+  * \par Value 
+  * 6
+  * \par Description
+  * Challenge the client's identity, requesting credentials.
+  * 
+  * \par Name 
+  * RX PACKET TYPE RESPONSE
+  * \par Value 
+  * 7
+  * \par Description
+  * Response to a RX PACKET TYPE CHALLENGE authentication challenge packet.
+  * 
+  * \par Name 
+  * RX PACKET TYPE DEBUG
+  * \par Value 
+  * 8
+  * \par Description
+  * Request for debugging information.
+  * 
+  * \par Name 
+  * RX N PACKET TYPES
+  * \par Value 
+  * 9
+  * \par Description
+  * The number of Rx packet types defined above.  Note that it also includes
+  * packet type 0 (which is unused) in the count.
+  * 
+  * \par
+  * The RX PACKET TYPES definition provides a mapping of the above values to
+  * human-readable string names, and is exported by the rx packetTypes variable
+  * catalogued in Section 5.4.9. 
+  * 
+  * \code 
+  * {
+  * 	"data", 
+  * 	"ack", 
+  * 	"busy", 
+  * 	"abort", 
+  * 	"ackall", 
+  * 	"challenge", 
+  * 	"response", 
+  * 	"debug" 
+  * } 
+  * \endcode
+  * 
+  * 	\subsection sec5-2-12 Section 5.2.12: Packet Classes 
+  * 
+  * \par
+  * These definitions are used internally to manage alloction of Rx packet
+  * buffers according to quota classifications. Each packet belongs to one of
+  * the following classes, and its buffer is derived from the corresponding
+  * pool. 
+  * 
+  * \par Name 
+  * RX PACKET CLASS RECEIVE
+  * \par Value 
+  * 0
+  * \par Description
+  * Receive packet for user data.
+  * 
+  * \par Name 
+  * RX PACKET CLASS SEND
+  * \par Value 
+  * 1
+  * \par Description
+  * Send packet for user data.
+  * 
+  * \par Name 
+  * RX PACKET CLASS SPECIAL
+  * \par Value 
+  * 2
+  * \par Description
+  * A special packet that does not hold user data, such as an acknowledgement or
+  * authentication challenge.
+  * 
+  * \par Name 
+  * RX N PACKET CLASSES
+  * \par Value 
+  * 3
+  * \par Description
+  * The number of Rx packet classes defined above.
+  * 
+  * 	\subsection sec5-2-13 Section 5.2.13: Conditions Prompting Ack Packets 
+  * 
+  * \par
+  * Rx acknowledgement packets are constructed and sent by the protocol
+  * according to the following reasons. These values appear in the Rx packet
+  * header of the ack packet itself. 
+  * 
+  * \par Name 
+  * RX ACK REQUESTED
+  * \par Value 
+  * 1
+  * \par Description
+  * The peer has explicitly requested an ack on this packet.
+  * 
+  * \par Name 
+  * RX ACK DUPLICATE
+  * \par Value 
+  * 2
+  * \par Description
+  * A duplicate packet has been received.
+  * 
+  * \par Name 
+  * RX ACK OUT OF SEQUENCE
+  * \par Value 
+  * 3
+  * \par Description
+  * A packet has arrived out of sequence.
+  * 
+  * \par Name 
+  * RX ACK EXCEEDS WINDOW
+  * \par Value 
+  * 4
+  * \par Description
+  * A packet sequence number higher than maximum value allowed by the call's
+  * window has been received.
+  * 
+  * \par Name 
+  * RX ACK NOSPACE
+  * \par Value 
+  * 5
+  * \par Description
+  * No packet buffer space is available.
+  * 
+  * \par Name 
+  * RX ACK PING
+  * \par Value 
+  * 6
+  * \par Description
+  * Acknowledgement for keep-alive purposes.
+  * 
+  * \par Name 
+  * RX ACK PING RESPONSE
+  * \par Value 
+  * 7
+  * \par Description
+  * Response to a RX ACK PING packet.
+  * 
+  * \par Name 
+  * RX ACK DELAY
+  * \par Value 
+  * 8
+  * \par Description
+  * An ack generated due to a period of inactivity after normal packet
+  * receptions.
+  * 
+  * 	\subsection 5-2-14 Section 5.2.14: Acknowledgement Types 
+  * 
+  * \par
+  * These are the set of values placed into the acks array in an Rx
+  * acknowledgement packet, whose data format is defined by struct rx ackPacket.
+  * These definitions are used to convey positive or negative acknowledgements
+  * for a given range of packets. 
+  * 
+  * \par Name 
+  * RX ACK TYPE NACK
+  * \par Value 
+  * 0
+  * \par Description
+  * Receiver doesn't currently have the associated packet; it may never hae been
+  * received, or received and then later dropped before processing.
+  * 
+  * \par Name 
+  * RX ACK TYPE ACK
+  * \par Value 
+  * 1
+  * \par Description
+  * Receiver has the associated packet queued, although it may later decide to
+  * discard it.
+  * 
+  * 	\subsection sec5-2-15 Section 5.2.15: Error Codes 
+  * 
+  * \par
+  * Rx employs error codes ranging from -1 to -64. The Rxgen stub generator may
+  * use other error codes less than -64. User programs calling on Rx, on the
+  * other hand, are expected to return positive error codes. A return value of
+  * zero is interpreted as an indication that the given operation completed
+  * successfully. 
+  * 
+  * \par Name 
+  * RX CALL DEAD
+  * \par Value 
+  * -1
+  * \par Description
+  * A connection has been inactive past Rx's tolerance levels and has been shut
+  * down.
+  * 
+  * \par Name 
+  * RX INVALID OPERATION
+  * \par Value 
+  * -2
+  * \par Description
+  * An invalid operation has been attempted, including such protocol errors as
+  * having a client-side call send data after having received the beginning of a
+  * reply from its server-side peer.
+  * 
+  * \par Name 
+  * RX CALL TIMEOUT
+  * \par Value 
+  * -3
+  * \par Description
+  * The (optional) timeout value placed on this call has been exceeded (see
+  * Sections 5.5.3.4 and 5.6.5).
+  * 
+  * \par Name 
+  * RX EOF
+  * \par Value 
+  * -4
+  * \par Description
+  * Unexpected end of data on a read operation.
+  * 
+  * \par Name 
+  * RX PROTOCOL ERROR
+  * \par Value 
+  * -5
+  * \par Description
+  * An unspecified low-level Rx protocol error has occurred.
+  * 
+  * \par Name 
+  * RX USER ABORT
+  * \par Value 
+  * -6
+  * \par Description
+  * A generic user abort code, used when no more specific error code needs to be
+  * communicated.  For example, Rx clients employing the multicast feature (see
+  * Section 1.2.8) take advantage of this error code.
+  * 
+  * 	\subsection sec5-2-16 Section 5.2.16: Debugging Values 
+  * 
+  * \par
+  * Rx provides a set of data collections that convey information about its
+  * internal status and performance. The following values have been defined in
+  * support of this debugging and statistics-collection feature. 
+  * 
+  * 	\subsubsection sec5-3-16-1 Section 5.2.16.1: Version Information 
+  * 
+  * \par
+  * Various versions of the Rx debugging/statistics interface are in existance,
+  * each defining different data collections and handling certain bugs. Each Rx
+  * facility is stamped with a version number of its debugging/statistics
+  * interface, allowing its clients to tailor their requests to the precise data
+  * collections that are supported by a particular Rx entity, and to properly
+  * interpret the data formats received through this interface. All existing Rx
+  * implementations should be at revision M. 
+  * 
+  * \par Name 
+  * RX DEBUGI VERSION MINIMUM
+  * \par Value 
+  * 'L'
+  * \par Description
+  * The earliest version of Rx statistics available.
+  * 
+  * \par Name 
+  * RX DEBUGI VERSION
+  * \par Value 
+  * 'M'
+  * \par Description
+  * The latest version of Rx statistics available.
+  * 
+  * \par Name 
+  * RX DEBUGI VERSION W SECSTATS
+  * \par Value 
+  * 'L'
+  * \par Description
+  * Identifies the earliest version in which statistics concerning Rx security
+  * objects is available.
+  * 
+  * \par Name 
+  * RX DEBUGI VERSION W GETALLCONN
+  * \par Value 
+  * 'M'
+  * \par Description
+  * The first version that supports getting information about all current Rx
+  * connections, as specified y the RX DEBUGI GETALLCONN debugging request
+  * packet opcode described below.
+  * 
+  * \par Name 
+  * RX DEBUGI VERSION W RXSTATS
+  * \par Value 
+  * 'M'
+  * \par Description
+  * The first version that supports getting all the Rx statistics in one
+  * operation, as specified by the RX DEBUGI RXSTATS debugging request packet
+  * opcode described below.
+  * 
+  * \par Name 
+  * RX DEBUGI VERSION W UNALIGNED CONN
+  * \par Value 
+  * 'L'
+  * \par Description
+  * There was an alignment problem discovered when returning Rx connection
+  * information in older versions of this debugging/statistics interface.  This
+  * identifies the last version that exhibited this alignment problem.
+  * 
+  * 	\subsubsection sec5-2-16-2 Section 5.2.16.2: Opcodes 
+  * 
+  * \par
+  * When requesting debugging/statistics information, the caller specifies one
+  * of the following supported data collections: 
+  * 
+  * \par Name 
+  * RX DEBUGI GETSTATS
+  * \par Value 
+  * 1
+  * \par Description
+  * Get basic Rx statistics.
+  * 
+  * \par Name 
+  * RX DEBUGI GETCONN
+  * \par Value 
+  * 2
+  * \par Description
+  * Get information on all Rx connections considered "interesting" (as defined
+  * below), and no others.
+  * 
+  * \par Name 
+  * RX DEBUGI GETALLCONN
+  * \par Value 
+  * 3
+  * \par Description
+  * Get information on all existing Rx connection structures, even
+  * "uninteresting" ones.
+  * 
+  * \par Name 
+  * RX DEBUGI RXSTATS
+  * \par Value 
+  * 4
+  * \par Description
+  * Get all available Rx stats.
+  * 
+  * \par
+  * An Rx connection is considered "interesting" if it is waiting for a call
+  * channel to free up or if it has been marked for destruction. If neither is
+  * true, a connection is still considered interesting if any of its call
+  * channels is actively handling a call or in its preparatory pre-call state.
+  * Failing all the above conditions, a connection is still tagged as
+  * interesting if any of its call channels is in either of the RX MODE SENDING
+  * or RX MODE RECEIVING modes, which are not allowed when the call is not
+  * active. 
+  * 
+  * 	\subsubsection sec5-2-16-3 Section 5.2.16.3: Queuing 
+  * 
+  * \par
+  * These two queueing-related values indicate whether packets are present on
+  * the incoming and outgoing packet queues for a given Rx call. These values
+  * are only used in support of debugging and statistics-gathering operations. 
+  * 
+  * \par Name 
+  * RX OTHER IN
+  * \par Value 
+  * 1
+  * \par Description
+  * Packets available in in queue.
+  * 
+  * \par Name 
+  * RX OTHER OUT 
+  * \par Value 
+  * 2
+  * \par Description
+  * Packets available in out queue.
+  * 
+  * 	\section sec5-3 Section 5.3: Structures 
+  * 
+  * \par
+  * This section describes the major exported Rx data structures of interest to
+  * application programmers. The following categories are utilized for the
+  * purpose of organizing the structure descriptions: 
+  * \li Security objects 
+  * \li Protocol objects 
+  * \li Packet formats 
+  * \li Debugging and statistics 
+  * \li Miscellaneous 
+  * \par
+  * Please note that many fields described in this section are declared to be
+  * VOID. This is defined to be char, and is used to get around some compiler
+  * limitations. 
+  * 	\subsection sec5-3-1 Section 5.3.1: Security Objects 
+  * 
+  * \par
+  * As explained in Section 1.2.1, Rx provides a modular, extensible security
+  * model. This allows Rx applications to either use one of the built-in
+  * security/authentication protocol packages or write and plug in one of their
+  * own. This section examines the various structural components used by Rx to
+  * support generic security and authentication modules. 
+  * 
+  * 	\subsubsection sec5-3-1-1 Section 5.3.1.1: struct rx securityOps 
+  * 
+  * \par
+  * As previously described, each Rx security object must export a fixed set of
+  * interface functions, providing the full set of operations defined on the
+  * object. The rx securityOps structure defines the array of functions
+  * comprising this interface. The Rx facility calls these routines at the
+  * appropriate times, without knowing the specifics of how any particular
+  * security object implements the operation. 
+  * \par
+  * A complete description of these interface functions, including information
+  * regarding their exact purpose, parameters, and calling conventions, may be
+  * found in Section 5.5.7. 
+  * \par
+  * \b fields 
+  * \li int (*op Close)() - React to the disposal of a security object. 
+  * \li int (*op NewConnection)() - Invoked each time a new Rx connection
+  * utilizing the associated security object is created. 
+  * \li int (*op PreparePacket)() - Invoked each time an outgoing Rx packet is
+  * created and sent on a connection using the given security object. 
+  * \li int (*op SendPacket)() - Called each time a packet belonging to a call
+  * in a connection using the security object is physically transmitted. 
+  * \li int (*op CheckAuthentication)() - This function is executed each time it
+  * is necessary to check whether authenticated calls are being perfomed on a
+  * connection using the associated security object. 
+  * \li int (*op CreateChallenge)() - Invoked each time a server-side challenge
+  * event is created by Rx, namely when the identity of the principal associated
+  * with the peer process must be determined. 
+  * \li int (*op GetChallenge)() - Called each time a client-side packet is
+  * constructed in response to an authentication challenge. 
+  * \li int (*op GetResponse)() - Executed each time a response to a challenge
+  * event must be received on the server side of a connection. 
+  * \li int (*op CheckResponse)() - Invoked each time a response to an
+  * authentication has been received, validating the response and pulling out
+  * the required authentication information. 
+  * \li int (*op CheckPacket) () - Invoked each time an Rx packet has been
+  * received, making sure that the packet is properly formatted and that it
+  * hasn't been altered. 
+  * \li int (*op DestroyConnection)() - Called each time an Rx connection
+  * employing the given security object is destroyed. 
+  * \li int (*op GetStats)() - Executed each time a request for statistics on
+  * the given security object has been received. 
+  * \li int (*op Spare1)()-int (*op Spare3)() - Three spare function slots,
+  * reserved for future use. 
+  * 
+  * 	\subsubsection sec5-3-1-2 Section 5.2.1.2: struct rx securityClass 
+  * 
+  * \par
+  * Variables of type struct rx securityClass are used to represent
+  * instantiations of a particular security model employed by Rx. It consists of
+  * a pointer to the set of interface operations implementing the given security
+  * object, along with a pointer to private storage as necessary to support its
+  * operations. These security objects are also reference-counted, tracking the
+  * number of Rx connections in existance that use the given security object. If
+  * the reference count drops to zero, the security module may garbage-collect
+  * the space taken by the unused security object. 
+  * \par
+  * \b fields 
+  * \li struct rx securityOps *ops - Pointer to the array of interface functions
+  * for the security object. 
+  * \li VOID *privateData - Pointer to a region of storage used by the security
+  * object to support its operations. 
+  * \li int refCount - A reference count on the security object, tracking the
+  * number of Rx connections employing this model. 
+  * 
+  * 	\subsubsection sec5-3-1-3 Section 5.3.1.3: struct rx
+  * 	securityObjectStats 
+  * 
+  * \par
+  * This structure is used to report characteristics for an instantiation of a
+  * security object on a particular Rx connection, as well as performance
+  * figures for that object. It is used by the debugging portions of the Rx
+  * package. Every security object defines and manages fields such as level and
+  * flags differently. 
+  * \par
+  * \b fields 
+  * \li char type - The type of security object being implemented. Existing
+  * values are: 
+  * \li 0: The null security package. 
+  * \li 1: An obsolete Kerberos-like security object. 
+  * \li 2: The rxkad discipline (see Chapter 3). 
+  * \li char level - The level at which encryption is utilized. 
+  * \li char sparec[10] - Used solely for alignment purposes. 
+  * \li long flags - Status flags regarding aspects of the connection relating
+  * to the security object. 
+  * \li u long expires - Absolute time when the authentication information
+  * cached by the given connection expires. A value of zero indicates that the
+  * associated authentication information is valid for all time. 
+  * \li u long packetsReceived - Number of packets received on this particular
+  * connection, and thus the number of incoming packets handled by the
+  * associated security object. 
+  * \li u long packetsSent - Number of packets sent on this particular
+  * connection, and thus the number of outgoing packets handled by the
+  * associated security object. 
+  * \li u long bytesReceived - Overall number of "payload" bytes received (i.e.,
+  * packet bytes not associated with IP headers, UDP headers, and the security
+  * module's own header and trailer regions) on this connection. 
+  * \li u long bytesSent - Overall number of "payload" bytes sent (i.e., packet
+  * bytes not associated with IP headers, UDP headers, and the security module's
+  * own header and trailer regions) on this connection. 
+  * \li short spares[4] - Several shortword spares, reserved for future use. 
+  * \li long sparel[8] - Several longword spares, reserved for future use. 
+  * 
+  * 	\subsection sec5-3-2 Section 5.3.2: Protocol Objects 
+  * 
+  * \par
+  * The structures describing the main abstractions and entities provided by Rx,
+  * namely services, peers, connections and calls are covered in this section. 
+  * 
+  * 	\subsubsection sec5-3-2-1 Section 5.3.2.1: struct rx service 
+  * 
+  * \par
+  * An Rx-based server exports services, or specific RPC interfaces that
+  * accomplish certain tasks. Services are identified by (host-address,
+  * UDP-port, serviceID) triples. An Rx service is installed and initialized on
+  * a given host through the use of the rx NewService() routine (See Section
+  * 5.6.3). Incoming calls are stamped with the Rx service type, and must match
+  * an installed service to be accepted. Internally, Rx services also carry
+  * string names for purposes of identification. These strings are useful to
+  * remote debugging and statistics-gathering programs. The use of a service ID
+  * allows a single server process to export multiple, independently-specified
+  * Rx RPC services. 
+  * \par
+  * Each Rx service contains one or more security classes, as implemented by
+  * individual security objects. These security objects implement end-to-end
+  * security protocols. Individual peer-to-peer connections established on
+  * behalf of an Rx service will select exactly one of the supported security
+  * objects to define the authentication procedures followed by all calls
+  * associated with the connection. Applications are not limited to using only
+  * the core set of built-in security objects offered by Rx. They are free to
+  * define their own security objects in order to execute the specific protocols
+  * they require. 
+  * \par
+  * It is possible to specify both the minimum and maximum number of lightweight
+  * processes available to handle simultaneous calls directed to an Rx service.
+  * In addition, certain procedures may be registered with the service and
+  * called at set times in the course of handling an RPC request. 
+  * \par
+  * \b fields 
+  * \li u short serviceId - The associated service number. 
+  * \li u short servicePort - The chosen UDP port for this service. 
+  * \li char *serviceName - The human-readable service name, expressed as a
+  * character 
+  * \li string. osi socket socket - The socket structure or file descriptor used
+  * by this service. 
+  * \li u short nSecurityObjects - The number of entries in the array of
+  * supported security objects. 
+  * \li struct rx securityClass **securityObjects - The array of pointers to the
+  * ser
+  * vice's security class objects. 
+  * \li long (*executeRequestProc)() - A pointer to the routine to call when an
+  * RPC request is received for this service. 
+  * \li VOID (*destroyConnProc)() - A pointer to the routine to call when one of
+  * the server-side connections associated with this service is destroyed. 
+  * \li VOID (*newConnProc)() - A pointer to the routine to call when a
+  * server-side connection associated with this service is created. 
+  * \li VOID (*beforeProc)() - A pointer to the routine to call before an
+  * individual RPC call on one of this service's connections is executed. 
+  * \li VOID (*afterProc)() - A pointer to the routine to call after an
+  * individual RPC call on one of this service's connections is executed. 
+  * \li short nRequestsRunning - The number of simultaneous RPC calls currently
+  * in progress for this service. 
+  * \li short maxProcs - This field has two meanings. first, maxProcs limits the
+  * total number of requests that may execute in parallel for any one service.
+  * It also guarantees that this many requests may be handled in parallel if
+  * there are no active calls for any other service. 
+  * \li short minProcs - The minimum number of lightweight threads (hence
+  * requests) guaranteed to be simultaneously executable. 
+  * \li short connDeadTime - The number of seconds until a client of this
+  * service will be declared to be dead, if it is not responding to the RPC
+  * protocol. 
+  * \li short idleDeadTime - The number of seconds a server-side connection for
+  * this service will wait for packet I/O to resume after a quiescent period
+  * before the connection is marked as dead. 
+  * 
+  * 	\subsubsection sec5-3-2-2 Section 5.3.2.2: struct rx connection 
+  * 
+  * \par
+  * An Rx connection represents an authenticated communication path, allowing
+  * multiple asynchronous conversations (calls). Each connection is identified
+  * by a connection ID. The low-order bits of the connection ID are reserved so
+  * they may be stamped with the index of a particular call channel. With up to
+  * RX MAXCALLS concurrent calls (set to 4 in this implementation), the bottom
+  * two bits are set aside for this purpose. The connection ID is not sufficient
+  * by itself to uniquely identify an Rx connection. Should a client crash and
+  * restart, it may reuse a connection ID, causing inconsistent results. In
+  * addition to the connection ID, the epoch, or start time for the client side
+  * of the connection, is used to identify a connection. Should the above
+  * scenario occur, a different epoch value will be chosen by the client,
+  * differentiating this incarnation from the orphaned connection record on the
+  * server side. 
+  * \par
+  * Each connection is associated with a parent service, which defines a set of
+  * supported security models. At creation time, an Rx connection selects the
+  * particular security protocol it will implement, referencing the associated
+  * service. The connection structure maintains state about the individual calls
+  * being simultaneously handled. 
+  * \par
+  * \b fields 
+  * \li struct rx connection *next - Used for internal queueing. 
+  * \li struct rx peer *peer - Pointer to the connection's peer information (see
+  * below). 
+  * \li u long epoch - Process start time of the client side of the connection. 
+  * \li u long cid - Connection identifier. The call channel (i.e., the index
+  * into the connection's array of call structures) may appear in the bottom
+  * bits. 
+  * \li VOID *rock - Pointer to an arbitrary region of memory in support of the
+  * connection's operation. The contents of this area are opaque to the Rx
+  * facility in general, but are understood by any special routines used by this
+  * connection. 
+  * \li struct rx call *call[RX MAXCALLS] - Pointer to the call channel
+  * structures, describing up to RX MAXCALLS concurrent calls on this
+  * connection. 
+  * \li u long callNumber[RX MAXCALLS] - The set of current call numbers on each
+  * of the call channels. 
+  * \li int timeout - Obsolete; no longer used. 
+  * \li u char flags - Various states of the connection; see Section 5.2.4 for
+  * individual bit definitions. 
+  * \li u char type - Whether the connection is a server-side or client-side
+  * one. See Section 5.2.5 for individual bit definitions. 
+  * \li u short serviceId - The service ID that should be stamped on requests.
+  * This field is only used by client-side instances of connection structures. 
+  * \li struct rx service *service - A pointer to the service structure
+  * associated with this connection. This field is only used by server-side
+  * instances of connection structures. 
+  * \li u long serial - Serial number of the next outgoing packet associated
+  * with this connection. 
+  * \li u long lastSerial - Serial number of the last packet received in
+  * association with this connection. This field is used in computing packet
+  * skew. 
+  * \li u short secondsUntilDead - Maximum numer of seconds of silence that
+  * should be tolerated from the connection's peer before calls will be
+  * terminated with an RX CALL DEAD error. 
+  * \li u char secondsUntilPing - The number of seconds between "pings"
+  * (keep-alive probes) when at least one call is active on this connection. 
+  * \li u char securityIndex - The index of the security object being used by
+  * this connection. This number selects a slot in the security class array
+  * maintained by the service associated with the connection. 
+  * \li long error - Records the latest error code for calls occurring on this
+  * connection. 
+  * \li struct rx securityClass *securityObject - A pointer to the security
+  * object used by this connection. This should coincide with the slot value
+  * chosen by the securityIndex field described above. 
+  * \li VOID *securityData - A pointer to a region dedicated to hosting any
+  * storage required by the security object being used by this connection. 
+  * \li u short securityHeaderSize - The length in bytes of the portion of the
+  * packet header before the user's data that contains the security module's
+  * information. 
+  * \li u short securityMaxTrailerSize - The length in bytes of the packet
+  * trailer, appearing after the user's data, as mandated by the connection's
+  * security module. 
+  * \li struct rxevent *challengeEvent -Pointer to an event that is scheduled
+  * when the server side of the connection is challenging the client to
+  * authenticate itself. 
+  * \li int lastSendTime - The last time a packet was sent on this connection. 
+  * \li long maxSerial - The largest serial number seen on incoming packets. 
+  * \li u short hardDeadTime - The maximum number of seconds that any call on
+  * this connection may execute. This serves to throttle runaway calls. 
+  * 
+  * 	\subsubsection sec5-3-2-3 Section 5.3.2.3: struct rx peer 
+  * 
+  * \par
+  * For each connection, Rx maintains information describing the entity, or
+  * peer, on the other side of the wire. A peer is identified by a (host,
+  * UDP-port) pair. Included in the information kept on this remote
+  * communication endpoint are such network parameters as the maximum packet
+  * size supported by the host, current readings on round trip time to
+  * retransmission delays, and packet skew (see Section 1.2.7). There are also
+  * congestion control fields, ranging from descriptions of the maximum number
+  * of packets that may be sent to the peer without pausing and retransmission
+  * statistics. Peer structures are shared between connections whenever
+  * possible, and hence are reference-counted. A peer object may be
+  * garbage-collected if it is not actively referenced by any connection
+  * structure and a sufficient period of time has lapsed since the reference
+  * count dropped to zero. 
+  * \par
+  * \b fields 
+  * \li struct rx peer *next - Use to access internal lists. 
+  * \li u long host - Remote IP address, in network byte order 
+  * \li u short port - Remote UDP port, in network byte order 
+  * \li short packetSize - Maximum packet size for this host, if known. 
+  * \li u long idleWhen - When the refCount reference count field (see below)
+  * went to zero. 
+  * \li short refCount - Reference count for this structure 
+  * \li u char burstSize - Reinitialization size for the burst field (below). 
+  * \li u char burst - Number of packets that can be transmitted immediately
+  * without pausing. 
+  * \li struct clock burstWait - Time delay until new burst aimed at this peer
+  * is allowed. 
+  * \li struct queue congestionQueue - Queue of RPC call descriptors that are
+  * waiting for a non-zero burst value. 
+  * \li int rtt - Round trip time to the peer, measured in milliseconds. 
+  * \li struct clock timeout - Current retransmission delay to the peer. 
+  * \li int nSent - Total number of distinct data packets sent, not including
+  * retransmissions. 
+  * \li int reSends - Total number of retransmissions for this peer since the
+  * peer structure instance was created. 
+  * \li u long inPacketSkew - Maximum skew on incoming packets (see Section
+  * 1.2.7) 
+  * \li u long outPacketSkew - Peer-reported maximum skew on outgoing packets
+  * (see Section 1.2.7). 
+  * 
+  * 	\subsubsection sec5-3-2-4 Section 5.3.2.4: struct rx call 
+  * 
+  * \par
+  * This structure records the state of an active call proceeding on a given Rx
+  * connection. As described above, each connection may have up to RX MAXCALLS
+  * calls active at any one instant, and thus each connection maintains an array
+  * of RX MAXCALLS rx call structures. The information contained here is
+  * specific to the given call; "permanent" call state, such as the call number,
+  * is maintained in the connection structure itself. 
+  * \par
+  * \b fields 
+  * \li struct queue queue item header - Queueing information for this
+  * structure. 
+  * \li struct queue tq - Queue of outgoing ("transmit") packets. 
+  * \li struct queue rq - Queue of incoming ("receive") packets. 
+  * \li char *bufPtr - Pointer to the next byte to fill or read in the call's
+  * current packet, depending on whether it is being transmitted or received. 
+  * \li u short nLeft - Number of bytes left to read in the first packet in the
+  * reception queue (see field rq). 
+  * \li u short nFree - Number of bytes still free in the last packet in the
+  * transmission queue (see field tq). 
+  * \li struct rx packet *currentPacket - Pointer to the current packet being
+  * assembled or read. 
+  * \li struct rx connection *conn - Pointer to the parent connection for this
+  * call. 
+  * \li u long *callNumber - Pointer to call number field within the call's
+  * current packet. 
+  * \li u char channel - Index within the parent connection's call array that
+  * describes this call. 
+  * \li u char dummy1, dummy2 - These are spare fields, reserved for future use. 
+  * \li u char state - Current call state. The associated bit definitions appear
+  * in Section 5.2.7. 
+  * \li u char mode - Current mode of a call that is in RX STATE ACTIVE state.
+  * The associated bit definitions appear in Section 5.2.8. 
+  * \li u char flags - Flags pertaining to the state of the given call. The
+  * associated bit definitions appear in Section 5.2.7. 
+  * \li u char localStatus - Local user status information, sent out of band.
+  * This field is currently not in use, set to zero. 
+  * \li u char remoteStatus - Remote user status information, received out of
+  * band.  This field is currently not in use, set to zero. 
+  * \li long error - Error condition for this call. 
+  * \li u long timeout - High level timeout for this call 
+  * \li u long rnext - Next packet sequence number expected to be received. 
+  * \li u long rprev - Sequence number of the previous packet received. This
+  * number is used to decide the proper sequence number for the next packet to
+  * arrive, and may be used to generate a negative acknowledgement. 
+  * \li u long rwind - Width of the packet receive window for this call. The
+  * peer must not send packets with sequence numbers greater than or equal to
+  * rnext + rwind. 
+  * \li u long tfirst - Sequence number of the first unacknowledged transmit
+  * packet for this call. 
+  * \li u long tnext - Next sequence number to use for an outgoing packet. 
+  * \li u long twind - Width of the packet transmit window for this call. Rx
+  * cannot assign a sequence number to an outgoing packet greater than or equal
+  * to tfirst + twind. 
+  * \li struct rxevent *resendEvent - Pointer to a pending retransmission event,
+  * if any. 
+  * \li struct rxevent *timeoutEvent - Pointer to a pending timeout event, if
+  * any. 
+  * \li struct rxevent *keepAliveEvent - Pointer to a pending keep-alive event,
+  * if this is an active call. 
+  * \li struct rxevent *delayedAckEvent - Pointer to a pending delayed
+  * acknowledgement packet event, if any. Transmission of a delayed
+  * acknowledgement packet is scheduled after all outgoing packets for a call
+  * have been sent. If neither a reply nor a new call are received by the time
+  * the delayedAckEvent activates, the ack packet will be sent. 
+  * \li int lastSendTime - Last time a packet was sent for this call. 
+  * \li int lastReceiveTime - Last time a packet was received for this call. 
+  * \li VOID (*arrivalProc)() - Pointer to the procedure to call when reply is
+  * received. 
+  * \li VOID *arrivalProcHandle - Pointer to the handle to pass to the
+  * arrivalProc as its first argument. 
+  * \li VOID *arrivalProcArg - Pointer to an additional argument to pass to the
+  * given arrivalProc. 
+  * \li u long lastAcked - Sequence number of the last packet "hard-acked" by
+  * the receiver. A packet is considered to be hard-acked if an acknowledgement
+  * is generated after the reader has processed it. The Rx facility may
+  * sometimes "soft-ack" a windowfull of packets before they have been picked up
+  * by the receiver. 
+  * \li u long startTime - The time this call started running. 
+  * \li u long startWait - The time that a server began waiting for input data
+  * or send quota. 
+  * 
+  * 	\subsection sec5-3-3 Section 5.3.3: Packet Formats 
+  * 
+  * \par
+  * The following sections cover the different data formats employed by the
+  * suite of Rx packet types, as enumerated in Section 5.2.11. A description of
+  * the most commonly-employed Rx packet header appears first, immediately
+  * followed by a description of the generic packet container and descriptor.
+  * The formats for Rx acknowledgement packets and debugging/statistics packets
+  * are also examined. 
+  * 
+  * 	\subsubsection sec5-3-3-1 Section 5.3.3.1: struct rx header 
+  * 
+  * \par
+  * Every Rx packet has its own header region, physically located after the
+  * leading IP/UDP headers. This header contains connection, call, security, and
+  * sequencing information. Along with a type identifier, these fields allow the
+  * receiver to properly interpret the packet. In addition, every client relates
+  * its "epoch", or Rx incarnation date, in each packet. This assists in
+  * identifying protocol problems arising from reuse of connection identifiers
+  * due to a client restart. Also included in the header is a byte of
+  * user-defined status information, allowing out-of-band channel of
+  * communication for the higher-level application using Rx as a transport
+  * mechanism. 
+  * \par
+  * \b fields 
+  * \li u long epoch - Birth time of the client Rx facility. 
+  * \li u long cid - Connection identifier, as defined by the client. The last
+  * RX CIDSHIFT bits in the cid field identify which of the server-side RX
+  * MAXCALLS call channels is to receive the packet. 
+  * \li u long callNumber - The current call number on the chosen call channel. 
+  * \li u long seq - Sequence number of this packet. Sequence numbers start with
+  * 0 for each new Rx call. 
+  * \li u long serial - This packet's serial number. A new serial number is
+  * stamped on each packet transmitted (or retransmitted). 
+  * \li u char type - What type of Rx packet this is; see Section 5.2.11 for the
+  * list of legal definitions. 
+  * \li u char flags - Flags describing this packet; see Section 5.2.9 for the
+  * list of legal settings. 
+  * \li u char userStatus - User-defined status information, uninterpreted by
+  * the Rx facility itself. This field may be easily set or retrieved from Rx
+  * packets via calls to the rx GetLocalStatus(), rx SetLocalStatus(), rx
+  * GetRemoteStatus(), and rx SetRemoteStatus() macros. 
+  * \li u char securityIndex - Index in the associated server-side service class
+  * of the security object used by this call. 
+  * \li u short serviceId - The server-provided service ID to which this packet
+  * is directed. 
+  * \li u short spare - This field was originally a true spare, but is now used
+  * by the built-in rxkad security module for packet header checksums. See the
+  * descriptions of the related rx IsUsingPktChecksum(), rx GetPacketCksum(),
+  * and rx SetPacketCksum() macros. 
+  * 
+  * 	\subsubsection sec5-3-3-2 Section 5.3.3.2: struct rx packet 
+  * 
+  * \par
+  * This structure is used to describe an Rx packet, and includes the wire
+  * version of the packet contents, where all fields exist in network byte
+  * order. It also includes acknowledgement, length, type, and queueing
+  * information. 
+  * \par
+  * \b fields 
+  * \li struct queue queueItemHeader - field used for internal queueing. 
+  * \li u char acked - If non-zero, this field indicates that this packet has
+  * been tentatively (soft-) acknowledged. Thus, the packet has been accepted by
+  * the rx peer entity on the other side of the connection, but has not yet
+  * necessarily been passed to the true reader. The sender is not free to throw
+  * the packet away, as it might still get dropped by the peer before it is
+  * delivered to its destination process. 
+  * \li short length - Length in bytes of the user data section. 
+  * \li u char packetType - The type of Rx packet described by this record. The
+  * set of legal choices is available in Section 5.2.11. 
+  * \li struct clock retryTime - The time when this packet should be
+  * retransmitted next. 
+  * \li struct clock timeSent - The last time this packet was transmitted. 
+  * \li struct rx header header - A copy of the internal Rx packet header. 
+  * \li wire - The text of the packet as it appears on the wire. This structure
+  * has the following sub-fields: 
+  * 	\li u long head[RX HEADER SIZE/sizeof(long)] The wire-level contents of
+  * 	IP, UDP, and Rx headers. 
+  * 	\li u long data[RX MAX PACKET DATA SIZE/sizeof(long)] The wire form of
+  * 	the packet's "payload", namely the user data it carries. 
+  * 
+  * 	\subsubsection sec5-3-3-3 Section 5.3.3.3: struct rx ackPacket 
+  * 
+  * \par
+  * This is the format for the data portion of an Rx acknowledgement packet,
+  * used to inform a peer entity performing packet transmissions that a subset
+  * of its packets has been properly received. 
+  * \par
+  * \b fields 
+  * \li u short bufferSpace - Number of packet buffers available. Specifically,
+  * the number of packet buffers that the ack packet's sender is willing to
+  * provide for data on this or subsequent calls. This number does not have to
+  * fully accurate; it is acceptable for the sender to provide an estimate. 
+  * \li u short maxSkew - The maximum difference seen between the serial number
+  * of the packet being acknowledged and highest packet yet received. This is an
+  * indication of the degree to which packets are arriving out of order at the
+  * receiver. 
+  * \li u long firstPacket - The serial number of the first packet in the list
+  * of acknowledged packets, as represented by the acks field below. 
+  * \li u long previousPacket - The previous packet serial number received. 
+  * \li u long serial - The serial number of the packet prompted the
+  * acknowledgement. 
+  * \li u char reason - The reason given for the acknowledgement; legal values
+  * for this field are described in Section 5.2.13. 
+  * \li u char nAcks - Number of acknowledgements active in the acks array
+  * immediately following. 
+  * \li u char acks[RX MAXACKS] - Up to RX MAXACKS packet acknowledgements. The
+  * legal values for each slot in the acks array are described in Section
+  * 5.2.14. Basically, these fields indicate either positive or negative
+  * acknowledgements. 
+  * 
+  * \par
+  * All packets with serial numbers prior to firstPacket are implicitly
+  * acknowledged by this packet, indicating that they have been fully processed
+  * by the receiver. Thus, the sender need no longer be concerned about them,
+  * and may release all of the resources that they occupy. Packets with serial
+  * numbers firstPacket + nAcks and higher are not acknowledged by this ack
+  * packet. Packets with serial numbers in the range [firstPacket, firstPacket +
+  * nAcks) are explicitly acknowledged, yet their sender-side resources must not
+  * yet be released, as there is yet no guarantee that the receiver will not
+  * throw them away before they can be processed there. 
+  * \par
+  * There are some details of importance to be noted. For one, receiving a
+  * positive acknowlegement via the acks array does not imply that the
+  * associated packet is immune from being dropped before it is read and
+  * processed by the receiving entity. It does, however, imply that the sender
+  * should stop retransmitting the packet until further notice. Also, arrival of
+  * an ack packet should prompt the transmitter to immediately retransmit all
+  * packets it holds that have not been explicitly acknowledged and that were
+  * last transmitted with a serial number less than the highest serial number
+  * acknowledged by the acks array. 
+  * Note: The fields in this structure are always kept in wire format, namely in
+  * network byte order. 
+  * 
+  * 	\subsection sec5-3-4 Section 5.3.4: Debugging and Statistics 
+  * 
+  * \par
+  * The following structures are defined in support of the debugging and
+  * statistics-gathering interfaces provided by Rx. 
+  * 
+  * 	\subsubsection sec5-3-4-1 Section 5.3.4.1: struct rx stats 
+  * 
+  * \par
+  * This structure maintains Rx statistics, and is gathered by such tools as the
+  * rxdebug program. It must be possible for all of the fields placed in this
+  * structure to be successfully converted from their on-wire network byte
+  * orderings to the host-specific ordering. 
+  * \par
+  * \b fields 
+  * \li int packetRequests - Number of packet allocation requests processed. 
+  * \li int noPackets[RX N PACKET CLASSES] - Number of failed packet requests,
+  * organized per allocation class. 
+  * \li int socketGreedy - Whether the SO GREEDY setting succeeded for the Rx
+  * socket. 
+  * \li int bogusPacketOnRead - Number of inappropriately short packets
+  * received. 
+  * \li int bogusHost - Contains the host address from the last bogus packet
+  * received. 
+  * \li int noPacketOnRead - Number of attempts to read a packet off the wire
+  * when there was actually no packet there. 
+  * \li int noPacketBuffersOnRead - Number of dropped data packets due to lack
+  * of packet buffers. 
+  * \li int selects - Number of selects waiting for a packet arrival or a
+  * timeout. 
+  * \li int sendSelects - Number of selects forced when sending packets. 
+  * \li int packetsRead[RX N PACKET TYPES] - Total number of packets read,
+  * classified by type. 
+  * \li int dataPacketsRead - Number of unique data packets read off the wire. 
+  * \li int ackPacketsRead - Number of ack packets read. 
+  * \li int dupPacketsRead - Number of duplicate data packets read. 
+  * \li int spuriousPacketsRead - Number of inappropriate data packets. 
+  * \li int packetsSent[RX N PACKET TYPES] - Number of packet transmissions,
+  * broken down by packet type. 
+  * \li int ackPacketsSent - Number of ack packets sent. 
+  * \li int pingPacketsSent - Number of ping packets sent. 
+  * \li int abortPacketsSent - Number of abort packets sent. 
+  * \li int busyPacketsSent - Number of busy packets sent. 
+  * \li int dataPacketsSent - Number of unique data packets sent. 
+  * \li int dataPacketsReSent - Number of retransmissions. 
+  * \li int dataPacketsPushed - Number of retransmissions pushed early by a
+  * negative acknowledgement. 
+  * \li int ignoreAckedPacket - Number of packets not retransmitted because they
+  * have already been acked. 
+  * \li int struct clock totalRtt - Total round trip time measured for packets,
+  * used to compute average time figure. 
+  * \li struct clock minRtt - Minimum round trip time measured for packets. 
+  * struct clock maxRtt - Maximum round trip time measured for packets. 
+  * \li int nRttSamples - Number of round trip samples. 
+  * \li int nServerConns - Number of server connections. 
+  * \li int nClientConns - Number of client connections. 
+  * \li int nPeerStructs - Number of peer structures. 
+  * \li int nCallStructs - Number of call structures physically allocated (using
+  * the internal storage allocator routine). 
+  * \li int nFreeCallStructs - Number of call structures which were pulled from
+  * the free queue, thus avoiding a call to the internal storage allocator
+  * routine. 
+  * \li int spares[10] - Ten integer spare fields, reserved for future use. 
+  * 
+  * 	\subsubsection sec5-3-4-2 Section 5.3.4.2: struct rx debugIn 
+  * 
+  * \par
+  * This structure defines the data format for a packet requesting one of the
+  * statistics collections maintained by Rx. 
+  * \par
+  * \b fields 
+  * \li long type - The specific data collection that the caller desires. Legal
+  * settings for this field are described in Section 5.2.16.2. 
+  * \li long index - This field is only used when gathering information on Rx
+  * connections. Choose the index of the server-side connection record of which
+  * we are inquiring. This field may be used as an iterator, stepping through
+  * all the connection records, one per debugging request, until they have all
+  * been examined. 
+  * 
+  * 	\subsubsection sec5-3-4-3 Section 5.3.4.3: struct rx debugStats 
+  * 
+  * \par
+  * This structure describes the data format for a reply to an RX DEBUGI
+  * GETSTATS debugging request packet. These fields are given values indicating
+  * the current state of the Rx facility. 
+  * \par
+  * \b fields 
+  * \li long nFreePackets - Number of packet buffers currently assigned to the
+  * free pool. 
+  * \li long packetReclaims - Currently unused. 
+  * \li long callsExecuted - Number of calls executed since the Rx facility was
+  * initialized. 
+  * \li char waitingForPackets - Is Rx currently blocked waiting for a packet
+  * buffer to come free? 
+  * \li char usedFDs - If the Rx facility is executing in the kernel, return the
+  * number of unix file descriptors in use. This number is not directly related
+  * to the Rx package, but rather describes the state of the machine on which Rx
+  * is running. 
+  * \li char version - Version number of the debugging package. 
+  * \li char spare1[1] - Byte spare, reserved for future use. 
+  * \li long spare2[10] - Set of 10 longword spares, reserved for future use. 
+  * 
+  * 	\subsubsection sec5-3-4-4 Section 5.3.4.4: struct rx debugConn 
+  * 
+  * \par
+  * This structure defines the data format returned when a caller requests
+  * information concerning an Rx connection. Thus, rx debugConn defines the
+  * external packaging of interest to external parties. Most of these fields are
+  * set from the rx connection structure, as defined in Section 5.3.2.2, and
+  * others are obtained by indirecting through such objects as the connection's
+  * peer and call structures. 
+  * \par
+  * \b fields 
+  * \li long host - Address of the host identified by the connection's peer
+  * structure. 
+  * \li long cid - The connection ID. 
+  * \li long serial - The serial number of the next outgoing packet associated
+  * with this connection. 
+  * \li long callNumber[RX MAXCALLS] - The current call numbers for the
+  * individual call channels on this connection. 
+  * \li long error - Records the latest error code for calls occurring on this
+  * connection. 
+  * \li short port - UDP port associated with the connection's peer. 
+  * \li char flags - State of the connection; see Section 5.2.4 for individual
+  * bit definitions. 
+  * \li char type - Whether the connection is a server-side or client-side one.
+  * See Section 5.2.5 for individual bit definitions. 
+  * \li char securityIndex - Index in the associated server-side service class
+  * of the security object being used by this call. 
+  * \li char sparec[3] - Used to force alignment for later fields. 
+  * \li char callState[RX MAXCALLS] - Current call state on each call channel.
+  * The associated bit definitions appear in Section 5.2.7. 
+  * \li char callMode[RX MAXCALLS] - Current mode of all call channels that are
+  * in RX STATE ACTIVE state. The associated bit definitions appear in Section
+  * 5.2.8. 
+  * \li char callFlags[RX MAXCALLS] - Flags pertaining to the state of each of
+  * the connection's call channels. The associated bit definitions appear in
+  * Section 5.2.7. 
+  * \li char callOther[RX MAXCALLS] - Flag field for each call channel, where
+  * the presence of the RX OTHER IN flag indicates that there are packets
+  * present on the given call's reception queue, and the RX OTHER OUT flag
+  * indicates the presence of packets on the transmission queue. 
+  * \li struct rx securityObjectStats secStats - The contents of the statistics
+  * related to the security object selected by the securityIndex field, if any. 
+  * \li long epoch - The connection's client-side incarnation time. 
+  * \li long sparel[10] - A set of 10 longword fields, reserved for future use. 
+  * 
+  * 	\subsubsection sec5-3-4-5 Section 5.3.4.5: struct rx debugConn vL 
+  * 
+  * \par
+  * This structure is identical to rx debugConn defined above, except for the
+  * fact that it is missing the sparec field. This sparec field is used in rx
+  * debugConn to fix an alignment problem that was discovered in version L of
+  * the debugging/statistics interface (hence the trailing "tt vL tag in the
+  * structure name). This alignment problem is fixed in version M, which
+  * utilizes and exports the rx debugConn structure exclusively. Information
+  * regarding the range of version-numbering values for the Rx
+  * debugging/statistics interface may be found in Section 5.2.16.1. 
+  * 	\section sec5-4 Section 5.4: Exported Variables 
+  * 
+  * \par
+  * This section describes the set of variables that the Rx facility exports to
+  * its applications. Some of these variables have macros defined for the sole
+  * purpose of providing the caller with a convenient way to manipulate them.
+  * Note that some of these exported variables are never meant to be altered by
+  * application code (e.g., rx nPackets). 
+  * 
+  * 	\subsection sec5-4-1 Section 5.4.1: rx connDeadTime 
+  * 
+  * \par
+  * This integer-valued variable determines the maximum number of seconds that a
+  * connection may remain completely inactive, without receiving packets of any
+  * kind, before it is eligible for garbage collection. Its initial value is 12
+  * seconds. The rx SetRxDeadTime macro sets the value of this variable. 
+  * 
+  * 	\subsection sec5-4-2 Section 5.4.2: rx idleConnectionTime 
+  * 
+  * \par
+  * This integer-valued variable determines the maximum number of seconds that a
+  * server connection may "idle" (i.e., not have any active calls and otherwise
+  * not have sent a packet) before becoming eligible for garbage collection. Its
+  * initial value is 60 seconds. 
+  * 
+  * 	\subsection sec5-4-3 Section 5.4.3: rx idlePeerTime 
+  * 
+  * \par
+  * This integer-valued variable determines the maximum number of seconds that
+  * an Rx peer structure is allowed to exist without any connection structures
+  * referencing it before becoming eligible for garbage collection. Its initial
+  * value is 60 seconds. 
+  * 
+  * 	\subsection sec5-4-4 Section 5.4.4: rx extraQuota 
+  * 
+  * \par
+  * This integer-valued variable is part of the Rx packet quota system (see
+  * Section 1.2.6), which is used to avoid system deadlock. This ensures that
+  * each server-side thread has a minimum number of packets at its disposal,
+  * allowing it to continue making progress on active calls. This particular
+  * variable records how many extra data packets a user has requested be
+  * allocated. Its initial value is 0. 
+  * 
+  * 	\subsection sec5-4-5 Section 5.4.5: rx extraPackets 
+  * 
+  * \par
+  * This integer-valued variable records how many additional packet buffers are
+  * to be created for each Rx server thread. The caller, upon setting this
+  * variable, is applying some application-specific knowledge of the level of
+  * network activity expected. The rx extraPackets variable is used to compute
+  * the overall number of packet buffers to reserve per server thread, namely rx
+  * nPackets, described below. The initial value is 32 packets. 
+  * 
+  * 	\subsection sec5-4-6 Section 5.4.6: rx nPackets 
+  * 
+  * \par
+  * This integer-valued variable records the total number of packet buffers to
+  * be allocated per Rx server thread. It takes into account the quota packet
+  * buffers and the extra buffers requested by the caller, if any. 
+  * \note This variable should never be set directly; the Rx facility itself
+  * computes its value. Setting it incorrectly may result in the service
+  * becoming deadlocked due to insufficient resources. Callers wishing to
+  * allocate more packet buffers to their server threads should indicate that
+  * desire by setting the rx extraPackets variable described above. 
+  * 
+  * 	\subsection sec5-4-7 Section 5.4.7: rx nFreePackets 
+  * 
+  * \par
+  * This integer-valued variable records the number of Rx packet buffers not
+  * currently used by any call. These unused buffers are collected into a free
+  * pool. 
+  * 
+  * 	\subsection sec5-4-8 Section 5.4.8: rx stackSize 
+  * 
+  * \par
+  * This integer-valued variable records the size in bytes for the lightweight
+  * process stack. The variable is initially set to RX DEFAULT STACK SIZE, and
+  * is typically manipulated via the rx SetStackSize() macro. 
+  * 
+  * 	\subsection sec5-4-9 Section 5.4.9: rx packetTypes 
+  * 
+  * \par
+  * This variable holds an array of string names used to describe the different
+  * roles for Rx packets. Its value is derived from the RX PACKET TYPES
+  * definition found in Section 5.2.11. 
+  * 
+  * 	\subsection sec5-4-10 Section 5.4.10: rx stats 
+  * 
+  * \par
+  * This variable contains the statistics structure that keeps track of Rx
+  * statistics. The struct rx stats structure it provides is defined in Section
+  * 5.3.4.1. 
+  * 
+  * 	\section sec5-5 Section 5.5: Macros 
+  * 
+  * \par
+  * Rx uses many macro definitions in preference to calling C functions
+  * directly. There are two main reasons for doing this: 
+  * \li field selection: Many Rx operations are easily realized by returning the
+  * value of a particular structure's field. It is wasteful to invoke a C
+  * routine to simply fetch a structure's field, incurring unnecessary function
+  * call overhead. Yet, a convenient, procedure-oriented operation is still
+  * provided to Rx clients for such operations by the use of macros. For
+  * example, the rx ConnectionOf() macro, described in Section 5.5.1.1, simply
+  * indirects through the Rx call structure pointer parameter to deliver the
+  * conn field. 
+  * \li Performance optimization: In some cases, a simple test or operation can
+  * be performed to accomplish a particular task. When this simple,
+  * straightforward operation fails, then a true C routine may be called to
+  * handle to more complex (and rarer) situation. The Rx macro rx Write(),
+  * described in Section 5.5.6.2, is a perfect example of this type of
+  * optimization. Invoking rx Write() first checks to determine whether or not
+  * the outgoing call's internal buffer has enough room to accept the specified
+  * data bytes. If so, it copies them into the call's buffer, updating counts
+  * and pointers as appropriate. Otherwise, rx Write() calls the rx WriteProc()
+  * to do the work, which in this more complicated case involves packet
+  * manipulations, dispatches, and allocations. The result is that the common,
+  * simple cases are often handled in-line, with more complex (and rarer) cases
+  * handled through true function invocations. 
+  * \par
+  * The set of Rx macros is described according to the following categories. 
+  * \li field selections/assignments 
+  * \li Boolean operations 
+  * \li Service attributes 
+  * \li Security-related operations 
+  * \li Sizing operations 
+  * \li Complex operation 
+  * \li Security operation invocations 
+  * 
+  * 	\subsection sec5-5-1 Section 5.5.1: field Selections/Assignments 
+  * 
+  * \par
+  * These macros facilitate the fetching and setting of fields from the
+  * structures described Chapter 5.3. 
+  * 
+  * 	\subsubsection sec5-5-1-1 Section 5.5.1.1: rx ConnectionOf() 
+  * 
+  * \par
+  * \#define rx_ConnectionOf(call) ((call)->conn) 
+  * \par
+  * Generate a reference to the connection field within the given Rx call
+  * structure. The value supplied as the call argument must resolve into an
+  * object of type (struct rx call *). An application of the rx ConnectionOf()
+  * macro itself yields an object of type rx peer. 
+  * 
+  * 	\subsubsection sec5-5-1-2 Section 5.5.1.2: rx PeerOf() 
+  * 
+  * \par
+  * \#define rx_PeerOf(conn) ((conn)->peer) 
+  * \par
+  * Generate a reference to the peer field within the given Rx call structure.
+  * The value supplied as the conn argument must resolve into an object of type
+  * (struct rx connection *). An instance of the rx PeerOf() macro itself
+  * resolves into an object of type rx peer. 
+  * 
+  * 	\subsubsection sec5-5-1-3 Section 5.5.1.3: rx HostOf() 
+  * 
+  * \par
+  * \#define rx_HostOf(peer) ((peer)->host) 
+  * \par
+  * Generate a reference to the host field within the given Rx peer structure.
+  * The value supplied as the peer argument must resolve into an object of type
+  * (struct rx peer *). An instance of the rx HostOf() macro itself resolves
+  * into an object of type u long. 
+  * 
+  * 	\subsubsection sec5-5-1-4 Section 5.5.1.4: rx PortOf() 
+  * 
+  * \par
+  * \#define rx_PortOf(peer) ((peer)->port) 
+  * \par
+  * Generate a reference to the port field within the given Rx peer structure.
+  * The value supplied as the peer argument must resolve into an object of type
+  * (struct rx peer *). An instance of the rx PortOf() macro itself resolves
+  * into an object of type u short. 
+  * 
+  * 	\subsubsection sec5-5-1-5 Section 5.5.1.5: rx GetLocalStatus() 
+  * 
+  * \par
+  * \#define rx_GetLocalStatus(call, status) ((call)->localStatus) 
+  * \par
+  * Generate a reference to the localStatus field, which specifies the local
+  * user status sent out of band, within the given Rx call structure. The value
+  * supplied as the call argument must resolve into an object of type (struct rx
+  * call *). The second argument, status, is not used. An instance of the rx
+  * GetLocalStatus() macro itself resolves into an object of type u char. 
+  * 
+  * 	\subsubsection sec5-5-1-6 Section 5.5.1.6: rx SetLocalStatus() 
+  * 
+  * \par
+  * \#define rx_SetLocalStatus(call, status) ((call)->localStatus = (status)) 
+  * \par
+  * Assign the contents of the localStatus field, which specifies the local user
+  * status sent out of band, within the given Rx call structure. The value
+  * supplied as the call argument must resolve into an object of type (struct rx
+  * call *). The second argument, status, provides the new value of the
+  * localStatus field, and must resolve into an object of type u char. An
+  * instance of the rx GetLocalStatus() macro itself resolves into an object
+  * resulting from the assignment, namely the u char status parameter. 
+  * 
+  * 	\subsubsection sec5-5-1-7 Section 5.5.1.7: rx GetRemoteStatus() 
+  * 
+  * \par
+  * \#define rx_GetRemoteStatus(call) ((call)->remoteStatus) 
+  * \par
+  * Generate a reference to the remoteStatus field, which specifies the remote
+  * user status received out of band, within the given Rx call structure. The
+  * value supplied as the call argument must resolve into an object of type
+  * (struct rx call *). An instance of the rx GetRemoteStatus() macro itself
+  * resolves into an object of type u char. 
+  * 
+  * 	\subsubsection sec5-5-1-8 Section 5.5.1.8: rx Error() 
+  * 
+  * \par
+  * \#define rx_Error(call) ((call)->error) 
+  * \par
+  * Generate a reference to the error field, which specifies the current error
+  * condition, within the given Rx call structure. The value supplied as the
+  * call argument must resolve into an object of type (struct rx call *). An
+  * instance of the rx Error() macro itself resolves into an object of type
+  * long. 
+  * 
+  * 	\subsubsection sec5-5-1-9 Section 5.5.1.9: rx DataOf() 
+  * 
+  * \par
+  * \#define rx_DataOf(packet) ((char *) (packet)->wire.data) 
+  * \par
+  * Generate a reference to the beginning of the data portion within the given
+  * Rx packet as it appears on the wire. Any encryption headers will be resident
+  * at this address. For Rx packets of type RX PACKET TYPE DATA, the actual user
+  * data will appear at the address returned by the rx DataOf macro plus the
+  * connection's security header size. The value supplied as the packet argument
+  * must resolve into an object of type (struct rx packet *). An instance of the
+  * rx DataOf() macro itself resolves into an object of type (u long *). 
+  * 
+  * 	\subsubsection sec5-5-1-10 Section 5.5.1.10: rx GetDataSize() 
+  * 
+  * \par
+  * \#define rx_GetDataSize(packet) ((packet)->length) 
+  * \par
+  * Generate a reference to the length field, which specifies the number of
+  * bytes of user data contained within the wire form of the packet, within the
+  * given Rx packet description structure. The value supplied as the packet
+  * argument must resolve into an object of type (struct rx packet *). An
+  * instance of the rx GetDataSize() macro itself resolves into an object of
+  * type short. 
+  * 
+  * 	\subsubsection sec5-5-1-11 Section 5.5.1.11: rx SetDataSize() 
+  * 
+  * \par
+  * \#define rx_SetDataSize(packet, size) ((packet)->length = (size)) 
+  * \par
+  * Assign the contents of the length field, which specifies the number of bytes
+  * of user data contained within the wire form of the packet, within the given
+  * Rx packet description structure. The value supplied as the packet argument
+  * must resolve into an object of type (struct rx packet *). The second
+  * argument, size, provides the new value of the length field, and must resolve
+  * into an object of type short. An instance of the rx SetDataSize() macro
+  * itself resolves into an object resulting from the assignment, namely the
+  * short length parameter. 
+  * 
+  * 	\subsubsection sec5-5-1-12 Section 5.5.1.12: rx GetPacketCksum() 
+  * 
+  * \par
+  * \#define rx_GetPacketCksum(packet) ((packet)->header.spare) 
+  * \par
+  * Generate a reference to the header checksum field, as used by the built-in
+  * rxkad security module (See Chapter 3), within the given Rx packet
+  * description structure. The value supplied as the packet argument must
+  * resolve into an object of type (struct rx packet *). An instance of the rx
+  * GetPacketCksum() macro itself resolves into an object of type u short. 
+  * 
+  * 	\subsubsection sec5-5-1-13 Section 5.5.1.13: rx SetPacketCksum() 
+  * 
+  * \par
+  * \#define rx_SetPacketCksum(packet, cksum) ((packet)->header.spare = (cksum)) 
+  * \par
+  * Assign the contents of the header checksum field, as used by the built-in
+  * rxkad security module (See Chapter 3), within the given Rx packet
+  * description structure. The value supplied as the packet argument must
+  * resolve into an object of type (struct rx packet *). The second argument,
+  * cksum, provides the new value of the checksum, and must resolve into an
+  * object of type u short. An instance of the rx SetPacketCksum() macro itself
+  * resolves into an object resulting from the assignment, namely the u short
+  * checksum parameter. 
+  * 
+  * 	\subsubsection sec5-5-1-14 Section 5.5.1.14: rx GetRock() 
+  * 
+  * \par
+  * \#define rx_GetRock(obj, type) ((type)(obj)->rock) 
+  * \par
+  * Generate a reference to the field named rock within the object identified by
+  * the obj pointer. One common Rx structure to which this macro may be applied
+  * is struct rx connection. The specified rock field is casted to the value of
+  * the type parameter, which is the overall value of the rx GetRock() macro. 
+  * 
+  * 	\subsubsection sec5-5-1-15 Section 5.5.1.15: rx SetRock() 
+  * 
+  * \par
+  * \#define rx_SetRock(obj, newrock) ((obj)->rock = (VOID *)(newrock)) 
+  * \par
+  * Assign the contents of the newrock parameter into the rock field of the
+  * object pointed to by obj. The given object's rock field must be of type
+  * (VOID *). An instance of the rx SetRock() macro itself resolves into an
+  * object resulting from the assignment and is of type (VOID *). 
+  * 
+  * 	\subsubsection sec5-5-1-16 Section 5.5.1.16: rx SecurityClassOf() 
+  * 
+  * \par
+  * \#define rx_SecurityClassOf(conn) ((conn)->securityIndex) 
+  * \par
+  * Generate a reference to the security index field of the given Rx connection
+  * description structure. This identifies the security class used by the
+  * connection. The value supplied as the conn argument must resolve into an
+  * object of type (struct rx connection *). An instance of the rx
+  * SecurityClassOf() macro itself resolves into an object of type u char. 
+  * 
+  * 	\subsubsection sec5-5-1-17 Section 5.5.1.17: rx SecurityObjectOf() 
+  * 
+  * \par
+  * \#define rx_SecurityObjectOf(conn) ((conn)->securityObject) 
+  * \par
+  * Generate a reference to the security object in use by the given Rx
+  * connection description structure. The choice of security object determines
+  * the authentication protocol enforced by the connection. The value supplied
+  * as the conn argument must resolve into an object of type (struct rx
+  * connection *). An instance of the rx SecurityObjectOf() macro itself
+  * resolves into an object of type (struct rx securityClass *). 
+  * 
+  * 	\subsection sec5-5-2 Section 5.5.2: Boolean Operations 
+  * 
+  * \par
+  * The macros described in this section all return Boolean values. They are
+  * used to query such things as the whether a connection is a server-side or
+  * client-side one and if extra levels of checksumming are being used in Rx
+  * packet headers. 
+  * 
+  * 	\subsubsection sec5-5-2-1 Section 5.5.2.1: rx IsServerConn() 
+  * 
+  * \par
+  * \#define rx_IsServerConn(conn) ((conn)->type == RX_SERVER_CONNECTION) 
+  * \par
+  * Determine whether or not the Rx connection specified by the conn argument is
+  * a server-side connection. The value supplied for conn must resolve to an
+  * object of type struct rx connection. The result is determined by testing
+  * whether or not the connection's type field is set to RX SERVER CONNECTION. 
+  * \note Another macro, rx ServerConn(), performs the identical operation. 
+  * 
+  * 	\subsubsection sec5-5-2-2 Section 5.5.2.2: rx IsClientConn() 
+  * 
+  * \par
+  * \#define rx_IsClientConn(conn) ((conn)->type == RX_CLIENT_CONNECTION) 
+  * \par
+  * Determine whether or not the Rx connection specified by the conn argument is
+  * a client-side connection. The value supplied for conn must resolve to an
+  * object of type struct rx connection. The result is determined by testing
+  * whether or not the connection's type field is set to RX CLIENT CONNECTION. 
+  * \note Another macro, rx ClientConn(), performs the identical operation. 
+  * 
+  * 	\subsubsection sec5-5-2-3 Section 5.5.2.2: rx IsUsingPktCksum() 
+  * 
+  * \par
+  * \#define rx_IsUsingPktCksum(conn) ((conn)->flags &
+  * RX_CONN_USING_PACKET_CKSUM) 
+  * \par
+  * Determine whether or not the Rx connection specified by the conn argument is
+  * checksum-ming the headers of all packets on its calls. The value supplied
+  * for conn must resolve to an object of type struct rx connection. The result
+  * is determined by testing whether or not the connection's flags field has the
+  * RX CONN USING PACKET CKSUM bit enabled. 
+  * 
+  * 	\subsection sec5-5-3 Section 5.5.3: Service Attributes 
+  * 
+  * \par
+  * This section describes user-callable macros that manipulate the attributes
+  * of an Rx service. Note that these macros must be called (and hence their
+  * operations performed) before the given service is installed via the
+  * appropriate invocation of the associated rx StartServer() function.
+  * 
+  * 	\subsubsection sec5-5-3-1 Section 5.5.3.1: rx SetStackSize()
+  * 
+  * \par
+  * rx_stackSize = (((stackSize) stackSize) > rx_stackSize) ? stackSize :
+  * rx_stackSize) 
+  * \par
+  * Inform the Rx facility of the stack size in bytes for a class of threads to
+  * be created in support of Rx services. The exported rx stackSize variable
+  * tracks the high-water mark for all stack size requests before the call to rx
+  * StartServer(). If no calls to rx SetStackSize() are made, then rx stackSize
+  * will retain its default setting of RX DEFAULT STACK SIZE. 
+  * \par
+  * In this macro, the first argument is not used. It was originally intended
+  * that thread stack sizes would be settable on a per-service basis. However,
+  * calls to rx SetStackSize() will ignore the service parameter and set the
+  * high-water mark for all Rx threads created after the use of rx
+  * SetStackSize(). The second argument, stackSize, specifies determines the new
+  * stack size, and should resolve to an object of type int. The value placed in
+  * the stackSize parameter will not be recorded in the global rx stackSize
+  * variable unless it is greater than the variable's current setting. 
+  * \par
+  * An instance of the rx SetStackSize() macro itself resolves into the result
+  * of the assignment, which is an object of type int. 
+  * 
+  * 	\subsubsection sec5-5-3-2 Section 5.5.3.2: rx SetMinProcs() 
+  * 
+  * \par
+  * \#define rx_SetMinProcs(service, min) ((service)->minProcs = (min)) 
+  * \par
+  * Choose min as the minimum number of threads guaranteed to be available for
+  * parallel execution of the given Rx service. The service parameter should
+  * resolve to an object of type struct rx service. The min parameter should
+  * resolve to an object of type short. An instance of the rx SetMinProcs()
+  * macro itself resolves into the result of the assignment, which is an object
+  * of type short. 
+  * 
+  * 	\subsubsection sec5-5-3-3 Section 5.5.3.3: rx SetMaxProcs() 
+  * 
+  * \par
+  * \#define rx_SetMaxProcs(service, max) ((service)->maxProcs = (max)) 
+  * \par
+  * Limit the maximum number of threads that may be made available to the given
+  * Rx service for parallel execution to be max. The service parameter should
+  * resolve to an object of type struct rx service. The max parameter should
+  * resolve to an object of type short. An instance of the rx SetMaxProcs()
+  * macro itself resolves into the result of the assignment, which is an object
+  * of type short. 
+  * 
+  * 	\subsubsection sec5-5-3-4 Section 5.5.3.4: rx SetIdleDeadTime() 
+  * 
+  * \par
+  * \#define rx_SetIdleDeadTime(service, time) ((service)->idleDeadTime =
+  * (time)) 
+  * \par
+  * Every Rx service has a maximum amount of time it is willing to have its
+  * active calls sit idle (i.e., no new data is read or written for a call
+  * marked as RX STATE ACTIVE) before unilaterally shutting down the call. The
+  * expired call will have its error field set to RX CALL TIMEOUT. The operative
+  * assumption in this situation is that the client code is exhibiting a
+  * protocol error that prevents progress from being made on this call, and thus
+  * the call's resources on the server side should be freed. The default value,
+  * as recorded in the service's idleDeadTime field, is set at service creation
+  * time to be 60 seconds. The rx SetIdleTime() macro allows a caller to
+  * dynamically set this idle call timeout value. 
+  * \par
+  * The service parameter should resolve to an object of type struct rx service.
+  * Also, the time parameter should resolve to an object of type short. finally,
+  * an instance of the rx SetIdleDeadTime() macro itself resolves into the
+  * result of the assignment, which is an object of type short. 
+  * 
+  * 	\subsubsection sec5-5-3-5 Section 5.5.3.5: rx SetServiceDeadTime() 
+  * 
+  * \par
+  * \#define rx_SetServiceDeadTime(service, seconds)
+  * ((service)->secondsUntilDead = (seconds)) 
+  * \note This macro definition is obsolete and should NOT be used. Including it
+  * in application code will generate a compile-time error, since the service
+  * structure no longer has such a field defined. 
+  * \par
+  * See the description of the rx SetConnDeadTime() macro below to see how hard
+  * timeouts may be set for situations of complete call inactivity. 
+  * 
+  * 	\subsubsection sec5-5-3-6 Section 5.5.3.6: rx SetRxDeadTime() 
+  * 
+  * \par
+  * \#define rx_SetRxDeadTime(seconds) (rx_connDeadTime = (seconds)) 
+  * \par
+  * Inform the Rx facility of the maximum number of seconds of complete
+  * inactivity that will be tolerated on an active call. The exported rx
+  * connDeadTime variable tracks this value, and is initialized to a value of 12
+  * seconds. The current value of rx connDeadTime will be copied into new Rx
+  * service and connection records upon their creation. 
+  * \par
+  * The seconds argument determines the value of rx connDeadTime, and should
+  * resolve to an object of type int. An instance of the rx SetRxDeadTime()
+  * macro itself resolves into the result of the assignment, which is an object
+  * of type int. 
+  * 
+  * 	\subsubsection sec5-5-3-7 Section 5.5.3.7: rx SetConnDeadTime() 
+  * 
+  * \par
+  * \#define rx_SetConnDeadTime(conn, seconds) (rxi_SetConnDeadTime(conn,
+  * seconds)) 
+  * \par
+  * Every Rx connection has a maximum amount of time it is willing to have its
+  * active calls on a server connection sit without receiving packets of any
+  * kind from its peer. After such a quiescent time, during which neither data
+  * packets (regardless of whether they are properly sequenced or duplicates)
+  * nor keep-alive packets are received, the call's error field is set to RX
+  * CALL DEAD and the call is terminated. The operative assumption in this
+  * situation is that the client making the call has perished, and thus the
+  * call's resources on the server side should be freed. The default value, as
+  * recorded in the connection's secondsUntilDead field, is set at connection
+  * creation time to be the same as its parent service. The rx SetConnDeadTime()
+  * macro allows a caller to dynamically set this timeout value. 
+  * \par
+  * The conn parameter should resolve to an object of type struct rx connection.
+  * Also, the seconds parameter should resolve to an object of type int.
+  * finally, an instance of the rx SetConnDeadTime() macro itself resolves into
+  * the a call to rxi SetConnDeadTime(), whose return value is void. 
+  * 
+  * 	\subsubsection sec5-5-3-8 Section 5.5.3.8: rx SetConnHardDeadTime() 
+  * 
+  * \par
+  * \#define rx_SetConnHardDeadTime(conn, seconds) ((conn)->hardDeadTime =
+  * (seconds)) 
+  * \par
+  * It is convenient to be able to specify that calls on certain Rx connections
+  * have a hard absolute timeout. This guards against protocol errors not caught
+  * by other checks in which one or both of the client and server are looping.
+  * The rx SetConnHardDeadTime() macro is available for this purpose. It will
+  * limit calls on the connection identified by the conn parameter to execution
+  * times of no more than the given number of seconds. By default, active calls
+  * on an Rx connection may proceed for an unbounded time, as long as they are
+  * not totally quiescent (see Section 5.5.3.7 for a description of the rx
+  * SetConnDeadTime()) or idle (see Section 5.5.3.4 for a description of the rx
+  * SetIdleDeadTime()). 
+  * \par
+  * The conn parameter should resolve to an object of type (struct rx connection
+  * *). The seconds parameter should resolve to an object of type u short. An
+  * instance of the rx SetConnHardDeadTime() macro itself resolves into the
+  * result of the assignment, which is an object of type u short. 
+  * 
+  * 	\subsubsection sec5-5-3-9 Section 5.5.3.9: rx GetBeforeProc() 
+  * 
+  * \par
+  * \#define rx_GetBeforeProc(service) ((service)->beforeProc) 
+  * \par
+  * Return a pointer of type (VOID *)() to the procedure associated with the
+  * given Rx service that will be called immediately upon activation of a server
+  * thread to handle an incoming call. The service parameter should resolve to
+  * an object of type struct rx service. 
+  * \par
+  * When an Rx service is first created (via a call to the rx NewService()
+  * function), its beforeProc field is set to a null pointer. See the
+  * description of the rx SetBeforeProc() below. 
+  * 
+  * 	\subsubsection sec5-5-3-10 Section 5.5.3.10: rx SetBeforeProc() 
+  * 
+  * \par
+  * \#define rx_SetBeforeProc(service, proc) ((service)->beforeProc = (proc)) 
+  * \par
+  * Instruct the Rx facility to call the procedure identified by the proc
+  * parameter immediately upon activation of a server thread to handle an
+  * incoming call. The specified procedure will be called with a single
+  * parameter, a pointer of type struct rx call, identifying the call this
+  * thread will now be responsible for handling. The value returned by the
+  * procedure, if any, is discarded. 
+  * \par
+  * The service parameter should resolve to an object of type struct rx service.
+  * The proc parameter should resolve to an object of type (VOID *)(). An
+  * instance of the rx SetBeforeProc() macro itself resolves into the result of
+  * the assignment, which is an object of type (VOID *)(). 
+  * 
+  * 	\subsubsection sec5-5-3-11 Section 5.5.3.11: rx GetAfterProc() 
+  * 
+  * \par
+  * \#define rx_GetAfterProc(service) ((service)->afterProc) 
+  * \par
+  * Return a pointer of type (VOID *)() to the procedure associated with the
+  * given Rx service that will be called immediately upon completion of the
+  * particular Rx call for which a server thread was activated. The service
+  * parameter should resolve to an object of type struct rx service. 
+  * \par
+  * When an Rx service is first created (via a call to the rx NewService()
+  * function), its afterProc field is set to a null pointer. See the description
+  * of the rx SetAfterProc() below. 
+  * 
+  * 	\subsubsection sec5-5-3-12 Section 5.5.3.12: rx SetAfterProc() 
+  * 
+  * \par
+  * \#define rx_SetAfterProc(service, proc) ((service)->afterProc = (proc)) 
+  * \par
+  * Instruct the Rx facility to call the procedure identified by the proc
+  * parameter immediately upon completion of the particular Rx call for which a
+  * server thread was activated. The specified procedure will be called with a
+  * single parameter, a pointer of type struct rx call, identifying the call
+  * this thread just handled. The value returned by the procedure, if any, is
+  * discarded. 
+  * \par
+  * The service parameter should resolve to an object of type struct rx service.
+  * The proc parameter should resolve to an object of type (VOID *)(). An
+  * instance of the rx SetAfterProc() macro itself resolves into the result of
+  * the assignment, which is an object of type (VOID *)(). 
+  * 
+  * 	\subsubsection sec5-5-3-13 Section 5.5.3.13: rx SetNewConnProc() 
+  * 
+  * \par
+  * \#define rx_SetNewConnProc(service, proc) ((service)->newConnProc = (proc)) 
+  * \par
+  * Instruct the Rx facility to call the procedure identified by the proc
+  * parameter as the last step in the creation of a new Rx server-side
+  * connection for the given service. The specified procedure will be called
+  * with a single parameter, a pointer of type (struct rx connection *),
+  * identifying the connection structure that was just built. The value returned
+  * by the procedure, if any, is discarded. 
+  * \par
+  * The service parameter should resolve to an object of type struct rx service.
+  * The proc parameter should resolve to an object of type (VOID *)(). An
+  * instance of the rx SetNewConnProc() macro itself resolves into the result of
+  * the assignment, which is an object of type (VOID *)(). 
+  * \note There is no access counterpart defined for this macro, namely one that
+  * returns the current setting of a service's newConnProc. 
+  * 
+  * 	\subsubsection sec5-5-3-14 Section 5.5.3.14: rx SetDestroyConnProc() 
+  * 
+  * \par
+  * \#define rx_SetDestroyConnProc(service, proc) ((service)->destroyConnProc =
+  * (proc)) 
+  * \par
+  * Instruct the Rx facility to call the procedure identified by the proc
+  * parameter just before a server connection associated with the given Rx
+  * service is destroyed. The specified procedure will be called with a single
+  * parameter, a pointer of type (struct rx connection *), identifying the
+  * connection about to be destroyed. The value returned by the procedure, if
+  * any, is discarded. 
+  * \par
+  * The service parameter should resolve to an object of type struct rx service.
+  * The proc parameter should resolve to an object of type (VOID *)(). An
+  * instance of the rx SetDestroyConnProc() macro itself resolves into the
+  * result of the assignment, which is an object of type (VOID *)(). 
+  * \note There is no access counterpart defined for this macro, namely one that
+  * returns the current setting of a service's destroyConnProc. 
+  * 
+  * 	\subsection sec5-5-4 Section 5.5.4: Security-Related Operations 
+  * 
+  * \par
+  * The following macros are callable by Rx security modules, and assist in
+  * getting and setting header and trailer lengths, setting actual packet size,
+  * and finding the beginning of the security header (or data). 
+  * 
+  * 	\subsubsection sec5-5-4-1 Section 5.5.4.1: rx GetSecurityHeaderSize() 
+  * 
+  * \par
+  * \#define rx_GetSecurityHeaderSize(conn) ((conn)->securityHeaderSize) 
+  * \par
+  * Generate a reference to the field in an Rx connection structure that records
+  * the length in bytes of the associated security module's packet header data. 
+  * \par
+  * The conn parameter should resolve to an object of type struct rx connection.
+  * An instance of the rx GetSecurityHeaderSize() macro itself resolves into an
+  * object of type u short. 
+  * 
+  * 	\subsubsection sec5-5-4-2 Section 5.5.4.2: rx SetSecurityHeaderSize() 
+  * 
+  * \par
+  * \#define rx_SetSecurityHeaderSize(conn, length) ((conn)->securityHeaderSize
+  * = (length)) 
+  * \par
+  * Set the field in a connection structure that records the length in bytes of
+  * the associated security module's packet header data. 
+  * \par
+  * The conn parameter should resolve to an object of type struct rx connection.
+  * The length parameter should resolve to an object of type u short. An
+  * instance of the rx SetSecurityHeaderSize() macro itself resolves into the
+  * result of the assignment, which is an object of type u short. 
+  * 
+  * 	\subsubsection sec5-5-4-3 Section 5.5.4.3: rx
+  * 	GetSecurityMaxTrailerSize() 
+  * 
+  * \par
+  * \#define rx_GetSecurityMaxTrailerSize(conn) ((conn)->securityMaxTrailerSize) 
+  * \par
+  * Generate a reference to the field in an Rx connection structure that records
+  * the maximum length in bytes of the associated security module's packet
+  * trailer data. 
+  * \par
+  * The conn parameter should resolve to an object of type struct rx connection.
+  * An instance of the rx GetSecurityMaxTrailerSize() macro itself resolves into
+  * an object of type u short. 
+  * 
+  * 	\subsubsection sec5-5-4-4 Section 5.5.4.4: rx
+  * 	SetSecurityMaxTrailerSize() 
+  * 
+  * \par
+  * \#define rx_SetSecurityMaxTrailerSize(conn, length)
+  * ((conn)->securityMaxTrailerSize = (length)) 
+  * \par
+  * Set the field in a connection structure that records the maximum length in
+  * bytes of the associated security module's packet trailer data. 
+  * \par
+  * The conn parameter should resolve to an object of type struct rx connection.
+  * The length parameter should resolve to an object of type u short. An
+  * instance of the rx SetSecurityHeaderSize() macro itself resolves into the
+  * result of the assignment, which is an object of type u short. 
+  * 
+  * 	\subsection sec5-5-5 Section 5.5.5: Sizing Operations 
+  * 
+  * \par
+  * The macros described in this section assist the application programmer in
+  * determining the sizes of the various Rx packet regions, as well as their
+  * placement within a packet buffer. 
+  * 
+  * 	\subsubsection sec5-5-5-1 Section 5.5.5.1: rx UserDataOf() 
+  * 
+  * \par
+  * \#define rx_UserDataOf(conn, packet) (((char *) (packet)->wire.data) +
+  * (conn)->securityHeaderSize) 
+  * \par
+  * Generate a pointer to the beginning of the actual user data in the given Rx
+  * packet, that is associated with the connection described by the conn
+  * pointer. User data appears immediately after the packet's security header
+  * region, whose length is determined by the security module used by the
+  * connection. The conn parameter should resolve to an object of type struct rx
+  * connection. The packet parameter should resolve to an object of type struct
+  * rx packet. An instance of the rx UserDataOf() macro itself resolves into an
+  * object of type (char *). 
+  * 
+  * 	\subsubsection sec5-5-5-2 Section 5.5.5.2: rx MaxUserDataSize() 
+  * 
+  * \par
+  * \#define rx_MaxUserDataSize(conn) 
+  * \n ((conn)->peer->packetSize 
+  * \n -RX_HEADER_SIZE 
+  * \n -(conn)->securityHeaderSize 
+  * \n -(conn)->securityMaxTrailerSize) 
+  * \par
+  * Return the maximum number of user data bytes that may be carried by a packet
+  * on the Rx connection described by the conn pointer. The overall packet size
+  * is reduced by the IP, UDP, and Rx headers, as well as the header and trailer
+  * areas required by the connection's security module. 
+  * \par
+  * The conn parameter should resolve to an object of type struct rx connection.
+  * An instance of the rx MaxUserDataSize() macro itself resolves into the an
+  * object of type (u short). 
+  * 
+  * 	\subsection sec5-5-6 Section 5.5.6: Complex Operations 
+  * 
+  * \par
+  * Two Rx macros are designed to handle potentially complex operations, namely
+  * reading data from an active incoming call and writing data to an active
+  * outgoing call. Each call structure has an internal buffer that is used to
+  * collect and cache data traveling through the call. This buffer is used in
+  * conjunction with reading or writing to the actual Rx packets traveling on
+  * the wire in support of the call. The rx Read() and rx Write() macros allow
+  * their caller to simply manipulate the internal data buffer associated with
+  * the Rx call structures whenever possible, thus avoiding the overhead
+  * associated with a function call. When buffers are either filled or drained
+  * (depending on the direction of the data flow), these macros will then call
+  * functions to handle the more complex cases of generating or receiving
+  * packets in support of the operation. 
+  * 
+  * 	\subsubsection sec5-5-6-1 Section 5.5.6.1: rx Read() 
+  * 
+  * \par
+  * \#define rx_Read(call, buf, nbytes) 
+  * \n ((call)->nLeft > (nbytes) ? 
+  * \n bcopy((call)->bufPtr, (buf), (nbytes)), 
+  * \n (call)->nLeft -= (nbytes), (call)->bufPtr += (nbytes), (nbytes) 
+  * \n : rx_ReadProc((call), (buf), (nbytes))) 
+  * \par
+  * Read nbytes of data from the given Rx call into the buffer to which buf
+  * points. If the call's internal buffer has at least nbytes bytes already
+  * filled, then this is done in-line with a copy and some pointer and counter
+  * updates within the call structure. If the call's internal buffer doesn't
+  * have enough data to satisfy the request, then the rx ReadProc() function
+  * will handle this more complex situation. 
+  * \par
+  * In either case, the rx Read() macro returns the number of bytes actually
+  * read from the call, resolving to an object of type int. If rx Read() returns
+  * fewer than nbytes bytes, the call status should be checked via the rx
+  * Error() macro. 
+  * 
+  * 	\subsubsection sec5-5-6-2 Section 5.5.6.2: rx Write() 
+  * 
+  * \par
+  * \#define rx_Write(call, buf, nbytes) 
+  * \n ((call)->nFree > (nbytes) ? 
+  * \n bcopy((buf), (call)->bufPtr, (nbytes)), 
+  * \n (call)->nFree -= (nbytes), 
+  * \n (call)->bufPtr += (nbytes), (nbytes) 
+  * \n : rx_WriteProc((call), (buf), (nbytes))) 
+  * \par
+  * Write nbytes of data from the buffer pointed to by buf into the given Rx
+  * call. If the call's internal buffer has at least nbytes bytes free, then
+  * this is done in-line with a copy and some pointer and counter updates within
+  * the call structure. If the call's internal buffer doesn't have room, then
+  * the rx WriteProc() function will handle this more complex situation. 
+  * \par
+  * In either case, the rx Write() macro returns the number of bytes actually
+  * written to the call, resolving to an object of type int. If zero is
+  * returned, the call status should be checked via the rx Error() macro. 
+  * 
+  * 	\subsection sec5-5-7 Section 5.5.7: Security Operation Invocations 
+  * 
+  * \par
+  * Every Rx security module is required to implement an identically-named set
+  * of operations, through which the security mechanism it defines is invoked.
+  * This characteristic interface is reminiscent of the vnode interface defined
+  * and popularized for file systems by Sun Microsystems [4]. The structure
+  * defining this function array is described in Section 5.3.1.1. 
+  * \par
+  * These security operations are part of the struct rx securityClass, which
+  * keeps not only the ops array itself but also any private data they require
+  * and a reference count. Every Rx service contains an array of these security
+  * class objects, specifying the range of security mechanisms it is capable of
+  * enforcing. Every Rx connection within a service is associated with exactly
+  * one of that service's security objects, and every call issued on the
+  * connection will execute the given security protocol. 
+  * \par
+  * The macros described below facilitate the execution of the security module
+  * interface functions. They are covered in the same order they appear in the
+  * struct rx securityOps declaration. 
+  * 
+  * 	\subsubsection sec5-5-7-1 Section 5.5.7.1: RXS OP() 
+  * 
+  * \code
+  * #if defined(__STDC__) && !defined(__HIGHC__) 
+  * 	#define RXS_OP(obj, op, args) 
+  * 		((obj->ops->op_ ## op) ? (*(obj)->ops->op_ ## op)args : 0) 
+  * #else 
+  * 	#define RXS_OP(obj, op, args) 
+  * 		((obj->ops->op_op) ? (*(obj)->ops->op_op)args : 0) 
+  * #endif 
+  * \endcode
+  * 
+  * \par
+  * The RXS OP macro represents the workhorse macro in this group, used by all
+  * the others. It takes three arguments, the first of which is a pointer to the
+  * security object to be referenced. This obj parameter must resolve to an
+  * object of type (struct rx securityOps *). The second parameter identifies
+  * the specific op to be performed on this security object. The actual text of
+  * this op argument is used to name the desired opcode function. The third and
+  * final argument, args, specifies the text of the argument list to be fed to
+  * the chosen security function. Note that this argument must contain the
+  * bracketing parentheses for the function call's arguments. In fact, note that
+  * each of the security function access macros defined below provides the
+  * enclosing parentheses to this third RXS OP() macro. 
+  * 
+  * 	\subsubsection sec5-5-7-2 Section 5.5.7.1: RXS Close() 
+  * 
+  * \par
+  * \#define RXS_Close(obj) RXS_OP(obj, Close, (obj)) 
+  * \par
+  * This macro causes the execution of the interface routine occupying the op
+  * Close() slot in the Rx security object identified by the obj pointer. This
+  * interface function is invoked by Rx immediately before a security object is
+  * discarded. Among the responsibilities of such a function might be
+  * decrementing the object's refCount field, and thus perhaps freeing up any
+  * space contained within the security object's private storage region,
+  * referenced by the object's privateData field. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). In generating a call to the security object's op Close() routine, the
+  * obj pointer is used as its single parameter. An invocation of the RXS
+  * Close() macro results in a return value identical to that of the op Close()
+  * routine, namely a value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-3 Section 5.5.7.3: RXS NewConnection() 
+  * 
+  * \par
+  * \#define RXS_NewConnection(obj, conn) RXS_OP(obj, NewConnection, (obj,
+  * conn)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * NewConnection() slot in the Rx security object identified by the obj
+  * pointer. This interface function is invoked by Rx immediately after a
+  * connection using the given security object is created. Among the
+  * responsibilities of such a function might be incrementing the object's
+  * refCount field, and setting any per-connection information based on the
+  * associated security object's private storage region, as referenced by the
+  * object's privateData field. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the newly-created connection
+  * structure, and must resolve into an object of type (struct rx connection *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * NewConnection() slot, the obj and conn pointers are used as its two
+  * parameters. An invocation of the RXS NewConnection() macro results in a
+  * return value identical to that of the op NewConnection() routine, namely a
+  * value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-4 Section 5.5.7.4: RXS PreparePacket() 
+  * 
+  * \par
+  * \#define RXS_PreparePacket(obj, call, packet) 
+  * \n RXS_OP(obj, PreparePacket, (obj, call, packet)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * PreparePacket() slot in the Rx security object identified by the obj
+  * pointer. This interface function is invoked by Rx each time it prepares an
+  * outward-bound packet. Among the responsibilities of such a function might be
+  * computing information to put into the packet's security header and/or
+  * trailer. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The call argument contains a pointer to the Rx call to which the given
+  * packet belongs, and must resolve to an object of type (struct rx call *).
+  * The final argument, packet, contains a pointer to the packet itself. It
+  * should resolve to an object of type (struct rx packet *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * PreparePacket() slot, the obj, call, and packet pointers are used as its
+  * three parameters. An invocation of the RXS PreparePacket() macro results in
+  * a return value identical to that of the op PreparePacket() routine, namely a
+  * value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-5 Section 5.5.7.5: RXS SendPacket() 
+  * 
+  * \par
+  * \#define RXS_SendPacket(obj, call, packet) RXS_OP(obj, SendPacket, (obj,
+  * call, packet)) 
+  * \par
+  * This macro causes the execution of the interface routine occupying the op
+  * SendPacket() slot in the Rx security object identified by the obj pointer.
+  * This interface function is invoked by Rx each time it physically transmits
+  * an outward-bound packet. Among the responsibilities of such a function might
+  * be recomputing information in the packet's security header and/or trailer. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The call argument contains a pointer to the Rx call to which the given
+  * packet belongs, and must resolve to an object of type (struct rx call *).
+  * The final argument, packet, contains a pointer to the packet itself. It
+  * should resolve to an object of type (struct rx packet *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * SendPacket() slot, the obj, call, and packet pointers are used as its three
+  * parameters. An invocation of the RXS SendPacket() macro results in a return
+  * value identical to that of the op SendPacket() routine, namely a value of
+  * type int. 
+  * 
+  * 	\subsubsection sec5-5-7-6 Section 5.5.7.6: RXS CheckAuthentication() 
+  * 
+  * \par
+  * \#define RXS_CheckAuthentication(obj, conn) RXS_OP(obj, CheckAuthentication,
+  * (obj, conn)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * CheckAuthentication() slot in the Rx security object identified by the obj
+  * pointer. This interface function is invoked by Rx each time it needs to
+  * check whether the given connection is one on which authenticated calls are
+  * being performed. Specifically, a value of 0 is returned if authenticated
+  * calls are not being executed on this connection, and a value of 1 is
+  * returned if they are. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx connection checked as to
+  * whether authentication is being performed, and must resolve to an object of
+  * type (struct rx connection *). 
+  * \par
+  * In generating a call to the routine in the security object's op
+  * CheckAuthentication() slot, the obj and conn pointers are used as its two
+  * parameters. An invocation of the RXS CheckAuthentication() macro results in
+  * a return value identical to that of the op CheckAuthentication() routine,
+  * namely a value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-7 Section 5.5.7.7: RXS CreateChallenge() 
+  * 
+  * \par
+  * \#define RXS_CreateChallenge(obj, conn) RXS_OP(obj, CreateChallenge, (obj,
+  * conn)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * CreateChallenge() slot in the Rx security object identified by the obj
+  * pointer. This interface function is invoked by Rx each time a challenge
+  * event is constructed for a given connection. Among the responsibilities of
+  * such a function might be marking the connection as temporarily
+  * unauthenticated until the given challenge is successfully met. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx connection for which the
+  * authentication challenge is being constructed, and must resolve to an object
+  * of type (struct rx connection *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * CreateChallenge() slot, the obj and conn pointers are used as its two
+  * parameters. An invocation of the RXS CreateChallenge() macro results in a
+  * return value identical to that of the op CreateChallenge() routine, namely a
+  * value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-8 Section 5.5.7.8: RXS GetChallenge() 
+  * 
+  * \par
+  * \#define RXS_GetChallenge(obj, conn, packet) RXS_OP(obj, GetChallenge, (obj,
+  * conn, packet)) 
+  * \par
+  * This macro causes the execution of the interface routine occupying the op
+  * GetChallenge() slot in the Rx security object identified by the obj pointer.
+  * This interface function is invoked by Rx each time a challenge packet is
+  * constructed for a given connection. Among the responsibilities of such a
+  * function might be constructing the appropriate challenge structures in the
+  * area of packet dedicated to security matters. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx connection to which the
+  * given challenge packet belongs, and must resolve to an object of type
+  * (struct rx connection *). The final argument, packet, contains a pointer to
+  * the challenge packet itself. It should resolve to an object of type (struct
+  * rx packet *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * GetChallenge() slot, the obj, conn, and packet pointers are used as its
+  * three parameters. An invocation of the RXS GetChallenge() macro results in a
+  * return value identical to that of the op GetChallenge() routine, namely a
+  * value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-9 Section 5.5.7.9: RXS GetResponse() 
+  * 
+  * \par
+  * \#define RXS_GetResponse(obj, conn, packet) RXS_OP(obj, GetResponse, (obj,
+  * conn, packet)) 
+  * \par
+  * This macro causes the execution of the interface routine occupying the op
+  * GetResponse() slot in the Rx security object identified by the obj pointer.
+  * This interface function is invoked by Rx on the server side each time a
+  * response to a challenge packet must be received. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx client connection that
+  * must respond to the authentication challenge, and must resolve to a (struct
+  * rx connection *) object. The final argument, packet, contains a pointer to
+  * the packet to be built in response to the challenge. It should resolve to an
+  * object of type (struct rx packet *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * GetResponse() slot, the obj, conn, and packet pointers are used as its three
+  * parameters. An invocation of the RXS GetResponse() macro results in a return
+  * value identical to that of the op GetResponse() routine, namely a value of
+  * type int. 
+  * 
+  * 	\subsubsection sec5-5-7-10 Section 5.5.7.10: RXS CheckResponse() 
+  * 
+  * \par
+  * \#define RXS_CheckResponse(obj, conn, packet) RXS_OP(obj, CheckResponse,
+  * (obj, conn, packet)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * CheckResponse() slot in the Rx security object identified by the obj
+  * pointer. This interface function is invoked by Rx on the server side each
+  * time a response to a challenge packet is received for a given connection.
+  * The responsibilities of such a function might include verifying the
+  * integrity of the response, pulling out the necessary security information
+  * and storing that information within the affected connection, and otherwise
+  * updating the state of the connection. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx server connection to
+  * which the given challenge response is directed. This argument must resolve
+  * to an object of type (struct rx connection *). The final argument, packet,
+  * contains a pointer to the packet received in response to the challenge
+  * itself. It should resolve to an object of type (struct rx packet *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * CheckResponse() slot, the obj, conn, and packet pointers are ued as its
+  * three parameters. An invocation of the RXS CheckResponse() macro results in
+  * a return value identical to that of the op CheckResponse() routine, namely a
+  * value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-11 Section 5.5.7.11: RXS CheckPacket() 
+  * 
+  * \par
+  * \#define RXS_CheckPacket(obj, call, packet) RXS_OP(obj, CheckPacket, (obj,
+  * call, packet)) 
+  * \par
+  * This macro causes the execution of the interface routine occupying the op
+  * CheckPacket() slot in the Rx security object identified by the obj pointer.
+  * This interface function is invoked by Rx each time a packet is received. The
+  * responsibilities of such a function might include verifying the integrity of
+  * given packet, detecting any unauthorized modifications or tampering. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx connection to which the
+  * given challenge response is directed, and must resolve to an object of type
+  * (struct rx connection *). The final argument, packet, contains a pointer to
+  * the packet received in response to the challenge itself. It should resolve
+  * to an object of type (struct rx packet *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * CheckPacket() slot, the obj, conn, and packet pointers are used as its three
+  * parameters. An invocation of the RXS CheckPacket() macro results in a return
+  * value identical to that of the op CheckPacket() routine, namely a value of
+  * type int. 
+  * \par
+  * Please note that any non-zero return will cause Rx to abort all calls on the
+  * connection. Furthermore, the connection itself will be marked as being in
+  * error in such a case, causing it to reject any further incoming packets. 
+  * 
+  * 	\subsubsection sec5-5-7-12 Section 5.5.7.12: RXS DestroyConnection() 
+  * 
+  * \par
+  * \#define RXS_DestroyConnection(obj, conn) RXS_OP(obj, DestroyConnection,
+  * (obj, conn)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * DestroyConnection() slot in the Rx security object identified by the obj
+  * pointer. This interface function is invoked by Rx each time a connection
+  * employing the given security object is being destroyed. The responsibilities
+  * of such a function might include deleting any private data maintained by the
+  * security module for this connection. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx connection being reaped,
+  * and must resolve to a (struct rx connection *) object. 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * DestroyConnection() slot, the obj and conn pointers are used as its two
+  * parameters. An invocation of the RXS DestroyConnection() macro results in a
+  * return value identical to that of the op DestroyConnection() routine, namely
+  * a value of type int. 
+  * 
+  * 	\subsubsection sec5-5-7-13 Section 5.5.7.13: RXS GetStats() 
+  * 
+  * \par
+  * \#define RXS_GetStats(obj, conn, stats) RXS_OP(obj, GetStats, (obj, conn,
+  * stats)) 
+  * \par
+  * This macro causes the execution of the interface routine in the op
+  * GetStats() slot in the Rx security object identified by the obj pointer.
+  * This interface function is invoked by Rx each time current statistics
+  * concerning the given security object are desired. 
+  * \par
+  * The obj parameter must resolve into an object of type (struct rx securityOps
+  * *). The conn argument contains a pointer to the Rx connection using the
+  * security object to be examined, and must resolve to an object of type
+  * (struct rx connection *). The final argument, stats, contains a pointer to a
+  * region to be filled with the desired statistics. It should resolve to an
+  * object of type (struct rx securityObjectStats *). 
+  * \par
+  * In generating a call to the routine located at the security object's op
+  * GetStats() slot, the obj, conn, and stats pointers are used as its three
+  * parameters. An invocation of the RXS GetStats() macro results in a return
+  * value identical to that of the op GetStats() routine, namely a value of type
+  * int. 
+  * 
+  * 	\section sec5-6 Section 5.6: Functions 
+  * 
+  * \par
+  * Rx exports a collection of functions that, in conjuction with the macros
+  * explored in Section 5.5, allows its clients to set up and export services,
+  * create and tear down connections to these services, and execute remote
+  * procedure calls along these connections. 
+  * \par
+  * This paper employs two basic categorizations of these Rx routines. One set
+  * of functions is meant to be called directly by clients of the facility, and
+  * are referred to as the exported operations. The individual members of the
+  * second set of functions are not meant to be called directly by Rx clients,
+  * but rather are called by the collection of defined macros, so they must
+  * still be lexically visible. These indirectly-executed routines are referred
+  * to here as the semi-exported operations. 
+  * \par
+  * All Rx routines return zero upon success. The range of error codes employed
+  * by Rx is defined in Section 5.2.15. 
+  * 
+  * 	\subsection sec5-6-1 Section 5.6.1: Exported Operations 
+  * 
+  * 	\subsection sec5-6-2 Section 5.6.2: rx Init _ Initialize Rx 
+  * 
+  * \par
+  * int rx Init(IN int port) 
+  * \par Description 
+  * Initialize the Rx facility. If a non-zero port number is provided, it
+  * becomes the default port number for any service installed later. If 0 is
+  * provided for the port, a random port will be chosen by the system. The rx
+  * Init() function sets up internal tables and timers, along with starting up
+  * the listener thread. 
+  * \par Error Codes 
+  * RX ADDRINUSE The port provided has already been taken. 
+  * 
+  * 	\subsection sec5-6-3 Section 5.6.3: rx NewService _ Create and install
+  * 	a new service 
+  * 
+  * \par
+  * struct rx service *rx NewService(IN u short port; IN u short serviceId; IN
+  * char *serviceName; IN struct rx securityClass **securityObjects; IN int
+  * nSecurityObjects; IN long (*serviceProc)()) 
+  * \par Description 
+  * Create and advertise a new Rx service. A service is uniquely named by a UDP
+  * port number plus a non-zero 16-bit serviceId on the given host. The port
+  * argument may be set to zero if rx Init() was called with a non-zero port
+  * number, in which case that original port will be used. A serviceName must
+  * also be provided, to be used for identification purposes (e.g., the service
+  * name might be used for probing for statistics). A pointer to an array of
+  * nSecurityObjects security objects to be associated with the new service is
+  * given in . securityObjects. The service's executeRequestProc() pointer is
+  * set to serviceProc. 
+  * \par
+  * The function returns a pointer to a descriptor for the requested Rx service.
+  * A null return value indicates that the new service could not be created.
+  * Possible reasons include: 
+  * \li The serviceId parameter was found to be zero. 
+  * \li A port value of zero was specified at Rx initialization time (i.e., when
+  * rx init() was called), requiring a non-zero value for the port parameter
+  * here. 
+  * \li Another Rx service is already using serviceId. 
+  * \li Rx has already created the maximum RX MAX SERVICES Rx services (see
+  * Section 5.2.1). 
+  * \par Error Codes 
+  * (struct rx service *) NULL The new Rx service could not be created, due to
+  * one of the errors listed above. 
+  * 
+  * 	\subsection sec5-6-4 Section 5.6.4: rx NewConnection _ Create a new
+  * 	connection to a given service 
+  * 
+  * \par
+  * struct rx connection *rx NewConnection( IN u long shost, IN u short sport,
+  * IN u short sservice, IN struct rx securityClass *securityObject, IN int
+  * service SecurityIndex) 
+  * \par Description 
+  * Create a new Rx client connection to service sservice on the host whose IP
+  * address is contained in shost and to that host's sport UDP port. The
+  * corresponding Rx service identifier is expected in sservice. The caller also
+  * provides a pointer to the security object to use for the connection in
+  * securityObject, along with that object's serviceSecurityIndex among the
+  * security objects associated with service sservice via a previous rx
+  * NewService() call (see Section 5.6.3). 
+  * \note It is permissible to provide a null value for the securityObject
+  * parameter if the chosen serviceSecurityIndex is zero. This corresponds to
+  * the pre-defined null security object, which does not engage in authorization
+  * checking of any kind. 
+  * \par Error Codes 
+  * --- A pointer to an initialized Rx connection is always returned, unless osi
+  *  Panic() is called due to memory allocation failure. 
+  * 
+  * 	\subsection sec5-6-5 Section 5.6.5: rx NewCall _ Start a new call on
+  * 	the given connection 
+  * 
+  * \par
+  * struct rx call *rx NewCall( IN struct rx connection *conn) 
+  * \par Description 
+  * Start a new Rx remote procedure call on the connection specified by the conn
+  * parameter. The existing call structures (up to RX MAXCALLS of them) are
+  * examined in order. The first non-active call encountered (i.e., either
+  * unused or whose call->state is RX STATE DALLY) will be appropriated and
+  * reset if necessary. If all call structures are in active use, the RX CONN
+  * MAKECALL WAITING flag is set in the conn->flags field, and the thread
+  * handling this request will sleep until a call structure comes free. Once a
+  * call structure has been reserved, the keep-alive protocol is enabled for it. 
+  * \par
+  * The state of the given connection determines the detailed behavior of the
+  * function. The conn->timeout field specifies the absolute upper limit of the
+  * number of seconds this particular call may be in operation. After this time
+  * interval, calls to such routines as rx SendData() or rx ReadData() will fail
+  * with an RX CALL TIMEOUT indication. 
+  * \par Error Codes 
+  * --- A pointer to an initialized Rx call is always returned, unless osi
+  *  Panic() is called due to memory allocation failure. 
+  * 
+  * 	\subsection sec5-6-6 Section 5.6.6: rx EndCall _ Terminate the given
+  * 	call 
+  * 
+  * \par
+  * int rx EndCall(
+  * \param IN struct rx call *call,
+  * \param IN long rc
+  * \n ) 
+  * \par Description
+  * Indicate that the Rx call described by the structure located at call is
+  * finished, possibly prematurely. The value passed in the rc parameter is
+  * returned to the peer, if appropriate. The final error code from processing
+  * the call will be returned as rx EndCall()'s value. The given call's state
+  * will be set to RX STATE DALLY, and threads waiting to establish a new call
+  * on this connection are signalled (see the description of the rx NewCall() in
+  * Section 5.6.5). 
+  * \par Error Codes 
+  * -1 Unspecified error has occurred. 
+  * 
+  * 	\subsection sec5-6-7 Section 5.6.7: rx StartServer _ Activate installed
+  * 	rx service(s) 
+  * 
+  * \par
+  * void rx StartServer( IN int donateMe) 
+  * \par Description 
+  * This function starts server threads in support of the Rx services installed
+  * via calls to rx NewService() (see Section 5.6.3). This routine first
+  * computes the number of server threads it must create, governed by the
+  * minProcs and maxProcs fields in the installed service descriptors. The
+  * minProcs field specifies the minimum number of threads that are guaranteed
+  * to be concurrently available to the given service. The maxProcs field
+  * specifies the maximum number of threads that may ever be concurrently
+  * assigned to the particular service, if idle threads are available. Using
+  * this information, rx StartServer() computes the correct overall number of
+  * threads as follows: For each installed service, minProcs threads will be
+  * created, enforcing the minimality guarantee. Calculate the maximum
+  * difference between the maxProcs and minProcs fields for each service, and
+  * create this many additional server threads, enforcing the maximality
+  * guarantee. 
+  * \par
+  * If the value placed in the donateMe argument is zero, then rx StartServer()
+  * will simply return after performing as described above. Otherwise, the
+  * thread making the rx StartServer() call will itself begin executing the
+  * server thread loop. In this case, the rx StartServer() call will never
+  * return. 
+  * \par Error Codes 
+  * ---None. 
+  * 
+  * 	\subsection sec5-6-8 Section 5.6.8: rx PrintStats -- Print basic
+  * 	statistics to a file
+  * 
+  * \par
+  * void rx PrintStats( IN FILE *file)
+  * \par Description
+  * Prints Rx statistics (basically the contents of the struct rx stats holding
+  * the statistics for the Rx facility) to the open file descriptor identified
+  * by file. The output is ASCII text, and is intended for human consumption. 
+  * \note This function is available only if the Rx package has been compiled
+  * with the RXDEBUG flag. 
+  * \par Error Codes 
+  * ---None. 
+  * 
+  * 	\subsection sec5-6-9 Section 5.6.9: rx PrintPeerStats _ Print peer
+  * 	statistics to a file 
+  * \par
+  * void rx PrintPeerStats( IN FILE *file, IN struct rx peer *peer)
+  * \par Description
+  * Prints the Rx peer statistics found in peer to the open file descriptor
+  * identified by file. The output is in normal ASCII text, and is intended for
+  * human consumption. 
+  * \note This function is available only if the Rx package has been compiled
+  * with the RXDEBUG flag. 
+  * \par Error Codes 
+  * ---None. 
+  * 
+  * 	\subsection sec5-6-10 Section 5.6.10: rx finalize _ Shut down Rx
+  * 	gracefully 
+  * 
+  * \par
+  * void rx finalize() 
+  * \par Description 
+  * This routine may be used to shut down the Rx facility for either server or
+  * client applications. All of the client connections will be gracefully
+  * garbage-collected after their active calls are cleaned up. The result of
+  * calling rx finalize() from a client program is that the server-side entity
+  * will be explicitly advised that the client has terminated. This notification
+  * frees the server-side application from having to probe the client until its
+  * records eventually time out, and also allows it to free resources currently
+  * assigned to that client's support. 
+  * \par Error Codes 
+  * ---None. 
+  * 
+  * 	\subsection sec5-6-11 Section 5.6.11: Semi-Exported Operations 
+  * 
+  * \par
+  * As described in the introductory text in Section 5.6, entries in this
+  * lexically-visible set of Rx functions are not meant to be called directly by
+  * client applications, but rather are invoked by Rx macros called by users. 
+  * 
+  * 	\subsection sec5-6-12 Section 5.6.12: rx WriteProc _ Write data to an
+  * 	outgoing call 
+  * 
+  * \par
+  * int rx WriteProc( IN struct rx call *call, IN char *buf, IN int nbytes)
+  * \par Description 
+  * Write nbytes of data from buffer buf into the Rx call identified by the call
+  * parameter. The value returned by rx WriteProc() reports the number of bytes
+  * actually written into the call. If zero is returned, then the rx Error()
+  * macro may be used to obtain the call status. 
+  * \par
+  * This routine is called by the rx Write() macro, which is why it must be
+  * exported by the Rx facility. 
+  * \par Error Codes 
+  * Indicates error in the given Rx call; use the rx Error() macro to determine
+  * the call status. 
+  * 
+  * 	\subsection sec5-6-13 Section 5.6.13: rx ReadProc _ Read data from an
+  * 	incoming call 
+  * 
+  * \par
+  * int rx ReadProc( IN struct rx call *call, IN char *buf, IN int nbytes)
+  * \par Description 
+  * Read up to nbytes of data from the Rx call identified by the call parameter
+  * into the buf buffer. The value returned by rx ReadProc() reports the number
+  * of bytes actually read from the call. If zero is returned, then the rx
+  * Error() macro may be used to obtain the call status. 
+  * \par
+  * This routine is called by the rx Read() macro, which is why it must be
+  * exported by the Rx facility. 
+  * \par Error Codes 
+  * Indicates error in the given Rx call; use the rx Error() macro to determine
+  * the call status. 
+  * 
+  * 	\subsection sec5-6-1 Section 5.6.1: rx FlushWrite -- Flush buffered
+  * 	data on outgoing call
+  * 
+  * \par
+  * void rx FlushWrite( IN struct rx call *call)
+  * \par Description
+  * Flush any buffered data on the given Rx call to the stream. If the call is
+  * taking place on a server connection, the call->mode is set to RX MODE EOF.
+  * If the call is taking place on a client connection, the call->mode is set to
+  * RX MODE RECEIVING. 
+  * \par Error Codes 
+  * ---None. 
+  * 
+  * 	\subsection sec5-6-15 Section 5.6.15: rx SetArrivalProc _ Set function
+  * 	to invoke upon call packet arrival 
+  * 
+  * \par
+  * void rx SetArrivalProc( IN struct rx call *call, IN VOID (*proc)(), IN VOID
+  * *handle, IN VOID *arg) 
+  * \par Description 
+  * Establish a procedure to be called when a packet arrives for a call. This
+  * routine will be called at most once after each call, and will also be called
+  * if there is an error condition on the call or the call is complete. The rx
+  * SetArrivalProc() function is used by multicast Rx routines to build a
+  * selection function that determines which of several calls is likely to be a
+  * good one to read from. The implementor's comments in the Rx code state that,
+  * due to the current implementation, it is probably only reasonable to use rx
+  * SetArrivalProc() immediately after an rx NewCall(), and to only use it once. 
+  * \par Error Codes 
+  * ---None. 
+  * 
+  * 	\page chap6 Chapter 6 -- Example Server and Client 
+  * 
+  * 	\section sec6-1 Section 6.1: Introduction 
+  * 
+  * \par
+  * This chapter provides a sample program showing the use of Rx. Specifically,
+  * the rxdemo application, with all its support files, is documented and
+  * examined. The goal is to provide the reader with a fully-developed and
+  * operational program illustrating the use of both regular Rx remote procedure
+  * calls and streamed RPCs. The full text of the rxdemo application is
+  * reproduced in the sections below, along with additional commentary. 
+  * \par
+  * Readers wishing to directly experiment with this example Rx application are
+  * encouraged to examine the on-line version of rxdemo. Since it is a program
+  * of general interest, it has been installed in the usr/contrib tree in the
+  * grand.central.org cell. This area contains user-contributed software for the
+  * entire AFS community. At the top of this tree is the
+  * /afs/grand.central.org/darpa/usr/contrib directory. Both the server-side and
+  * client-side rxdemo binaries (rxdemo server and rxdemo client, respectively)
+  * may be found in the bin subdirectory. The actual sources reside in the
+  * .site/grand.central.org/rxdemo/src subdirectory. 
+  * \par
+  * The rxdemo code is composed of two classes of files, namely those written by
+  * a human programmer and those generated from the human-written code by the
+  * Rxgen tool. Included in the first group of files are: 
+  * \li 	rxdemo.xg This is the RPC interface definition file, providing
+  * high-level definitions of the supported calls. 
+  * \li 	rxdemo client.c: This is the rxdemo client program, calling upon the
+  * associated server to perform operations defined by rxdemo.xg. 
+  * \li 	rxdemo server.c: This is the rxdemo server program, implementing the
+  * operations promised in rxdemo.xg. 
+  * \li 	Makefile: This is the file that directs the compilation and
+  * installation of the rxdemo code. 
+  * \par
+  * The class of automatically-generated files includes the following items: 
+  * \li rxdemo.h: This header file contains the set of constant definitions
+  * present in rxdemo.xg, along with information on the RPC opcodes defined for
+  * this Rx service. 
+  * \li rxdemo.cs.c: This client-side stub file performs all the marshalling and
+  * unmarshalling of the arguments for the RPC routines defined in rxdemo.xg. 
+  * \li rxdemo.ss.c: This stub file similarly defines all the marshalling and
+  * unmarshalling of arguments for the server side of the RPCs, invokes the
+  * routines defined within rxdemo server.c to implement the calls, and also
+  * provides the dispatcher function. 
+  * \li rxdemo.xdr.c: This module defines the routines required to convert
+  * complex user-defined data structures appearing as arguments to the Rx RPC
+  * calls exported by rxdemo.xg into network byte order, so that correct
+  * communication is guaranteed between clients and server with different memory
+  * organizations. 
+  * \par
+  * The chapter concludes with a section containing sample output from running
+  * the rxdemo server and client programs. 
+  * 
+  * 	\section sec6-2 Section 6.2: Human-Generated files 
+  * 
+  * \par
+  * The rxdemo application is based on the four human-authored files described
+  * in this section. They provide the basis for the construction of the full set
+  * of modules needed to implement the specified Rx service. 
+  * 
+  * 	\subsection sec6-2-1 Section 6.2.1: Interface file: rxdemo.xg 
+  * 
+  * \par
+  * This file serves as the RPC interface definition file for this application.
+  * It defines various constants, including the Rx service port to use and the
+  * index of the null security object (no encryption is used by rxdemo). It
+  * defines the RXDEMO MAX and RXDEMO MIN constants, which will be used by the
+  * server as the upper and lower bounds on the number of Rx listener threads to
+  * run. It also defines the set of error codes exported by this facility.
+  * finally, it provides the RPC function declarations, namely Add() and
+  * Getfile(). Note that when building the actual function definitions, Rxgen
+  * will prepend the value of the package line in this file, namely "RXDEMO ",
+  * to the function declarations. Thus, the generated functions become RXDEMO
+  * Add() and RXDEMO Getfile(), respectively. Note the use of the split keyword
+  * in the RXDEMO Getfile() declaration, which specifies that this is a streamed
+  * call, and actually generates two client-side stub routines (see Section
+  * 6.3.1). 
+  * 
+  * \code
+  * /*======================================================================= 
+  * * Interface for an example Rx server/client application, using both * * 
+  * standard and streamed calls.  * ** * Edward R. Zayas * * Transarc 
+  * Corporation * ** ** * The United States Government has rights in this 
+  * work pursuant * * to contract no. MDA972-90-C-0036 between the United 
+  * States Defense * * Advanced Research Projects Agency and Transarc 
+  * Corporation.  * ** * (C) Copyright 1991 Transarc Corporation * ** * 
+  * Redistribution and use in source and binary forms are permitted * 
+  * provided that: (1) source distributions retain this entire copy- * * 
+  * right notice and comment, and (2) distributions including binaries * * 
+  * display the following acknowledgement: * ** * ''This product includes 
+  * software developed by Transarc * * Corporation and its contributors'' * 
+  * ** * in the documentation or other materials mentioning features or * * 
+  * use of this software. Neither the name of Transarc nor the names * * of 
+  * its contributors may be used to endorse or promote products * * derived 
+  * from this software without specific prior written * * permission.  * ** 
+  * * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED * 
+  * * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * 
+  * * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
+  * =======================================================================*/
+  * 
+  * package RXDEMO_ 
+  * %#include <rx/rx.h> 
+  * %#include <rx/rx_null.h> 
+  * %#define RXDEMO_SERVER_PORT 8000 /* Service port to advertise */
+  * %#define RXDEMO_SERVICE_PORT 0 /* User server's port */
+  * %#define RXDEMO_SERVICE_ID 4 /* Service ID */
+  * %#define RXDEMO_NULL_SECOBJ_IDX 0 /* Index of null security object */
+  * 
+  * /* Maximum number of requests that will be handled by this service 
+  *  * simultaneously. This number will be guaranteed to execute in 
+  *  * parallel if other service's results are being processed. */
+  * 
+  * %#define RXDEMO_MAX 3 
+  * 
+  * /* Minimum number of requests that are guaranteed to be 
+  *  * handled simultaneously. */
+  * 
+  * %#define RXDEMO_MIN 2 
+  * 
+  * /* Index of the "null" security class in the sample service. */
+  * 
+  * %#define RXDEMO_NULL 0 
+  * 
+  * /* Maximum number of characters in a file name (for demo purposes). */
+  * 
+  * %#define RXDEMO_NAME_MAX_CHARS 64 
+  * 
+  * /* Define the max number of bytes to transfer at one shot. */
+  * 
+  * %#define RXDEMO_BUFF_BYTES 512 
+  * 
+  * /* Values returned by the RXDEMO_Getfile() call. 
+  *  * RXDEMO_CODE_SUCCESS : Everything went fine. 
+  *  * RXDEMO_CODE_CANT_OPEN : Can't open named file. 
+  *  * RXDEMO_CODE_CANT_STAT : Can't stat open file. 
+  *  * RXDEMO_CODE_CANT_READ : Error reading the open file. 
+  *  * RXDEMO_CODE_WRITE_ERROR : Error writing the open file. */
+  * 
+  * /* ------------Interface calls defined for this service ----------- */
+  * %#define RXDEMO_CODE_SUCCESS 0 
+  * %#define RXDEMO_CODE_CANT_OPEN 1 
+  * %#define RXDEMO_CODE_CANT_STAT 2 
+  * %#define RXDEMO_CODE_CANT_READ 3 
+  * %#define RXDEMO_CODE_WRITE_ERROR 4 
+  * /* -------------------------------------------------------------------
+  * * RXDEMO_Add * 
+  * *	
+  * * Summary: 
+  * *	Add the two numbers provided and return the result. * 
+  * * Parameters: 
+  * *	int a_first : first operand. 
+  * *	int a_second : Second operand. 
+  * *	int *a_result : Sum of the above. * 
+  * *	Side effects: None.  
+  * *-------------------------------------------------------------------- */
+  * 
+  * Add(IN int a, int b, OUT int *result) = 1; 
+  * /*-------------------------------------------------------------------
+  * * RXDEMO_Getfile * 
+  * * Summary: 
+  * * 	Return the contents of the named file in the server's environment. 
+  * * Parameters: 
+  * * 	STRING a_nameToRead : Name of the file whose contents are to be 
+  * *	fetched. 
+  * * 	int *a_result : Set to the result of opening and reading the file 
+  * * 	on the server side. * 
+  * * 	Side effects: None. 
+  * *-------------------------------------------------------------------- */
+  * 
+  * Getfile(IN string a_nameToRead<RXDEMO_NAME_MAX_CHARS>, OUT int *a_result) 
+  * 	split = 2; 
+  * \endcode
+  * 
+  * 	\subsection sec6-2-2 Section 6.2.2: Client Program: rxdemo client.c 
+  * 
+  * \par
+  * The rxdemo client program, rxdemo client, calls upon the associated server
+  * to perform operations defined by rxdemo.xg. After its header, it defines a
+  * private GetIPAddress() utility routine, which given a character string host
+  * name will return its IP address. 
+  * 
+  * \code
+  * /*======================================================================= 
+  * % Client side of an example Rx application, using both standard and % % 
+  * streamed calls.  % %% % Edward R. Zayas % % Transarc Corporation % %% 
+  * %% % The United States Government has rights in this work pursuant % % 
+  * to contract no. MDA972-90-C-0036 between the United States Defense % % 
+  * Advanced Research Projects Agency and Transarc Corporation.  % %% % (C) 
+  * Copyright 1991 Transarc Corporation % %% % Redistribution and use in source 
+  * and binary forms are permitted % % provided that: (1) source distributions 
+  * retain this entire copy- % % right notice and comment, and (2) distributions 
+  * including binaries % % display the following acknowledgement: % %% % 
+  * ''This product includes software developed by Transarc % % Corporation and 
+  * its contributors'' % %% % in the documentation or other materials mentioning 
+  * features or % % use of this software. Neither the name of Transarc nor the 
+  * names % % of its contributors may be used to endorse or promote products % % 
+  * derived from this software without specific prior written % % permission. 
+  * % %% % THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED 
+  * % % WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF % % 
+  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
+  * % %=======================================================================
+  * */
+  * 
+  * #include <sys/types.h> 
+  * #include <netdb.h> 
+  * #include <stdio.h> 
+  * #include "rxdemo.h" 
+  * static char pn[] = "rxdemo"; /* Program name */
+  * static u_long GetIpAddress(a_hostName) char *a_hostName; 
+  * { /* GetIPAddress */
+  * 	static char rn[] = "GetIPAddress"; /* Routine name */
+  * 	struct hostent *hostEntP; /* Ptr to host descriptor */
+  * 	u_long hostIPAddr; /* Host IP address */
+  * 	hostEntP = gethostbyname(a_hostName); 
+  * 	if (hostEntP == (struct hostent *)0) { 
+  * 		printf("[%s:%s] Host '%s' not found\n", 
+  * 		pn, rn, a_hostName); 
+  * 		exit(1); 
+  * 	} 
+  * 	if (hostEntP->h_length != sizeof(u_long)) { 
+  * 		printf("[%s:%s] Wrong host address length (%d bytes instead of
+  * 		%d)", 
+  * 		pn, rn, hostEntP->h_length, sizeof(u_long)); 
+  * 		exit(1); 
+  * 	} 
+  * 	bcopy(hostEntP->h_addr, (char *)&hostIPAddr, sizeof(hostIPAddr)); 
+  * 	return(hostIPAddr); 
+  * } /* GetIpAddress */
+  * \endcode
+  * 
+  * \par
+  * The main program section of the client code, after handling its command line
+  * arguments, starts off by initializing the Rx facility. 
+  * 
+  * \code
+  * main(argc, argv) 
+  * int argc; 
+  * char **argv; 
+  * { /* Main */
+  * 	struct rx_connection *rxConnP; /* Ptr to server connection */
+  * 	struct rx_call *rxCallP; /* Ptr to Rx call descriptor */
+  * 	u_long hostIPAddr; /* IP address of chosen host */
+  * 	int demoUDPPort; /* UDP port of Rx service */
+  * 	struct rx_securityClass *nullSecObjP; /* Ptr to null security object */
+  * 	int operand1, operand2; /* Numbers to add int sum; Their sum */
+  * 	int code; /* Return code */
+  * 	char fileName[64]; /* Buffer for desired file's name */
+  * 	long fileDataBytes; /* Num bytes in file to get */
+  * 	char buff[RXDEMO_BUFF_BYTES+1]; /* Read buffer */
+  * 	int currBytesToRead; /* Num bytes to read in one iteration */
+  * 	int maxBytesToRead; /* Max bytes to read in one iteration */
+  * 	int bytesReallyRead; /* Num bytes read off Rx stream */
+  * 	int getResults; /* Results of the file fetch */
+  * 	printf("\n%s: Example Rx client process\n\n", pn); 
+  * 	if ((argc < 2) || (argc > 3)) { 
+  * 		printf("Usage: rxdemo <HostName> [PortToUse]"); 
+  * 		exit(1); 
+  * 	} 
+  * 	hostIPAddr = GetIpAddress(argv[1]); 
+  * 	if (argc > 2) 
+  * 		demoUDPPort = atoi(argv[2]); 
+  * 	else 
+  * 		demoUDPPort = RXDEMO_SERVER_PORT; 
+  * 	/* Initialize the Rx facility. */
+  * 	code = rx_Init(htons(demoUDPPort)); 
+  * 	if (code) { 
+  * 		printf("** 	Error calling rx_Init(); code is %d\n", code); 
+  * 		exit(1); 
+  * 	} 
+  * 	/* Create a client-side null security object. */
+  * 	nullSecObjP = rxnull_NewClientSecurityObject(); 
+  * 	if (nullSecObjP == (struct rx_securityClass *)0) { 
+  * 		printf("%s: Can't create a null client-side security
+  * 		object!\n", pn); 
+  * 		exit(1); 
+  * 	} 
+  * 	/* Set up a connection to the desired Rx service, telling it to use
+  * 	* the null security object we just created.  */
+  * 	printf("Connecting to Rx server on '%s', IP address 0x%x, UDP port
+  * 	%d\n", argv[1], hostIPAddr, demoUDPPort); 
+  * 	rxConnP = rx_NewConnection(hostIPAddr, RXDEMO_SERVER_PORT,
+  * 	RXDEMO_SERVICE_ID, nullSecObjP, RXDEMO_NULL_SECOBJ_IDX); 
+  * 	if (rxConnP == (struct rx_connection *)0) { 
+  * 		printf("rxdemo: Can't create connection to server!\n"); 
+  * 		exit(1); 
+  * 	} else 
+  * 		printf(" ---> Connected.\n"); 
+  * \endcode
+  * 
+  * \par
+  * The rx Init() invocation initializes the Rx library and defines the desired
+  * service UDP port (in network byte order). The rxnull
+  * NewClientSecurityObject() call creates a client-side Rx security object that
+  * does not perform any authentication on Rx calls. Once a client
+  * authentication object is in hand, the program calls rx NewConnection(),
+  * specifying the host, UDP port, Rx service ID, and security information
+  * needed to establish contact with the rxdemo server entity that will be
+  * providing the service. 
+  * \par
+  * With the Rx connection in place, the program may perform RPCs. The first one
+  * to be invoked is RXDEMO Add(): 
+  *  
+  * \code
+  * /* Perform our first, simple remote procedure call. */
+  * operand1 = 1; 
+  * operand2 = 2; 
+  * printf("Asking server to add %d and %d: ", operand1, operand2); 
+  * code = RXDEMO_Add(rxConnP, operand1, operand2, &sum); 
+  * if (code) { 
+  * 	printf("  // ** Error in the RXDEMO_Add RPC: code is %d\n", code); 
+  * 	exit(1); 
+  * } 
+  * printf("Reported sum is %d\n", sum); 
+  * \endcode
+  * 
+  * \par
+  * The first argument to RXDEMO Add() is a pointer to the Rx connection
+  * established above. The client-side body of the RXDEMO Add() function was
+  * generated from the rxdemo.xg interface file, and resides in the rxdemo.cs.c
+  * file (see Section 6.3.1). It gives the appearance of being a normal C
+  * procedure call. 
+  * \par
+  * The second RPC invocation involves the more complex, streamed RXDEMO
+  * Getfile() function. More of the internal Rx workings are exposed in this
+  * type of call. The first additional detail to consider is that we must
+  * manually create a new Rx call on the connection. 
+  *  
+  * \code
+  * /* Set up for our second, streamed procedure call. */
+  * printf("Name of file to read from server: "); 
+  * scanf("%s", fileName); 
+  * maxBytesToRead = RXDEMO_BUFF_BYTES; 
+  * printf("Setting up an Rx call for RXDEMO_Getfile..."); 
+  * rxCallP = rx_NewCall(rxConnP); 
+  * if (rxCallP == (struct rx_call *)0) { 
+  * 	printf("** Can't create call\n"); 
+  * 	exit(1); 
+  * } 
+  * printf("done\n"); 
+  * \endcode
+  * 
+  * \par
+  * Once the Rx call structure has been created, we may begin executing the call
+  * itself. Having been declared to be split in the interface file, Rxgen
+  * creates two function bodies for rxdemo Getfile() and places them in
+  * rxdemo.cs.c. The first, StartRXDEMO Getfile(), is responsible for
+  * marshalling the outgoing arguments and issuing the RPC. The second,
+  * EndRXDEMO Getfile(), takes care of unmarshalling the non-streamed OUT
+  * function parameters. The following code fragment illustrates how the RPC is
+  * started, using the StartRXDEMO Getfile() routine to pass the call parameters
+  * to the server. 
+  *  
+  * \code
+  * /* Sending IN parameters for the streamed call. */
+  * code = StartRXDEMO_Getfile(rxCallP, fileName); 
+  * if (code) { 
+  * 	printf("** 	Error calling StartRXDEMO_Getfile(); code is %d\n",
+  * 	code); 
+  * 	exit(1); 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * Once the call parameters have been shipped, the server will commence
+  * delivering the "stream" data bytes back to the client on the given Rx call
+  * structure. The first longword to come back on the stream specifies the
+  * number of bytes to follow. 
+  *  
+  * \par
+  * Begin reading the data being shipped from the server in response to * our
+  * setup call. The first longword coming back on the Rx call is 
+  * the number of bytes to follow. It appears in network byte order, 
+  * so we have to fix it up before referring to it. 
+  * 
+  * \code
+  * bytesReallyRead = rx_Read(rxCallP, &fileDataBytes, sizeof(long)); 
+  * if (bytesReallyRead != sizeof(long)) { 
+  * 	printf("** Only %d bytes read for file length; should have been %d\n",
+  * 	bytesReallyRead, sizeof(long)); 
+  * 	exit(1); 
+  * } 
+  * fileDataBytes = ntohl(fileDataBytes); 
+  * \endcode
+  * 
+  * \par
+  * Once the client knows how many bytes will be sent, it runs a loop in which
+  * it reads a buffer at a time from the Rx call stream, using rx Read() to
+  * accomplish this. In this application, all that is done with each
+  * newly-acquired buffer of information is printing it out. 
+  * 
+  * \code 
+  * /* Read the file bytes via the Rx call, a buffer at a time. */
+  * printf("[file contents (%d bytes) fetched over the Rx call appear
+  * below]\n\n", fileDataBytes); 
+  * while (fileDataBytes > 0) 
+  * { 
+  * 	currBytesToRead = (fileDataBytes > maxBytesToRead ?  maxBytesToRead :
+  * 	fileDataBytes); 
+  * 	bytesReallyRead = rx_Read(rxCallP, buff, currBytesToRead); 
+  * 	if (bytesReallyRead != currBytesToRead)
+  * 	{ 
+  * 		printf("\nExpecting %d bytes on this read, got %d instead\n",
+  * 		currBytesToRead, bytesReallyRead); 
+  * 		exit(1); 
+  * 	}  
+  * 	/* Null-terminate the chunk before printing it. */
+  * 	buff[currBytesToRead] = 0; 
+  * 	printf("%s", buff); 
+  * 	/* Adjust the number of bytes left to read. */
+  * 	fileDataBytes -= currBytesToRead; 
+  * } /* Read one bufferful of the file */
+  * \endcode
+  * 
+  * \par
+  * After this loop terminates, the Rx stream has been drained of all data. The
+  * Rx call is concluded by invoking the second of the two
+  * automatically-generated functions, EndRXDEMO Getfile(), which retrieves the
+  * call's OUT parameter from the server. 
+  * 
+  * \code
+  * /* finish off the Rx call, getting the OUT parameters. */
+  * printf("\n\n[End of file data]\n"); 
+  * code = EndRXDEMO_Getfile(rxCallP, &getResults); 
+  * if (code) 
+  * { 
+  * 	printf("** 	Error getting file transfer results; code is %d\n",
+  * 	code); 
+  * 	exit(1); 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * With both normal and streamed Rx calls accomplished, the client demo code
+  * concludes by terminating the Rx call it set up earlier. With that done, the
+  * client exits. 
+  * 
+  * \code 
+  * /* finish off the Rx call. */
+  * code = rx_EndCall(rxCallP, code); 
+  * if (code) 
+  * 	printf("Error 	in calling rx_EndCall(); code is %d\n", code); 
+  * 
+  * printf("\n\nrxdemo complete.\n"); 
+  * \endcode
+  * 
+  * 	\subsection sec6-2-3 Server Program: rxdemo server.c 
+  * 
+  * \par
+  * The rxdemo server program, rxdemo server, implements the operations promised
+  * in the rxdemo.xg interface file. 
+  * \par
+  * After the initial header, the external function RXDEMO ExecuteRequest() is
+  * declared. The RXDEMO ExecuteRequest() function is generated automatically by
+  * rxgen from the interface file and deposited in rxdemo.ss.c. The main program
+  * listed below will associate this RXDEMO ExecuteRequest() routine with the Rx
+  * service to be instantiated. 
+  * 
+  * \code
+  * /*======================================================================
+  * % % Advanced Research Projects Agency and Transarc Corporation.  % %% % 
+  * (C) Copyright 1991 Transarc Corporation % %% % Redistribution and use in 
+  * source and binary forms are permitted % % provided that: (1) source 
+  * distributions retain this entire copy- % % right notice and comment, and 
+  * (2) distributions including binaries % % display the following 
+  * acknowledgement: % %% % ''This product includes software developed by 
+  * Transarc % % Corporation and its contributors'' % %% % in the documentation 
+  * or other materials mentioning features or % % use of this software. Neither 
+  * the name of Transarc nor the names % % of its contributors may be used to 
+  * endorse or promote products % % derived from this software without specific 
+  * prior written % % permission.  % %% % THIS SOFTWARE IS PROVIDED "AS IS" AND 
+  * WITHOUT ANY EXPRESS OR IMPLIED % % WARRANTIES, INCLUDING, WITHOUT
+  * LIMITATION, 
+  * THE IMPLIED WARRANTIES OF % % MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+  * PURPOSE.  % %
+  * ====================================================================== */
+  * 
+  * /* Server portion of the example RXDEMO application, using both % 
+  * standard and streamed calls. % % Edward R. Zayas % Transarc Corporation % 
+  * % % The United States Government has rights in this work pursuant % 
+  * to contract no. MDA972-90-C-0036 between the United States Defense % */
+  * 
+  * #include <sys/types.h> 
+  * #include <sys/stat.h> 
+  * #include <sys/file.h> 
+  * #include <netdb.h> 
+  * #include <stdio.h> 
+  * #include "rxdemo.h" 
+  * #define N_SECURITY_OBJECTS 1 
+  * extern RXDEMO_ExecuteRequest(); 
+  * \endcode
+  * 
+  * \par
+  * After choosing either the default or user-specified UDP port on which the Rx
+  * service will be established, rx Init() is called to set up the library. 
+  * 
+  * \code
+  * main(argc, argv) 
+  * 	int argc; 
+  * 	char **argv; 
+  * { /* Main */
+  * 	static char pn[] = "rxdemo_server"; /* Program name */
+  * 	struct rx_securityClass 
+  * 	(securityObjects[1]); /* Security objs */
+  * 	struct rx_service *rxServiceP; /* Ptr to Rx service descriptor */
+  * 	struct rx_call *rxCallP; /* Ptr to Rx call descriptor */
+  * 	int demoUDPPort; /* UDP port of Rx service */
+  * 	int fd; /* file descriptor */
+  * 	int code; /* Return code */
+  * 	printf("\n%s: Example Rx server process\n\n", pn); 
+  * 	if (argc >2) { 
+  * 		printf("Usage: rxdemo [PortToUse]"); 
+  * 		exit(1); 
+  * 	} 
+  * 	if (argc > 1) 
+  * 		demoUDPPort = atoi(argv[1]); 
+  * 	else 
+  * 		demoUDPPort = RXDEMO_SERVER_PORT; 
+  * 
+  * 	/* Initialize the Rx facility, telling it the UDP port number this 
+  * 	* server will use for its single service.  */
+  * 
+  * 	printf("Listening on UDP port %d\n", demoUDPPort); 
+  * 	code = rx_Init(demoUDPPort); 
+  * 	if (code) { 
+  * 		printf("** 	Error calling rx_Init(); code is %d\n", code); 
+  * 		exit(1); 
+  * 	} 
+  * \endcode
+  *  
+  * \par
+  * A security object specific to the server side of an Rx conversation is
+  * created in the next code fragment. As with the client side of the code, a
+  * "null" server security object, namely one that does not perform any
+  * authentication at all, is constructed with the rxnull
+  * NewServerSecurityObject() function. 
+  *  
+  * \code
+  * 	/* Create a single server-side security object. In this case, the 
+  * 	* null security object (for unauthenticated connections) will be used 
+  * 	* to control security on connections made to this server. */
+  * 
+  * 	securityObjects[RXDEMO_NULL_SECOBJ_IDX] =
+  * 	rxnull_NewServerSecurityObject(); 
+  * 	if (securityObjects[RXDEMO_NULL_SECOBJ_IDX] == (struct rx_securityClass
+  * 	*) 0) { 
+  * 		printf("** Can't create server-side security object\n"); 
+  * 		exit(1); 
+  * 	} 
+  * \endcode
+  * 
+  * \par
+  * The rxdemo server program is now in a position to create the desired Rx
+  * service, primed to recognize exactly those interface calls defined in
+  * rxdemo.xg. This is accomplished by calling the rx NewService() library
+  * routine, passing it the security object created above and the generated Rx
+  * dispatcher routine. 
+  * 
+  * \code 
+  * /* Instantiate a single sample service. The rxgen-generated procedure 
+  * * called to dispatch requests is passed in (RXDEMO_ExecuteRequest).  */
+  * 
+  * 	rxServiceP = rx_NewService(	0, 
+  * 					RXDEMO_SERVICE_ID, 
+  * 					"rxdemo", 
+  * 					securityObjects, 
+  * 					1, 
+  * 					RXDEMO_ExecuteRequest
+  * 				); 
+  * 	if (rxServiceP == (struct rx_service *) 0) { 
+  * 		printf("** Can't create Rx service\n"); 
+  * 		exit(1); 
+  * 	} 
+  * \endcode
+  * 
+  * \par
+  * The final step in this main routine is to activate servicing of calls to the
+  * exported Rx interface. Specifically, the proper number of threads are
+  * created to handle incoming interface calls. Since we are passing a non-zero
+  * argument to the rx StartServer() call, the main program will itself begin
+  * executing the server thread loop, never returning from the rx StartServer()
+  * call. The print statement afterwards should never be executed, and its
+  * presence represents some level of paranoia, useful for debugging
+  * malfunctioning thread packages. 
+  * 
+  * \code 
+  * 	/* Start up Rx services, donating this thread to the server pool. */
+  * 	rx_StartServer(1); 
+  * 	/* We should never return from the previous call. */
+  * 	printf("** rx_StartServer() returned!!\n"); exit(1); 
+  * } /* Main */
+  * \endcode
+  * 
+  * \par
+  * Following the main procedure are the functions called by the
+  * automatically-generated routines in the rxdemo.ss.c module to implement the
+  * specific routines defined in the Rx interface. 
+  * \par
+  * The first to be defined is the RXDEMO Add() function. The arguments for this
+  * routine are exactly as they appear in the interface definition, with the
+  * exception of the very first. The a rxCallP parameter is a pointer to the Rx
+  * structure describing the call on which this function was activated. All
+  * user-supplied routines implementing an interface function are required to
+  * have a pointer to this structure as their first parameter. Other than
+  * printing out the fact that it has been called and which operands it
+  * received, all that RXDEMO Add() does is compute the sum and place it in the
+  * output parameter. 
+  * \par
+  * Since RXDEMO Add() is a non-streamed function, with all data travelling
+  * through the set of parameters, this is all that needs to be done. To mark a
+  * successful completion, RXDEMO Add() returns zero, which is passed all the
+  * way through to the RPC's client. 
+  * 
+  * \code
+  * int RXDEMO_Add(a_rxCallP, a_operand1, a_operand2, a_resultP) 
+  * 	struct rx_call *a_rxCallP; 
+  * int a_operand1, a_operand2; 
+  * int *a_resultP; 
+  * { /* RXDEMO_Add */
+  * 	printf("\t[Handling call to RXDEMO_Add(%d, %d)]\n", 
+  * 		a_operand1, a_operand2); 
+  * 	*a_resultP = a_operand1 + a_operand2; 
+  * 	return(0); 
+  * } /* RXDEMO_Add */
+  * \endcode
+  * 
+  * \par
+  * The next and final interface routine defined in this file is RXDEMO
+  * Getfile(). Declared as a split function in the interface file, RXDEMO
+  * Getfile() is an example of a streamed Rx call. As with RXDEMO Add(), the
+  * initial parameter is required to be a pointer to the Rx call structure with
+  * which this routine is associated, Similarly, the other parameters appear
+  * exactly as in the interface definition, and are handled identically. 
+  * \par
+  * The difference between RXDEMO Add() and RXDEMO Getfile() is in the use of
+  * the rx Write() library routine by RXDEMO Getfile() to feed the desired
+  * file's data directly into the Rx call stream. This is an example of the use
+  * of the a rxCallP argument, providing all the information necessary to
+  * support the rx Write() activity. 
+  * \par
+  * The RXDEMO Getfile() function begins by printing out the fact that it's been
+  * called and the name of the requested file. It will then attempt to open the
+  * requested file and stat it to determine its size. 
+  * 
+  * \code
+  * int RXDEMO_Getfile(a_rxCallP, a_nameToRead, a_resultP) 
+  * 	struct rx_call *a_rxCallP; 
+  * char *a_nameToRead; 
+  * int *a_resultP; 
+  * { /* RXDEMO_Getfile */
+  * 	struct stat fileStat; /* Stat structure for file */
+  * 	long fileBytes; /* Size of file in bytes */
+  * 	long nbofileBytes; /* file bytes in network byte order */
+  * 	int code; /* Return code */
+  * 	int bytesReallyWritten; /* Bytes written on Rx channel */
+  * 	int bytesToSend; /* Num bytes to read & send this time */
+  * 	int maxBytesToSend; /* Max num bytes to read & send ever */
+  * 	int bytesRead; /* Num bytes read from file */
+  * 	char buff[RXDEMO_BUFF_BYTES+1]; /* Read buffer */
+  * 	int fd; /* file descriptor */
+  * 	maxBytesToSend = RXDEMO_BUFF_BYTES; 
+  * 	printf("\t[Handling call to RXDEMO_Getfile(%s)]\n", a_nameToRead); 
+  * 	fd = open(a_nameToRead, O_RDONLY, 0444); 
+  * 	if (fd <0) { 
+  * 		printf("\t\t[**Can't open file '%s']\n", a_nameToRead); 
+  * 		*a_resultP = RXDEMO_CODE_CANT_OPEN; 
+  * 		return(1); 
+  * 	} else 
+  * 		printf("\t\t[file opened]\n"); 
+  * 	/* Stat the file to find out how big it is. */
+  * 	code = fstat(fd, &fileStat); 
+  * 	if (code) { 
+  * 		a_resultP = RXDEMO_CODE_CANT_STAT; 
+  * 		printf("\t\t[file closed]\n"); 
+  * 		close(fd); 
+  * 		return(1); 
+  * 	} 
+  * 	fileBytes = fileStat.st_size; 
+  * 	printf("\t\t[file has %d bytes]\n", fileBytes); 
+  * \endcode
+  * 
+  * \par
+  * Only standard unix operations have been used so far. Now that the file is
+  * open, we must first feed the size of the file, in bytes, to the Rx call
+  * stream. With this information, the client code can then determine how many
+  * bytes will follow on the stream. As with all data that flows through an Rx
+  * stream, the longword containing the file size, in bytes, must be converted
+  * to network byte order before being sent. This insures that the recipient may
+  * properly interpret the streamed information, regardless of its memory
+  * architecture. 
+  * 
+  * \code
+  * 	nbofileBytes = htonl(fileBytes); 
+  * 	/* Write out the size of the file to the Rx call. */
+  * 	bytesReallyWritten = rx_Write(a_rxCallP, &nbofileBytes, sizeof(long)); 
+  * 	if (bytesReallyWritten != sizeof(long)) { 
+  * 		printf("** %d bytes written instead of %d for file length\n", 
+  * 		bytesReallyWritten, sizeof(long)); 
+  * 		*a_resultP = RXDEMO_CODE_WRITE_ERROR; 
+  * 		printf("\t\t[file closed]\n"); 
+  * 		close(fd); 
+  * 		return(1); 
+  * 	} 
+  * \endcode
+  * 
+  * \par
+  * Once the number of file bytes has been placed in the stream, the RXDEMO
+  * Getfile() routine runs a loop, reading a buffer's worth of the file and then
+  * inserting that buffer of file data into the Rx stream at each iteration.
+  * This loop executes until all of the file's bytes have been shipped. Notice
+  * there is no special end-of-file character or marker inserted into the
+  * stream. 
+  * \par
+  * The body of the loop checks for both unix read() and rx Write errors. If
+  * there is a problem reading from the unix file into the transfer buffer, it
+  * is reflected back to the client by setting the error return parameter
+  * appropriately. Specifically, an individual unix read() operation could fail
+  * to return the desired number of bytes. Problems with rx Write() are handled
+  * similarly. All errors discovered in the loop result in the file being
+  * closed, and RXDEMO Getfile() exiting with a non-zero return value. 
+  *  
+  * \code
+  * 	/* Write out the contents of the file, one buffer at a time.  */
+  * 	while (fileBytes > 0) {  
+  * 		/* figure out the number of bytes to 
+  * 		* read (and send) this time.  */
+  * 		bytesToSend = (fileBytes > maxBytesToSend ? 
+  * 				maxBytesToSend : fileBytes); 
+  * 		bytesRead = read(fd, buff, bytesToSend); 
+  * 		if (bytesRead != bytesToSend) { 
+  * 			printf("Read %d instead of %d bytes from the file\n", 
+  * 				bytesRead, bytesToSend); 
+  * 			*a_resultP = RXDEMO_CODE_WRITE_ERROR; 
+  * 			printf("\t\t[file closed]\n"); 
+  * 			close(fd); 
+  * 			return(1); 
+  * 		} 
+  * 		/* Go ahead and send them. */
+  * 		bytesReallyWritten = rx_Write(a_rxCallP, buff, bytesToSend); 
+  * 		if (bytesReallyWritten != bytesToSend) { 
+  * 			printf("%d file bytes written instead of %d\n", 
+  * 				bytesReallyWritten, bytesToSend); 
+  * 			*a_resultP = RXDEMO_CODE_WRITE_ERROR; 
+  * 			printf("\t\t[file closed]\n"); 
+  * 			close(fd); 
+  * 			return(1); 
+  * 		} 
+  * 		/* Update the number of bytes left to go. */
+  * 		fileBytes -= bytesToSend; 
+  * 	} /* Write out the file to our caller */
+  * \endcode
+  * 
+  * \par
+  * Once all of the file's bytes have been shipped to the remote client, all
+  * that remains to be done is to close the file and return successfully. 
+  * 
+  * \code
+  * 	/* Close the file, then return happily. */
+  * 	*a_resultP = RXDEMO_CODE_SUCCESS; 
+  * 	printf("\t\t[file closed]\n"); 
+  * 	close(fd); 
+  * 	return(0); 
+  * } /* RXDEMO_Getfile */
+  * \endcode
+  * 
+  * 	\subsection sec6-2-4 Section 6.2.4: Makefile 
+  * 
+  * \par
+  * This file directs the compilation and installation of the rxdemo code. It
+  * specifies the locations of libraries, include files, sources, and such tools
+  * as Rxgen and install, which strips symbol tables from executables and places
+  * them in their target directories. This Makefile demostrates cross-cell
+  * software development, with the rxdemo sources residing in the
+  * grand.central.org cell and the AFS include files and libraries accessed from
+  * their locations in the transarc.com cell. 
+  * \par
+  * In order to produce and install the rxdemo server and rxdemo client
+  * binaries, the system target should be specified on the command line when
+  * invoking make: 
+  * \code
+  * 		make system 
+  * \endcode
+  * \par
+  * A note of caution is in order concerning generation of the rxdemo binaries.
+  * While tools exist that deposit the results of all compilations to other
+  * (architecture-specific) directories, and thus facilitate multiple
+  * simultaneous builds across a variety of machine architectures (e.g.,
+  * Transarc's washtool), the assumption is made here that compilations will
+  * take place directly in the directory containing all the rxdemo sources.
+  * Thus, a user will have to execute a make clean command to remove all
+  * machine-specific object, library, and executable files before compiling for
+  * a different architecture. Note, though, that the binaries are installed into
+  * a directory specifically reserved for the current machine type.
+  * Specifically, the final pathname component of the ${PROJ DIR}bin
+  * installation target is really a symbolic link to ${PROJ DIR}.bin/@sys. 
+  * \par
+  * Two libraries are needed to support the rxdemo code. The first is obvious,
+  * namely the Rx librx.a library. The second is the lightweight thread package
+  * library, liblwp.a, which implements all the threading operations that must
+  * be performed. The include files are taken from the unix /usr/include
+  * directory, along with various AFS-specific directories. Note that for
+  * portability reasons, this Makefile only contains fully-qualified AFS
+  * pathnames and "standard" unix pathnames (such as /usr/include). 
+  * 
+  * \code
+  * /*#=======================================================================# 
+  * # The United States Government has rights in this work pursuant # # to 
+  * contract no. MDA972-90-C-0036 between the United States Defense # # Advanced 
+  * Research Projects Agency and Transarc Corporation. # # # # (C) Copyright
+  * 1991 
+  * Transarc Corporation # # # # Redistribution and use in source and binary
+  * forms 
+  * are permitted # # provided that: (1) source distributions retain this entire 
+  * copy-# # right notice and comment, and (2) distributions including binaries
+  * # 
+  * # display the following acknowledgement: # # # # ''This product includes 
+  * software developed by Transarc # # Corporation and its contributors'' # # #
+  * # 
+  * in the documentation or other materials mentioning features or # # use of
+  * this 
+  * software. Neither the name of Transarc nor the names # # of its contributors 
+  * may be used to endorse or promote products # # derived from this software 
+  * without specific prior written # # permission. # # # # THIS SOFTWARE IS 
+  * PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED # # WARRANTIES,
+  * INCLUDING, 
+  * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # # MERCHANTABILITY AND
+  * FITNESS 
+  * FOR A PARTICULAR PURPOSE. # 
+  * #=======================================================================# */
+  * 
+  * SHELL = /bin/sh 
+  * TOOL_CELL = grand.central.org 
+  * AFS_INCLIB_CELL = transarc.com 
+  * USR_CONTRIB = /afs/${TOOL_CELL}/darpa/usr/contrib/ 
+  * PROJ_DIR = ${USR_CONTRIB}.site/grand.central.org/rxdemo/ 
+  * AFS_INCLIB_DIR = /afs/${AFS_INCLIB_CELL}/afs/dest/ 
+  * RXGEN = ${AFS_INCLIB_DIR}bin/rxgen 
+  * INSTALL = ${AFS_INCLIB_DIR}bin/install 
+  * LIBS = 	${AFS_INCLIB_DIR}lib/librx.a \ ${AFS_INCLIB_DIR}lib/liblwp.a 
+  * CFLAGS = -g \ 
+  * 	-I. \ 
+  * 	-I${AFS_INCLIB_DIR}include \ 
+  * 	-I${AFS_INCLIB_DIR}include/afs \ 
+  * 	-I${AFS_INCLIB_DIR} \ 
+  * 	-I/usr/include 
+  * 
+  * system: install 
+  * 
+  * install: all 
+  * 	${INSTALL} rxdemo_client 
+  * 	${PROJ_DIR}bin 
+  * 	${INSTALL} rxdemo_server 
+  * 	${PROJ_DIR}bin 
+  * 
+  * all: rxdemo_client rxdemo_server 
+  * 
+  * rxdemo_client: rxdemo_client.o ${LIBS} rxdemo.cs.o ${CC} ${CFLAGS} 
+  * 		-o rxdemo_client rxdemo_client.o rxdemo.cs.o ${LIBS} 
+  * 
+  * rxdemo_server: rxdemo_server.o rxdemo.ss.o ${LIBS} ${CC} ${CFLAGS} 
+  * 		-o rxdemo_server rxdemo_server.o rxdemo.ss.o ${LIBS} 
+  * 
+  * rxdemo_client.o: rxdemo.h 
+  * 
+  * rxdemo_server.o: rxdemo.h 
+  * 
+  * rxdemo.cs.c rxdemo.ss.c rxdemo.er.c rxdemo.h: rxdemo.xg rxgen rxdemo.xg 
+  * 
+  * clean: rm -f *.o rxdemo.cs.c rxdemo.ss.c rxdemo.xdr.c rxdemo.h \ 
+  * 		rxdemo_client rxdemo_server core 
+  * \endcode
+  * 
+  * 	\section sec6-3 Section 6.3: Computer-Generated files 
+  * 
+  * \par
+  * The four human-generated files described above provide all the information
+  * necessary to construct the full set of modules to support the rxdemo example
+  * application. This section describes those routines that are generated from
+  * the base set by Rxgen, filling out the code required to implement an Rx
+  * service. 
+  * 
+  * 	\subsection sec6-3-1 Client-Side Routines: rxdemo.cs.c 
+  * 
+  * \par
+  * The rxdemo client.c program, described in Section 6.2.2, calls the
+  * client-side stub routines contained in this module in order to make rxdemo
+  * RPCs. Basically, these client-side stubs are responsible for creating new Rx
+  * calls on the given connection parameter and then marshalling and
+  * unmarshalling the rest of the interface call parameters. The IN and INOUT
+  * arguments, namely those that are to be delivered to the server-side code
+  * implementing the call, must be packaged in network byte order and shipped
+  * along the given Rx call. The return parameters, namely those objects
+  * declared as INOUT and OUT, must be fetched from the server side of the
+  * associated Rx call, put back in host byte order, and inserted into the
+  * appropriate parameter variables. 
+  * \par
+  * The first part of rxdemo.cs.c echoes the definitions appearing in the
+  * rxdemo.xg interface file, and also #includes another Rxgen-generated file,
+  * rxdemo.h. 
+  * 
+  * \code
+  * /*======================================================================% 
+  * * % THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED % 
+  * * % WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF % 
+  * * % MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. % 
+  * * %====================================================================== */
+  * /* Machine generated file --Do NOT edit */
+  * 
+  * #include "rxdemo.h" 
+  * #define RXDEMO_CODE_WRITE_ERROR 4 
+  * 
+  * #include <rx/rx.h>
+  * #include <rx/rx_null.h>
+  * #define RXDEMO_SERVER_PORT 8000 /* Service port to advertise */
+  * #define RXDEMO_SERVICE_PORT 0 /* User server's port */
+  * #define RXDEMO_SERVICE_ID 4 /* Service ID */
+  * #define RXDEMO_NULL_SECOBJ_IDX 0 /* Index of null security object */
+  * #define RXDEMO_MAX 3
+  * #define RXDEMO_MIN 2
+  * #define RXDEMO_NULL 0 
+  * #define RXDEMO_NAME_MAX_CHARS 64
+  * #define RXDEMO_BUFF_BYTES 512
+  * #define RXDEMO_CODE_SUCCESS 0
+  * #define RXDEMO_CODE_CANT_OPEN 1
+  * #define RXDEMO_CODE_CANT_STAT 2
+  * #define RXDEMO_CODE_CANT_READ 3
+  * #define RXDEMO_CODE_WRITE_ERROR 4
+  * \endcode
+  * 
+  * \par
+  * The next code fragment defines the client-side stub for the RXDEMO Add()
+  * routine, called by the rxdemo client program to execute the associated RPC. 
+  * 
+  * \code
+  * int RXDEMO_Add(z_conn, a, b, result) register struct rx_connection *z_conn; 
+  * int a, b; 
+  * int * result; 
+  * { 
+  * 	struct rx_call *z_call = rx_NewCall(z_conn); 
+  * 	static int z_op = 1; 
+  * 	int z_result; 
+  * 	XDR z_xdrs; 
+  * 	xdrrx_create(&z_xdrs, z_call, XDR_ENCODE); 
+  * 	/* Marshal the arguments */
+  * 	if ((!xdr_int(&z_xdrs, &z_op)) 
+  * 			|| (!xdr_int(&z_xdrs, &a)) 
+  * 			|| (!xdr_int(&z_xdrs, &b))) { 
+  * 		z_result = RXGEN_CC_MARSHAL; 
+  * 		goto fail; 
+  * 	} 
+  * 	/* Un-marshal the reply arguments */
+  * 	z_xdrs.x_op = XDR_DECODE; 
+  * 	if ((!xdr_int(&z_xdrs, result))) { 
+  * 		z_result = RXGEN_CC_UNMARSHAL; 
+  * 		goto fail; 
+  * 	} 
+  * 	z_result = RXGEN_SUCCESS; 
+  * 	fail: return rx_EndCall(z_call, z_result); 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * The very first operation performed by RXDEMO Add() occurs in the local
+  * variable declarations, where z call is set to point to the structure
+  * describing a newly-created Rx call on the given connection. An XDR
+  * structure, z xdrs, is then created for the given Rx call with xdrrx
+  * create(). This XDR object is used to deliver the proper arguments, in
+  * network byte order, to the matching server stub code. Three calls to xdr
+  * int() follow, which insert the appropriate Rx opcode and the two operands
+  * into the Rx call. With the IN arguments thus transmitted, RXDEMO Add()
+  * prepares to pull the value of the single OUT parameter. The z xdrs XDR
+  * structure, originally set to XDR ENCODE objects, is now reset to XDR DECODE
+  * to convert further items received into host byte order. Once the return
+  * parameter promised by the function is retrieved, RXDEMO Add() returns
+  * successfully. 
+  * \par
+  * Should any failure occur in passing the parameters to and from the server
+  * side of the call, the branch to fail will invoke Rx EndCall(), which advises
+  * the server that the call has come to a premature end (see Section 5.6.6 for
+  * full details on rx EndCall() and the meaning of its return value). 
+  * \par
+  * The next client-side stub appearing in this generated file handles the
+  * delivery of the IN parameters for StartRXDEMO Getfile(). It operates
+  * identically as the RXDEMO Add() stub routine in this respect, except that it
+  * does not attempt to retrieve the OUT parameter. Since this is a streamed
+  * call, the number of bytes that will be placed on the Rx stream cannot be
+  * determined at compile time, and must be handled explicitly by rxdemo
+  * client.c. 
+  * 
+  * \code
+  * int StartRXDEMO_Getfile(z_call, a_nameToRead) 
+  * 	register struct rx_call *z_call; 
+  * char * a_nameToRead; 
+  * { 
+  * 	static int z_op = 2; 
+  * 	int z_result; 
+  * 	XDR z_xdrs; 
+  * 	xdrrx_create(&z_xdrs, z_call, XDR_ENCODE); 
+  * 	/* Marshal the arguments */
+  * 	if ((!xdr_int(&z_xdrs, &z_op)) || (!xdr_string(&z_xdrs, &a_nameToRead,
+  * 	RXDEMO_NAME_MAX_CHARS))) { 
+  * 		z_result = RXGEN_CC_MARSHAL; 
+  * 		goto fail; 
+  * 	} 
+  * 	z_result = RXGEN_SUCCESS; 
+  * 	fail: return z_result; 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * The final stub routine appearing in this generated file, EndRXDEMO
+  * Getfile(), handles the case where rxdemo client.c has already successfully
+  * recovered the unbounded streamed data appearing on the call, and then simply
+  * has to fetch the OUT parameter. This routine behaves identially to the
+  * latter portion of RXDEMO Getfile(). 
+  * 
+  * \code
+  * int EndRXDEMO_Getfile(z_call, a_result) 
+  * 	register struct rx_call *z_call; 
+  * int * a_result; 
+  * { 
+  * 	int z_result; 
+  * 	XDR z_xdrs; 
+  * 	/* Un-marshal the reply arguments */
+  * 	xdrrx_create(&z_xdrs, z_call, XDR_DECODE); 
+  * 	if ((!xdr_int(&z_xdrs, a_result))) { 
+  * 		z_result = RXGEN_CC_UNMARSHAL; 
+  * 		goto fail; 
+  * 	} 
+  * 	z_result = RXGEN_SUCCESS; fail: 
+  * 	return z_result; 
+  * } 
+  * \endcode
+  * 
+  * 	\subsection sec6-3-2 Server-Side Routines: rxdemo.ss.c 
+  * 
+  * \par
+  * This generated file provides the core components required to implement the
+  * server side of the rxdemo RPC service. Included in this file is the
+  * generated dispatcher routine, RXDEMO ExecuteRequest(), which the rx
+  * NewService() invocation in rxdemo server.c uses to construct the body of
+  * each listener thread's loop. Also included are the server-side stubs to
+  * handle marshalling and unmarshalling of parameters for each defined RPC call
+  * (i.e., RXDEMO Add() and RXDEMO Getfile()). These stubs are called by RXDEMO
+  * ExecuteRequest(). The routine to be called by RXDEMO ExecuteRequest()
+  * depends on the opcode received, which appears as the very first longword in
+  * the call data. 
+  * \par
+  * As usual, the first fragment is copyright information followed by the body
+  * of the definitions from the interface file. 
+  * 
+  * \code
+  * /*======================================================================% 
+  * % Edward R. Zayas % % Transarc Corporation % % % % % % The United States 
+  * Government has rights in this work pursuant % % to contract no. 
+  * MDA972-90-C-0036 between the United States Defense % % Advanced Research 
+  * Projects Agency and Transarc Corporation. % % % % (C) Copyright 1991 
+  * Transarc Corporation % % % % Redistribution and use in source and binary 
+  * forms are permitted % % provided that: (1) source distributions retain 
+  * this entire copy¬% % right notice and comment, and (2) distributions 
+  * including binaries % 
+  * %====================================================================== */
+  * /* Machine generated file --Do NOT edit */
+  * 
+  * #include "rxdemo.h" 
+  * #include <rx/rx.h> 
+  * #include <rx/rx_null.h> 
+  * #define RXDEMO_SERVER_PORT 8000 /* Service port to advertise */
+  * #define RXDEMO_SERVICE_PORT 0 /* User server's port */
+  * #define RXDEMO_SERVICE_ID 4 /* Service ID */
+  * #define RXDEMO_NULL_SECOBJ_IDX 0 /* Index of null security object */
+  * #define RXDEMO_MAX 3 
+  * #define RXDEMO_MIN 2 
+  * #define RXDEMO_NULL 0 
+  * #define RXDEMO_NAME_MAX_CHARS 64 
+  * #define RXDEMO_BUFF_BYTES 512 
+  * #define RXDEMO_CODE_SUCCESS 0 
+  * #define RXDEMO_CODE_CANT_OPEN 1 
+  * #define RXDEMO_CODE_CANT_STAT 2 
+  * #define RXDEMO_CODE_CANT_READ 3 
+  * #define RXDEMO_CODE_WRITE_ERROR 4 
+  * \endcode
+  * 
+  * \par
+  * After this preamble, the first server-side stub appears. This RXDEMO Add()
+  * routine is basically the inverse of the RXDEMO Add() client-side stub
+  * defined in rxdemo.cs.c. Its job is to unmarshall the IN parameters for the
+  * call, invoke the "true" server-side RXDEMO Add() routine (defined in rxdemo
+  * server.c), and then package and ship the OUT parameter. Being so similar to
+  * the client-side RXDEMO Add(), no further discussion is offered here. 
+  * 
+  * \code
+  * long _RXDEMO_Add(z_call, z_xdrs) 
+  * 	struct rx_call *z_call; 
+  * XDR *z_xdrs; 
+  * { 
+  * 	long z_result; 
+  * 	int a, b; 
+  * 	int result; 
+  * 	if ((!xdr_int(z_xdrs, &a)) || (!xdr_int(z_xdrs, &b))) 
+  * 	{ 
+  * 		z_result = RXGEN_SS_UNMARSHAL; 
+  * 		goto fail; 
+  * 	} 
+  * 	z_result = RXDEMO_Add(z_call, a, b, &result); 
+  * 	z_xdrs->x_op = XDR_ENCODE; 
+  * 	if ((!xdr_int(z_xdrs, &result))) 
+  * 		z_result = RXGEN_SS_MARSHAL; 
+  * 	fail: return z_result; 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * The second server-side stub, RXDEMO Getfile(), appears next. It operates
+  * identically to RXDEMO Add(), first unmarshalling the IN arguments, then
+  * invoking the routine that actually performs the server-side work for the
+  * call, then finishing up by returning the OUT parameters. 
+  * 
+  * \code
+  * long _RXDEMO_Getfile(z_call, z_xdrs) 
+  * 	struct rx_call *z_call; 
+  * XDR *z_xdrs; 
+  * { 
+  * 	long z_result; 
+  * 	char * a_nameToRead=(char *)0; 
+  * 	int a_result; 
+  * 	if ((!xdr_string(z_xdrs, &a_nameToRead, RXDEMO_NAME_MAX_CHARS))) { 
+  * 		z_result = RXGEN_SS_UNMARSHAL; 
+  * 		goto fail; 
+  * 	} 
+  * 	z_result = RXDEMO_Getfile(z_call, a_nameToRead, &a_result); 
+  * 	z_xdrs->x_op = XDR_ENCODE; 
+  * 	if ((!xdr_int(z_xdrs, &a_result))) 
+  * 		z_result = RXGEN_SS_MARSHAL; 
+  * 	fail: z_xdrs->x_op = XDR_FREE; 
+  * 	if (!xdr_string(z_xdrs, &a_nameToRead, RXDEMO_NAME_MAX_CHARS)) 
+  * 		goto fail1; 
+  * 	return z_result; 
+  * 	fail1: return RXGEN_SS_XDRFREE; 
+  * } 
+  * \endcode
+  * 
+  * \par
+  * The next portion of the automatically generated server-side module sets up
+  * the dispatcher routine for incoming Rx calls. The above stub routines are
+  * placed into an array in opcode order. 
+  * 
+  * \code
+  * long _RXDEMO_Add(); 
+  * long _RXDEMO_Getfile(); 
+  * static long (*StubProcsArray0[])() = {_RXDEMO_Add, _RXDEMO_Getfile}; 
+  * \endcode
+  * 
+  * \par
+  * The dispatcher routine itself, RXDEMO ExecuteRequest, appears next. This is
+  * the function provided to the rx NewService() call in rxdemo server.c, and it
+  * is used as the body of each listener thread's service loop. When activated,
+  * it decodes the first longword in the given Rx call, which contains the
+  * opcode. It then dispatches the call based on this opcode, invoking the
+  * appropriate server-side stub as organized in the StubProcsArray. 
+  * 
+  * \code
+  * RXDEMO_ExecuteRequest(z_call) 
+  * 	register struct rx_call *z_call; 
+  * { 
+  * 	int op; 
+  * 	XDR z_xdrs; 
+  * 	long z_result; 
+  * 	xdrrx_create(&z_xdrs, z_call, XDR_DECODE); 
+  * 	if (!xdr_int(&z_xdrs, &op)) 
+  * 		z_result = RXGEN_DECODE; 
+  * 	else if (op < RXDEMO_LOWEST_OPCODE || op > RXDEMO_HIGHEST_OPCODE) 
+  * 		z_result = RXGEN_OPCODE; 
+  * 	else 
+  * 		z_result = (*StubProcsArray0[op -RXDEMO_LOWEST_OPCODE])(z_call,
+  * 		&z_xdrs); 
+  * 	return z_result; 
+  * } 
+  * \endcode
+  * 
+  * 	\subsection sec6-3-3 External Data Rep file: rxdemo.xdr.c 
+  * 
+  * \par
+  * This file is created to provide the special routines needed to map any
+  * user-defined structures appearing as Rx arguments into and out of network
+  * byte order. Again, all on-thewire data appears in network byte order,
+  * insuring proper communication between servers and clients with different
+  * memory organizations. 
+  * \par
+  * Since the rxdemo example application does not define any special structures
+  * to pass as arguments in its calls, this generated file contains only the set
+  * of definitions appearing in the interface file. In general, though, should
+  * the user define a struct xyz and use it as a parameter to an RPC function,
+  * this file would contain a routine named xdr xyz(), which converted the
+  * structure field-by-field to and from network byte order. 
+  * 
+  * \code
+  * /*======================================================================% 
+  * %% % in the documentation or other materials mentioning features or % % 
+  * use of this software. Neither the name of Transarc nor the names % % of 
+  * its contributors may be used to endorse or promote products % % derived 
+  * from this software without specific prior written % % permission. % % % 
+  * % THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED % 
+  * % WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF % 
+  * % MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. % 
+  * % Edward R. Zayas % Transarc Corporation % % % The United States 
+  * Government has rights in this work pursuant to contract no. 
+  * MDA972-90-C-0036 between the United States Defense % Advanced Research 
+  * Projects Agency and Transarc Corporation. % % (C) Copyright 1991 Transarc 
+  * Corporation % % Redistribution and use in source and binary forms are 
+  * permitted % % provided that: (1) source distributions retain this entire 
+  * copy¬ % right notice and comment, and (2) distributions including binaries 
+  * % % display the following acknowledgement: % % % % ``This product includes 
+  * software developed by Transarc % % Corporation and its contributors'' % 
+  * %====================================================================== */
+  * /* Machine generated file --Do NOT edit */
+  * 
+  * #include "rxdemo.h" 
+  * #include <rx/rx.h> 
+  * #include <rx/rx_null.h> 
+  * #define RXDEMO_SERVER_PORT 8000 /* Service port to advertise */
+  * #define RXDEMO_SERVICE_PORT 0 /* User server's port */
+  * #define RXDEMO_SERVICE_ID 4 /* Service ID */
+  * #define RXDEMO_NULL_SECOBJ_IDX 0 /* Index of null security object */
+  * #define RXDEMO_MAX 3 
+  * #define RXDEMO_MIN 2 
+  * #define RXDEMO_NULL 0 
+  * #define RXDEMO_NAME_MAX_CHARS 64 
+  * #define RXDEMO_BUFF_BYTES 512 
+  * #define RXDEMO_CODE_SUCCESS 0 
+  * #define RXDEMO_CODE_CANT_OPEN 1 
+  * #define RXDEMO_CODE_CANT_STAT 2 
+  * #define RXDEMO_CODE_CANT_READ 3 
+  * #define RXDEMO_CODE_WRITE_ERROR 4 
+  * \endcode
+  * 
+  * 	\section sec6-4 Section 6.4: Sample Output 
+  * 
+  * \par
+  * This section contains the output generated by running the example rxdemo
+  * server and rxdemo client programs described above. The server end was run on
+  * a machine named Apollo, and the client program was run on a machine named
+  * Bigtime. 
+  * \par
+  * The server program on Apollo was started as follows: 
+  * \li apollo: rxdemo_server 
+  * \li rxdemo_server: Example Rx server process 
+  * \li Listening on UDP port 8000 
+  * \par
+  * At this point, rxdemo server has initialized its Rx module and started up
+  * its listener LWPs, which are sleeping on the arrival of an RPC from any
+  * rxdemo client. 
+  * \par
+  * The client portion was then started on Bigtime: 
+  * \n bigtime: rxdemo_client apollo 
+  * \n rxdemo: Example Rx client process 
+  * \n Connecting to Rx server on 'apollo', IP address 0x1acf37c0, UDP port 8000 
+  * \n ---> Connected. Asking server to add 1 and 2: Reported sum is 3 
+  * \par
+  * The command line instructs rxdemo client to connect to the rxdemo server on
+  * host apollo and to use the standard port defined for this service. It
+  * reports on the successful Rx connection establishment, and immediately
+  * executes an rxdemo Add(1, 2) RPC. It reports that the sum was successfully
+  * received. When the RPC request arrived at the server and was dispatched by
+  * the rxdemo server code, it printed out the following line: 
+  * \n [Handling call to RXDEMO_Add(1, 2)] 
+  * \par
+  * Next, rxdemo client prompts for the name of the file to read from the rxdemo
+  * server. It is told to fetch the Makefile for the Rx demo directory. The
+  * server is executing in the same directory in which it was compiled, so an
+  * absolute name for the Makefile is not required. The client echoes the
+  * following: 
+  * \n Name of file to read from server: Makefile Setting up an Rx call for
+  * RXDEMO_Getfile...done 
+  * \par
+  * As with the rxdemo Add() call, rxdemo server receives this RPC, and prints
+  * out the following information: 
+  * \li [Handling call to RXDEMO_Getfile(Makefile)] 
+  * \li [file opened] 
+  * \li [file has 2450 bytes] 
+  * \li [file closed] 
+  * \par
+  * It successfully opens the named file, and reports on its size in bytes. The
+  * rxdemo server program then executes the streamed portion of the rxdemo
+  * Getfile call, and when complete, indicates that the file has been closed.
+  * Meanwhile, rxdemo client prints out the reported size of the file, follows
+  * it with the file's contents, then advises that the test run has completed: 
+  * 
+  * \code
+  * [file contents (2450 bytes) fetched over the Rx call appear below] 
+  * 
+  * /*#=======================================================================# 
+  * # The United States Government has rights in this work pursuant # # to 
+  * contract no. MDA972-90-C-0036 between the United States Defense # # Advanced 
+  * Research Projects Agency and Transarc Corporation. # # # # (C) Copyright 
+  * 1991 Transarc Corporation # # # # Redistribution and use in source and 
+  * binary forms are permitted # # provided that: (1) source distributions 
+  * retain this entire copy-# # right notice and comment, and (2) distributions 
+  * including binaries # # display the following acknowledgement: # # # # ''This 
+  * product includes software developed by Transarc # # Corporation and its 
+  * contributors'' # # # # in the documentation or other materials mentioning 
+  * features or # # use of this software. Neither the name of Transarc nor the 
+  * names # # of its contributors may be used to endorse or promote products # 
+  * # derived from this software without specific prior written # # permission. 
+  * # # # # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED 
+  * # # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # # 
+  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # 
+  * #=======================================================================# */
+  * 
+  * SHELL = /bin/sh 
+  * TOOL_CELL = grand.central.org 
+  * AFS_INCLIB_CELL = transarc.com 
+  * USR_CONTRIB = /afs/${TOOL_CELL}/darpa/usr/contrib/ 
+  * PROJ_DIR = ${USR_CONTRIB}.site/grand.central.org/rxdemo/ 
+  * AFS_INCLIB_DIR = /afs/${AFS_INCLIB_CELL}/afs/dest/ 
+  * RXGEN = ${AFS_INCLIB_DIR}bin/rxgen 
+  * INSTALL = ${AFS_INCLIB_DIR}bin/install 
+  * LIBS = 	${AFS_INCLIB_DIR}lib/librx.a \ ${AFS_INCLIB_DIR}lib/liblwp.a 
+  * 	CFLAGS = -g \ 
+  * 	-I. \ 
+  * 	-I${AFS_INCLIB_DIR}include \ 
+  * 	-I${AFS_INCLIB_DIR}include/afs \ 
+  * 	-I${AFS_INCLIB_DIR} \ 
+  * 	-I/usr/include 
+  * 
+  * system: install 
+  * 
+  * install: all 
+  * 	${INSTALL} rxdemo_client ${PROJ_DIR}bin 
+  * 	${INSTALL} rxdemo_server ${PROJ_DIR}bin 
+  * 
+  * all: rxdemo_client rxdemo_server 
+  * 
+  * rxdemo_client: rxdemo_client.o ${LIBS} rxdemo.cs.o ${CC} ${CFLAGS} 
+  * 	-o rxdemo_client rxdemo_client.o rxdemo.cs.o ${LIBS} 
+  * 
+  * rxdemo_server: rxdemo_server.o rxdemo.ss.o ${LIBS} ${CC} ${CFLAGS} 
+  * 	-o rxdemo_server rxdemo_server.o rxdemo.ss.o ${LIBS} 
+  * 
+  * rxdemo_client.o: rxdemo.h 
+  * 
+  * rxdemo_server.o: rxdemo.h 
+  * 
+  * rxdemo.cs.c rxdemo.ss.c rxdemo.er.c rxdemo.h: rxdemo.xg rxgen rxdemo.xg 
+  * 
+  * clean: rm -f *.o rxdemo.cs.c rxdemo.ss.c rxdemo.xdr.c rxdemo.h \ 
+  * 	rxdemo_client rxdemo_server core 
+  * 
+  * [End of file data] 
+  * rxdemo complete. 
+  * \endcode
+  * 
+  * \par
+  * The rxdemo server program continues to run after handling these calls,
+  * offering its services to any other callers. It can be killed by sending it
+  * an interrupt signal using Control-C (or whatever mapping has been set up for
+  * the shell's interrupt character). 
+  * 
+  * 	\section Bibliography Bibliography 
+  * 
+  * \li [1] Transarc Corporation. AFS 3.0 System Administrator's Guide,
+  * F-30-0-D102, Pittsburgh, PA, April 1990. 
+  * \li [2] S.P. Miller, B.C. Neuman, J.I. Schiller, J.H. Saltzer. Kerberos
+  * Authentication and Authorization System, Project Athena Technical Plan,
+  * Section E.2.1, M.I.T., December 1987. 
+  * \li [3] Bill 	Bryant. Designing an Authentication System: a Dialogue
+  * in Four Scenes, Project Athena internal document, M.I.T, draft of 8 February
+  * 1988. 
+  * \li [4] S. R. Kleinman. 	Vnodes: An Architecture for Multiple file
+  * System Types in Sun UNIX, Conference Proceedings, 1986 Summer Usenix
+  * Technical Conference, pp. 238-247, El Toro, CA, 1986. 
+  * 
+  */
Index: openafs/doc/protocol/vldb-vol-spec.h
diff -c /dev/null openafs/doc/protocol/vldb-vol-spec.h:1.1.2.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/protocol/vldb-vol-spec.h	Sun May 31 12:59:32 2009
***************
*** 0 ****
--- 1,3624 ----
+ /*!
+ 
+ 	\page title AFS-3 Programmer's Reference: Volume Server/Volume Location
+ Server  Interface 
+ 
+ 	\author Edward R. Zayas 
+ Transarc Corporation 
+ \version 1.0
+ \date 29 August 1991 14:48 Copyright 1991 Transarc Corporation All Rights
+ Reserved FS-00-D165 
+ 
+ 
+ 	\page chap1 Chapter 1: Overview 
+ 
+ 	\section sec1-1 Section 1.1: Introduction 
+ 
+ \par
+ This document describes the architecture and interfaces for two of the
+ important agents of the AFS distributed file system, the Volume Server and the
+ Volume Location Server. The Volume Server allows operations affecting entire
+ AFS volumes to be executed, while the Volume Location Server provides a lookup
+ service for volumes, identifying the server or set of servers on which volume
+ instances reside. 
+ 
+ 	\section sec1-2 Section 1.2: Volumes 
+ 
+ 	\subsection sec1-2-1 Section 1.2.1: Definition 
+ 
+ \par
+ The underlying concept manipulated by the two AFS servers examined by this
+ document is the volume. Volumes are the basic mechanism for organizing the data
+ stored within the file system. They provide the foundation for addressing,
+ storing, and accessing file data, along with serving as the administrative
+ units for replication, backup, quotas, and data motion between File Servers. 
+ \par
+ Specifically, a volume is a container for a hierarchy of files, a connected
+ file system subtree. In this respect, a volume is much like a traditional unix
+ file system partition. Like a partition, a volume can be mounted in the sense
+ that the root directory of the volume can be named within another volume at an
+ AFS mount point. The entire file system hierarchy is built up in this manner,
+ using mount points to glue together the individual subtrees resident within
+ each volume. The root of this hierarchy is then mounted by each AFS client
+ machine using a conventional unix mount point within the workstation's local
+ file system. By convention, this entryway into the AFS domain is mounted on the
+ /afs local directory. From a user's point of view, there is only a single mount
+ point to the system; the internal mount points are generally transparent. 
+ 
+ 	\subsection sec1-2-2 Section 1.2.2: Volume Naming 
+ 
+ \par
+ There are two methods by which volumes may be named. The first is via a
+ human-readable string name, and the second is via a 32-bit numerical
+ identifier. Volume identifiers, whether string or numerical, must be unique
+ within any given cell. AFS mount points may use either representation to
+ specify the volume whose root directory is to be accessed at the given
+ position. Internally, however, AFS agents use the numerical form of
+ identification exclusively, having to translate names to the corresponding
+ 32-bit value. 
+ 
+ 	\subsection sec1-2-3 Section 1.2.3: Volume Types 
+ 
+ \par
+ There are three basic volume types: read-write, read-only, and backup volumes. 
+ \li Read-write: The data in this volume may be both read and written by those
+ clients authorized to do so. 
+ \li Read-only: It is possible to create one or more read-only snapshots of
+ read-write volumes. The read-write volume serving as the source image is
+ referred to as the parent volume. Each read-only clone, or child, instance must
+ reside on a different unix disk partition than the other clones. Every clone
+ instance generated from the same parent read-write volume has the identical
+ volume name and numerical volume ID. This is the reason why no two clones may
+ appear on the same disk partition, as there would be no way to differentiate
+ the two. AFS clients are allowed to read files and directories from read-only
+ volumes, but cannot overwrite them individually. However, it is possible to
+ make changes to the read-write parent and then release the contents of the
+ entire volume to all the read-only replicas. The release operation fails if it
+ does not reach the appropriate replication sites. 
+ \li Backup: A backup volume is a special instance of a read-only volume. While
+ it is also a read-only snapshot of a given read-write volume, only one instance
+ is allowed to exist at any one time. Also, the backup volume must reside on the
+ same partition as the parent read-write volume from which it was created. It is
+ from a backup volume that the AFS backup system writes file system data to
+ tape. In addition, backup volumes may be mounted into the file tree just like
+ the other volume types. In fact, by convention, the backup volume for each
+ user's home directory subtree is typically mounted as OldFiles in that
+ directory. If a user accidentally deletes a file that resides in the backup
+ snapshot, the user may simply copy it out of the backup directly without the
+ assistance of a system administrator, or any kind of tape restore operation. 
+ Backup volume are implemented in a copy-on-write fashion. Thus, backup volumes
+ may be envisioned as consisting of a set of pointers to the true data objects
+ in the base read-write volume when they are first created. When a file is
+ overwritten in the read-write version for the first time after the backup
+ volume was created, the original data is physically written to the backup
+ volume, breaking the copyon-write link. With this mechanism, backup volumes
+ maintain the image of the read-write volume at the time the snapshot was taken
+ using the minimum amount of additional disk space. 
+ 
+ 	\section sec1-3 Section 1.3: Scope 
+ 
+ \par
+ This paper is a member of a documentation suite providing specifications of the
+ operation and interfaces offered by the various AFS servers and agents. The
+ scope of this work is to provide readers with a sufficiently detailed
+ description of the Volume Location Server and the Volume Server so that they
+ may construct client applications which call their RPC interface routines. 
+ 
+ 	\section sec1-4 Section 1.4: Document Layout 
+ 
+ \par
+ After this introductory portion of the document, Chapters 2 and 3 examine the
+ architecture and RPC interface of the Volume Location Server and its replicated
+ database. Similarly, Chapters 4 and 5 describe the architecture and RPC
+ interface of the Volume Server. 
+ 
+ 	\page chap2 Chapter 2: Volume Location Server Architecture 
+ 
+ 	\section sec2-1 Section 2.1: Introduction 
+ 
+ \par
+ The Volume Location Server allows AFS agents to query the location and basic
+ status of volumes resident within the given cell. Volume Location Server
+ functions may be invoked directly from authorized users via the vos utility. 
+ \par
+ This chapter briefly discusses various aspects of the Volume Location Server's
+ architecture. First, the need for volume location is examined, and the specific
+ parties that call the Volume Location Server interface routines are identified.
+ Then, the database maintained to provide volume location service, the Volume
+ Location Database (VLDB), is examined. Finally, the vlserver process which
+ implements the Volume Location Server is considered. 
+ \par
+ As with all AFS servers, the Volume Location Server uses the Rx remote
+ procedure call package for communication with its clients. 
+ 
+ 	\section sec2-2 Section 2.2: The Need For Volume Location 
+ 
+ \par
+ The Cache Manager agent is the primary consumer of AFS volume location service,
+ on which it is critically dependent for its own operation. The Cache Manager
+ needs to map volume names or numerical identifiers to the set of File Servers
+ on which its instances reside in order to satisfy the file system requests it
+ is processing on behalf of it clients. Each time a Cache Manager encounters a
+ mount point for which it does not have location information cached, it must
+ acquire this information before the pathname resolution may be successfully
+ completed. Once the File Server set is known for a particular volume, the Cache
+ Manager may then select the proper site among them (e.g. choosing the single
+ home for a read-write volume, or randomly selecting a site from a read-only
+ volume's replication set) and begin addressing its file manipulation operations
+ to that specific server. 
+ \par
+ While the Cache Manager consults the volume location service, it is not capable
+ of changing the location of volumes and hence modifying the information
+ contained therein. This capability to perform acts which change volume location
+ is concentrated within the Volume Server. The Volume Server process running on
+ each server machine manages all volume operations affecting that platform,
+ including creations, deletions, and movements between servers. It must update
+ the volume location database every time it performs one of these actions. 
+ \par
+ None of the other AFS system agents has a need to access the volume location
+ database for its site. Surprisingly, this also applies to the File Server
+ process. It is only aware of the specific set of volumes that reside on the set
+ of physical disks directly attached to the machine on which they execute. It
+ has no knowlege of the universe of volumes resident on other servers, either
+ within its own cell or in foreign cells. 
+ 
+ 	\section sec2-3 Section 2.3: The VLDB 
+ 
+ \par
+ The Volume Location Database (VLDB) is used to allow AFS application programs
+ to discover the location of any volume within its cell, along with select
+ information about the nature and state of that volume. It is organized in a
+ very straightforward fashion, and uses the ubik [4] [5] facility to to provide
+ replication across multiple server sites. 
+ 
+ 	\subsection sec2-3-1 Section 2.3.1: Layout 
+ 
+ \par
+ The VLDB itself is a very simple structure, and synchronized copies may be
+ maintained at two or more sites. Basically, each copy consists of header
+ information, followed by a linear (yet unbounded) array of entries. There are
+ several associated hash tables used to perform lookups into the VLDB. The first
+ hash table looks up volume location information based on the volume's name.
+ There are three other hash tables used for lookup, based on volume ID/type
+ pairs, one for each possible volume type. 
+ \par
+ The VLDB for a large site may grow to contain tens of thousands of entries, so
+ some attempts were made to make each entry as small as possible. For example,
+ server addresses within VLDB entries are represented as single-byte indicies
+ into a table containing the full longword IP addresses. 
+ \par
+ A free list is kept for deleted VLDB entries. The VLDB will not grow unless all
+ the entries on the free list have been exhausted, keeping it as compact as
+ possible. 
+ 
+ 	\subsection sec2-3-2 Section 2.3.2: Database Replication 
+ 
+ \par
+ The VLDB, along with other important AFS databases, may be replicated to
+ multiple sites to improve its availability. The ubik replication package is
+ used to implement this functionality for the VLDB. A full description of ubik
+ and of the quorum completion algorithm it implements may be found in [4] and
+ [5]. The basic abstraction provided by ubik is that of a disk file replicated
+ to multiple server locations. One machine is considered to be the
+ synchronization site, handling all write operations on the database file. Read
+ operations may be directed to any of the active members of the quorum, namely a
+ subset of the replication sites large enough to insure integrity across such
+ failures as individual server crashes and network partitions. All of the quorum
+ members participate in regular elections to determine the current
+ synchronization site. The ubik algorithms allow server machines to enter and
+ exit the quorum in an orderly and consistent fashion. All operations to one of
+ these replicated "abstract files" are performed as part of a transaction. If
+ all the related operations performed under a transaction are successful, then
+ the transaction is committed, and the changes are made permanent. Otherwise,
+ the transaction is aborted, and all of the operations for that transaction are
+ undone. 
+ 
+ 	\section sec2-4 Section 2.4: The vlserver Process 
+ 
+ \par
+ The user-space vlserver process is in charge of providing volume location
+ service for AFS clients. This program maintains the VLDB replica at its
+ particular server, and cooperates with all other vlserver processes running in
+ the given cell to propagate updates to the database. It implements the RPC
+ interface defined in the vldbint.xg definition file for the rxgen RPC stub
+ generator program. As part of its startup sequence, it must discover the VLDB
+ version it has on its local disk, move to join the quorum of replication sites
+ for the VLDB, and get the latest version if the one it came up with was out of
+ date. Eventually, it will synchronize with the other VLDB replication sites,
+ and it will begin accepting calls. 
+ \par
+ The vlserver program uses at most three Rx worker threads to listen for
+ incoming Volume Location Server calls. It has a single, optional command line
+ argument. If the string "-noauth" appears when the program is invoked, then
+ vlserver will run in an unauthenticated mode where any individual is considered
+ authorized to perform any VLDB operation. This mode is necessary when first
+ bootstrapping an AFS installation. 
+ 
+ 	\page chap3 Chapter 3: Volume Location Server Interface 
+ 
+ 	\section sec3-1 Section 3.1: Introduction 
+ 
+ \par
+ This chapter documents the API for the Volume Location Server facility, as
+ defined by the vldbint.xg Rxgen interface file and the vldbint.h include file.
+ Descriptions of all the constants, structures, macros, and interface functions
+ available to the application programmer appear here. 
+ \par
+ It is expected that Volume Location Server client programs run in user space,
+ as does the associated vos volume utility. However, the kernel-resident Cache
+ Manager agent also needs to call a subset of the Volume Location Server's RPC
+ interface routines. Thus, a second Volume Location Server interface is
+ available, built exclusively to satisfy the Cache Manager's limited needs. This
+ subset interface is defined by the afsvlint.xg Rxgen interface file, and is
+ examined in the final section of this chapter. 
+ 
+ 	\section sec3-2 3.2: Constants 
+ 
+ \par
+ This section covers the basic constant definitions of interest to the Volume
+ Location Server application programmer. These definitions appear in the
+ vldbint.h file, automatically generated from the vldbint.xg Rxgen interface
+ file, and in vlserver.h. 
+ \par
+ Each subsection is devoted to describing the constants falling into the
+ following categories: 
+ \li Configuration and boundary quantities 
+ \li Update entry bits 
+ \li List-by-attribute bits 
+ \li Volume type indices 
+ \li States for struct vlentry 
+ \li States for struct vldbentry 
+ \li ReleaseType argument values 
+ \li Miscellaneous items 
+ 
+ 	\subsection sec3-2-1 Section 3.2.1: Configuration and Boundary
+ Quantities 
+ 
+ \par
+ These constants define some basic system values, including configuration
+ information. 
+ 
+ \par Name
+ MAXNAMELEN
+ \par Value
+ 65
+ \par Description
+ Maximum size of various character strings, including volume name fields in
+ structures and host names.
+ 
+ \par Name
+ MAXNSERVERS
+ \par Value
+ 8
+ \par Description
+ Maximum number of replications sites for a volume.
+ 
+ \par Name
+ MAXTYPES
+ \par Value
+ 3
+ \par Description
+ Maximum number of volume types.
+ 
+ \par Name
+ VLDBVERSION
+ \par Value
+ 1
+ \par Description
+ VLDB database version number
+ 
+ \par Name
+ HASHSIZE
+ \par Value
+ 8,191
+ \par Description
+ Size of internal Volume Location Server volume name and volume ID hash tables.
+ This must always be a prime number.
+ 
+ \par Name
+ NULLO
+ \par Value
+ 0
+ \par Description
+ Specifies a null pointer value.
+ 
+ \par Name
+ VLDBALLOCCOUNT
+ \par Value
+ 40
+ \par Description
+ Value used when allocating memory internally for VLDB entry records.
+ 
+ \par Name
+ BADSERVERID
+ \par Value
+ 255
+ \par Description
+ Illegal Volume Location Server host ID.
+ 
+ \par Name
+ MAXSERVERID
+ \par Value
+ 30
+ \par Description
+ Maximum number of servers appearing in the VLDB.
+ 
+ \par Name
+ MAXSERVERFLAG
+ \par Value
+ 0x80
+ \par Description
+ First unused flag value in such fields as serverFlags in struct vldbentry and
+ RepsitesNewFlags in struct VldbUpdateEntry.
+ 
+ \par Name
+ MAXPARTITIONID
+ \par Value
+ 126
+ \par Description
+ Maximum number of AFS disk partitions for any one server.
+ 
+ \par Name
+ MAXBUMPCOUNT
+ \par Value
+ 0x7fffffff
+ \par Description
+ Maximum interval that the current high-watermark value for a volume ID can be
+ increased in one operation.
+ 
+ \par Name
+ MAXLOCKTIME
+ \par Value
+ 0x7fffffff
+ \par Description
+ Maximum number of seconds that any VLDB entry can remain locked.
+ 
+ \par Name
+ SIZE
+ \par Value
+ 1,024
+ \par Description
+ Maximum size of the name field within a struct.
+ 
+ 	\subsection sec3-2-2 Section 3.2.2: Update Entry Bits 
+ 
+ \par
+ These constants define bit values for the Mask field in the struct
+ VldbUpdateEntry. Specifically, setting these bits is equivalent to declaring
+ that the corresponding field within an object of type struct VldbUpdateEntry
+ has been set. For example, setting the VLUPDATE VOLUMENAME flag in Mask
+ indicates that the name field contains a valid value. 
+ 
+ \par Name
+ VLUPDATE VOLUMENAME
+ \par Value
+ 0x0001
+ \par Description
+ If set, indicates that the name field is valid.
+ 
+ \par Name
+ VLUPDATE VOLUMETYPE
+ \par Value
+ 0x0002
+ \par Description
+ If set, indicates that the volumeType field is valid.
+ 
+ \par Name
+ VLUPDATE FLAGS
+ \par Value
+ 0x0004
+ \par Description
+ If set, indicates that the flags field is valid.
+ 
+ \par Name
+ VLUPDATE READONLYID
+ \par Value
+ 0x0008
+ \par Description
+ If set, indicates that the ReadOnlyId field is valid.
+ 
+ \par Name
+ VLUPDATE BACKUPID
+ \par Value
+ 0x0010
+ \par Description
+ If set, indicates that the BackupId field is valid.
+ 
+ \par Name
+ VLUPDATE REPSITES 
+ \par Value
+ 0x0020
+ \par Description
+ If set, indicates that the nModifiedRepsites field is valid.
+ 
+ \par Name
+ VLUPDATE CLONEID
+ \par Value
+ 0x0080
+ \par Description
+ If set, indicates that the cloneId field is valid.
+ 
+ \par Name
+ VLUPDATE REPS DELETE
+ \par Value
+ 0x0100
+ \par Description
+ Is the replica being deleted?
+ 
+ \par Name
+ VLUPDATE REPS ADD
+ \par Value
+ 0x0200
+ \par Description
+ Is the replica being added?
+ 
+ \par Name
+ VLUPDATE REPS MODSERV
+ \par Value
+ 0x0400
+ \par Description
+ Is the server part of the replica location correct?
+ 
+ \par Name
+ VLUPDATE REPS MODPART
+ \par Value
+ 0x0800
+ \par Description
+ Is the partition part of the replica location correct?
+ 
+ \par Name
+ VLUPDATE REPS MODFLAG 
+ \par Value
+ 0x1000 
+ \par Description
+ Various modification flag values.
+ 
+ 	\subsection sec3-2-3 Section 3.2.3: List-By-Attribute Bits 
+ 
+ \par
+ These constants define bit values for the Mask field in the struct
+ VldbListByAttributes is to be used in a match. Specifically, setting these bits
+ is equivalent to declaring that the corresponding field within an object of
+ type struct VldbListByAttributes is set. For example, setting the VLLIST SERVER
+ flag in Mask indicates that the server field contains a valid value. 
+ 
+ \par Name
+ VLLIST SERVER
+ \par Value
+ 0x1
+ \par Description
+ If set, indicates that the server field is valid.
+ 
+ \par Name
+ VLLIST PARTITION
+ \par Value
+ 0x2
+ \par Description
+ If set, indicates that the partition field is valid.
+ 
+ \par Name
+ VLLIST VOLUMETYPE
+ \par Value
+ 0x4
+ \par Description
+ If set, indicates that the volumetype field is valid.
+ 
+ \par Name
+ VLLIST VOLUMEID
+ \par Value
+ 0x8
+ \par Description
+ If set, indicates that the volumeid field is valid.
+ 
+ \par Name
+ VLLIST FLAG
+ \par Value
+ 0x10
+ \par Description
+ If set, indicates that that flag field is valid.
+ 
+ 	\subsection sec3-2-4 Section 3.2.4: Volume Type Indices 
+ 
+ \par
+ These constants specify the order of entries in the volumeid array in an object
+ of type struct vldbentry. They also identify the three different types of
+ volumes in AFS. 
+ 
+ \par Name
+ RWVOL
+ \par Value
+ 0
+ \par Description
+ Read-write volume.
+ 
+ \par Name
+ ROVOL
+ \par Value
+ 1
+ \par Description
+ Read-only volume.
+ 
+ \par Name
+ BACKVOL 
+ \par Value
+ 2
+ \par Description
+ Backup volume.
+ 
+ 	\subsection sec3-2-5 Section 3.2.5: States for struct vlentry 
+ 
+ \par
+ The following constants appear in the flags field in objects of type struct
+ vlentry. The first three values listed specify the state of the entry, while
+ all the rest stamp the entry with the type of an ongoing volume operation, such
+ as a move, clone, backup, deletion, and dump. These volume operations are the
+ legal values to provide to the voloper parameter of the VL SetLock() interface
+ routine. 
+ \par
+ For convenience, the constant VLOP ALLOPERS is defined as the inclusive OR of
+ the above values from VLOP MOVE through VLOP DUMP. 
+ 
+ \par Name
+ VLFREE
+ \par Value
+ 0x1
+ \par Description
+ Entry is in the free list.
+ 
+ \par Name
+ VLDELETED
+ \par Value
+ 0x2
+ \par Description
+ Entry is soft-deleted.
+ 
+ \par Name
+ VLLOCKED
+ \par Value
+ 0x4
+ \par Description
+ Advisory lock held on the entry.
+ 
+ \par Name
+ VLOP MOVE
+ \par Value
+ 0x10
+ \par Description
+ The associated volume is being moved between servers.
+ 
+ \par Name
+ VLOP RELEASE
+ \par Value
+ 0x20
+ \par Description
+ The associated volume is being cloned to its replication sites.
+ 
+ \par Name
+ VLOP BACKUP
+ \par Value
+ 0x40
+ \par Description
+ A backup volume is being created for the associated volume.
+ 
+ \par Name
+ VLOP DELETE
+ \par Value
+ 0x80
+ \par Description
+ The associated volume is being deleted.
+ 
+ \par Name
+ VLOP DUMP
+ \par Value
+ 0x100 
+ \par Description
+ A dump is being taken of the associated volume.
+ 
+ 	\subsection sec3-2-6 Section 3.2.6: States for struct vldbentry 
+ 
+ \par
+ Of the following constants, the first three appear in the flags field within an
+ object of type struct vldbentry, advising of the existence of the basic volume
+ types for the given volume, and hence the validity of the entries in the
+ volumeId array field. The rest of the values provided in this table appear in
+ the serverFlags array field, and apply to the instances of the volume appearing
+ in the various replication sites. 
+ \par
+ This structure appears in numerous Volume Location Server interface calls,
+ namely VL CreateEntry(), VL GetEntryByID(), VL GetEntryByName(), VL
+ ReplaceEntry() and VL ListEntry(). 
+ 
+ \par Name
+ VLF RWEXISTS
+ \par Value
+ 0x1000
+ \par Description
+ The read-write volume ID is valid.
+ 
+ \par Name
+ VLF ROEXISTS
+ \par Value
+ 0x2000
+ \par Description
+ The read-only volume ID is valid.
+ 
+ \par Name
+ VLF BACKEXISTS
+ \par Value
+ 0x4000
+ \par Description
+ The backup volume ID is valid.
+ 
+ \par Name
+ VLSF NEWREPSITE
+ \par Value
+ 0x01
+ \par Description
+ Not used; originally intended to mark an entry as belonging to a
+ partially-created volume instance.
+ 
+ \par Name
+ VLSF ROVOL
+ \par Value
+ 0x02
+ \par Description
+ A read-only version of the volume appears at this server.
+ 
+ \par Name
+ VLSF RWVOL
+ \par Value
+ 0x02
+ \par Description
+ A read-write version of the volume appears at this server.
+ 
+ \par Name
+ VLSF BACKVOL
+ \par Value
+ 0x08
+ \par Description
+ A backup version of the volume appears at this server. 
+ 
+ 	\subsection sec3-2-7 Section 3.2.7: ReleaseType Argument Values 
+ 
+ \par
+ The following values are used in the ReleaseType argument to various Volume
+ Location Server interface routines, namely VL ReplaceEntry(), VL UpdateEntry()
+ and VL ReleaseLock(). 
+ 
+ \par Name
+ LOCKREL TIMESTAMP
+ \par Value
+ 1
+ \par Description
+ Is the LockTimestamp field valid?
+ 
+ \par Name
+ LOCKREL OPCODE
+ \par Value
+ 2
+ \par Description
+ Are any of the bits valid in the flags field?
+ 
+ \par Name
+ LOCKREL AFSID
+ \par Value
+ 4
+ \par Description
+ Is the LockAfsId field valid?
+ 
+ 	\subsection sec3-2-8 Section 3.2.8: Miscellaneous 
+ 
+ \par
+ Miscellaneous values. 
+ \par Name
+ VLREPSITE NEW 	
+ \par Value
+ 1 	
+ \par Description
+ Has a replication site gotten a new release of a volume? 
+ \par 
+ A synonym for this constant is VLSF NEWREPSITE. 
+ 
+ 	\section sec3-3 Section 3.3: Structures and Typedefs 
+ 
+ \par
+ This section describes the major exported Volume Location Server data
+ structures of interest to application programmers, along with the typedefs
+ based upon those structures. 
+ 
+ 	\subsection sec3-3-1 Section 3.3.1: struct vldbentry 
+ 
+ \par
+ This structure represents an entry in the VLDB as made visible to Volume
+ Location Server clients. It appears in numerous Volume Location Server
+ interface calls, namely VL CreateEntry(), VL GetEntryByID(), VL
+ GetEntryByName(), VL ReplaceEntry() and VL ListEntry(). 
+ \n \b Fields 
+ \li char name[] - The string name for the volume, with a maximum length of
+ MAXNAMELEN (65) characters, including the trailing null. 
+ \li long volumeType - The volume type, one of RWVOL, ROVOL, or BACKVOL. 
+ \li long nServers - The number of servers that have an instance of this volume. 
+ \li long serverNumber[] - An array of indices into the table of servers,
+ identifying the sites holding an instance of this volume. There are at most
+ MAXNSERVERS (8) of these server sites allowed by the Volume Location Server. 
+ \li long serverPartition[] - An array of partition identifiers, corresponding
+ directly to the serverNumber array, specifying the partition on which each of
+ those volume instances is located. As with the serverNumber array,
+ serverPartition has up to MAXNSERVERS (8) entries. 
+ \li long serverFlags[] - This array holds one flag value for each of the
+ servers in the previous arrays. Again, there are MAXNSERVERS (8) slots in this
+ array. 
+ \li u long volumeId[] - An array of volume IDs, one for each volume type. There
+ are MAXTYPES slots in this array. 
+ \li long cloneId - This field is used during a cloning operation. 
+ \li long flags - Flags concerning the status of the fields within this
+ structure; see Section 3.2.6 for the bit values that apply. 
+ 
+ 	\subsection sec3-3-2 Section 3.3.2: struct vlentry 
+ 
+ \par
+ This structure is used internally by the Volume Location Server to fully
+ represent a VLDB entry. The client-visible struct vldbentry represents merely a
+ subset of the information contained herein. 
+ \n \b Fields 
+ \li u long volumeId[] - An array of volume IDs, one for each of the MAXTYPES of
+ volume types. 
+ \li long flags - Flags concerning the status of the fields within this
+ structure; see Section 3.2.6 for the bit values that apply. 
+ \li long LockAfsId - The individual who locked the entry.  This feature has not
+ yet been implemented. 
+ \li long LockTimestamp - Time stamp on the entry lock. 
+ \li long cloneId - This field is used during a cloning operation. 
+ \li long AssociatedChain - Pointer to the linked list of associated VLDB
+ entries. 
+ \li long nextIdHash[] - Array of MAXTYPES next pointers for the ID hash table
+ pointer, one for each related volume ID. 
+ \li long nextNameHash - Next pointer for the volume name hash table. 
+ \li long spares1[] - Two longword spare fields. 
+ \li char name[] - The volume's string name, with a maximum of MAXNAMELEN (65)
+ characters, including the trailing null. 
+ \li u char volumeType - The volume's type, one of RWVOL, ROVOL, or BACKVOL. 
+ \li u char serverNumber[] - An array of indices into the table of servers,
+ identifying the sites holding an instance of this volume. There are at most
+ MAXNSERVERS (8) of these server sites allowed by the Volume Location Server. 
+ \li u char serverPartition[] - An array of partition identifiers, corresponding
+ directly to the serverNumber array, specifying the partition on which each of
+ those volume instances is located. As with the serverNumber array,
+ serverPartition has up to MAXNSERVERS (8) entries. 
+ \li u char serverFlags[] - This array holds one flag value for each of the
+ servers in the previous arrays. Again, there are MAXNSERVERS (8) slots in this
+ array. 
+ \li u char RefCount - Only valid for read-write volumes, this field serves as a
+ reference count, basically the number of dependent children volumes. 
+ \li char spares2[] - This field is used for 32-bit alignment. 
+ 
+ 	\subsection sec3-3-3 Section 3.3.3: struct vital vlheader 
+ 
+ \par
+ This structure defines the leading section of the VLDB header, of type struct
+ vlheader. It contains frequently-used global variables and general statistics
+ information. 
+ \n \b Fields 
+ \li long vldbversion - The VLDB version number. This field must appear first in
+ the structure. 
+ \li long headersize - The total number of bytes in the header. 
+ \li long freePtr - Pointer to the first free enry in the free list, if any. 
+ \li long eofPtr - Pointer to the first free byte in the header file. 
+ \li long allocs - The total number of calls to the internal AllocBlock()
+ function directed at this file. 
+ \li long frees - The total number of calls to the internal FreeBlock() function
+ directed at this file. 
+ \li long MaxVolumeId - The largest volume ID ever granted for this cell. 
+ \li long totalEntries[] - The total number of VLDB entries by volume type in
+ the VLDB. This array has MAXTYPES slots, one for each volume type. 
+ 
+ 	\subsection sec3-3-4 Section 3.3.4: struct vlheader 
+ 
+ \par
+ This is the layout of the information stored in the VLDB header. Notice it
+ includes an object of type struct vital vlheader described above (see Section
+ 3.3.3) as the first field. 
+ \n \b Fields 
+ \li struct vital vlheader vital header - Holds critical VLDB header
+ information. 
+ \li u long IpMappedAddr[] - Keeps MAXSERVERID+1 mappings of IP addresses to
+ relative ones. 
+ \li long VolnameHash[] - The volume name hash table, with HASHSIZE slots. 
+ \li long VolidHash[][] - The volume ID hash table. The first dimension in this
+ array selects which of the MAXTYPES volume types is desired, and the second
+ dimension actually implements the HASHSIZE hash table buckets for the given
+ volume type. 
+ 
+ 	\subsection sec3-3-5 Section 3.3.5: struct VldbUpdateEntry 
+ 
+ \par
+ This structure is used as an argument to the VL UpdateEntry() routine (see
+ Section 3.6.7). Please note that multiple entries can be updated at once by
+ setting the appropriate Mask bits. The bit values for this purpose are defined
+ in Section 3.2.2. 
+ \n \b Fields 
+ \li u long Mask - Bit values determining which fields are to be affected by the
+ update operation. 
+ \li char name[] - The volume name, up to MAXNAMELEN (65) characters including
+ the trailing null. 
+ \li long volumeType - The volume type. 
+ \li long flags - This field is used in conjuction with Mask (in fact, one of
+ the Mask bits determines if this field is valid) to choose the valid fields in
+ this record. 
+ \li u long ReadOnlyId - The read-only ID. 
+ \li u long BackupId - The backup ID. 
+ \li long cloneId - The clone ID. 
+ \li long nModifiedRepsites - Number of replication sites whose entry is to be
+ changed as below. 
+ \li u long RepsitesMask[] - Array of bit masks applying to the up to
+ MAXNSERVERS (8) replication sites involved. 
+ \li long RepsitesTargetServer[] - Array of target servers for the operation, at
+ most MAXNSERVERS (8) of them. 
+ \li long RepsitesTargetPart[] - Array of target server partitions for the
+ operation, at most MAXNSERVERS (8) of them. 
+ \li long RepsitesNewServer[] - Array of new server sites, at most MAXNSERVERS
+ (8) of them. 
+ \li long RepsitesNewPart[] - Array of new server partitions for the operation,
+ at most MAXNSERVERS (8) of them. 
+ \li long RepsitesNewFlags[] - Flags applying to each of the new sites, at most
+ MAXNSERVERS (8) of them. 
+ 
+ 	\subsection sec3-3-6 Section 3.3.6: struct VldbListByAttributes 
+ 
+ \par
+ This structure is used by the VL ListAttributes() routine (see Section 3.6.11). 
+ \n \b Fields 
+ \li u long Mask - Bit mask used to select the following attribute fields on
+ which to match. 
+ \li long server - The server address to match. 
+ \li long partition - The partition ID to match. 
+ \li long volumetype - The volume type to match. 
+ \li long volumeid - The volume ID to match. 
+ \li long flag - Flags concerning these values. 
+ 
+ 	\subsection sec3-3-7 Section 3.3.7: struct single vldbentry 
+ 
+ \par
+ This structure is used to construct the vldblist object (See Section 3.3.12),
+ which basically generates a queueable (singly-linked) version of struct
+ vldbentry. 
+ \n \b Fields 
+ \li vldbentry VldbEntry - The VLDB entry to be queued. 
+ \li vldblist next vldb - The next pointer in the list. 
+ 
+ 	\subsection sec3-3-8 Section 3.3.8: struct vldb list 
+ 
+ \par
+ This structure defines the item returned in linked list form from the VL
+ LinkedList() function (see Section 3.6.12). This same object is also returned
+ in bulk form in calls to the VL ListAttributes() routine (see Section 3.6.11). 
+ \n \b Fields 
+ \li vldblist node - The body of the first object in the linked list. 
+ 
+ 	\subsection sec3-3-9 Section 3.3.9: struct vldstats 
+ 
+ \par
+ This structure defines fields to record statistics on opcode hit frequency. The
+ MAX NUMBER OPCODES constant has been defined as the maximum number of opcodes
+ supported by this structure, and is set to 30. 
+ \n \b Fields 
+ \li unsigned long start time - Clock time when opcode statistics were last
+ cleared. 
+ \li long requests[] - Number of requests received for each of the MAX NUMBER
+ OPCODES opcode types. 
+ \li long aborts[] - Number of aborts experienced for each of the MAX NUMBER
+ OPCODES opcode types. 
+ \li long reserved[] - These five longword fields are reserved for future use. 
+ 
+ 	\subsection sec3-3-10 Section 3.3.10: bulk 
+ 
+ \code
+ typedef opaque bulk<DEFAULTBULK>; 
+ \endcode
+ \par
+ This typedef may be used to transfer an uninterpreted set of bytes across the
+ Volume Location Server interface. It may carry up to DEFAULTBULK (10,000)
+ bytes. 
+ \n \b Fields 
+ \li bulk len - The number of bytes contained within the data pointed to by the
+ next field. 
+ \li bulk val - A pointer to a sequence of bulk len bytes. 
+ 
+ 	\subsection sec3-3-11 Section 3.3.11: bulkentries 
+ 
+ \code
+ typedef vldbentry bulkentries<>; 
+ \endcode
+ \par
+ This typedef is used to transfer an unbounded number of struct vldbentry
+ objects. It appears in the parameter list for the VL ListAttributes() interface
+ function. 
+ \n \b Fields 
+ \li bulkentries len - The number of vldbentry structures contained within the
+ data pointed to by the next field. 
+ \li bulkentries val - A pointer to a sequence of bulkentries len vldbentry
+ structures. 
+ 
+ 	\subsection sec3-3-12 Section 3.3.12: vldblist 
+ 
+ \code
+ typedef struct single_vldbentry *vldblist; 
+ \endcode
+ \par
+ This typedef defines a queueable struct vldbentry object, referenced by the
+ single vldbentry typedef as well as struct vldb list. 
+ 
+ 	\subsection sec3-3-13 Section 3.3.13: vlheader 
+ 
+ \code
+ typedef struct vlheader vlheader; 
+ \endcode
+ \par
+ This typedef provides a short name for objects of type struct vlheader (see
+ Section 3.3.4). 
+ 
+ 	\subsection sec3-3-14 Section 3.3.14: vlentry 
+ 
+ \code
+ typedef struct vlentry vlentry; 
+ \endcode
+ \par
+ This typedef provides a short name for objects of type struct vlentry (see
+ Section 3.3.2). 
+ 
+ 	\section sec3-4 Section 3.4: Error Codes 
+ 
+ \par
+ This section covers the set of error codes exported by the Volume Location
+ Server, displaying the printable phrases with which they are associated. 
+ 
+ \par Name
+ VL IDEXIST
+ \par Value
+ (363520L)
+ \par Description
+ Volume Id entry exists in vl database.
+ 
+ \par Name
+ VL IO
+ \par Value
+ (363521L)
+ \par Description
+ I/O related error.
+ 
+ \par Name
+ VL NAMEEXIST
+ \par Value
+ (363522L)
+ \par Description
+ Volume name entry exists in vl database.
+ 
+ \par Name
+ VL CREATEFAIL
+ \par Value
+ (363523L)
+ \par Description
+ Internal creation failure.
+ 
+ \par Name
+ VL NOENT
+ \par Value
+ (363524L)
+ \par Description
+ No such entry.
+ 
+ \par Name
+ VL EMPTY
+ \par Value
+ (363525L)
+ \par Description
+ Vl database is empty.
+ 
+ \par Name
+ VL ENTDELETED
+ \par Value
+ (363526L)
+ \par Description
+ Entry is deleted (soft delete).
+ 
+ \par Name
+ VL BADNAME
+ \par Value
+ (363527L)
+ \par Description
+ Volume name is illegal.
+ 
+ \par Name
+ VL BADINDEX
+ \par Value
+ (363528L)
+ \par Description
+ Index is out of range.
+ 
+ \par Name
+ VL BADVOLTYPE
+ \par Value
+ (363529L)
+ \par Description
+ Bad volume range.
+ 
+ \par Name
+ VL BADSERVER
+ \par Value
+ (363530L)
+ \par Description
+ Illegal server number (out of range).
+ 
+ \par Name
+ VL BADPARTITION
+ \par Value
+ (363531L)
+ \par Description
+ Bad partition number.
+ 
+ \par Name
+ VL REPSFULL
+ \par Value
+ (363532L)
+ \par Description
+ Run out of space for Replication sites.
+ 
+ \par Name
+ VL NOREPSERVER
+ \par Value
+ (363533L)
+ \par Description
+ No such Replication server site exists.
+ 
+ \par Name
+ VL DUPREPSERVER
+ \par Value
+ (363534L)
+ \par Description
+ Replication site already exists.
+ 
+ \par Name
+ RL RWNOTFOUND
+ \par Value
+ (363535L)
+ \par Description
+ Parent R/W entry not found.
+ 
+ \par Name
+ VL BADREFCOUNT
+ \par Value
+ (363536L)
+ \par Description
+ Illegal Reference Count number.
+ 
+ \par Name
+ VL SIZEEXCEEDED
+ \par Value
+ (363537L)
+ \par Description
+ Vl size for attributes exceeded.
+ 
+ \par Name
+ VL BADENTRY
+ \par Value
+ (363538L)
+ \par Description
+ Bad incoming vl entry.
+ 
+ \par Name
+ VL BADVOLIDBUMP
+ \par Value
+ (363539L)
+ \par Description
+ Illegal max volid increment.
+ 
+ \par Name
+ VL IDALREADYHASHED
+ \par Value
+ (363540L)
+ \par Description
+ RO/BACK id already hashed.
+ 
+ \par Name
+ VL ENTRYLOCKED
+ \par Value
+ (363541L)
+ \par Description
+ Vl entry is already locked.
+ 
+ \par Name
+ VL BADVOLOPER
+ \par Value
+ (363542L)
+ \par Description
+ Bad volume operation code.
+ 
+ \par Name
+ VL BADRELLOCKTYPE
+ \par Value
+ (363543L)
+ \par Description
+ Bad release lock type.
+ 
+ \par Name
+ VL RERELEASE
+ \par Value
+ (363544L)
+ \par Description
+ Status report: last release was aborted.
+ 
+ \par Name
+ VL BADSERVERFLAG
+ \par Value
+ (363545L)
+ \par Description
+ Invalid replication site server flag.
+ 
+ \par Name
+ VL PERM
+ \par Value
+ (363546L)
+ \par Description
+ No permission access.
+ 
+ \par Name
+ VL NOMEM
+ \par Value
+ (363547L) 
+ \par Description
+ malloc(realloc) failed to alloc enough memory. 
+ 
+ 	\section sec3-5 Section 3.5: Macros 
+ 
+ \par
+ The Volume Location Server defines a small number of macros, as described in
+ this section. They are used to update the internal statistics variables and to
+ compute offsets into character strings. All of these macros really refer to
+ internal operations, and strictly speaking should not be exposed in this
+ interface. 
+ 
+ 	\subsection sec3-5-1 Section 3.5.1: COUNT REQ() 
+ 
+ \code
+ #define COUNT_REQ(op) 
+ static int this_op = op-VL_LOWEST_OPCODE; 
+ dynamic_statistics.requests[this_op]++ 
+ \endcode
+ \par
+ Bump the appropriate entry in the variable maintaining opcode usage statistics
+ for the Volume Location Server. Note that a static variable is set up to record
+ this op, namely the index into the opcode monitoring array. This static
+ variable is used by the related COUNT ABO() macro defined below. 
+ 
+ 	\subsection sec3-5-2 Section 3.5.2: COUNT ABO() 
+ 
+ \code
+ #define COUNT_ABO dynamic_statistics.aborts[this_op]++ 
+ \endcode
+ \par
+ Bump the appropriate entry in the variable maintaining opcode abort statistics
+ for the Volume Location Server. Note that this macro does not take any
+ arguemnts. It expects to find a this op variable in its environment, and thus
+ depends on its related macro, COUNT REQ() to define that variable. 
+ 
+ 	\subsection sec3-5-3 Section 3.5.3: DOFFSET() 
+ 
+ \code
+ #define DOFFSET(abase, astr, aitem) ((abase)+(((char *)(aitem)) -((char
+ *)(astr)))) 
+ \endcode
+ \par
+ Compute the byte offset of charcter object aitem within the enclosing object
+ astr, also expressed as a character-based object, then offset the resulting
+ address by abase. This macro is used ot compute locations within the VLDB when
+ actually writing out information. 
+ 
+ 	\section sec3-6 Section 3.6: Functions 
+ 
+ \par
+ This section covers the Volume Location Server RPC interface routines. The
+ majority of them are generated from the vldbint.xg Rxgen file, and are meant to
+ be used by user-space agents. There is also a subset interface definition
+ provided in the afsvlint.xg Rxgen file. These routines, described in Section
+ 3.7, are meant to be used by a kernel-space agent when dealing with the Volume
+ Location Server; in particular, they are called by the Cache Manager. 
+ 
+ 	\subsection sec3-6-1 Section 3.6.1: VL CreateEntry - Create a VLDB
+ entry 
+ 
+ \code
+ int VL CreateEntry(IN struct rx connection *z conn, 
+ 			IN vldbentry *newentry) 
+ \endcode
+ \par Description
+ This function creates a new entry in the VLDB, as specified in the newentry
+ argument. Both the name and numerical ID of the new volume must be unique
+ (e.g., it must not already appear in the VLDB). For non-read-write entries, the
+ read-write parent volume is accessed so that its reference count can be
+ updated, and the new entry is added to the parent's chain of associated
+ entries. 
+ The VLDB is write-locked for the duration of this operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. VL NAMEEXIST The
+ volume name already appears in the VLDB. VL CREATEFAIL Space for the new entry
+ cannot be allocated within the VLDB. VL BADNAME The volume name is invalid. VL
+ BADVOLTYPE The volume type is invalid. VL BADSERVER The indicated server
+ information is invalid. VL BADPARTITION The indicated partition information is
+ invalid. VL BADSERVERFLAG The server flag field is invalid. VL IO An error
+ occurred while writing to the VLDB. 
+ 
+ 	\subsection sec3-6-2 Section 3.6.2: VL DeleteEntry - Delete a VLDB
+ entry 
+ 
+ \code
+ int VL DeleteEntry(IN struct rx connection *z conn, 
+ 			IN long Volid, 	
+ 			IN long voltype) 	
+ \endcode
+ \par Description 
+ Delete the entry matching the given volume identifier and volume type as
+ specified in the Volid and voltype arguments. For a read-write entry whose
+ reference count is greater than 1, the entry is not actually deleted, since at
+ least one child (read-only or backup) volume still depends on it. For cases of
+ non-read-write volumes, the parent's reference count and associated chains are
+ updated. 
+ \par
+ If the associated VLDB entry is already marked as deleted (i.e., its flags
+ field has the VLDELETED bit set), then no further action is taken, and VL
+ ENTDELETED is returned. The VLDB is write-locked for the duration of this
+ operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. VL BADVOLTYPE An
+ illegal volume type has been specified by the voltype argument. VL NOENT This
+ volume instance does not appear in the VLDB. VL ENTDELETED The given VLDB entry
+ has already been marked as deleted. VL IO An error occurred while writing to
+ the VLDB. 
+ 
+ 	\subsection sec3-6-3 Section 3.6.3: VL GetEntryByID - Get VLDB entry by
+ volume ID/type 
+ 
+ \code
+ int VL GetEntryByID(IN struct rx connection *z conn, IN long Volid, IN long
+ voltype, OUT vldbentry *entry) 
+ \endcode
+ \par Description 
+ Given a volume's numerical identifier (Volid) and type (voltype), return a
+ pointer to the entry in the VLDB describing the given volume instance. 
+ \par
+ The VLDB is read-locked for the duration of this operation. 
+ \par Error Codes 
+ VL BADVOLTYPE An illegal volume type has been specified by the voltype
+ argument. 
+ \n VL NOENT This volume instance does not appear in the VLDB. 
+ \n VL ENTDELETED The given VLDB entry has already been marked as deleted. 
+ 
+ 	\subsection sec3-6-4 Section 3.6.4: VL GetEntryByName - Get VLDB entry
+ by volume name 
+ 
+ \code
+ int VL GetEntryByName(IN struct rx connection *z conn, 
+ 			IN char *volumename, 
+ 			OUT vldbentry *entry) 
+ \endcode
+ \par Description 
+ Given the volume name in the volumename parameter, return a pointer to the
+ entry in the VLDB describing the given volume. The name in volumename may be no
+ longer than MAXNAMELEN (65) characters, including the trailing null. Note that
+ it is legal to use the volume's numerical identifier (in string form) as the
+ volume name. 
+ \par
+ The VLDB is read-locked for the duration of this operation. 
+ \par
+ This function is closely related to the VL GetEntryByID() routine, as might be
+ expected. In fact, the by-ID routine is called if the volume name provided in
+ volumename is the string version of the volume's numerical identifier. 
+ \par Error Codes 
+ VL BADVOLTYPE An illegal volume type has been specified by the voltype
+ argument. 
+ \n VL NOENT This volume instance does not appear in the VLDB. 
+ \n VL ENTDELETED The given VLDB entry has already been marked as deleted. 
+ \n VL BADNAME The volume name is invalid. 
+ 
+ 	\subsection sec3-6-5 Section 3.6.5: VL GetNewVolumeId - Generate a new
+ volume ID 
+ 
+ \code
+ int VL GetNewVolumeId(IN struct rx connection *z conn, 
+ 			IN long bumpcount, 
+ 			OUT long *newvolumid) 
+ \endcode
+ \par Description 
+ Acquire bumpcount unused, consecutively-numbered volume identifiers from the
+ Volume Location Server. The lowest-numbered of the newly-acquired set is placed
+ in the newvolumid argument. The largest number of volume IDs that may be
+ generated with any one call is bounded by the MAXBUMPCOUNT constant defined in
+ Section 3.2.1. Currently, there is (effectively) no restriction on the number
+ of volume identifiers that may thus be reserved in a single call. 
+ \par
+ The VLDB is write-locked for the duration of this operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. 
+ \n VL BADVOLIDBUMP The value of the bumpcount parameter exceeds the system
+ limit of MAXBUMPCOUNT. 
+ \n VL IO An error occurred while writing to the VLDB. 
+ 
+ 	\subsection sec3-6-6 Section 3.6.6: VL ReplaceEntry - Replace entire
+ contents of VLDB entry 
+ 
+ \code
+ int VL ReplaceEntry(IN struct rx connection *z conn, 
+ 			IN long Volid, 
+ 			IN long voltype, 
+ 			IN vldbentry *newentry, 
+ 			IN long ReleaseType) 
+ \endcode
+ \par Description 
+ Perform a wholesale replacement of the VLDB entry corresponding to the volume
+ instance whose identifier is Volid and type voltype with the information
+ contained in the newentry argument. Individual VLDB entry fields cannot be
+ selectively changed while the others are preserved; VL UpdateEntry() should be
+ used for this objective. The permissible values for the ReleaseType parameter
+ are defined in Section 3.2.7. 
+ \par
+ The VLDB is write-locked for the duration of this operation. All of the hash
+ tables impacted are brought up to date to incorporate the new information. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. 
+ \n VL BADVOLTYPE An illegal volume type has been specified by the voltype
+ argument. 
+ \n VL BADRELLOCKTYPE An illegal release lock has been specified by the
+ ReleaseType argument. 
+ \n VL NOENT This volume instance does not appear in the VLDB. 
+ \n VL BADENTRY An attempt was made to change a read-write volume ID. 
+ \n VL IO An error occurred while writing to the VLDB. 
+ 
+ 	\subsection sec3-6-7 Section 3.6.7: VL UpdateEntry - Update contents of
+ VLDB entry 
+ 
+ \code
+ int VL UpdateEntry(IN struct rx connection *z conn, 
+ 			IN long Volid, 
+ 			IN long voltype, 
+ 			IN VldbUpdateEntry *UpdateEntry, 
+ 			IN long ReleaseType) 
+ \endcode
+ \par Description 
+ Update the VLDB entry corresponding to the volume instance whose identifier is
+ Volid and type voltype with the information contained in the UpdateEntry
+ argument. Most of the entry's fields can be modified in a single call to VL
+ UpdateEntry(). The Mask field within the UpdateEntry parameter selects the
+ fields to update with the values stored within the other UpdateEntry fields.
+ Permissible values for the ReleaseType parameter are defined in Section 3.2.7. 
+ \par
+ The VLDB is write-locked for the duration of this operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. 
+ \n VL BADVOLTYPE An illegal volume type has been specified by the voltype
+ argument. 
+ \n VL BADRELLOCKTYPE An illegal release lock has been specified by the
+ ReleaseType argument. 
+ \n VL NOENT This volume instance does not appear in the VLDB. 
+ \n VL IO An error occurred while writing to the VLDB. 
+ 
+ 	\subsection sec3-6-8 Section 3.6.8: VL SetLock - Lock VLDB entry 
+ 
+ \code
+ int VL SetLock(IN struct rx connection *z conn, 
+ 		IN long Volid, 	
+ 		IN long voltype, 	
+ 		IN long voloper) 	
+ \endcode
+ \par Description 
+ Lock the VLDB entry matching the given volume ID (Volid) and type (voltype) for
+ volume operation voloper (e.g., VLOP MOVE and VLOP RELEASE). If the entry is
+ currently unlocked, then its LockTimestamp will be zero. If the lock is
+ obtained, the given voloper is stamped into the flags field, and the
+ LockTimestamp is set to the time of the call. 
+ \Note 
+ When the caller attempts to lock the entry for a release operation, special
+ care is taken to abort the operation if the entry has already been locked for
+ this operation, and the existing lock has timed out. In this case, VL SetLock()
+ returns VL RERELEASE. 
+ \par
+ The VLDB is write-locked for the duration of this operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. 
+ \n VL BADVOLTYPE An illegal volume type has been specified by the voltype
+ argument. 
+ \n VL BADVOLOPER An illegal volume operation was specified in the voloper
+ argument.  Legal values are defined in the latter part of the table in Section
+ 3.2.5. 
+ \n VL ENTDELETED The given VLDB entry has already been marked as deleted. 
+ \n VL ENTRYLOCKED The given VLDB entry has already been locked (which has not
+ yet timed out). 
+ \n VL RERELEASE A VLDB entry locked for release has timed out, and the caller
+ also wanted to perform a release operation on it. 
+ \n VL IO An error was experienced while attempting to write to the VLDB. 
+ 
+ 	\subsection sec3-6-9 Section 3.6.9: VL ReleaseLock - Unlock VLDB entry 
+ 
+ \code
+ int VL ReleaseLock(IN struct rx connection *z conn, 
+ 			IN long Volid, 	
+ 			IN long voltype, 	
+ 			IN long ReleaseType) 	
+ \endcode
+ \par Description 
+ Unlock the VLDB entry matching the given volume ID (Volid) and type (voltype).
+ The ReleaseType argument determines which VLDB entry fields from flags and
+ LockAfsId will be cleared along with the lock timestamp in LockTimestamp.
+ Permissible values for the ReleaseType parameter are defined in Section 3.2.7. 
+ \par
+ The VLDB is write-locked for the duration of this operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. 
+ \n VL BADVOLTYPE An illegal volume type has been specified by the voltype
+ argument. 
+ \n VL BADRELLOCKTYPE An illegal release lock has been specified by the
+ ReleaseType argument. 
+ \n VL NOENT This volume instance does not appear in the VLDB. 
+ \n VL ENTDELETED The given VLDB entry has already been marked as deleted. 
+ \n VL IO An error was experienced while attempting to write to the VLDB. 
+ 
+ 	\subsection sec3-6-10 Section 3.6.10: VL ListEntry - Get contents of
+ VLDB via index 
+ 
+ \code
+ int VL ListEntry(IN struct rx connection *z conn, 
+ 			IN long previous index, 
+ 			OUT long *count, 
+ 			OUT long *next index, 
+ 			OUT vldbentry *entry) 
+ \endcode
+ \par Description 
+ This function assists in the task of enumerating the contents of the VLDB.
+ Given an index into the database, previous index, this call return the single
+ VLDB entry at that offset, placing it in the entry argument. The number of VLDB
+ entries left to list is placed in count, and the index of the next entry to
+ request is returned in next index. If an illegal index is provided, count is
+ set to -1. 
+ \par
+ The VLDB is read-locked for the duration of this operation. 
+ \par Error Codes 
+ ---None. 
+ 
+ 	\subsection sec3-6-11 Section 3.6.11: VL ListAttributes - List all VLDB
+ entry matching given attributes, single return object 
+ 
+ \code
+ int VL ListAttributes(IN struct rx connection *z conn, 
+ 			IN VldbListByAttributes *attributes, 
+ 			OUT long *nentries, 
+ 			OUT bulkentries *blkentries) 
+ \endcode
+ \par Description 
+ Retrieve all the VLDB entries that match the attributes listed in the
+ attributes parameter, placing them in the blkentries object. The number of
+ matching entries is placed in nentries. Matching can be done by server number,
+ partition, volume type, flag, or volume ID. The legal values to use in the
+ attributes argument are listed in Section 3.2.3. Note that if the VLLIST
+ VOLUMEID bit is set in attributes, all other bit values are ignored and the
+ volume ID provided is the sole search criterion. 
+ \par
+ The VLDB is read-locked for the duration of this operation. 
+ \par
+ Note that VL ListAttributes() is a potentially expensive function, as
+ sequential search through all of the VLDB entries is performed in most cases. 
+ \par Error Codes 
+ VL NOMEM Memory for the blkentries object could not be allocated. 
+ \n VL NOENT This specified volume instance does not appear in the VLDB. 
+ \n VL SIZEEXCEEDED Ran out of room in the blkentries object. 
+ \n VL IO Error while reading from the VLDB. 
+ 
+ 	\subsection sec3-6-12 Section 3.6.12: VL LinkedList - List all VLDB
+ entry matching given attributes, linked list return object 
+ 
+ \code
+ int VL LinkedList(IN struct rx connection *z conn, 
+ 			IN VldbListByAttributes *attributes, 
+ 			OUT long *nentries, 
+ 			OUT vldb list *linkedentries) 
+ \endcode
+ \par Description 
+ Retrieve all the VLDB entries that match the attributes listed in the
+ attributes parameter, creating a linked list of entries based in the
+ linkedentries object. The number of matching entries is placed in nentries.
+ Matching can be done by server number, partition, volume type, flag, or volume
+ ID. The legal values to use in the attributes argument are listed in Section
+ 3.2.3. Note that if the VLLIST VOLUMEID bit is set in attributes, all other bit
+ values are ignored and the volume ID provided is the sole search criterion. 
+ \par
+ The VL LinkedList() function is identical to the VL ListAttributes(), except
+ for the method of delivering the VLDB entries to the caller. 
+ \par
+ The VLDB is read-locked for the duration of this operation. 
+ \par Error Codes 
+ VL NOMEM Memory for an entry in the list based at linkedentries object could
+ not be allocated. 
+ \n VL NOENT This specified volume instance does not appear in the VLDB. 
+ \n VL SIZEEXCEEDED Ran out of room in the current list object. 
+ \n VL IO Error while reading from the VLDB. 
+ 
+ 	\subsection sec3-6-13 Section 3.6.13: VL GetStats - Get Volume Location
+ Server statistics 
+ 
+ \code
+ int VL GetStats(IN struct rx connection *z conn, 
+ 		OUT vldstats *stats, 
+ 		OUT vital vlheader *vital header) 
+ \endcode
+ \par Description
+ Collect the different types of VLDB statistics. Part of the VLDB header is
+ returned in vital header, which includes such information as the number of
+ allocations and frees performed, and the next volume ID to be allocated. The
+ dynamic per-operation stats are returned in the stats argument, reporting the
+ number and types of operations and aborts. 
+ \par
+ The VLDB is read-locked for the duration of this operation. 
+ \par Error Codes 
+ VL PERM The caller is not authorized to execute this function. 
+ 
+ 	\subsection sec3-6-14 Section 3.6.14: VL Probe - Verify Volume Location
+ Server connectivity/status 
+ 
+ \code
+ int VL Probe(IN struct rx connection *z conn) 
+ \endcode
+ \par Description 
+ This routine serves a 'pinging' function to determine whether the Volume
+ Location Server is still running. If this call succeeds, then the Volume
+ Location Server is shown to be capable of responding to RPCs, thus confirming
+ connectivity and basic operation. 
+ \par
+ The VLDB is not locked for this operation. 
+ \par Error Codes 
+ ---None. 
+ 
+ 	\section sec3-7 Section 3.7: Kernel Interface Subset 
+ 
+ \par
+ The interface described by this document so far applies to user-level clients,
+ such as the vos utility. However, some volume location operations must be
+ performed from within the kernel. Specifically, the Cache Manager must find out
+ where volumes reside and otherwise gather information about them in order to
+ conduct its business with the File Servers holding them. In order to support
+ Volume Location Server interconnection for agents operating within the kernel,
+ the afsvlint.xg Rxgen interface was built. It is a minimal subset of the
+ user-level vldbint.xg definition. Within afsvlint.xg, there are duplicate
+ definitions for such constants as MAXNAMELEN, MAXNSERVERS, MAXTYPES, VLF
+ RWEXISTS, VLF ROEXISTS, VLF BACKEXISTS, VLSF NEWREPSITE, VLSF ROVOL, VLSF
+ RWVOL, and VLSF BACKVOL. Since the only operations the Cache Manager must
+ perform are volume location given a specific volume ID or name, and to find out
+ about unresponsive Volume Location Servers, the following interface routines
+ are duplicated in afsvlint.xg, along with the struct vldbentry declaration: 
+ \li VL GetEntryByID() 
+ \li VL GetEntryByName() 
+ \li VL Probe() 
+ 
+ 	\page chap4 Chapter 4: Volume Server Architecture 
+ 
+ 	\section sec4-1 Section 4.1: Introduction 
+ 
+ \par
+ The Volume Server allows administrative tasks and probes to be performed on the
+ set of AFS volumes residing on the machine on which it is running. As described
+ in Chapter 2, a distributed database holding volume location info, the VLDB, is
+ used by client applications to locate these volumes. Volume Server functions
+ are typically invoked either directly from authorized users via the vos utility
+ or by the AFS backup system. 
+ \par
+ This chapter briefly discusses various aspects of the Volume Server's
+ architecture. First, the high-level on-disk representation of volumes is
+ covered. Then, the transactions used in conjuction with volume operations are
+ examined. Then, the program implementing the Volume Server, volserver, is
+ considered. The nature and format of the log file kept by the Volume Server
+ rounds out the description. 
+ As with all AFS servers, the Volume Server uses the Rx remote procedure call
+ package for communication with its clients. 
+ 
+ 	\section sec4-2 Section 4.2: Disk Representation 
+ 
+ \par
+ For each volume on an AFS partition, there exists a file visible in the unix
+ name space which describes the contents of that volume. By convention, each of
+ these files is named by concatenating a prefix string, "V", the numerical
+ volume ID, and the postfix string ".vol". Thus, file V0536870918.vol describes
+ the volume whose numerical ID is 0536870918. Internally, each per-volume
+ descriptor file has such fields as a version number, the numerical volume ID,
+ and the numerical parent ID (useful for read-only or backup volumes). It also
+ has a list of related inodes, namely files which are not visible from the unix
+ name space (i.e., they do not appear as entries in any unix directory object).
+ The set of important related inodes are: 
+ \li Volume info inode: This field identifies the inode which hosts the on-disk
+ representation of the volume's header. It is very similar to the information
+ pointed to by the volume field of the struct volser trans defined in Section
+ 5.4.1, recording important status information for the volume. 
+ \li Large vnode index inode: This field identifies the inode which holds the
+ list of vnode identifiers for all directory objects residing within the volume.
+ These are "large" since they must also hold the Access Control List (ACL)
+ information for the given AFS directory. 
+ \li Small vnode index inode: This field identifies the inode which holds the
+ list of vnode identifiers for all non-directory objects hosted by the volume. 
+ \par
+ All of the actual files and directories residing within an AFS volume, as
+ identified by the contents of the large and small vnode index inodes, are also
+ free-floating inodes, not appearing in the conventional unix name space. This
+ is the reason the vendor-supplied fsck program should not be run on partitions
+ containing AFS volumes. Since the inodes making up AFS files and directories,
+ as well as the inodes serving as volume indices for them, are not mapped to any
+ directory, the standard fsck program would throw away all of these
+ "unreferenced" inodes. Thus, a special version of fsck is provided that
+ recognizes partitions containing AFS volumes as well as standard unix
+ partitions. 
+ 
+ 	\section sec4-3 Section 4.3: Transactions 
+ 
+ \par
+ Each individual volume operation is carried out by the Volume Server as a
+ transaction, but not in the atomic sense of the word. Logically, creating a
+ Volume Server transaction can be equated with performing an "exclusive open" on
+ the given volume before beginning the actual work of the desired volume
+ operation. No other Volume Server (or File Server) operation is allowed on the
+ opened volume until the transaction is terminated. Thus, transactions in the
+ context of the Volume Server serve to provide mutual exclusion without any of
+ the normal atomicity guarantees. Volumes maintain enough internal state to
+ enable recovery from interrupted or failed operations via use of the salvager
+ program. Whenever volume inconsistencies are detected, this salvager program is
+ run, which then attempts to correct the problem. 
+ \par
+ Volume transactions have timeouts associated with them. This guarantees that
+ the death of the agent performing a given volume operation cannot result in the
+ volume being permanently removed from circulation. There are actually two
+ timeout periods defined for a volume transaction. The first is the warning
+ time, defined to be 5 minutes. If a transaction lasts for more than this time
+ period without making progress, the Volume Server prints a warning message to
+ its log file (see Section 4.5). The second time value associated with a volume
+ transaction is the hard timeout, defined to occur 10 minutes after any progress
+ has been made on the given operation. After this period, the transaction will
+ be unconditionally deleted, and the volume freed for any other operations.
+ Transactions are reference-counted. Progress will be deemed to have occurred
+ for a transaction, and its internal timeclock field will be updated, when: 
+ \li 1 The transaction is first created. 
+ \li 2 A reference is made to the transaction, causing the Volume Server to look
+ it up in its internal tables. 
+ \li 3 The transaction's reference count is decremented. 
+ 
+ 	\section sec4-4 Section 4.4: The volserver Process 
+ 
+ \par
+ The volserver user-level program is run on every AFS server machine, and
+ implements the Volume Server agent. It is responsible for providing the Volume
+ Server interface as defined by the volint.xg Rxgen file. 
+ \par
+ The volserver process defines and launches five threads to perform the bulk of
+ its duties. One thread implements a background daemon whose job it is to
+ garbage-collect timed-out transaction structures. The other four threads are
+ RPC interface listeners, primed to accept remote procedure calls and thus
+ perform the defined set of volume operations. 
+ \par
+ Certain non-standard configuration settings are made for the RPC subsystem by
+ the volserver program. For example, it chooses to extend the length of time
+ that an Rx connection may remain idle from the default 12 seconds to 120
+ seconds. The reasoning here is that certain volume operations may take longer
+ than 12 seconds of processing time on the server, and thus the default setting
+ for the connection timeout value would incorrectly terminate an RPC when in
+ fact it was proceeding normally and correctly. 
+ \par
+ The volserver program takes a single, optional command line argument. If a
+ positive integer value is provided on the command line, then it shall be used
+ to set the debugging level within the Volume Server. By default, a value of
+ zero is used, specifying that no special debugging output will be generated and
+ fed to the Volume Server log file described below. 
+ 
+ 	\section sec4-5 Section 4.5: Log File 
+ 
+ \par
+ The Volume Server keeps a log file, recording the set of events of special
+ interest it has encountered. The file is named VolserLog, and is stored in the
+ /usr/afs/logs directory on the local disk of the server machine on which the
+ Volume Server runs. This is a human-readable file, with every entry
+ time-stamped. 
+ \par
+ Whenever the volserver program restarts, it renames the current VolserLog file
+ to VolserLog.old, and starts up a fresh log. A properly-authorized individual
+ can easily inspect the log file residing on any given server machine. This is
+ made possible by the BOS Server AFS agent running on the machine, which allows
+ the contents of this file to be fetched and displayed on the caller's machine
+ via the bos getlog command. 
+ \par
+ An excerpt from a Volume Server log file follows below. The numbers appearing
+ in square brackets at the beginning of each line have been inserted so that we
+ may reference the individual lines of the log excerpt in the following
+ paragraph. 
+ \code
+ [1] Wed May 8 06:03:00 1991 AttachVolume: Error attaching volume
+ /vicepd/V1969547815.vol; volume needs salvage 
+ [2] Wed May 8 06:03:01 1991 Volser: ListVolumes: Could not attach volume
+ 1969547815 
+ [3] Wed May 8 07:36:13 1991 Volser: Clone: Cloning volume 1969541499 to new
+ volume 1969541501 
+ [4] Wed May 8 11:25:05 1991 AttachVolume: Cannot read volume header
+ /vicepd/V1969547415.vol 
+ [5] Wed May 8 11:25:06 1991 Volser: CreateVolume: volume 1969547415
+ (bld.dce.s3.dv.pmax_ul3) created 
+ \endcode
+ \par
+ Line [1] indicates that the volume whose numerical ID is 1969547815 could not
+ be attached on partition /vicepd. This error is probably the result of an
+ aborted transaction which left the volume in an inconsistent state, or by
+ actual damage to the volume structure or data. In this case, the Volume Server
+ recommends that the salvager program be run on this volume to restore its
+ integrity. Line [2] records the operation which revealed this situation, namely
+ the invocation of an AFSVolListVolumes() RPC. 
+ \par
+ Line [4] reveals that the volume header file for a specific volume could not be
+ read. Line [5], as with line [2] in the above paragraph, indicates why this is
+ true. Someone had called the AFSVolCreateVolume() interface function, and as a
+ precaution, the Volume Server first checked to see if such a volume was already
+ present by attempting to read its header. 
+ \par
+ Thus verifying that the volume did not previously exist, the Volume Server
+ allowed the AFSVolCreateVolume() call to continue its processing, creating and
+ initializing the proper volume file, V1969547415.vol, and the associated header
+ and index inodes. 
+ 
+ 	\page chap5 Chapter 5: Volume Server Interface 
+ 
+ 	\section sec5-1 Section 5.1 Introduction 
+ 
+ \par
+ This chapter documents the API for the Volume Server facility, as defined by
+ the volint.xg Rxgen interface file and the volser.h include file. Descriptions
+ of all the constants, structures, macros, and interface functions available to
+ the application programmer appear here. 
+ 
+ 	\section sec5-2 Section 5.2: Constants 
+ 
+ \par
+ This section covers the basic constant definitions of interest to the Volume
+ Server application programmer. These definitions appear in the volint.h file,
+ automatically generated from the volint.xg Rxgen interface file, and in
+ volser.h. 
+ \par
+ Each subsection is devoted to describing the constants falling into the
+ following categories: 
+ \li Configuration and boundary values 
+ \li Interface routine opcodes 
+ \li Transaction Flags 
+ \li Volume Types 
+ \li LWP State 
+ \li States for struct vldbentry 
+ \li Validity Checks 
+ \li Miscellaneous 
+ 
+ 	\subsection sec5-2-1 Section 5.2.1: Configuration and Boundary Values 
+ 
+ \par
+ These constants define some basic system configuration values, along with such
+ things as maximum sizes of important arrays. 
+ 
+ MyPort 	5,003 	The Rx UDP port on which the Volume Server service may be
+ found. 
+ \par Name
+ NameLen 	
+ \par Value
+ 80 	
+ \par Description
+ Used by the vos utility to define maximum lengths for internal filename
+ variables. 
+ 
+ \par Name
+ VLDB MAXSERVERS 	
+ \par Value
+ 10 	
+ \par Description
+ Maximum number of server agents implementing the AFS Volume Location Database
+ (VLDB) for the cell. 
+ 
+ \par Name
+ VOLSERVICE ID 	
+ \par Value
+ 4 	
+ \par Description
+ The Rx service number on the given UDP port (MyPort) above. 
+ 
+ \par Name
+ INVALID BID 	
+ \par Value
+ 0 	
+ \par Description
+ Used as an invalid read-only or backup volume ID. 
+ 
+ \par Name
+ VOLSER MAXVOLNAME 	
+ \par Value
+ 65 	
+ \par Description
+ The number of characters in the longest possible volume name, including the
+ trailing null. Note: this is only used by the vos utility; the Volume Server
+ uses the "old" value below. 
+ 
+ \par Name
+ VOLSER OLDMAXVOLNAME 	
+ \par Value
+ 32 	
+ \par Description
+ The "old" maximum number of characters in an AFS volume name, including the
+ trailing null. In reality, it is also the current maximum. 
+ 
+ \par Name
+ VOLSER MAX REPSITES 	
+ \par Value
+ 7 	
+ \par Description
+ The maximum number of replication sites for a volume. 
+ 
+ \par Name
+ VNAMESIZE 	
+ \par Value
+ 32 	
+ \par Description
+ Size in bytes of the name field in struct volintInfo (see Section 5.4.6). 
+ 
+ 
+ 	\subsection sec5-2-2 Section 5.2.2: Interface Routine Opcodes 
+ 
+ \par
+ These constants, appearing in the volint.xg Rxgen interface file for the Volume
+ Server, define the opcodes for the RPC routines. Every Rx call on this
+ interface contains this opcode, and the dispatcher uses it to select the proper
+ code at the server site to carry out the call. 
+ 
+ \par Name 	
+ VOLCREATEVOLUME 	
+ \par Value 	
+ 100 	
+ \par Description 
+ Opcode for AFSVolCreateVolume() 
+ 
+ \par Name 	
+ VOLDELETEVOLUME 	
+ \par Value 	
+ 101 	
+ \par Description 
+ Opcode for AFSVolDeleteVolume() 
+ 
+ \par Name 	
+ VOLRESTORE 	
+ \par Value 	
+ 102 	
+ \par Description 
+ Opcode for AFSVolRestoreVolume() 
+ 
+ \par Name 	
+ VOLFORWARD 	
+ \par Value 	
+ 103 	
+ \par Description 
+ Opcode for AFSVolForward() 
+ 
+ \par Name 	
+ VOLENDTRANS 	
+ \par Value 	
+ 104 	
+ \par Description 
+ Opcode for AFSVolEndTrans() 
+ 
+ \par Name 	
+ VOLCLONE 	
+ \par Value 	
+ 105 	
+ \par Description 
+ Opcode for AFSVolClone() . 
+ 
+ \par Name 	
+ VOLSETFLAGS 	
+ \par Value 	
+ 106 	
+ \par Description 
+ Opcode for AFSVolSetFlags() 
+ 
+ \par Name 	
+ VOLGETFLAGS 	
+ \par Value 	
+ 107 	
+ \par Description 
+ Opcode for AFSVolGetFlags() 
+ 
+ \par Name 	
+ VOLTRANSCREATE 	
+ \par Value 	
+ 108 	
+ \par Description 
+ Opcode for AFSVolTransCreate() 
+ 
+ \par Name 	
+ VOLDUMP 	
+ \par Value 	
+ 109 	
+ \par Description 
+ Opcode for AFSVolDump() 
+ 
+ \par Name 	
+ VOLGETNTHVOLUME 	
+ \par Value 	
+ 110 	
+ \par Description 
+ Opcode for AFSVolGetNthVolume() 
+ 
+ \par Name 	
+ VOLSETFORWARDING 	
+ \par Value 	
+ 111 	
+ \par Description 
+ Opcode for AFSVolSetForwarding() 
+ 
+ \par Name 	
+ VOLGETNAME 	
+ \par Value 	
+ 112 	
+ \par Description 
+ Opcode for AFSVolGetName() 
+ 
+ \par Name 	
+ VOLGETSTATUS 	
+ \par Value 	
+ 113 	
+ \par Description 
+ Opcode for AFSVolGetStatus() 
+ 
+ \par Name 	
+ VOLSIGRESTORE 	
+ \par Value 	
+ 114 	
+ \par Description 
+ Opcode for AFSVolSignalRestore() 
+ 
+ \par Name 	
+ VOLLISTPARTITIONS 	
+ \par Value 	
+ 115 	
+ \par Description 
+ Opcode for AFSVolListPartitions() 
+ 
+ \par Name 	
+ VOLLISTVOLS 	
+ \par Value 	
+ 116 	
+ \par Description 
+ Opcode for AFSVolListVolumes() 
+ 
+ \par Name 	
+ VOLSETIDSTYPES 	
+ \par Value 	
+ 117 	
+ \par Description 
+ Opcode for AFSVolSetIdsTypes() 
+ 
+ \par Name 	
+ VOLMONITOR 	
+ \par Value 	
+ 118 	
+ \par Description 
+ Opcode for AFSVolMonitor() 
+ 
+ \par Name 	
+ VOLDISKPART 	
+ \par Value 	
+ 119 	
+ \par Description 
+ Opcode for AFSVolPartitionInfo() 
+ 
+ \par Name 	
+ VOLRECLONE 	
+ \par Value 	
+ 120 	
+ \par Description 
+ Opcode for AFSVolReClone() 
+ 
+ \par Name 	
+ VOLLISTONEVOL 	
+ \par Value 	
+ 121 	
+ \par Description 
+ Opcode for AFSVolListOneVolume() 
+ 
+ \par Name 	
+ VOLNUKE 	
+ \par Value 	
+ 122 	
+ \par Description 
+ Opcode for AFSVolNukeVolume() 
+ 
+ \par Name 	
+ VOLSETDATE 	
+ \par Value 	
+ 123 	
+ \par Description 
+ Opcode for AFSVolSetDate() 
+ 
+ 	\subsection sec5-2-3 Section 5.2.3: Transaction Flags 
+ 
+ \par
+ These constants define the various flags the Volume Server uses in assocation
+ with volume transactions, keeping track of volumes upon which operations are
+ currently proceeding. There are three sets of flag values, stored in three
+ different fields within a struct volser trans: general volume state, attachment
+ modes, and specific transaction states. 
+ 
+ 	\subsubsection sec5-2-3-1: Section 5.2.3.1 vflags 
+ 
+ \par
+ These values are used to represent the general state of the associated volume.
+ They appear in the vflags field within a struct volser trans. 
+ 
+ \par Name 	
+ VTDeleteOnSalvage 	
+ \par Value 	
+ 1 	
+ \par Description 
+ The volume should be deleted on next salvage. 
+ 
+ \par Name 	
+ VTOutOfService 	
+ \par Value 	
+ 2 	
+ \par Description 
+ This volume should never be put online. 
+ 
+ \par Name 	
+ VTDeleted 	
+ \par Value 	
+ 4 	
+ \par Description 
+ This volume has been deleted (via AFSVolDeleteVol¬ume() ), and thus should not
+ be manipulated. 
+ 
+ 	\subsubsection sec5-2-3-2 Section 5.2.3.2: iflags 
+ 
+ \par
+ These constants represent the desired attachment mode for a volume at the start
+ of a transaction. Once attached, the volume header is marked to reflect this
+ mode. Attachment modes are useful in salvaging partitions, as they indicate
+ whether the operations being performed on individual volumes at the time the
+ crash occured could have introduced inconsistencies in their metadata
+ descriptors. If a volume was attached in a read-only fashion, then the salvager
+ may decide (taking other factors into consideration) that the volume doesn't
+ need attention as a result of the crash. 
+ \par
+ These values appear in the iflags field within a struct volser trans. 
+ 
+ \par Name 	
+ ITOffline 	
+ \par Value 	
+ 0x1 	
+ \par Description 
+ Volume offline on server (returns VOFFLINE). 
+ 
+ \par Name 	
+ ITBusy 	
+ \par Value 	
+ 0x2 	
+ \par Description 
+ Volume busy on server (returns VBUSY). 
+ 
+ \par Name 	
+ ITReadOnly 	
+ \par Value 	
+ 0x8 	
+ \par Description 
+ Volume is read-only on client, read-write on server -DO NOT USE. 
+ 
+ \par Name 	
+ ITCreate 	
+ \par Value 	
+ 0x10 	
+ \par Description 
+ Volume does not exist correctly yet. 
+ 
+ \par Name 	
+ ITCreateVolID 	
+ \par Value 	
+ 0x1000 	
+ \par Description 
+ Create volid. 
+ 
+ 	\subsubsection sec5-2-3-3 Section 5.2.3.3: tflags 
+ 
+ \par
+ This value is used to represent the transaction state of the associated volume,
+ and appears in the tflags field within a struct volser trans. 
+ 
+ \par Name 	
+ TTDeleted 	
+ \par Value 	
+ 1 	
+ \par Description 
+ Delete transaction not yet freed due to high reference count. 
+ 
+ 	\subsection sec5-2-4 Section 5.2.4: Volume Types 
+ 
+ \par
+ The following constants may be supplied as values for the type argument to the
+ AFSVol-CreateVolume() interface call. They are just synonyms for the three
+ values RWVOL, ROVOL, 
+ 
+ \par Name 	
+ volser RW 	
+ \par Value 	
+ 0 	
+ \par Description 
+ Specifies a read-write volume type. 
+ 
+ \par Name 	
+ volser RO 	
+ \par Value 	
+ 1 	
+ \par Description 
+ Specifies a read-only volume type. 
+ 
+ \par Name 	
+ volser BACK 	
+ \par Value 	
+ 2 	
+ \par Description 
+ Specifies a backup volume type. 
+ 
+ 	\subsection sec5-2-5 Section 5.2.5: LWP State 
+ 
+ \par
+ This set of exported definitions refers to objects internal to the Volume
+ Server, and strictly speaking should not be visible to other agents.
+ Specifically, a busyFlags array keeps a set of flags referenced by the set of
+ lightweight threads running within the Volume Server. These flags reflect and
+ drive the state of each of these worker LWPs. 
+ 
+ \par Name 	
+ VHIdle 	
+ \par Value 	
+ 1 	
+ \par Description 
+ Volume Server LWP is idle, waiting for new work. 
+ 
+ \par Name 	
+ VHRequest 	
+ \par Value 	
+ 2 	
+ \par Description 
+ A work item has been queued. 
+ 
+ 	\subsection sec5-2-6 Section 5.2.6: States for struct vldbentry 
+ 
+ \par
+ The Volume Server defines a collection of synonyms for certain values defined
+ by the Volume Location Server. These particular constants are used within the
+ flags field in objects of type struct vldbentry. The equivalent Volume Location
+ Server values are described in Section 3.2.6. 
+ 
+ \par Name 	
+ RW EXISTS 	
+ \par Value 	
+ 0x1000 	
+ \par Description 
+ Synonym for VLF RWEXISTS. 
+ 
+ \par Name 	
+ RO EXISTS 	
+ \par Value 	
+ 0x2000 	
+ \par Description 
+ Synonym for VLF ROEXISTS. 
+ 
+ \par Name 	
+ BACK EXISTS 	
+ \par Value 	
+ 0x4000 	
+ \par Description 
+ Synonym for VLF BACKEXISTS. 
+ 
+ \par Name 	
+ NEW REPSITE 	
+ \par Value 	
+ 0x01 	
+ \par Description 
+ Synonym for VLSF NEWREPSITE. 
+ 
+ \par Name 	
+ ITSROVOL 	
+ \par Value 	
+ 0x02 	
+ \par Description 
+ Synonym for VLFS ROVOL. 
+ 
+ \par Name 	
+ ITSRWVOL 	
+ \par Value 	
+ 0x04 	
+ \par Description 
+ Synonym for VLSF RWVOL. 
+ 
+ \par Name 	
+ ITSBACKVOL 	
+ \par Value 	
+ 0x08 	
+ \par Description 
+ Synonym for VLSF BACKVOL. 
+ 
+ 	\subsection sec5-2-7 Section 5.2.7: Validity Checks 
+ 
+ \par
+ These values are used for performing validity checks. The first one appears
+ only within the partFlags field within objects of type partList (see Section
+ 5.4.3). The rest (except VOK and VBUSY) appear in the volFlags field within an
+ object of type struct volDescription. These latter defintions are used within
+ the volFlags field to mark whether the rest of the fields within the struct
+ volDescription are valid. Note that while several constants are defined, only
+ some are actually used internally by the Volume Server code. 
+ 
+ \par Name 	
+ PARTVALID 	
+ \par Value 	
+ 0x01 	
+ \par Description 
+ The indicated partition is valid. 
+ 
+ \par Name 	
+ CLONEVALID 	
+ \par Value 	
+ 0x02 	
+ \par Description 
+ The indicated clone (field volCloneId) is a valid one. 
+ 
+ \par Name 	
+ CLONEZAPPED 	
+ \par Value 	
+ 0x04 	
+ \par Description 
+ The indicated clone volume (field volCloneId) has been deleted. 
+ 
+ \par Name 	
+ IDVALID 	
+ \par Value 	
+ 0x08 	
+ \par Description 
+ The indicated volume ID (field volId) is valid. 
+ 
+ \par Name 	
+ NAMEVALID 	
+ \par Value 	
+ 0x10 	
+ \par Description 
+ The indicted volume name (field volName) is valid. Not used internally by the
+ Volume Server. 
+ 
+ \par Name 	
+ SIZEVALID 	
+ \par Value 	
+ 0x20 	
+ \par Description 
+ The indicated volume size (field volSize) is valid. Not used internally by the
+ Volume Server. 
+ 
+ \par Name 	
+ ENTRYVALID 	
+ \par Value 	
+ 0x40 	
+ \par Description 
+ The struct volDescription refers to a valid volume. 
+ 
+ \par Name 	
+ REUSECLONEID 	
+ \par Value 	
+ 0x80 	
+ \par Description 
+ The indicated clone ID (field volCloneId) should be reused. 
+ 
+ \par Name 	
+ VOK 	
+ \par Value 	
+ 0x02 	
+ \par Description 
+ Used in the status field of struct volintInfo to show that everything is OK. 
+ 
+ \par Name 	
+ VBUSY 	
+ \par Value 	
+ 110 	
+ \par Description 
+ Used in the status field of struct volintInfo to show that the volume is
+ currently busy. 
+ 
+ 	\subsection sec5-2-8 Section 5.2.8: Miscellaneous 
+ 
+ \par
+ This section covers the set of exported Volume Server definitions that don't
+ easily fall into the above categories. 
+ 
+ \par Name 	
+ SIZE 	
+ \par Value 	
+ 1,024 	
+ \par Description 
+ Not used internally by the Volume Server; used as a maxi¬mum size for internal
+ character arrays. 
+ 
+ \par Name 	
+ MAXHELPERS 	
+ \par Value 	
+ 10 	
+ \par Description 
+ Size of an internal Volume Server character array (busyFlags), it marks the
+ maximum number of threads within the server. 
+ 
+ \par Name 	
+ STDERR 	
+ \par Value 	
+ stderr 	
+ \par Description 
+ Synonym for the unix standard input file descriptor. 
+ 
+ \par Name 	
+ STDOUT 	
+ \par Value 	
+ stdout 	
+ \par Description 
+ Synonym for the unix standard output file descriptor. 
+ 
+ 	\section sec5-3 Section 5.3: Exported Variables 
+ 
+ \par
+ This section describes the single variable that the Volume Server exports to
+ its applications. 
+ \par
+ The QI GlobalWriteTrans exported variable represents a pointer to the head of
+ the global queue of transaction structures for operations being handled by a
+ Volume Server. Each object in this list is of type struct volser trans (see
+ Section 5.4.1 below). 
+ 
+ 	\section sec5-4 Section 5.4: Structures and Typedefs 
+ 
+ \par
+ This section describes the major exported Volume Server data structures of
+ interest to application programmers, along with some of the the typedefs based
+ on those structures. Please note that typedefs in shose definitions angle
+ brackets appear are those fed through the Rxgen RPC stub generator. Rxgen uses
+ these angle brackets to specify an array of indefinite size. 
+ 
+ 	\subsection sec5-4-1 Section 5.4.1: struct volser trans 
+ 
+ \par
+ This structure defines the transaction record for all volumes upon which an
+ active operation is proceeding. 
+ \n \b Fields 
+ \li struct volser trans *next - Pointer to the next transaction structure in
+ the queue. 
+ \li long tid - Transaction ID. 
+ \li long time - The time this transaction was last active, for timeout
+ purposes. 
+ \li This is the standard unix time format. 
+ \li long creationTime - The time a which this transaction started. 
+ \li long returnCode - The overall transaction error code. 
+ \li struct Volume *volume - Pointer to the low-level object describing the
+ associated volume. This is included here for the use of lower-level support
+ code. 
+ \li long volid - The associated volume's numerical ID. 
+ \li long partition - The partition on which the given volume resides. 
+ \li long dumpTransId - Not used. 
+ \li long dumpSeq - Not used. 
+ \li short refCount - Reference count on this structure. 
+ \li short iflags - Initial attach mode flags. 
+ \li char vflags - Current volume status flags. 
+ \li char tflags - Transaction flags. 
+ \li char incremental - If non-zero, indicates that an incremental restore
+ operation should be performed. 
+ \li char lastProcName[] - Name of the last internal Volume Server procedure
+ that used this transaction. This field may be up to 30 characters long,
+ including the trailing null, and is intended for debugging purposes only. 
+ \li struct rx call *rxCallPtr - Pointer to latest associated rx call. This
+ field is intended for debugging purposes only. 
+ 
+ 	\subsection sec5-4-2 Section 5.4.2: struct volDescription 
+ 
+ \par
+ This structure is used by the AFS backup system to group certain key fields of
+ volume information. 
+ \n \b Fields 
+ \li char volName[] -The name of the given volume; maximum length of this string
+ is VOLSER MAXVOLNAME characters, including the trailing null. 
+ \li long volId -The volume's numerical ID. 
+ \li int volSize -The size of the volume, in bytes. 
+ \li long volFlags -Keeps validity information on the given volume and its
+ clones. This field takes on values from the set defined in Section 5.2.7 
+ \li long volCloneId -The volume's current clone ID. 
+ 
+ 	\subsection sec5-4-3 Section 5.4.3: struct partList 
+ 
+ \par
+ This structure is used by the backup system and the vos tool to keep track of
+ the state of the AFS disk partitions on a given server. 
+ \n \b Fields 
+ \li long partId[] -Set of 26 partition IDs. 
+ \li long partFlags[] -Set to PARTVALID if the associated partition slot
+ corresponds to a valid partition. There are 26 entries in this array. 
+ 
+ 	\subsection sec5-4-4 Section 5.4.4: struct volser status 
+ 
+ \par
+ This structure holds the status of a volume as it is known to the Volume
+ Server, and is passed to clients through the AFSVolGetStatus() interface call. 
+ \par
+ Two fields appearing in this structure, accessDate and updateDate, deserve a
+ special note. In particular, it is important to observe that these fields are
+ not kept in full synchrony with reality. When a File Server provides one of its
+ client Cache Managers with a chunk of a file on which to operate, it is
+ incapable of determining exactly when the data in that chunk is accessed, or
+ exactly when it is updated. This is because the manipulations occur on the
+ client machine, without any information on these accesses or updates passed
+ back to the server. The only time these fields can be modified is when the
+ chunk of a file resident within the given volume is delivered to a client (in
+ the case of accessDate), or when a client writes back a dirty chunk to the File
+ Server (in the case of updateDate). 
+ \n \b Fields 
+ \li long volID - The volume's numerical ID, unique within the cell. 
+ \li long nextUnique - Next value to use for a vnode uniquifier within this
+ volume. 
+ \li int type - Basic volume class, one of RWVOL, ROVOL, or BACKVOL. 
+ \li long parentID - Volume ID of the parent, if this volume is of type ROVOL or
+ BACKVOL. 
+ \li long cloneID - ID of the latest read-only clone, valid iff the type field
+ is set to RWVOL. 
+ \li long backupID - Volume ID of the latest backup of this read-write volume. 
+ \li long restoredFromID - The volume ID contained in the dump from which this
+ volume was restored. This field is used to simply make sure that an incremental
+ dump is not restored on top of something inappropriate. Note that this field
+ itself is not dumped. 
+ \li long maxQuota - The volume's maximum quota, in 1Kbyte blocks. 
+ \li long minQuota - The volume's minimum quota, in 1Kbyte blocks. 
+ \li long owner - The user ID of the person responsible for this volume. 
+ \li long creationDate - For a volume of type RWVOL, this field marks its
+ creation date.  For the original copy of a clone, this field represents the
+ cloning date. 
+ \li long accessDate - Last access time by a user for this volume. This value is
+ expressed as a standard unix longword date quantity. 
+ \li long updateDate - Last modification time by a user for this volume. This
+ value is expressed as a standard unix longword date quantity. 
+ \li long expirationDate - Expiration date for this volume. If the volume never
+ expires, then this field is set to zero. 
+ \li long backupDate - The last time a backup clone was created for this volume. 
+ \li long copyDate - The time that this copy of this volume was created. 
+ 
+ 	\subsection sec5-4-5 Section 5.4.5: struct destServer 
+ 
+ \par
+ Used to specify the destination server in an AFSVolForward() invocation (see
+ Section 5.7.7). 
+ \n \b Fields 
+ \li long destHost - The IP address of the destination server. 
+ \li long destPort - The UDP port for the Volume Server Rx service there. 
+ \li long destSSID - Currently, this field is always set to 1. 
+ 
+ 	\subsection sec5-4-6 Section 5.4.6: struct volintInfo 
+ 
+ \par
+ This structure is used to communicate volume information to the Volume Server's
+ RPC clients. It is used to build the volEntries object, which appears as a
+ parameter to the AFSVolListVolumes() call. 
+ \par
+ The comments in Section 5.4.4 concerning the accessDate and updateDate fields
+ are equally valid for the analogue fields in this structure. 
+ \n \b Fields 
+ \li char name[] - The null-terminated name for the volume, which can be no
+ longer than VNAMESIZE (32) characters, including the trailing null. 
+ \li long volid - The volume's numerical ID. 
+ \li long type - The volume's basic class, one of RWVOL, ROVOL, or BACKVOL. 
+ \li long backupID - The latest backup volume's ID. 
+ \li long parentID - The parent volume's ID. 
+ \li long cloneID - The latest clone volume's ID. 
+ \li long status - Status of the volume; may be one of VOK or VBUSY. 
+ \li long copyDate - The time that this copy of this volume was created. 
+ \li unsigned char inUse - If non-zero, an indication that this volume is
+ online. 
+ \li unsigned char needsSalvaged - If non-zero, an indication that this volume
+ needs to be salvaged. 
+ \li unsigned char destroyMe - If non-zero, an indication that this volume
+ should be destroyed. 
+ \li long creationDate - Creation date for a read/write volume; cloning date for
+ the original copy of a read-only volume. 
+ \li long accessDate - Last access time by a user for this volume. 
+ \li long updateDate - Last modification time by a user for this volume. 
+ \li long backupDate - Last time a backup copy was made of this volume. 
+ \li int dayUse - Number of times this volume was accessed since midnight of the
+ current day. 
+ \li int filecount - the number of file system objects contained within the
+ volume. 
+ \li int maxquota - The upper limit on the number of 1-Kbyte disk blocks of
+ storage that this volume may obtain. 
+ \li int size - Not known. 
+ \li long flags - Values used by the backup system are stored here. 
+ \li long spare1 -spare3 -Spare fields, reserved for future use. 
+ 
+ 	\subsection sec5-4-7 Section 5.4.7: struct transDebugInfo 
+ 
+ \par
+ This structure is provided for monitoring and debugging purposes. It is used to
+ compose the transDebugEntries variable-sized object, which in turn appears as a
+ parameter to the AFSVolMonitor() interface call. 
+ \n \b Fields 
+ \li long tid - The transaction ID. 
+ \li long time - The time when the transaction was last active, for timeout
+ purposes. 
+ \li long creationTime - The time the transaction started. 
+ \li long returnCode - The overall transaction error code. 
+ \li long volid - The open volume's ID. 
+ \li long partition - The open volume's partition. 
+ \li short iflags - Initial attach mode flags (IT*). 
+ \li char vflags - Current volume status flags (VT*). 
+ \li char tflags - Transaction flags (TT*). 
+ \li char lastProcName[] - The string name of the last procedure which used
+ transaction. This field may be up to 30 characters long, including the trailing
+ null, and is intended for debugging purposes only. 
+ \li int callValid - Flag which determines if the following fields are valid. 
+ \li long readNext - Sequence number of the next Rx packet to be read. 
+ \li long transmitNext - Sequence number of the next Rx packet to be
+ transmitted. 
+ \li int lastSendTime - The last time anything was sent over the wire for this
+ transaction. 
+ \li int lastReceiveTime - The last time anything was received over the wire for
+ this transaction. 
+ 
+ 	\subsection sec5-4-8 Section 5.4.8: struct pIDs 
+ 
+ \par
+ Used by the AFSVolListPartitions() interface call, this structure is used to
+ store information on all of the partitions on a given Volume Server. 
+ \n \b Fields 
+ \li long partIds[] - One per letter of the alphabet (/vicepa through /vicepz).
+ Filled with 0 for "/vicepa", 25 for "/vicepz". Invalid partition slots are
+ filled in with a -1. 
+ 
+ 	\subsection sec5-4-9 Section 5.4.9: struct diskPartition 
+ 
+ \par
+ This structure contains information regarding an individual AFS disk partition.
+ It is returned as a parameter to the AFSVolPartitionInfo() call. 
+ \n \b Fields 
+ \li char name[] -Mounted partition name, up to 32 characters long including the
+ trailing null. 
+ \li char devName[] -Device name on which the partition lives, up to 32
+ characters long including the trailing null. 
+ \li int lock fd -A lock used for mutual exclusion to the named partition. A
+ value of -1 indicates the lock is not currently being held. Otherwise, it has
+ the file descriptor resulting from the unix open() call on the file specified
+ in the name field used to "acquire" the lock. 
+ \li int totalUsable - The number of blocks within the partition which are
+ available. 
+ \li int free - The number of free blocks in the partition. 
+ \li int minFree - The minimum number of blocks that must remain free regardless
+ of allocation requests. 
+ 
+ 	\section sec5-4-10 Section 5.4.10: struct restoreCookie 
+ 
+ \par
+ Used as a parameter to both AFSVolRestore() and AFSVolForward(),a restoreCookie
+ keeps information that must be preserved between various Volume Server
+ operations. 
+ \n \b Fields 
+ \li char name[] - The volume name, up to 32 characters long including the
+ trailing null. 
+ \li long type - The volume type, one of RWVOL, ROVOL, and BACKVOL. 
+ \li long clone - The current read-only clone ID for this volume. 
+ \li long parent - The parent ID for this volume. 
+ 
+ 	\section sec5-4-11 Section 5.4.11: transDebugEntries 
+ 
+ \code
+ typedef transDebugInfo transDebugEntries<>; 
+ \endcode
+ \par
+ This typedef is used to generate a variable-length object which is passed as a
+ parameter to the AFSVolMonitor() interface function. Thus, it may carry any
+ number of descriptors for active transactions on the given Volume Server.
+ Specifi, it causes a C structure of the same name to be defined with the
+ following fields: 
+ \n \b Fields 
+ \li u int transDebugEntries len - The number of struct transDebugInfo (see
+ Section 5.4.7) objects appearing at the memory location pointed to by the
+ transDebugEntries val field. 
+ \li transDebugInfo *transDebugEntries val - A pointer to a region of memory
+ containing an array of transDebugEntries len objects of type struct
+ transDebugInfo. 
+ 
+ 	\subsection sec5-4-12 Section 5.4.12: volEntries 
+ 
+ \code
+ typedef volintInfo volEntries<>; 
+ \endcode
+ \par
+ This typedef is used to generate a variable-length object which is passed as a
+ parameter to AFSVolListVolumes(). Thus, it may carry any number of descriptors
+ for volumes on the given Volume Server. Specifically, it causes a C structure
+ of the same name to be defined with the following fields: 
+ \n \b Fields 
+ \li u int volEntries len - The number of struct volintInfo (see Section 5.4.6)
+ objects appearing at the memory location pointed to by the volEntries val
+ field. 
+ \li volintInfo *volEntries val -A pointer to a region of memory containing an
+ array of volEntries len objects of type struct volintInfo. 
+ 
+ 	\section sec5-5 Section 5.5: Error Codes 
+ 
+ \par
+ The Volume Server advertises two groups of error codes. The first set consists
+ of the standard error codes defined by the package. The second is a collection
+ of lower-level return values which are exported here for convenience. 
+ 
+ \par Name 	
+ VOLSERTRELE ERROR 	
+ \par Value 	
+ 1492325120L 	
+ \par Description 
+ internal error releasing transaction. 
+ 
+ \par Name 	
+ VOLSERNO OP 	
+ \par Value 	
+ 1492325121L 	
+ \par Description 
+ unknown internal error. 
+ 
+ \par Name 	
+ VOLSERREAD DUMPERROR 	
+ \par Value 	
+ 1492325122L 	
+ \par Description 
+ badly formatted dump. 
+ 
+ \par Name 	
+ VOLSERDUMPERROR 	
+ \par Value 	
+ 1492325123L 	
+ \par Description 
+ badly formatted dump(2). 
+ 
+ \par Name 	
+ VOLSERATTACH ERROR 	
+ \par Value 	
+ 1492325124L 	
+ \par Description 
+ could not attach volume. 
+ 
+ \par Name 	
+ VOLSERILLEGAL PARTITION 	
+ \par Value 	
+ 1492325125L 	
+ \par Description 
+ illegal partition. 
+ 
+ \par Name 	
+ VOLSERDETACH ERROR 	
+ \par Value 	
+ 1492325126L 	
+ \par Description 
+ could not detach volume. 
+ 
+ \par Name 	
+ VOLSERBAD ACCESS 	
+ \par Value 	
+ 1492325127L 	
+ \par Description 
+ insufficient privilege for volume operation. 
+ 
+ \par Name 	
+ VOLSERVLDB ERROR 	
+ \par Value 	
+ 1492325128L 	
+ \par Description 
+ error from volume location database. 
+ 
+ \par Name 	
+ VOLSERBADNAME 	
+ \par Value 	
+ 1492325129L 	
+ \par Description 
+ bad volume name. 
+ 
+ \par Name 	
+ VOLSERVOLMOVED 	
+ \par Value 	
+ 1492325130L 	
+ \par Description 
+ volume moved. 
+ 
+ \par Name 	
+ VOLSERBADOP 	
+ \par Value 	
+ 1492325131L 	
+ \par Description 
+ illegal volume operation. 
+ 
+ \par Name 	
+ VOLSERBADRELEASE 	
+ \par Value 	
+ 1492325132L 	
+ \par Description 
+ volume release failed. 
+ 
+ \par Name 	
+ VOLSERVOLBUSY 	
+ \par Value 	
+ 1492325133L 	
+ \par Description 
+ volume still in use by volserver. 
+ 
+ \par Name 	
+ VOLSERNO MEMORY 	
+ \par Value 	
+ 1492325134L 	
+ \par Description 
+ out of virtual memory in volserver. 
+ 
+ \par Name 	
+ VOLSERNOVOL 	
+ \par Value 	
+ 1492325135L 	
+ \par Description 
+ no such volume. 
+ 
+ \par Name 	
+ VOLSERMULTIRWVOL 	
+ \par Value 	
+ 1492325136L 	
+ \par Description 
+ more than one read/write volume. 
+ 
+ \par Name 	
+ VOLSERFAILEDOP 	
+ \par Value 	
+ 1492325137L 	
+ \par Description 
+ failed volume server operation. 
+ 
+ 	\subsection sec5-5-1 Section 5.5.1: Standard 
+ 
+ \par
+ The error codes described in this section were defined by the Volume Server to
+ describe exceptional conditions arising in the course of RPC call handling. 
+ 
+ 	\subsection sec5-5-2 Section 5.5.2: Low-Level 
+ 
+ \par
+ These error codes are duplicates of those defined from a package which is
+ internal to the Volume Server. They are re-defined here to make them visible to
+ Volume Server clients. 
+ 
+ \par Name 	
+ VSALVAGE 	
+ \par Value 	
+ 101 	
+ \par Description 
+ Volume needs to be salvaged. 
+ 
+ \par Name 	
+ VNOVNODE 	
+ \par Value 	
+ 102 	
+ \par Description 
+ Bad vnode number encountered. 
+ 
+ \par Name 	
+ VNOVOL 	
+ \par Value 	
+ 103 	
+ \par Description 
+ The given volume is either not attached, doesn't exist, or is not online. 
+ 
+ \par Name 	
+ VVOLEXISTS 	
+ \par Value 	
+ 104 	
+ \par Description 
+ The given volume already exists. 
+ 
+ \par Name 	
+ VNOSERVICE 	
+ \par Value 	
+ 105 	
+ \par Description 
+ The volume is currently not in service. 
+ 
+ \par Name 	
+ VOFFLINE 	
+ \par Value 	
+ 106 	
+ \par Description 
+ The specified volume is offline, for the reason given in the offline message
+ field (a subfield within the volume field in struct volser trans). 
+ 
+ \par Name 	
+ VONLINE 	
+ \par Value 	
+ 107 	
+ \par Description 
+ Volume is already online. 
+ 
+ \par Name 	
+ VDISKFULL 	
+ \par Value 	
+ 108 	
+ \par Description 
+ The disk partition is full. 
+ 
+ \par Name 	
+ VOVERQUOTA 	
+ \par Value 	
+ 109 	
+ \par Description 
+ The given volume's maximum quota, as expressed in the maxQuota field of the
+ struct volintInfo, has been exceeded. 
+ 
+ \par Name 	
+ VBUSY 	
+ \par Value 	
+ 110 	
+ \par Description 
+ The named volume is temporarily unavailable, and the client is encouraged to
+ retry the operation shortly. 
+ 
+ \par Name 	
+ VMOVED 	
+ \par Value 	
+ 111 	
+ \par Description 
+ The given volume has moved to a new server. 
+ 
+ \par
+ The VICE SPECIAL ERRORS constant is defined to be the lowest of these error
+ codes. 
+ 
+ 	\section sec5-6 Section 5.6: Macros 
+ 
+ \par
+ The Volume Server defines a small number of macros, as described in this
+ section. 
+ 	\subsection sec5-6-1 Section 5.6.1: THOLD() 
+ 
+ \code
+ #define THOLD(tt) ((tt)->refCount++) 
+ \endcode
+ \par
+ This macro is used to increment the reference count field, refCount, in an
+ object of type struct volser trans. Thus, the associated transaction is
+ effectively "held" insuring it won't be garbage-collected. The counterpart to
+ this operation, TRELE(), is implemented by the Volume Server as a function. 
+ 
+ 	\subsection sec5-6-2 Section 5.6.2: ISNAMEVALID() 
+ 
+ \code
+ #define ISNAMEVALID(name) (strlen(name) < (VOLSER_OLDMAXVOLNAME -9)) 
+ \endcode
+ \par
+ This macro checks to see if the given name argument is of legal length. It must
+ be no more than the size of the container, which is at most VOLSER
+ OLDMAXVOLNAME characters, minus the length of the longest standardized volume
+ name postfix known to the system. That postfix is the 9-character .restored
+ string, which is tacked on to the name of a volume that has been restored from
+ a dump. 
+ 
+ 	\section sec5-7 Section 5.7: Functions 
+ 
+ \par
+ This section covers the Volume Server RPC interface routines, defined by and
+ generated from the volint.xg Rxgen file. The following is a summary of the
+ interface functions and their purpose: 
+ 
+ \par Fcn Name 	
+ AFSVolCreateVolume 	
+ \par Description 
+ Create a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolDeleteVolume 	
+ \par Description 
+ Delete a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolNukeVolume 	
+ \par Description 
+ Obliterate a volume completely. 
+ 
+ \par Fcn Name 	
+ AFSVolDump 	
+ \par Description 
+ Dump (i.e., save) the contents of a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolSignalRestore 	
+ \par Description 
+ Show intention to call AFSVolRestore(). 
+ 
+ \par Fcn Name 	
+ AFSVolRestore 	
+ \par Description 
+ Recreate a volume from a dump. 
+ 
+ \par Fcn Name 	
+ AFSVolForward 	
+ \par Description 
+ Dump a volume, then restore to a given server and volume. 
+ 
+ \par Fcn Name 	
+ AFSVolClone 	
+ \par Description 
+ Clone (and optionally purge) a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolReClone 	
+ \par Description 
+ Re-clone a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolSetForwarding 	
+ \par Description 
+ Set forwarding info for a moved volume. 
+ 
+ \par Fcn Name 	
+ AFSVolTransCreate 	
+ \par Description 
+ Create transaction for a [volume, partition]. 
+ 
+ \par Fcn Name 	
+ AFSVolEndTrans 	
+ \par Description 
+ End a transaction. 
+ 
+ \par Fcn Name 	
+ AFSVolGetFlags 	
+ \par Description 
+ Get volume flags for a transaction. 
+ 
+ \par Fcn Name 	
+ AFSVolSetFlags 	
+ \par Description 
+ Set volume flags for a transaction. 
+ 
+ \par Fcn Name 	
+ AFSVolGetName 	
+ \par Description 
+ Get the volume name associated with a transaction. 
+ 
+ \par Fcn Name 	
+ AFSVolGetStatus 	
+ \par Description 
+ Get status of a transaction/volume. 
+ 
+ \par Fcn Name 	
+ AFSVolSetIdsTypes 	
+ \par Description 
+ Set header info for a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolSetDate 	
+ \par Description 
+ Set creation date in a volume. 
+ 
+ \par Fcn Name 	
+ AFSVolListPartitions 	
+ \par Description 
+ Return a list of AFS partitions on a server. 
+ 
+ \par Fcn Name 	
+ AFSVolPartitionInfo 	
+ \par Description 
+ Get partition information. 
+ 
+ \par Fcn Name 	
+ AFSVolListVolumes 	
+ \par Description 
+ Return a list of volumes on the server. 
+ 
+ \par Fcn Name 	
+ AFSVolListOneVolume 	
+ \par Description 
+ Return header info for a single volume. 
+ 
+ \par Fcn Name 	
+ AFSVolGetNthVolume 	
+ \par Description 
+ Get volume header given its index. 
+ 
+ \par Fcn Name 	
+ AFSVolMonitor 	
+ \par Description 
+ Collect server transaction state. 
+ 
+ 
+ \par
+ There are two general comments that apply to most of the Volume Server
+ interface routines: 
+ \li 1. AFS partitions are identified by integers ranging from 0 to 25,
+ corresponding to the letters "a" through "z". By convention, AFS partitions are
+ named /vicepx, where x is any lower-case letter. 
+ \li 2. Legal volume types to pass as parameters are RWVOL, ROVOL, and BACKVOL,
+ as defined in Section 3.2.4. 
+ 
+ 	\subsection sec5-7-1 Section 5.7.1: AFSVolCreateVolume - Create a
+ volume 
+ 
+ \code
+ int AFSVolCreateVolume(IN struct rx connection *z conn, 
+ 			IN long partition, 
+ 			IN char *name, 
+ 			IN long type, 
+ 			IN long parent, 
+ 			INOUT long *volid, 
+ 			OUT long *trans) 
+ \endcode
+ \par Description 
+ Create a volume named name, with numerical identifier volid, and of type type.
+ The new volume is to be placed in the specified partition for the server
+ machine as identified by the Rx connection information pointed to by z conn. If
+ a value of 0 is provided for the parent argument, it will be set by the Volume
+ Server to the value of volid itself. The trans parameter is set to the Volume
+ Location Server transaction ID corresponding to the volume created by this
+ call, if successful. 
+ The numerical volume identifier supplied in the volid parameter must be
+ generated beforehand by calling VL GetNewVolumeID() (see Section 3.6.5). After
+ AFSVolCreateVolume() completes correctly, the new volume is marked as offline.
+ It must be explicitly brought online through a call to AFSVolSetFlags() (see
+ Section 5.7.14) while passing the trans transaction ID generated by
+ AFSVolCreateVolume(). The "hold" on the new volume guaranteed by the trans
+ transaction may be "released" by calling AFSVolEnd-Trans(). Until then, no
+ other process may operate on the volume. 
+ Upon creation, a volume's maximum quota (as specified in the maxquota field of
+ a struct volintInfo) is set to 5,000 1-Kbyte blocks. 
+ Note that the AFSVolCreateVolume() routine is the only Volume Server function
+ that manufactures its own transaction. All others must have already acquired a
+ transaction ID via either a previous call to AFSVolCreateVolume() or
+ AFSVolTransCreate(). 
+ \par Error Codes 
+ VOLSERBADNAME The volume name parameter was longer than 31 characters plus the
+ trailing null. 
+ \n VOLSERBAD ACCESS The caller is not authorized to create a volume. 
+ \n EINVAL The type parameter was illegal. E2BIG A value of 0 was provided in
+ the volid parameter. VOLSERVOLBUSY A transaction could not be created, thus the
+ given volume was busy. 
+ \n EIO The new volume entry could not be created. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ \n <misc> If the partition parameter is unintelligible, this routine will
+ return a low-level unix error. 
+ 
+ 	\subsection sec5-7-2 Section 5.7.2: AFSVolDeleteVolume - Delete a
+ volume 
+ 
+ \code
+ int AFSVolDeleteVolume(IN struct rx connection *z conn, IN long trans) 
+ \endcode
+ \par Description 
+ Delete the volume associated with the open transaction ID specified within
+ trans. All of the file system objects contained within the given volume are
+ destroyed, and the on-disk volume metadata structures are reclaimed. In
+ addition, the in-memory volume descriptor's vflags field is set to VTDeleted,
+ indicating that it has been deleted. 
+ \par
+ Under some circumstances, a volume should be deleted by calling
+ AFSVolNukeVolume() instead of this routine. See Section 5.7.3 for more details. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to delete a volume. 
+ \n ENOENT The trans transaction was not found. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ 
+ 	\subsection sec5-7-3 Section 5.7.3: AFSVolNukeVolume - Obliterate a
+ volume completely 
+ 
+ \code
+ int AFSVolNukeVolume(IN struct rx connection *z conn, 
+ 			IN long partID, 
+ 			IN long volID) 
+ \endcode
+ \par Description 
+ Completely obliterate the volume living on partition partID whose ID is volID.
+ This involves scanning all inodes on the given partition and removing those
+ marked with the specified volID. If the volume is a read-only clone, only the
+ header inodes are removed, since they are the only ones stamped with the
+ read-only ID. To reclaim the space taken up by the actual data referenced
+ through a read-only clone, this routine should be called on the read-write
+ master. Note that calling AFSVolNukeVolume() on a read-write volume effectively
+ destroys all the read-only volumes cloned from it, since everything except for
+ their indicies to the (now-deleted) data will be gone. 
+ \par
+ Under normal circumstances, it is preferable to use AFSVolDeleteVolume()
+ instead of AFSVolNukeVolume() to delete a volume. The former is much more
+ efficient, as it only touches those objects in the partition that belong to the
+ named volume, walking the on-disk volume metadata structures. However,
+ AFSVolNukeVolume() must be used in situations where the volume metadata
+ structures are known to be damaged. Since a complete scan of all inodes in the
+ partition is performed, all disconnected or unreferenced portions of the given
+ volume will be reclaimed. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to call this routine. 
+ \n VOLSERNOVOL The partition specified by the partID argument is illegal. 
+ 
+ 	\subsection sec5-7-4 Section 5.7.4: AFSVolDump - Dump (i.e., save) the
+ contents of a volume 
+ 
+ \code
+ int AFSVolDump(IN struct rx connection *z conn, 
+ 		IN long fromTrans, 
+ 		IN long fromDate) 
+ \endcode
+ \par Description 
+ Generate a canonical dump of the contents of the volume associated with
+ transaction fromTrans as of calendar time fromDate. If the given fromDate is
+ zero, then a full dump will be carried out. Otherwise, the resulting dump will
+ be an incremental one. 
+ \par
+ This is specified as a split function within the volint.xg Rxgen interface
+ file. This specifies that two routines are generated, namely StartAFSVolDump()
+ and EndAFSVolDump(). The former is used to marshall the IN arguments, and the
+ latter is used to unmarshall the return value of the overall operation. The
+ actual dump data appears in the Rx stream for the call (see the section
+ entitled Example Server and Client in the companion AFS-3 Programmer's
+ Reference: Specification for the Rx Remote Procedure Call Facility document). 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to dump a volume. 
+ \n ENOENT The fromTrans transaction was not found. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ 
+ 	\subsection sec5-7-5 Section 5.7.5: AFSVolSignalRestore - Show
+ intention to call AFSVolRestore() 
+ 
+ \code
+ int AFSVolSignalRestore(IN struct rx connection *z conn, 
+ 			IN char *name, 
+ 			IN int type, 
+ 			IN long pid, 
+ 			IN long cloneid) 
+ \endcode
+ \par Description 
+ Show an intention to the Volume Server that the client will soon call
+ AFSVolRestore(). The parameters, namely the volume name, type, parent ID pid
+ and clone ID cloneid are stored in a well-known set of global variables. These
+ values are used to set the restored volume's header, overriding those values
+ present in the dump from which the volume will be resurrected. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to call this routine. 
+ \n VOLSERBADNAME The volume name contained in name was longer than 31
+ characters plus the trailing null. 
+ 
+ 	\subsection sec5-7-6 Section 5.7.6: AFSVolRestore - Recreate a volume
+ from a dump 
+ 
+ \code
+ int AFSVolRestore(IN struct rx connection *z conn, 
+ 			IN long toTrans, 
+ 			IN long flags, 
+ 			IN struct restoreCookie *cookie) 
+ \endcode
+ \par Description 
+ Interpret a canonical volume dump (generated as the result of calling
+ AFSVolDumpVolume()), passing it to the volume specified by the toTrans
+ transaction. Only the low bit in the flags argument is inspected. If this low
+ bit is turned on, the dump will be restored as incremental; otherwise, a full
+ restore will be carried out. 
+ \par
+ All callbacks to the restored volume are broken. 
+ \par
+ This is specified as a split function within the volint.xg Rxgen interface
+ file. This specifies that two routines are generated, namely
+ StartAFSVolRestore() and EndAFSVolRestore() . The former is used to marshall
+ the IN arguments, and the latter is used to unmarshall the return value of the
+ overall operation. The actual dump data flows over the Rx stream for the call
+ (see the section entitled Example Server and Client in the companion AFS-3
+ Programmer's Reference: Specification for the Rx Remote Procedure Call Facility
+ document). 
+ \par
+ The AFSVolSignalRestore() routine (see Section 5.7.5) should be called before
+ invoking this function in order to signal the intention to restore a particular
+ volume. 
+ \par Error Codes 
+ VOLSERREAD DUMPERROR Dump data being restored is corrupt. 
+ \n VOLSERBAD ACCESS The caller is not authorized to restore a volume. 
+ \n ENOENT The fromTrans transaction was not found. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ 
+ 	\subsection sec5-7-7 Section 5.7.7: AFSVolForward - Dump a volume, then
+ restore to given server and volume 
+ 
+ \code
+ int AFSVolForward(IN struct rx connection *z conn, 
+ 			IN long fromTrans, 
+ 			IN long fromDate, 
+ 			IN struct destServer *destination, 
+ 			IN long destTrans, 
+ 			IN struct restoreCookie *cookie) 
+ \endcode
+ \par Description 
+ Dumps the volume associated with transaction fromTrans from the given fromDate.
+ The dump itself is sent to the server described by destination, where it is
+ restored as the volume associated with transaction destTrans. In reality, an Rx
+ connection is set up to the destServer, StartAFSVolRestore() directs writing to
+ the Rx call's stream, and then EndAFSVolRestore() is used to deliver the dump
+ for the volume corresponding to fromTrans. If a non-zero fromDate is provided,
+ then the dump will be incremental from that date. Otherwise, a full dump will
+ be delivered. 
+ \par
+ The Rx connection set up for this task is always destroyed before the function
+ returns. The destination volume should exist before carrying out this
+ operation, and the invoking process should have started transactions on both
+ participating volumes. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to forward a volume. 
+ \n ENOENT The fromTrans transaction was not found. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ \n ENOTCONN An Rx connection to the destination server could not be
+ established. 
+ 
+ 	\subsection sec5-7-8 Section 5.7.8: AFSVolClone - Clone (and optionally
+ purge) a volume 
+ 
+ \code
+ int AFSVolClone(IN struct rx connection *z conn, 
+ 		IN long trans, 
+ 		IN long purgeVol, 
+ 		IN long newType, 
+ 		IN char *newName, 
+ 		INOUT long *newVol) 
+ \endcode
+ \par Description 
+ Make a clone of the read-write volume associated with transaction trans, giving
+ the cloned volume a name of newName. The newType parameter specifies the type
+ for the new clone, and may be either ROVOL or BACKVOL. If purgeVol is set to a
+ non-zero value, then that volume will be purged during the clone operation.
+ This may be more efficient that separate clone and purge calls when making
+ backup volumes. The newVol parameter sets the new clone's ID. It is illegal to
+ pass a zero in newVol. 
+ \par Error Codes 
+ VOLSERBADNAME The volume name contained in newName was longer than 31
+ characters plus the trailing null. 
+ \n VOLSERBAD ACCESS The caller is not authorized to clone a volume. 
+ \n ENOENT The fromTrans transaction was not found. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ \n VBUSY The given transaction was already in use; indicating that someone else
+ is currently manipulating the specified clone. 
+ \n EROFS The volume associated with the given trans is read-only (either ROVOL
+ or BACKVOL). 
+ \n EXDEV The volume associated with the trans transaction and the one specified
+ by purgeVol must be on the same disk device, and they must be cloned from the
+ same parent volume. 
+ \n EINVAL The purgeVol must be read-only, i.e. either type ROVOL or BACKVOL. 
+ 
+ 	\subsection sec5-7-9 Section 5.7.9: AFSVolReClone - Re-clone a volume 
+ 
+ \code
+ int AFSVolReClone(IN struct rx connection *z conn, 
+ 			IN long tid, 
+ 			IN long cloneID) 
+ \endcode
+ \par Description 
+ Recreate an existing clone, with identifier cloneID, from the volume associated
+ with transaction tid. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to clone a volume. 
+ \n ENOENT The tid transaction was not found. 
+ \n VOLSERTRELE ERROR The tid transaction's reference count could not be dropped
+ to the proper level. 
+ \n VBUSY The given transaction was already in use; indicating that someone else
+ is currently manipulating the specified clone. 
+ \n EROFS The volume to be cloned must be read-write (of type RWVOL). 
+ \n EXDEV The volume to be cloned and the named clone itself must be on the same
+ device. Also, cloneID must have been cloned from the volume associated with
+ transaction tid. 
+ \n EINVAL The target clone must be a read-only volume (i.e., of type ROVOL or
+ BACKVOL). 
+ 
+ 	\subsection sec5-7-10 Section 5.7.10: AFSVolSetForwarding - Set
+ forwarding info for a moved volume 
+ 
+ \code
+ int AFSVolSetForwarding(IN struct rx connection *z conn, 
+ 			IN long tid, 
+ 			IN long newsite) 
+ \endcode
+ \par Description 
+ Record the IP address specified within newsite as the location of the host
+ which now hosts the volume associated with transaction tid, formerly resident
+ on the current host. This is intended to gently guide Cache Managers who have
+ stale volume location cached to the volume's new site, ensuring the move is
+ transparent to clients using that volume. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to create a forwarding address. 
+ \n ENOENT The trans transaction was not found. 
+ 
+ 	\subsection sec5-7-11 Section 5.7.11: AFSVolTransCreate - Create
+ transaction for a [volume, partition] 
+ 
+ \code
+ int AFSVolTransCreate(IN struct rx connection *z conn, 
+ 			IN long volume, 
+ 			IN long partition, 
+ 			IN long flags, 
+ 			OUT long *trans) 
+ \endcode
+ \par Description 
+ Create a new Volume Server transaction associated with volume ID volume on
+ partition partition. The type of volume transaction is specified by the flags
+ parameter. The values in flags specify whether the volume should be treated as
+ busy (ITBusy), offline (ITOffline), or in shared read-only mode (ITReadOnly).
+ The identifier for the new transaction built by this function is returned in
+ trans. 
+ \par
+ Creating a transaction serves as a signal to other agents that may be
+ interested in accessing a volume that it is unavailable while the Volume Server
+ is manipulating it. This prevents the corruption that could result from
+ multiple simultaneous operations on a volume. 
+ \par Error Codes 
+ EINVAL Illegal value encountered in flags. 
+ \n VOLSERVOLBUSY A transaction could not be created, thus the given [volume,
+ partition] pair was busy. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level after creation. 
+ 
+ 	\subsection sec5-7-12 Section 5.7.12: AFSVolEndTrans - End a
+ transaction 
+ 
+ \code
+ int AFSVolEndTrans(IN struct rx connection *z conn, 
+ 			IN long trans, 
+ 			OUT long *rcode) 
+ \endcode
+ \par Description 
+ End the transaction identified by trans, returning its final error code into
+ rcode. This makes the associated [volume, partition] pair eligible for further
+ Volume Server operations. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to create a transaction. 
+ \n ENOENT The trans transaction was not found. 
+ 
+ 	\subsection sec5-7-13 Section 5.7.13: AFSVolGetFlags - Get volume flags
+ for a transaction 
+ 
+ \code
+ int AFSVolGetFlags(IN struct rx connection *z conn, 
+ 			IN long trans, 
+ 			OUT long *flags) 
+ \endcode
+ \par Description 
+ Return the value of the vflags field of the struct volser trans object
+ describing the transaction identified as trans. The set of values placed in the
+ flags parameter is described in Section 5.2.3.1. Briefly, they indicate whether
+ the volume has been deleted (VTDeleted), out of service (VTOutOfService), or
+ marked delete-on-salvage (VTDeleteOnSalvage). 
+ \par Error Codes 
+ ENOENT The trans transaction was not found. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ 
+ 	\subsection sec5-7-14 Section 5.7.14: AFSVolSetFlags - Set volume flags
+ for a transaction 
+ 
+ \code
+ int AFSVolSetFlags(IN struct rx connection *z conn, 
+ 			IN long trans, 
+ 			IN long flags) 
+ \endcode
+ \par Description 
+ Set the value of the vflags field of the struct volser trans object describing
+ the transaction identified as trans to the contents of flags. The set of legal
+ values for the flags parameter is described in Section 5.2.3.1. Briefly, they
+ indicate whether the volume has been deleted (VTDeleted), out of service
+ (VTOutOfService), or marked delete-onsalvage (VTDeleteOnSalvage). 
+ \par Error Codes 
+ ENOENT The trans transaction was not found. 
+ \n EROFS Updates to this volume are not allowed. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ 
+ 	\subsection sec5-7-15 Section 5.7.15: AFSVolGetName - Get the volume
+ name associated with a transaction 
+ 
+ \code
+ int AFSVolGetName(IN struct rx connection *z conn, 
+ 			IN long tid, 
+ 			OUT char **tname) 
+ \endcode
+ \par Description 
+ Given a transaction identifier tid, return the name of the volume associated
+ with the given transaction. The tname parameter is set to point to the address
+ of a string buffer of at most 256 chars containing the desired information,
+ which is created for this purpose. Note: the caller is responsible for freeing
+ the buffer pointed to by tname when its information is no longer needed. 
+ \par Error Codes 
+ ENOENT The tid transaction was not found, or a volume was not associated with
+ it (VSrv internal error). 
+ \n E2BIG The volume name was too big (greater than or equal to SIZE (1,024)
+ characters. 
+ \n VOLSERTRELE ERROR The trans transaction's reference count could not be
+ dropped to the proper level. 
+ 
+ 	\subsection sec5-7-16 Section 5.7.16: AFSVolGetStatus - Get status of a
+ transaction/volume 
+ 
+ \code
+ int AFSVolGetStatus(IN struct rx connection *z conn, 
+ 			IN long tid, 
+ 			OUT struct volser status *status) 
+ \endcode
+ \par Description 
+ This routine fills the status structure passed as a parameter with status
+ information for the volume identified by the transaction identified by tid, if
+ it exists. Included in this status information are the volume's ID, its type,
+ disk quotas, the IDs of its clones and backup volumes, and several other
+ administrative details. 
+ \par Error Codes 
+ ENOENT The tid transaction was not found. 
+ \n VOLSERTRELE ERROR The tid transaction's reference count could not be dropped
+ to the proper level. 
+ 
+ 	\subsection sec5-7-17 Section 5.7.17: AFSVolSetIdsTypes - Set header
+ info for a volume 
+ 
+ \code
+ int AFSVolSetIdsTypes(IN struct rx connection *z conn, 
+ 			IN long tId 
+ 			IN char *name, 
+ 			IN long type, 
+ 			IN long pId, 
+ 			IN long cloneId, 
+ 			IN long backupId) 
+ \endcode
+ \par Description 
+ The transaction identifed by tId is located, and the values supplied for the
+ volume name, volume type, parent ID pId, clone ID cloneId and backup ID
+ backupId are recorded into the given transaction. 
+ \par Error Codes 
+ ENOENT The tId transaction was not found. 
+ \n VOLSERBAD ACCESS The caller is not authorized to call this routine. 
+ \n VOLSERBADNAME The volume name contained in name was longer than 31
+ characters plus the trailing null. 
+ \n VOLSERTRELE ERROR The tId transaction's reference count could not be dropped
+ to the proper level. 
+ 
+ 	\subsection sec5-7-18 Section 5.7.18: AFSVolSetDate - Set creation date
+ in a volume 
+ 
+ \code
+ int AFSVolSetDate(IN struct rx connection *z conn, 
+ 			IN long tid, 
+ 			IN long newDate) 
+ \endcode
+ \par Description 
+ Set the creationDate of the struct volintInfo describing the volume associated
+ with transaction tid to newDate. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to call this routine. 
+ \n ENOENT The tId transaction was not found. 
+ \n VOLSERTRELE ERROR The tid transaction's reference count could not be dropped
+ to the proper level. 
+ 
+ 	\subsection sec5-7-19 Section 5.7.19: AFSVolListPartitions - Return a
+ list of AFS partitions on a server 
+ 
+ \code
+ int AFSVolListPartitions(IN struct rx connection *z conn, 
+ 				OUT struct pIDs *partIDs) 
+ \endcode
+ \par Description 
+ Return a list of AFS partitions in use by the server processing this call. The
+ output parameter is the fixed-length partIDs array, with one slot for each of
+ 26 possible partitions. By convention, AFS partitions are named /vicepx, where
+ x is any letter. The /vicepa partition is represented by a zero in this array,
+ /vicepa bya1, andsoon. Unused partitions are represented by slots filled with a
+ -1. 
+ \par Error Codes 
+ ---None. 
+ 
+ 	\subsection sec5-7-20 Section 5.7.20: AFSVolPartitionInfo - Get
+ partition information 
+ 
+ \code
+ int AFSVolPartitionInfo(IN struct rx connection *z conn, 
+ 			IN char *name, 
+ 			OUT struct diskPartition *partition) 
+ \endcode
+ \par Description 
+ Collect information regarding the partition with the given character string
+ name, and place it into the partition object provided. 
+ \par Error Codes 
+ VOLSERBAD ACCESS The caller is not authorized to call this routine. 
+ \n VOLSERILLEGAL PARTITION An illegal partition was specified by name 
+ 
+ 	\subsection sec5-7-21 Section 5.7.21: AFSVolListVolumes - Return a list
+ of volumes on the server 
+ 
+ \code
+ int AFSVolListVolumes(IN struct rx connection *z conn, 
+ 			IN long partID, 
+ 			IN long flags, 
+ 			OUT volEntries *resultEntries) 
+ \endcode
+ \par Description 
+ Sweep through all the volumes on the partition identified by partid, filling in
+ consecutive records in the resultEntries object. If the flags parameter is set
+ to a non-zero value, then full status information is gathered. Otherwise, just
+ the volume ID field is written for each record. The fields for a volEntries
+ object like the one pointed to by resultEntries are described in Section 5.4.6,
+ which covers the struct volintInfo definition. 
+ \par Error Codes 
+ VOLSERILLEGAL PARTITION An illegal partition was specified by partID 
+ \n VOLSERNO MEMORY Not enough memory was available to hold all the required
+ entries within resultEntries. 
+ 
+ 	\subsection sec5-7-22 Section 5.7.22: AFSVolListOneVolume - Return
+ header info for a single volume 
+ 
+ \code
+ int AFSVolListOneVolume(IN struct rx connection *z conn, 
+ 			IN long partID, 
+ 			IN long volid, 
+ 			OUT volEntries *resultEntries) 
+ \endcode
+ \par Description 
+ Find the information for the volume living on partition partID whose ID is
+ volid, and place a single struct volintInfo entry within the variable-size
+ resultEntries object. 
+ \par
+ This is similar to the AFSVolListVolumes() call, which returns information on
+ all volumes on the specified partition. The full volume information is always
+ written into the returned entry (equivalent to setting the flags argument to
+ AFSVolListVolumes() to a non-zero value). 
+ \par Error Codes 
+ VOLSERILLEGAL PARTITION An illegal partition was specified by partID 
+ \n ENODEV The given volume was not found on the given partition. 
+ 
+ 	\subsection sec5-7.23 Section 5.7.23: AFSVolGetNthVolume - Get volume
+ header given its index 
+ 
+ \code
+ int AFSVolGetNthVolume(IN struct rx connection *z conn, 
+ 			IN long index, 
+ 			OUT long *volume, 
+ 			OUT long *partition) 
+ \endcode
+ \par Description 
+ Using index as a zero-based index into the set of volumes hosted by the server
+ chosen by the z conn argument, return the volume ID and partition of residence
+ for the given index. 
+ \Note This functionality has not yet been implemented. 
+ \par Error Codes 
+ VOLSERNO OP Not implemented. 
+ 
+ 	\subsection sec5-7.24 Section 5.7.24: AFSVolMonitor - Collect server
+ transaction state 
+ 
+ \code
+ int AFSVolMonitor(IN struct rx connection *z conn, 
+ 			OUT transDebugEntries *result) 
+ \endcode
+ \par Description 
+ This call allows the transaction state of a Volume Server to be monitored for
+ debugging purposes. Anyone wishing to supervise this Volume Server state may
+ call this routine, causing all active transactions to be recorded in the given
+ result object. 
+ \par Error Codes 
+ ---None. 
+ 
+ 	\page biblio Bibliography 
+ 
+ \li [1] Transarc Corporation. AFS 3.0 System Administrator's Guide,
+ F-30-0-D102, Pittsburgh, PA, April 1990. 
+ \li [2] Transarc Corporation. AFS 3.0 Command Reference Manual, F-30-0-D103,
+ Pittsburgh, PA, April 1990. 
+ \li [3] CMU Information Technology Center. 	Synchronization and Caching
+ Issues in the Andrew File System, USENIX Proceedings, Dallas, TX, Winter 1988. 
+ \li [4] Information Technology Center, Carnegie Mellon University. Ubik -A
+ Library For Managing Ubiquitous Data, ITCID, Pittsburgh, PA, Month, 1988. 
+ \li [5] Information Technology Center, Carnegie Mellon University. Quorum
+ Completion, ITCID, Pittsburgh, PA, Month, 1988. 
+ 
+ */
Index: openafs/doc/xml/banner.gif
Index: openafs/doc/xml/books.gif
Index: openafs/doc/xml/down.gif
Index: openafs/doc/xml/home.gif
Index: openafs/doc/xml/index.gif
Index: openafs/doc/xml/index.html
diff -c /dev/null openafs/doc/xml/index.html:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/index.html	Wed May 13 22:26:39 2009
***************
*** 0 ****
--- 1,55 ----
+ <html>
+ <head>
+ <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+ <title>OpenAFS Documentation</title>
+ </head>
+ 
+ <body bgcolor=white lang=EN-US link=blue vlink=purple>
+ 
+ <div class=Section1>
+ 
+ <p>
+ <a href="http://www.openafs.org/">
+ <img border=0 width=201 height=139 src="logo.jpg" align=left title="www.openafs.org"></a>
+ <a name="Top_Of_Page"></a></p>
+ 
+ <p>&nbsp;</p>
+ <p>&nbsp;</p>
+ 
+ <h1>Documentation</h1>
+ 
+ <p>&nbsp;</p>
+ <p>&nbsp;</p>
+ 
+ <p>Welcome to the OpenAFS Documentation set!</p>
+ 
+ <h3>Documentation:</h3>
+ 
+ <ul>
+ <li>Release Notes:
+   <ul>
+ <!--    <li><a href="ReleaseNotesUnix/index.html">Unix</a></li> -->
+     <li><a href="ReleaseNotesWindows/index.html">Microsoft Windows</a></li>
+   </ul>
+ </li>
+ <li>Quick Start Guides:
+   <ul>
+     <li><a href="QuickStartUnix/index.html">Unix</a></li>
+     <li><a href="http://www.dementia.org/twiki/bin/view/AFSLore/WindowsEndUserQuickStartGuide">Microsoft Windows</a></li>
+   </ul>
+ </li>
+ <li><a href="UserGuide/index.html">User Guide</a></li>
+ <li><a href="AdminGuide/index.html">Administrator Guide</a></li>
+ <li><a href="Reference/index">Reference Manual</a></li>
+ </ul>
+ <a name="Bot_Of_Page"></a>
+ 
+ </div>
+ 
+ </body>
+ 
+ </html>
+ 
+ 
+ 
+ 
Index: openafs/doc/xml/logo.jpg
Index: openafs/doc/xml/next.gif
Index: openafs/doc/xml/prev.gif
Index: openafs/doc/xml/up.gif
Index: openafs/doc/xml/AdminGuide/.cvsignore
diff -c /dev/null openafs/doc/xml/AdminGuide/.cvsignore:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/.cvsignore	Mon Jun  1 18:51:31 2009
***************
*** 0 ****
--- 1,4 ----
+ Makefile
+ *.html
+ *.pdf
+ version.xml
Index: openafs/doc/xml/AdminGuide/Makefile.in
diff -c /dev/null openafs/doc/xml/AdminGuide/Makefile.in:1.1.4.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/Makefile.in	Mon Jun  1 18:41:04 2009
***************
*** 0 ****
--- 1,42 ----
+ # Makefile to build the AFS Admin Guide for Unix.
+ #
+ # This makefile assumes that various utilities are available on the system.
+ # On Debian lenny, installing the packages:
+ #
+ #     dblatex
+ #     docbook-xsl
+ #     libxml2-utils
+ #     xsltproc
+ #
+ # gave me all the utilities needed.
+ #
+ # HTML_XSL is possibly specific to Debian and may need to be modified on other
+ # systems.
+ 
+ all: pdf html
+ 
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ VERSFILE=version
+ include @TOP_OBJDIR@/src/config/Makefile.version
+ 
+ BOOK     = auagd000.xml
+ SRCS     = $(BOOK) auagd005.xml auagd006.xml auagd007.xml auagd008.xml \
+ 	   auagd009.xml auagd010.xml auagd011.xml auagd012.xml auagd013.xml \
+ 	   auagd014.xml auagd015.xml auagd016.xml auagd017.xml auagd018.xml \
+ 	   auagd019.xml auagd020.xml auagd021.xml auagd022.xml auagd023.xml \
+ 	   auagd024.xml auagd025.xml
+ HTML_XSL = @HTML_XSL@
+ XSLTPROC = @XSLTPROC@
+ 
+ html: $(SRCS) $(VERSFILE).xml
+ 	$(XSLTPROC) --param navig.graphics 1 \
+ 	    --stringparam navig.graphics.path ../ $(HTML_XSL) $(BOOK)
+ 
+ pdf: $(SRCS) $(VERSFILE).xml
+ 	dblatex $(BOOK)
+ 
+ check:
+ 	xmllint --noout --valid $(BOOK)
+ 
+ clean:
+ 	rm -f *.html *.pdf
Index: openafs/doc/xml/AdminGuide/NTMakefile
diff -c /dev/null openafs/doc/xml/AdminGuide/NTMakefile:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/NTMakefile	Wed May 13 22:26:39 2009
***************
*** 0 ****
--- 1,83 ----
+ # Copyright 2009, Secure Endpoints Inc.
+ # All Rights Reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # - Redistributions of source code must retain the above copyright notice,
+ #   this list of conditions and the following disclaimer.
+ # - Redistributions in binary form must reproduce the above copyright notice,
+ #   this list of conditions and the following disclaimer in the documentation
+ #   and/or other materials provided with the distribution.
+ # - Neither the name of Secure Endpoints Inc. nor the names of its contributors
+ #   may be used to endorse or promote products derived from this software without
+ #   specific prior written permission from Secure Endpoints Inc..
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ !INCLUDE ..\..\..\src\config\NTMakefile.$(SYS_NAME)
+ !INCLUDE ..\..\..\src\config\NTMakefile.version
+ 
+ !IFNDEF CYGWIN
+ CYGWIN     = c:/cygwin
+ !ENDIF
+ !IFNDEF DOCBOOK_XSL
+ DOCBOOK_XSL = $(CYGWIN)/usr/share/docbook-xsl
+ !ENDIF
+ XSLTPROC   = xsltproc.exe
+ HTML_XSL = $(DOCBOOK_XSL)/html/chunk.xsl
+ HTML_PARMS = --param navig.graphics 1 --stringparam navig.graphics.path ../
+ CHM_XSL    = $(DOCBOOK_XSL)/htmlhelp/htmlhelp.xsl
+ 
+ XMLSRCS = \
+         auagd000.xml \
+         auagd005.xml \
+         auagd006.xml \
+         auagd007.xml \
+         auagd008.xml \
+         auagd009.xml \
+         auagd010.xml \
+         auagd011.xml \
+         auagd012.xml \
+         auagd013.xml \
+         auagd014.xml \
+         auagd015.xml \
+         auagd016.xml \
+         auagd017.xml \
+         auagd018.xml \
+         auagd019.xml \
+         auagd020.xml \
+         auagd021.xml \
+         auagd022.xml \
+         auagd023.xml \
+         auagd024.xml \
+         auagd025.xml \
+         auagd026.xml 
+ 
+ index.html: $(XMLSRCS)
+         @echo Building OpenAFS Administrator Guide in HTML format
+         $(XSLTPROC) $(HTML_PARMS) $(HTML_XSL) auagd000.xml 
+ 
+ htmlhelp.chm: $(XMLSRCS)
+         @echo Building OpenAFS Administrator Guide in HTML Help format
+         $(XSLTPROC) $(CHM_XSL) auagd000.xml
+         -hhc.exe htmlhelp.hhp
+         $(DEL) *.html
+         $(DEL) *.hh?
+         $(DEL) *.chw
+ 
+ install: htmlhelp.chm index.html
+ 
+ clean::
+         $(DEL) *.html
+         $(DEL) htmlhelp.chm
Index: openafs/doc/xml/AdminGuide/auagd000.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd000.xml:1.1.10.5
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd000.xml	Thu May 21 13:56:28 2009
***************
*** 0 ****
--- 1,109 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.3//EN"
+         "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+ <!ENTITY version SYSTEM "version.xml">
+ <!ENTITY preface SYSTEM "auagd005.xml">
+ <!ENTITY chapter1 SYSTEM "auagd006.xml">
+ <!ENTITY chapter2 SYSTEM "auagd007.xml">
+ <!ENTITY chapter3 SYSTEM "auagd008.xml">
+ <!ENTITY chapter4 SYSTEM "auagd009.xml">
+ <!ENTITY chapter5 SYSTEM "auagd010.xml">
+ <!ENTITY chapter6 SYSTEM "auagd011.xml">
+ <!ENTITY chapter7 SYSTEM "auagd012.xml">
+ <!ENTITY chapter8 SYSTEM "auagd013.xml">
+ <!ENTITY chapter9 SYSTEM "auagd014.xml">
+ <!ENTITY chapter10 SYSTEM "auagd015.xml">
+ <!ENTITY chapter11 SYSTEM "auagd016.xml">
+ <!ENTITY chapter12 SYSTEM "auagd017.xml">
+ <!ENTITY chapter13 SYSTEM "auagd018.xml">
+ <!ENTITY chapter14 SYSTEM "auagd019.xml">
+ <!ENTITY chapter15 SYSTEM "auagd020.xml">
+ <!ENTITY chapter16 SYSTEM "auagd021.xml">
+ <!ENTITY appendixA SYSTEM "auagd022.xml">
+ <!ENTITY appendixB SYSTEM "auagd023.xml">
+ <!ENTITY appendixC SYSTEM "auagd024.xml">
+ <!ENTITY appendixD SYSTEM "auagd025.xml">
+ ]>
+ <book>
+   <bookinfo>
+     <title>OpenAFS Administration Guide</title>
+ 
+     <copyright>
+       <year>2000</year>
+ 
+       <holder>IBM Corporation. All Rights Reserved</holder>
+     </copyright>
+ 
+     <revhistory>
+       &version;
+                                   
+       <revision>
+         <revnumber>3.6</revnumber>
+ 
+         <date>April 2000</date>
+ 
+         <revremark>First IBM Edition, Document Number GC09-4563-00</revremark>
+       </revision>
+     </revhistory>
+ 
+     <abstract>
+       <para>This edition applies to: <simplelist>
+           <member>OpenAFS for AIX, Version M.m</member>
+           <member>OpenAFS for Digital Unix, Version M.m</member>
+           <member>OpenAFS for HP-UX, Version M.m</member>
+           <member>OpenAFS for Linux, Version M.m</member>
+           <member>OpenAFS for SGI IRIX, Version M.m</member>
+           <member>OpenAFS for Solaris, Version M.m</member>
+         </simplelist></para>
+ 
+       <para>and to all subsequent releases and modifications until otherwise
+       indicated in new editions.This softcopy version is based on the printed
+       edition of this book. Some formatting amendments have been made to make
+       this information more suitable for softcopy.</para>
+     </abstract>
+   </bookinfo>
+ 
+   &preface;
+ 
+   <part>
+     <title>Concepts and Configuration Issues</title>
+ 
+     &chapter1;
+     &chapter2;
+   </part>
+ 
+   <part>
+     <title>Managing File Server Machines</title>
+ 
+     &chapter3;
+     &chapter4;
+     &chapter5;
+     &chapter6;
+     &chapter7; 
+     &chapter8;
+     &chapter9;
+   </part>
+ 
+   <part>
+     <title>Managing Client Machines</title>
+ 
+     &chapter10;
+     &chapter11;
+   </part>
+ 
+   <part>
+     <title>Managing Users and Groups</title>
+ 
+     &chapter12;
+     &chapter13;
+     &chapter14;
+     &chapter15;
+     &chapter16;
+   </part>
+ 
+   &appendixA;
+   &appendixB;
+   &appendixC;
+   &appendixD;
+   <index></index>
+ </book>
Index: openafs/doc/xml/AdminGuide/auagd005.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd005.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd005.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,207 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <preface id="Header_3">
+   <title>About This Guide</title>
+ 
+   <para>This section describes the purpose, organization, and conventions of this document.</para>
+ 
+   <sect1 id="HDRWQ1">
+     <title>Audience and Purpose</title>
+ 
+     <para>This guide describes the concepts and procedures that an AFS(R) system administrator needs to know. It assumes familiarity
+     with UNIX(R) administration, but no previous knowledge of AFS.</para>
+ 
+     <para>This document describes AFS commands in the context of specific tasks. Thus, it does not describe all commands in detail.
+     Refer to the OpenAFS Administration Reference for detailed command descriptions.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ2">
+     <title>Document Organization</title>
+ 
+     <para>This document groups AFS administrative tasks into the following conceptual sections: <itemizedlist>
+         <listitem>
+           <para>Concepts and Configuration Issues</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Managing File Server Machines</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Managing Client Machines</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Managing Users and Groups</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The individual chapters in each section contain the following: <itemizedlist>
+         <listitem>
+           <para>A chapter overview</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A quick reference list of the tasks and commands described in the chapter</para>
+         </listitem>
+ 
+         <listitem>
+           <para>An introduction to concepts that pertain to all of the tasks described in the chapter</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A set of sections devoted to specific tasks. Each section begins with a discussion of concepts specific to that
+           task, followed by step-by-step instructions for performing the task. The instructions are as specific as has been judged
+           practical. If two related procedures differ from one another in important details, separate sets of instructions are
+           usually provided.</para>
+         </listitem>
+       </itemizedlist></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ3">
+     <title>How to Use This Document</title>
+ 
+     <para>When you need to perform a specific administrative task, follow these steps:
+ 
+     <orderedlist>
+       <listitem>
+         <para>Determine if the task concerns file server machines, client machines, or users and groups. Turn to the appropriate
+         section in this document and then to the appropriate chapter.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Read or review the general introductory material at the beginning of the chapter.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Read or review the introductory material concerning the specific task you wish to perform.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Follow the step-by-step instructions for the task.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>If necessary, refer to the OpenAFS Administration Reference for more detailed information about the commands.</para>
+       </listitem>
+     </orderedlist>
+ </para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ4">
+     <title>Related Documents</title>
+ 
+     <para>The following documents are also included in the AFS documentation set.
+ 
+     <variablelist>
+       <varlistentry>
+         <term>OpenAFS Administration Reference</term>
+ 
+         <listitem>
+           <para>This reference manual details the syntax and effect of each AFS command. It is intended for the experienced AFS
+           administrator, programmer, or user. The OpenAFS Administration Reference lists AFS files and commands in alphabetical
+           order. The reference page for each command specifies its syntax, including the acceptable aliases and abbreviations. It
+           then describes the command's function, arguments, and output if any. Examples and a list of related commands are provided,
+           as are warnings where appropriate.</para>
+ 
+           <para>This manual complements the OpenAFS Administration Guide: it does not include procedural information, but describes
+           commands in more detail than the OpenAFS Administration Guide.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term>OpenAFS Quick Beginnings</term>
+ 
+         <listitem>
+           <para>This guide provides instructions for installing AFS server and client machines. It is assumed that the installer is
+           an experienced UNIX(R) system administrator.</para>
+ 
+           <para>For predictable performance, machines must be installed and configured in accordance with the instructions in this
+           guide.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term>OpenAFS Release Notes</term>
+ 
+         <listitem>
+           <para>This document provides information specific to each release of AFS, such as a list of new features and commands, a
+           list of requirements and limitations, and instructions for upgrading server and client machines.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term>OpenAFS User Guide</term>
+ 
+         <listitem>
+           <para>This guide presents the basic concepts and procedures necessary for using AFS effectively. It assumes that the
+           reader has some experience with UNIX, but does not require familiarity with networking or AFS.</para>
+ 
+           <para>The guide explains how to perform basic functions, including authenticating, changing a password, protecting AFS
+           data, creating groups, and troubleshooting. It provides illustrative examples for each function and describes some of the
+           differences between the UNIX file system and AFS.</para>
+         </listitem>
+       </varlistentry>
+     </variablelist>
+ </para>
+   </sect1>
+ 
+   <sect1 id="HDRTYPO_CONV">
+     <title>Typographical Conventions</title>
+ 
+     <para>This document uses the following typographical conventions:
+ 
+     <itemizedlist>
+       <listitem>
+         <para>Command and option names appear in <emphasis role="bold">bold type</emphasis> in syntax definitions, examples, and
+         running text. Names of directories, files, machines, partitions, volumes, and users also appear in <emphasis
+         role="bold">bold type</emphasis>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Variable information appears in <emphasis>italic type</emphasis>. This includes user-supplied information on command
+         lines and the parts of prompts that differ depending on who issues the command. New terms also appear in <emphasis>italic
+         type</emphasis>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Examples of screen output and file contents appear in <computeroutput>monospace type</computeroutput>.</para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <para>In addition, the following symbols appear in command syntax definitions, both in the documentation and in AFS online help
+     statements. When issuing a command, do not type these symbols. <itemizedlist>
+         <listitem>
+           <para>Square brackets <emphasis role="bold">[ ]</emphasis> surround optional items.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Angle brackets <emphasis role="bold">&lt; &gt;</emphasis> surround user-supplied values in AFS commands.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A superscripted plus sign <emphasis role="bold">+</emphasis> follows an argument that accepts more than one
+           value.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The percent sign <computeroutput>%</computeroutput> represents the regular command shell prompt. Some operating systems possibly use a different
+           character for this prompt.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The number sign <computeroutput>#</computeroutput> represents the command shell prompt for the local superuser <emphasis role="bold">root</emphasis>.
+           Some operating systems possibly use a different character for this prompt.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The pipe symbol <emphasis role="bold">|</emphasis> in a command syntax statement separates mutually exclusive values
+           for an argument.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>For additional information on AFS commands, including a description of command string components, acceptable abbreviations
+     and aliases, and how to get online help for commands, see <link linkend="HDRCOMMANDS">Appendix B, Using AFS
+     Commands</link>.</para>
+   </sect1>
+ </preface>
Index: openafs/doc/xml/AdminGuide/auagd006.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd006.xml:1.1.10.4
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd006.xml	Mon Jun  1 18:52:25 2009
***************
*** 0 ****
--- 1,1197 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ5">
+   <title>An Overview of OpenAFS Administration</title>
+ 
+   <para>This chapter provides a broad overview of the concepts and organization of AFS. It is strongly recommended that anyone
+   involved in administering an AFS cell read this chapter before beginning to issue commands.</para>
+ 
+   <sect1 id="HDRWQ6">
+     <title>A Broad Overview of AFS</title>
+ 
+     <para>This section introduces most of the key terms and concepts necessary for a basic understanding of AFS. For a more detailed
+     discussion, see <link linkend="HDRWQ7">More Detailed Discussions of Some Basic Concepts</link>.</para>
+ 
+     <sect2 renderas="sect3">
+       <title>AFS: A Distributed File System</title>
+ 
+       <para>AFS is a distributed file system that enables users to share and access all of the files stored in a network of
+       computers as easily as they access the files stored on their local machines. The file system is called distributed for this
+       exact reason: files can reside on many different machines (be distributed across them), but are available to users on every
+       machine.</para>
+     </sect2>
+ 
+     <sect2 renderas="sect3">
+       <title>Servers and Clients</title>
+ 
+       <para>In fact, AFS stores files on a subset of the machines in a network, called file server machines. File server machines
+       provide file storage and delivery service, along with other specialized services, to the other subset of machines in the
+       network, the client machines. These machines are called clients because they make use of the servers' services while doing
+       their own work. In a standard AFS configuration, clients provide computational power, access to the files in AFS and other
+       "general purpose" tools to the users seated at their consoles. There are generally many more client workstations than file
+       server machines.</para>
+ 
+       <para>AFS file server machines run a number of server processes, so called because each provides a distinct specialized
+       service: one handles file requests, another tracks file location, a third manages security, and so on. To avoid confusion, AFS
+       documentation always refers to server machines and server processes, not simply to servers. For a more detailed description of
+       the server processes, see <link linkend="HDRWQ17">AFS Server Processes and the Cache Manager</link>.</para>
+     </sect2>
+ 
+     <sect2 renderas="sect3">
+       <title>Cells</title>
+ 
+       <para>A cell is an administratively independent site running AFS. As a cell's system administrator, you make many decisions
+       about configuring and maintaining your cell in the way that best serves its users, without having to consult the
+       administrators in other cells. For example, you determine how many clients and servers to have, where to put files, and how to
+       allocate client machines to users.</para>
+     </sect2>
+ 
+     <sect2 renderas="sect3">
+       <title>Transparent Access and the Uniform Namespace</title>
+ 
+       <para>Although your AFS cell is administratively independent, you probably want to organize the local collection of files
+       (your filespace or tree) so that users from other cells can also access the information in it. AFS enables cells to combine
+       their local filespaces into a global filespace, and does so in such a way that file access is transparent--users do not need
+       to know anything about a file's location in order to access it. All they need to know is the pathname of the file, which looks
+       the same in every cell. Thus every user at every machine sees the collection of files in the same way, meaning that AFS
+       provides a uniform namespace to its users.</para>
+     </sect2>
+ 
+     <sect2 renderas="sect3">
+       <title>Volumes</title>
+ 
+       <para>AFS groups files into volumes, making it possible to distribute files across many machines and yet maintain a uniform
+       namespace. A volume is a unit of disk space that functions like a container for a set of related files, keeping them all
+       together on one partition. Volumes can vary in size, but are (by definition) smaller than a partition.</para>
+ 
+       <para>Volumes are important to system administrators and users for several reasons. Their small size makes them easy to move
+       from one partition to another, or even between machines. The system administrator can maintain maximum efficiency by moving
+       volumes to keep the load balanced evenly. In addition, volumes correspond to directories in the filespace--most cells store
+       the contents of each user home directory in a separate volume. Thus the complete contents of the directory move together when
+       the volume moves, making it easy for AFS to keep track of where a file is at a certain time. Volume moves are recorded
+       automatically, so users do not have to keep track of file locations.</para>
+     </sect2>
+ 
+     <sect2 renderas="sect3">
+       <title>Efficiency Boosters: Replication and Caching</title>
+ 
+       <para>AFS incorporates special features on server machines and client machines that help make it efficient and
+       reliable.</para>
+ 
+       <para>On server machines, AFS enables administrators to replicate commonly-used volumes, such as those containing binaries for
+       popular programs. Replication means putting an identical read-only copy (sometimes called a clone) of a volume on more than
+       one file server machine. The failure of one file server machine housing the volume does not interrupt users' work, because the
+       volume's contents are still available from other machines. Replication also means that one machine does not become
+       overburdened with requests for files from a popular volume.</para>
+ 
+       <para>On client machines, AFS uses caching to improve efficiency. When a user on a client workstation requests a file, the
+       Cache Manager on the client sends a request for the data to the File Server process running on the proper file server machine.
+       The user does not need to know which machine this is; the Cache Manager determines file location automatically. The Cache
+       Manager receives the file from the File Server process and puts it into the cache, an area of the client machine's local disk
+       or memory dedicated to temporary file storage. Caching improves efficiency because the client does not need to send a request
+       across the network every time the user wants the same file. Network traffic is minimized, and subsequent access to the file is
+       especially fast because the file is stored locally. AFS has a way of ensuring that the cached file stays up-to-date, called a
+       callback.</para>
+     </sect2>
+ 
+     <sect2 renderas="sect3">
+       <title>Security: Mutual Authentication and Access Control Lists</title>
+ 
+       <para>Even in a cell where file sharing is especially frequent and widespread, it is not desirable that every user have equal
+       access to every file. One way AFS provides adequate security is by requiring that servers and clients prove their identities
+       to one another before they exchange information. This procedure, called mutual authentication, requires that both server and
+       client demonstrate knowledge of a "shared secret" (like a password) known only to the two of them. Mutual authentication
+       guarantees that servers provide information only to authorized clients and that clients receive information only from
+       legitimate servers.</para>
+ 
+       <para>Users themselves control another aspect of AFS security, by determining who has access to the directories they own. For
+       any directory a user owns, he or she can build an access control list (ACL) that grants or denies access to the contents of
+       the directory. An access control list pairs specific users with specific types of access privileges. There are seven separate
+       permissions and up to twenty different people or groups of people can appear on an access control list.</para>
+ 
+       <para>For a more detailed description of AFS's mutual authentication procedure, see <link linkend="HDRWQ75">A More Detailed
+       Look at Mutual Authentication</link>. For further discussion of ACLs, see <link linkend="HDRWQ562">Managing Access Control
+       Lists</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ7">
+     <title>More Detailed Discussions of Some Basic Concepts</title>
+ 
+     <para>The previous section offered a brief overview of the many concepts that an AFS system administrator needs to understand.
+     The following sections examine some important concepts in more detail. Although not all concepts are new to an experienced
+     administrator, reading this section helps ensure a common understanding of term and concepts.</para>
+ 
+     <sect2 id="HDRWQ8">
+       <title>Networks</title>
+ 
+       <indexterm>
+         <primary>network</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <para>A <emphasis>network</emphasis> is a collection of interconnected computers able to communicate with each other and
+       transfer information back and forth.</para>
+ 
+       <para>A networked computing environment contrasts with two types of computing environments: <emphasis>mainframe</emphasis> and
+       <emphasis>personal</emphasis>. <indexterm>
+           <primary>network</primary>
+ 
+           <secondary>as computing environment</secondary>
+         </indexterm> <indexterm>
+           <primary>environment</primary>
+ 
+           <secondary>types compared</secondary>
+         </indexterm> <itemizedlist>
+           <listitem>
+             <para>A <emphasis>mainframe</emphasis> computing environment is the most traditional. It uses a single powerful computer
+             (the mainframe) to do the majority of the work in the system, both file storage and computation. It serves many users,
+             who access their files and issue commands to the mainframe via terminals, which generally have only enough computing
+             power to accept input from a keyboard and to display data on the screen.</para>
+ 
+             <indexterm>
+               <primary>mainframe</primary>
+ 
+               <secondary>computing environment</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>A <emphasis>personal</emphasis> computing environment is a single small computer that serves one (or, at the most,
+             a few) users. Like a mainframe computer, the single computer stores all the files and performs all computation. Like a
+             terminal, the personal computer provides access to the computer through a keyboard and screen.</para>
+ 
+             <indexterm>
+               <primary>personal</primary>
+ 
+               <secondary>computing environment</secondary>
+             </indexterm>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>A network can connect computers of any kind, but the typical network running AFS connects high-function personal
+       workstations. Each workstation has some computing power and local disk space, usually more than a personal computer or
+       terminal, but less than a mainframe. For more about the classes of machines used in an AFS environment, see <link
+       linkend="HDRWQ10">Servers and Clients</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ9">
+       <title>Distributed File Systems</title>
+ 
+       <indexterm>
+         <primary>file system</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>distributed file system</primary>
+       </indexterm>
+ 
+       <para>A <emphasis>file system</emphasis> is a collection of files and the facilities (programs and commands) that enable users
+       to access the information in the files. All computing environments have file systems. In a mainframe environment, the file
+       system consists of all the files on the mainframe's storage disks, whereas in a personal computing environment it consists of
+       the files on the computer's local disk.</para>
+ 
+       <para>Networked computing environments often use <emphasis>distributed file systems</emphasis> like AFS. A distributed file
+       system takes advantage of the interconnected nature of the network by storing files on more than one computer in the network
+       and making them accessible to all of them. In other words, the responsibility for file storage and delivery is "distributed"
+       among multiple machines instead of relying on only one. Despite the distribution of responsibility, a distributed file system
+       like AFS creates the illusion that there is a single filespace.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ10">
+       <title>Servers and Clients</title>
+ 
+       <indexterm>
+         <primary>server/client model</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server</primary>
+ 
+         <secondary>definition</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client</primary>
+ 
+         <secondary>definition</secondary>
+       </indexterm>
+ 
+       <para>AFS uses a server/client model. In general, a server is a machine, or a process running on a machine, that provides
+       specialized services to other machines. A client is a machine or process that makes use of a server's specialized service
+       during the course of its own work, which is often of a more general nature than the server's. The functional distinction
+       between clients and server is not always strict, however--a server can be considered the client of another server whose
+       service it is using.</para>
+ 
+       <para>AFS divides the machines on a network into two basic classes, <emphasis>file server machines</emphasis> and
+       <emphasis>client machines</emphasis>, and assigns different tasks and responsibilities to each.</para>
+ 
+       <formalpara>
+         <title>File Server Machines</title>
+ 
+         <indexterm>
+           <primary>file server machine</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>server</primary>
+ 
+           <secondary>process</secondary>
+ 
+           <tertiary>definition</tertiary>
+         </indexterm>
+ 
+         <para><emphasis>File server machines</emphasis> store the files in the distributed file system, and a <emphasis>server
+         process</emphasis> running on the file server machine delivers and receives files. AFS file server machines run a number of
+         <emphasis>server processes</emphasis>. Each process has a special function, such as maintaining databases important to AFS
+         administration, managing security or handling volumes. This modular design enables each server process to specialize in one
+         area, and thus perform more efficiently. For a description of the function of each AFS server process, see <link
+         linkend="HDRWQ17">AFS Server Processes and the Cache Manager</link>.</para>
+       </formalpara>
+ 
+       <para>Not all AFS server machines must run all of the server processes. Some processes run on only a few machines because the
+       demand for their services is low. Other processes run on only one machine in order to act as a synchronization site. See <link
+       linkend="HDRWQ90">The Four Roles for File Server Machines</link>.</para>
+ 
+       <formalpara>
+         <title>Client Machines</title>
+ 
+         <indexterm>
+           <primary>client</primary>
+ 
+           <secondary>machine</secondary>
+ 
+           <tertiary>definition</tertiary>
+         </indexterm>
+ 
+         <para>The other class of machines are the <emphasis>client machines</emphasis>, which generally work directly for users,
+         providing computational power and other general purpose tools. Clients also provide users with access to the files stored on
+         the file server machines. Clients do not run any special processes per se, but do use a modified kernel that enables them to
+         communicate with the AFS server processes running on the file server machines and to cache files. This collection of kernel
+         modifications is referred to as the Cache Manager; see <link linkend="HDRWQ28">The Cache Manager</link>. There are usually
+         many more client machines in a cell than file server machines.</para>
+       </formalpara>
+ 
+       <formalpara>
+         <title>Client and Server Configuration</title>
+ 
+         <indexterm>
+           <primary>personal</primary>
+ 
+           <secondary>workstation</secondary>
+ 
+           <tertiary>as typical AFS machine</tertiary>
+         </indexterm>
+ 
+         <para>In the most typical AFS configuration, both file server machines and client machines are high-function workstations
+         with disk drives. While this configuration is not required, it does have some advantages.</para>
+       </formalpara>
+ 
+       <para>There are several advantages to using personal workstations as file server machines. One is that it is easy to expand
+       the network by adding another file server machine. It is also easy to increase storage space by adding disks to existing
+       machines. Using workstations rather than more powerful mainframes makes it more economical to use multiple file server
+       machines rather than one. Multiple file server machines provide an increase in system availability and reliability if popular
+       files are available on more than one machine.</para>
+ 
+       <para>The advantage of using workstations as clients is that caching on the local disk speeds the delivery of files to
+       application programs. (For an explanation of caching, see <link linkend="HDRWQ16">Caching and Callbacks</link>.) Diskless
+       machines can access AFS if they are running NFS(R) and the NFS/AFS Translator, an optional component of the AFS
+       distribution.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ11">
+       <title>Cells</title>
+ 
+       <indexterm>
+         <primary>cell</primary>
+       </indexterm>
+ 
+       <para>A <emphasis>cell</emphasis> is an independently administered site running AFS. In terms of hardware, it consists of a
+       collection of file server machines and client machines defined as belonging to the cell; a machine can only belong to one cell
+       at a time. Users also belong to a cell in the sense of having an account in it, but unlike machines can belong to (have an
+       account in) multiple cells. To say that a cell is administratively independent means that its administrators determine many
+       details of its configuration without having to consult administrators in other cells or a central authority. For example, a
+       cell administrator determines how many machines of different types to run, where to put files in the local tree, how to
+       associate volumes and directories, and how much space to allocate to each user.</para>
+ 
+       <para>The terms <emphasis>local cell</emphasis> and <emphasis>home cell</emphasis> are equivalent, and refer to the cell in
+       which a user has initially authenticated during a session, by logging onto a machine that belongs to that cell. All other
+       cells are referred to as <emphasis>foreign</emphasis> from the user's perspective. In other words, throughout a login session,
+       a user is accessing the filespace through a single Cache Manager--the one on the machine to which he or she initially logged
+       in--whose cell membership defines the local cell. All other cells are considered foreign during that login session, even if
+       the user authenticates in additional cells or uses the <emphasis role="bold">cd</emphasis> command to change directories into
+       their file trees.</para>
+ 
+       <indexterm>
+         <primary>local cell</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>local</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>foreign cell</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>foreign</secondary>
+       </indexterm>
+ 
+       <para>It is possible to maintain more than one cell at a single geographical location. For instance, separate departments on a
+       university campus or in a corporation can choose to administer their own cells. It is also possible to have machines at
+       geographically distant sites belong to the same cell; only limits on the speed of network communication determine how
+       practical this is.</para>
+ 
+       <para>Despite their independence, AFS cells generally agree to make their local filespace visible to other AFS cells, so that
+       users in different cells can share files if they choose. If your cell is to participate in the "global" AFS namespace, it must
+       comply with a few basic conventions governing how the local filespace is configured and how the addresses of certain file
+       server machines are advertised to the outside world.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ12">
+       <title>The Uniform Namespace and Transparent Access</title>
+ 
+       <indexterm>
+         <primary>transparent access as AFS feature</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>access</primary>
+ 
+         <secondary>transparent (AFS feature)</secondary>
+       </indexterm>
+ 
+       <para>One of the features that makes AFS easy to use is that it provides transparent access to the files in a cell's
+       filespace. Users do not have to know which file server machine stores a file in order to access it; they simply provide the
+       file's pathname, which AFS automatically translates into a machine location.</para>
+ 
+       <para>In addition to transparent access, AFS also creates a <emphasis>uniform namespace</emphasis>--a file's pathname is
+       identical regardless of which client machine the user is working on. The cell's file tree looks the same when viewed from any
+       client because the cell's file server machines store all the files centrally and present them in an identical manner to all
+       clients.</para>
+ 
+       <para>To enable the transparent access and the uniform namespace features, the system administrator must follow a few simple
+       conventions in configuring client machines and file trees. For details, see <link linkend="HDRWQ39">Making Other Cells Visible
+       in Your Cell</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ13">
+       <title>Volumes</title>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>definition</secondary>
+       </indexterm>
+ 
+       <para>A <emphasis>volume</emphasis> is a conceptual container for a set of related files that keeps them all together on one
+       file server machine partition. Volumes can vary in size, but are (by definition) smaller than a partition. Volumes are the
+       main administrative unit in AFS, and have several characteristics that make administrative tasks easier and help improve
+       overall system performance. <itemizedlist>
+           <listitem>
+             <para>The relatively small size of volumes makes them easy to move from one partition to another, or even between
+             machines.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can maintain maximum system efficiency by moving volumes to keep the load balanced evenly among the different
+             machines. If a partition becomes full, the small size of individual volumes makes it easy to find enough room on other
+             machines for them.</para>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>in load balancing</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Each volume corresponds logically to a directory in the file tree and keeps together, on a single partition, all
+             the data that makes up the files in the directory. By maintaining (for example) a separate volume for each user's home
+             directory, you keep all of the user's files together, but separate from those of other users. This is an administrative
+             convenience that is impossible if the partition is the smallest unit of storage.</para>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>correspondence with directory</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>directory</primary>
+ 
+               <secondary>correspondence with volume</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>correspondence</primary>
+ 
+               <secondary>of volumes and directories</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The directory/volume correspondence also makes transparent file access possible, because it simplifies the process
+             of file location. All files in a directory reside together in one volume and in order to find a file, a file server
+             process need only know the name of the file's parent directory, information which is included in the file's pathname.
+             AFS knows how to translate the directory name into a volume name, and automatically tracks every volume's location, even
+             when a volume is moved from machine to machine. For more about the directory/volume correspondence, see <link
+             linkend="HDRWQ14">Mount Points</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Volumes increase file availability through replication and backup.</para>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>as unit of</secondary>
+ 
+               <tertiary>replication</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>as unit of</secondary>
+ 
+               <tertiary>backup</tertiary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Replication (placing copies of a volume on more than one file server machine) makes the contents more reliably
+             available; for details, see <link linkend="HDRWQ15">Replication</link>. Entire sets of volumes can be backed up to tape
+             and restored to the file system; see <link linkend="HDRWQ248">Configuring the AFS Backup System</link> and <link
+             linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>. In AFS, backup also refers to recording the state of a
+             volume at a certain time and then storing it (either on tape or elsewhere in the file system) for recovery in the event
+             files in it are accidentally deleted or changed. See <link linkend="HDRWQ201">Creating Backup Volumes</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Volumes are the unit of resource management. A space quota associated with each volume sets a limit on the maximum
+             volume size. See <link linkend="HDRWQ234">Setting and Displaying Volume Quota and Current Size</link>.</para>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>as unit of</secondary>
+ 
+               <tertiary>resource management</tertiary>
+             </indexterm>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ14">
+       <title>Mount Points</title>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>definition</secondary>
+       </indexterm>
+ 
+       <para>The previous section discussed how each volume corresponds logically to a directory in the file system: the volume keeps
+       together on one partition all the data in the files residing in the directory. The directory that corresponds to a volume is
+       called its <emphasis>root directory</emphasis>, and the mechanism that associates the directory and volume is called a
+       <emphasis>mount point</emphasis>. A mount point is similar to a symbolic link in the file tree that specifies which volume
+       contains the files kept in a directory. A mount point is not an actual symbolic link; its internal structure is
+       different.</para>
+ 
+       <note>
+         <para>You must not create a symbolic link to a file whose name begins with the number sign (#) or the percent sign (%),
+         because the Cache Manager interprets such a link as a mount point to a regular or read/write volume, respectively.</para>
+       </note>
+ 
+       <indexterm>
+         <primary>root directory</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>root</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>root directory of</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>mounting</secondary>
+       </indexterm>
+ 
+       <para>The use of mount points means that many of the elements in an AFS file tree that look and function just like standard
+       UNIX file system directories are actually mount points. In form, a mount point is a one-line file that names the volume
+       containing the data for files in the directory. When the Cache Manager (see <link linkend="HDRWQ28">The Cache Manager</link>)
+       encounters a mount point--for example, in the course of interpreting a pathname--it looks in the volume named in the mount
+       point. In the volume the Cache Manager finds an actual UNIX-style directory element--the volume's root directory--that lists
+       the files contained in the directory/volume. The next element in the pathname appears in that list.</para>
+ 
+       <para>A volume is said to be <emphasis>mounted</emphasis> at the point in the file tree where there is a mount point pointing
+       to the volume. A volume's contents are not visible or accessible unless it is mounted.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ15">
+       <title>Replication</title>
+ 
+       <indexterm>
+         <primary>replication</primary>
+ 
+         <secondary>definition</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>clone</primary>
+       </indexterm>
+ 
+       <para><emphasis>Replication</emphasis> refers to making a copy, or <emphasis>clone</emphasis>, of a source read/write volume
+       and then placing the copy on one or more additional file server machines in a cell. One benefit of replicating a volume is
+       that it increases the availability of the contents. If one file server machine housing the volume fails, users can still
+       access the volume on a different machine. No one machine need become overburdened with requests for a popular file, either,
+       because the file is available from several machines.</para>
+ 
+       <para>Replication is not necessarily appropriate for cells with limited disk space, nor are all types of volumes equally
+       suitable for replication (replication is most appropriate for volumes that contain popular files that do not change very
+       often). For more details, see <link linkend="HDRWQ50">When to Replicate Volumes</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ16">
+       <title>Caching and Callbacks</title>
+ 
+       <indexterm>
+         <primary>caching</primary>
+       </indexterm>
+ 
+       <para>Just as replication increases system availability, <emphasis>caching</emphasis> increases the speed and efficiency of
+       file access in AFS. Each AFS client machine dedicates a portion of its local disk or memory to a cache where it stores data
+       temporarily. Whenever an application program (such as a text editor) running on a client machine requests data from an AFS
+       file, the request passes through the Cache Manager. The Cache Manager is a portion of the client machine's kernel that
+       translates file requests from local application programs into cross-network requests to the <emphasis>File Server
+       process</emphasis> running on the file server machine storing the file. When the Cache Manager receives the requested data
+       from the File Server, it stores it in the cache and then passes it on to the application program.</para>
+ 
+       <para>Caching improves the speed of data delivery to application programs in the following ways:</para>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>When the application program repeatedly asks for data from the same file, it is already on the local disk. The
+           application does not have to wait for the Cache Manager to request and receive the data from the File Server.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Caching data eliminates the need for repeated request and transfer of the same data, so network traffic is reduced.
+           Thus, initial requests and other traffic can get through more quickly.</para>
+ 
+           <indexterm>
+             <primary>AFS</primary>
+ 
+             <secondary>reducing traffic in</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>network</primary>
+ 
+             <secondary>reducing traffic through caching</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>slowed performance</primary>
+ 
+             <secondary>preventing in AFS</secondary>
+           </indexterm>
+         </listitem>
+       </itemizedlist>
+ 
+       <indexterm>
+         <primary>callback</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>consistency guarantees</primary>
+ 
+         <secondary>cached data</secondary>
+       </indexterm>
+ 
+       <para>While caching provides many advantages, it also creates the problem of maintaining consistency among the many cached
+       copies of a file and the source version of a file. This problem is solved using a mechanism referred to as a
+       <emphasis>callback</emphasis>.</para>
+ 
+       <para>A callback is a promise by a File Server to a Cache Manager to inform the latter when a change is made to any of the
+       data delivered by the File Server. Callbacks are used differently based on the type of file delivered by the File Server:
+       <itemizedlist>
+           <listitem>
+             <para>When a File Server delivers a writable copy of a file (from a read/write volume) to the Cache Manager, the File
+             Server sends along a callback with that file. If the source version of the file is changed by another user, the File
+             Server breaks the callback associated with the cached version of that file--indicating to the Cache Manager that it
+             needs to update the cached copy.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When a File Server delivers a file from a read-only volume to the Cache Manager, the File Server sends along a
+             callback associated with the entire volume (so it does not need to send any more callbacks when it delivers additional
+             files from the volume). Only a single callback is required per accessed read-only volume because files in a read-only
+             volume can change only when a new version of the complete volume is released. All callbacks associated with the old
+             version of the volume are broken at release time.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The callback mechanism ensures that the Cache Manager always requests the most up-to-date version of a file. However, it
+       does not ensure that the user necessarily notices the most current version as soon as the Cache Manager has it. That depends
+       on how often the application program requests additional data from the File System or how often it checks with the Cache
+       Manager.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ17">
+     <title>AFS Server Processes and the Cache Manager</title>
+ 
+     <indexterm>
+       <primary>AFS</primary>
+ 
+       <secondary>server processes used in</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server</primary>
+ 
+       <secondary>process</secondary>
+ 
+       <tertiary>list of AFS</tertiary>
+     </indexterm>
+ 
+     <para>As mentioned in <link linkend="HDRWQ10">Servers and Clients</link>, AFS file server machines run a number of processes,
+     each with a specialized function. One of the main responsibilities of a system administrator is to make sure that processes are
+     running correctly as much of the time as possible, using the administrative services that the server processes provide.</para>
+ 
+     <para>The following list briefly describes the function of each server process and the Cache Manager; the following sections
+     then discuss the important features in more detail.</para>
+ 
+     <para>The <emphasis>File Server</emphasis>, the most fundamental of the servers, delivers data files from the file server
+     machine to local workstations as requested, and stores the files again when the user saves any changes to the files.</para>
+ 
+     <para>The <emphasis>Basic OverSeer Server (BOS Server)</emphasis> ensures that the other server processes on its server machine
+     are running correctly as much of the time as possible, since a server is useful only if it is available. The BOS Server relieves
+     system administrators of much of the responsibility for overseeing system operations.</para>
+ 
+     <para>The third-party <emphasis>Kerberos Server</emphasis> replaces the old <emphasis>Authentication Server</emphasis> and helps ensure that communications on the network are secure. It verifies
+     user identities at login and provides the facilities through which participants in transactions prove their identities to one
+     another (mutually authenticate).</para>
+ 
+     <para>The Protection Server helps users control who has access to their files and directories. Users can grant access to several
+     other users at once by putting them all in a group entry in the Protection Database maintained by the Protection Server.</para>
+ 
+     <para>The <emphasis>Volume Server</emphasis> performs all types of volume manipulation. It helps the administrator move volumes
+     from one server machine to another to balance the workload among the various machines.</para>
+ 
+     <para>The <emphasis>Volume Location Server (VL Server)</emphasis> maintains the Volume Location Database (VLDB), in which it
+     records the location of volumes as they move from file server machine to file server machine. This service is the key to
+     transparent file access for users.</para>
+ 
+     <para>The <emphasis>Update Server</emphasis> distributes new versions of AFS server process software and configuration
+     information to all file server machines. It is crucial to stable system performance that all server machines run the same
+     software.</para>
+ 
+     <para>The <emphasis>Backup Server</emphasis> maintains the Backup Database, in which it stores information related to the Backup
+     System. It enables the administrator to back up data from volumes to tape. The data can then be restored from tape in the event
+     that it is lost from the file system.</para>
+ 
+     <para>The <emphasis>Salvager</emphasis> is not a server in the sense that others are. It runs only after the File Server or
+     Volume Server fails; it repairs any inconsistencies caused by the failure. The system administrator can invoke it directly if
+     necessary.</para>
+ 
+     <para>The <emphasis>Network Time Protocol Daemon (NTPD)</emphasis> is not an AFS server process per se, but plays a vital role
+     nonetheless. It synchronizes the internal clock on a file server machine with those on other machines. Synchronized clocks are
+     particularly important for correct functioning of the AFS distributed database technology (known as Ubik); see <link
+     linkend="HDRWQ103">Configuring the Cell for Proper Ubik Operation</link>. The NTPD is usually provided with the operating system.</para>
+ 
+     <para>The <emphasis>Cache Manager</emphasis> is the one component in this list that resides on AFS client rather than file
+     server machines. It not a process per se, but rather a part of the kernel on AFS client machines that communicates with AFS
+     server processes. Its main responsibilities are to retrieve files for application programs running on the client and to maintain
+     the files in the cache.</para>
+ 
+     <sect2 id="HDRWQ18">
+       <title>The File Server</title>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>File Server</emphasis> is the most fundamental of the AFS server processes and runs on each file server
+       machine. It provides the same services across the network that the UNIX file system provides on the local disk: <itemizedlist>
+           <listitem>
+             <para>Delivering programs and data files to client workstations as requested and storing them again when the client
+             workstation finishes with them.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Maintaining the hierarchical directory structure that users create to organize their files.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Handling requests for copying, moving, creating, and deleting files and directories.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Keeping track of status information about each file and directory (including its size and latest modification
+             time).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Making sure that users are authorized to perform the actions they request on particular files or
+             directories.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Creating symbolic and hard links between files.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Granting advisory locks (corresponding to UNIX locks) on request.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ19">
+       <title>The Basic OverSeer Server</title>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Basic OverSeer Server (BOS Server)</emphasis> reduces the demands on system administrators by constantly
+       monitoring the processes running on its file server machine. It can restart failed processes automatically and provides a
+       convenient interface for administrative tasks.</para>
+ 
+       <para>The BOS Server runs on every file server machine. Its primary function is to minimize system outages. It also</para>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>Constantly monitors the other server processes (on the local machine) to make sure they are running
+           correctly.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Automatically restarts failed processes, without contacting a human operator. When restarting multiple server
+           processes simultaneously, the BOS server takes interdependencies into account and initiates restarts in the correct
+           order.</para>
+ 
+           <indexterm>
+             <primary>system outages</primary>
+ 
+             <secondary>reducing</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>outages</primary>
+ 
+             <secondary>BOS Server role in,</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Accepts requests from the system administrator. Common reasons to contact BOS are to verify the status of server
+           processes on file server machines, install and start new processes, stop processes either temporarily or permanently, and
+           restart dead processes manually.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Helps system administrators to manage system configuration information. The BOS server automates the process of
+           adding and changing <emphasis>server encryption keys</emphasis>, which are important in mutual authentication. The BOS
+           Server also provides a simple interface for modifying two files that contain information about privileged users and
+           certain special file server machines. For more details about these configuration files, see <link linkend="HDRWQ85">Common
+           Configuration Files in the /usr/afs/etc Directory</link>.</para>
+         </listitem>
+       </itemizedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ20">
+       <title>The Kerberos Server</title>
+ 
+       <indexterm>
+         <primary>Kerberos Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>description</secondary>
+         <seealso>Kerberos Server</seealso>
+       </indexterm>
+       <indexterm>
+         <primary>Active Directory</primary>
+         <secondary>Kerberos Server</secondary>
+       </indexterm>
+       <indexterm>
+         <primary>MIT Kerberos</primary>
+         <secondary>Kerberos Server</secondary>
+       </indexterm>
+       <indexterm>
+         <primary>Heimdal</primary>
+         <secondary>Kerberos Server</secondary>
+       </indexterm>
+ 
+ 
+       
+       <para>The <emphasis>Kerberos Server</emphasis> performs two main functions related to network security: <itemizedlist>
+           <listitem>
+             <para>Verifying the identity of users as they log into the system by requiring that they provide a password. The
+             Kerberos Server grants the user a ticket, which is converted into a token to prove to AFS server processes that the user has authenticated. For more
+             on tokens, see <link linkend="HDRWQ76">Complex Mutual Authentication</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Providing the means through which server and client processes prove their identities to each other (mutually
+             authenticate). This helps to create a secure environment in which to send cross-network messages.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The Kerberos Server is a required service which is provided by
+       a third-party Kerberos server that supports version 5 of the
+       Kerberos protocol. Kerberos server software is included with some
+       operating systems or may be acquired separately. MIT Kerberos,
+       Heimdal, and Microsoft Active Directory are known to work with
+       OpenAFS as a Kerberos Server.  (Most Kerberos commands begin with
+       the letter
+       <emphasis role="bold">k</emphasis>). This technology was originally developed by the Massachusetts Institute of Technology's
+       Project Athena.</para>
+ 
+       <para>The Kerberos Server also maintains the <emphasis>Authentication Database</emphasis>, in which it stores user
+       passwords converted into encryption key form as well as the AFS server encryption key. To learn more about the procedures AFS
+       uses to verify user identity and during mutual authentication, see <link linkend="HDRWQ75">A More Detailed Look at Mutual
+       Authentication</link>.</para>
+ 
+       <note><para>The <emphasis>Authentication Server</emphasis> known as
+       kaserver which uses Kerberos 4 is obsolete and has been replaced by
+       the Kerberos Server. All references to the <emphasis>Kerberos
+       Server</emphasis> in this guide refer to a Kerberos 5
+       server.</para></note>
+       
+ 
+       <indexterm>
+         <primary>AFS</primary>
+ 
+         <secondary></secondary>
+ 
+         <see>AFS UID</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>username</primary>
+ 
+         <secondary>use by Kerberos</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>UNIX</primary>
+ 
+         <secondary>UID</secondary>
+ 
+         <tertiary>functional difference from AFS UID</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Kerberos</primary>
+ 
+         <secondary>use of usernames</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ21">
+       <title>The Protection Server</title>
+ 
+       <indexterm>
+         <primary>protection</primary>
+ 
+         <secondary>in AFS</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>protection</primary>
+ 
+         <secondary>in UNIX</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Protection Server</emphasis> is the key to AFS's refinement of the normal UNIX methods for protecting
+       files and directories from unauthorized use. The refinements include the following: <itemizedlist>
+           <listitem>
+             <para>Defining seven access permissions rather than the standard UNIX file system's three. In conjunction with the UNIX
+             mode bits associated with each file and directory element, AFS associates an <emphasis>access control list
+             (ACL)</emphasis> with each directory. The ACL specifies which users have which of the seven specific permissions for the
+             directory and all the files it contains. For a definition of AFS's seven access permissions and how users can set them
+             on access control lists, see <link linkend="HDRWQ562">Managing Access Control Lists</link>.</para>
+ 
+             <indexterm>
+               <primary>access</primary>
+ 
+               <secondary></secondary>
+ 
+               <see>ACL</see>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Enabling users to grant permissions to numerous individual users--a different combination to each individual if
+             desired. UNIX protection distinguishes only between three user or groups: the owner of the file, members of a single
+             specified group, and everyone who can access the local file system.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Enabling users to define their own groups of users, recorded in the <emphasis>Protection Database</emphasis>
+             maintained by the Protection Server. The groups then appear on directories' access control lists as though they were
+             individuals, which enables the granting of permissions to many users simultaneously.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Enabling system administrators to create groups containing client machine IP addresses to permit access when it
+             originates from the specified client machines. These types of groups are useful when it is necessary to adhere to
+             machine-based licensing restrictions.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>definition</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+       </indexterm>
+ 
+       <para>The Protection Server's main duty is to help the File Server determine if a user is authorized to access a file in the
+       requested manner. The Protection Server creates a list of all the groups to which the user belongs. The File Server then
+       compares this list to the ACL associated with the file's parent directory. A user thus acquires access both as an individual
+       and as a member of any groups.</para>
+ 
+       <para>The Protection Server also maps usernames (the name typed at the login prompt) to <emphasis>AFS user ID</emphasis>
+       numbers (<emphasis>AFS UIDs</emphasis>). These UIDs are functionally equivalent to UNIX UIDs, but operate in the domain of AFS
+       rather than in the UNIX file system on a machine's local disk. This conversion service is essential because the tokens that
+       the Authentication Server grants to authenticated users are stamped with usernames (to comply with Kerberos standards). The
+       AFS server processes identify users by AFS UID, not by username. Before they can understand whom the token represents, they
+       need the Protection Server to translate the username into an AFS UID. For further discussion of tokens, see <link
+       linkend="HDRWQ75">A More Detailed Look at Mutual Authentication</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ22">
+       <title>The Volume Server</title>
+ 
+       <indexterm>
+         <primary>Volume Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Volume Server</emphasis> provides the interface through which you create, delete, move, and replicate
+       volumes, as well as prepare them for archiving to tape or other media (backing up). <link linkend="HDRWQ13">Volumes</link>
+       explained the advantages gained by storing files in volumes. Creating and deleting volumes are necessary when adding and
+       removing users from the system; volume moves are done for load balancing; and replication enables volume placement on multiple
+       file server machines (for more on replication, see <link linkend="HDRWQ15">Replication</link>).</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ23">
+       <title>The Volume Location (VL) Server</title>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VLDB</primary>
+       </indexterm>
+ 
+       <para>The <emphasis>VL Server</emphasis> maintains a complete list of volume locations in the <emphasis>Volume Location
+       Database (VLDB)</emphasis>. When the Cache Manager (see <link linkend="HDRWQ28">The Cache Manager</link>) begins to fill a
+       file request from an application program, it first contacts the VL Server in order to learn which file server machine
+       currently houses the volume containing the file. The Cache Manager then requests the file from the File Server process running
+       on that file server machine.</para>
+ 
+       <para>The VLDB and VL Server make it possible for AFS to take advantage of the increased system availability gained by using
+       multiple file server machines, because the Cache Manager knows where to find a particular file. Indeed, in a certain sense the
+       VL Server is the keystone of the entire file system--when the information in the VLDB is inaccessible, the Cache Manager
+       cannot retrieve files, even if the File Server processes are working properly. A list of the information stored in the VLDB
+       about each volume is provided in <link linkend="HDRWQ180">Volume Information in the VLDB</link>.</para>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>importance to transparent access</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ24">
+       <title>The Update Server</title>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Update Server</emphasis> is an optional process that helps guarantee that all file server machines are running the same version of a
+       server process. System performance can be inconsistent if some machines are running one version of the BOS Server (for
+       example) and other machines were running another version.</para>
+ 
+       <para>To ensure that all machines run the same version of a process, install new software on a single file server machine of
+       each system type, called the <emphasis>binary distribution machine</emphasis> for that type. The binary distribution machine
+       runs the server portion of the Update Server, whereas all the other machines of that type run the client portion of the Update
+       Server. The client portions check frequently with the <emphasis>server portion</emphasis> to see if they are running the right
+       version of every process; if not, the <emphasis>client portion</emphasis> retrieves the right version from the binary
+       distribution machine and installs it locally. The system administrator does not need to remember to install new software
+       individually on all the file server machines: the Update Server does it automatically. For more on binary distribution
+       machines, see <link linkend="HDRWQ93">Binary Distribution Machines</link>.</para>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>server portion</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>client portion</secondary>
+       </indexterm>
+ 
+       <para>The Update Server also distributes configuration files that all file
+       server machines need to store on their local disks (for a description of the contents and purpose of these files, see <link
+       linkend="HDRWQ85">Common Configuration Files in the /usr/afs/etc Directory</link>). As with server process software, the need
+       for consistent system performance demands that all the machines have the same version of these files.
+       The system administrator needs to make changes to these files on one machine only, the cell's <emphasis>system
+       control machine</emphasis>, which runs a server portion of the Update Server. All other machines in the cell run a client
+       portion that accesses the correct versions of these configuration files from the system control machine. Cells running the
+       international edition of AFS do not use a system control machine to distribute configuration files. For more information, see
+       <link linkend="HDRWQ94">The System Control Machine</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ25">
+       <title>The Backup Server</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>Backup Server described</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Backup Server</emphasis> maintains the information in the <emphasis>Backup Database</emphasis>. The Backup
+       Server and the Backup Database enable administrators to back up data from AFS volumes to tape and restore it from tape to the
+       file system if necessary. The server and database together are referred to as the Backup System.</para>
+ 
+       <para>Administrators initially configure the Backup System by defining sets of volumes to be dumped together and the schedule
+       by which the sets are to be dumped. They also install the system's tape drives and define the drives' <emphasis>Tape
+       Coordinators</emphasis>, which are the processes that control the tape drives.</para>
+ 
+       <para>Once the Backup System is configured, user and system data can be dumped from volumes to tape or disk. In the event that data is
+       ever lost from the system (for example, if a system or disk failure causes data to be lost), administrators can restore the
+       data from tape. If tapes are periodically archived, or saved, data can also be restored to its state at a specific time.
+       Additionally, because Backup System data is difficult to reproduce, the Backup Database itself can be backed up to tape and
+       restored if it ever becomes corrupted. For more information on configuring and using the Backup System, see <link
+       linkend="HDRWQ248">Configuring the AFS Backup System</link> and <link linkend="HDRWQ283">Backing Up and Restoring AFS
+       Data</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ26">
+       <title>The Salvager</title>
+ 
+       <indexterm>
+         <primary>Salvager</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Salvager</emphasis> differs from other AFS Servers in that it runs only at selected times. The BOS Server
+       invokes the Salvager when the File Server, Volume Server, or both fail. The Salvager attempts to repair disk corruption that
+       can result from a failure.</para>
+ 
+       <para>As a system administrator, you can also invoke the Salvager as necessary, even if the File Server or Volume Server has
+       not failed. See <link linkend="HDRWQ232">Salvaging Volumes</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ27">
+       <title>The Network Time Protocol Daemon</title>
+ 
+       <indexterm>
+         <primary>ntpd</primary>
+ 
+         <secondary>description</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis>Network Time Protocol Daemon (NTPD)</emphasis> is not an AFS server process per se, but plays an important
+       role. It helps guarantee that all of the file server machines and client machines agree on the time. The NTPD on all file server machines learns the correct time from a parent NTPD source, which may be located inside or outside the cell.</para>
+ 
+       <para>Keeping clocks synchronized is particularly important to the correct operation of AFS's distributed database technology,
+       which coordinates the copies of the Backup, Protection, and Volume Location Databases; see <link
+       linkend="HDRWQ52">Replicating the OpenAFS Administrative Databases</link>. Client machines may also refer to these clocks for the
+       correct time; therefore, it is less confusing if all file server machines have the same time. For more technical detail about
+       the NTPD, see <ulink url="http://www.ntp.org/">The NTP web site</ulink> or the documentation for your operating system.</para>
+ 
+       <important><title>Clock Skew Impact</title>
+       <para>Client machines that are authenticating to an OpenAFS cell
+       with valid credentials may still fail when the clocks of the client
+       machine, Kerberos server, and the fileserver machines are not in
+       sync.</para></important>
+ 
+       <note><title>Legacy runntp</title>
+       <para>It is no longer recommended to run the legacy NTPD process
+       called <emphasis>runntp</emphasis> that is part of the OpenAFS
+       suite. Running the NTPD software that comes with your operating
+       system or from <ulink url="http://www.ntp.org/">www.ntp.org</ulink>
+       is preferred.</para></note>
+ 
+     </sect2>
+ 
+     <sect2 id="HDRWQ28">
+       <title>The Cache Manager</title>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>functions of</secondary>
+       </indexterm>
+ 
+       <para>As already mentioned in <link linkend="HDRWQ16">Caching and Callbacks</link>, the <emphasis>Cache Manager</emphasis> is
+       the one component in this section that resides on client machines rather than on file server machines. It is not technically a
+       stand-alone process, but rather a set of extensions or modifications in the client machine's kernel that enable communication
+       with the server processes running on server machines. Its main duty is to translate file requests (made by application
+       programs on client machines) into <emphasis>remote procedure calls (RPCs)</emphasis> to the File Server. (The Cache Manager
+       first contacts the VL Server to find out which File Server currently houses the volume that contains a requested file, as
+       mentioned in <link linkend="HDRWQ23">The Volume Location (VL) Server</link>). When the Cache Manager receives the requested
+       file, it caches it before passing data on to the application program.</para>
+ 
+       <para>The Cache Manager also tracks the state of files in its cache compared to the version at the File Server by storing the
+       callbacks sent by the File Server. When the File Server breaks a callback, indicating that a file or volume changed, the Cache
+       Manager requests a copy of the new version before providing more data to application programs.</para>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/AdminGuide/auagd007.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd007.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd007.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,4101 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ29">
+   <title>Issues in Cell Configuration and Administration</title>
+ 
+   <para>This chapter discusses many of the issues to consider when configuring and administering a cell, and directs you to detailed
+   related information available elsewhere in this guide. It is assumed you are already familiar with the material in <link
+   linkend="HDRWQ5">An Overview of OpenAFS Administration</link>.</para>
+ 
+   <para>It is best to read this chapter before installing your cell's first file server machine or performing any other
+   administrative task.</para>
+ 
+   <indexterm>
+     <primary>AFS</primary>
+ 
+     <secondary>differences from UNIX summarized</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>UNIX</primary>
+ 
+     <secondary>differences from AFS summarized</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>differences</primary>
+ 
+     <secondary>between AFS and UNIX, summarized</secondary>
+   </indexterm>
+ 
+   <sect1 id="HDRWQ30">
+     <title>Differences between AFS and UNIX: A Summary</title>
+ 
+     <para>AFS behaves like a standard UNIX file system in most respects, while also making file sharing easy within and between
+     cells. This section describes some differences between AFS and the UNIX file system, referring you to more detailed information
+     as appropriate.</para>
+ 
+     <indexterm>
+       <primary>protection</primary>
+ 
+       <secondary>AFS compared to UNIX</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_35">
+       <title>Differences in File and Directory Protection</title>
+ 
+       <para>AFS augments the standard UNIX file protection mechanism in two ways: it associates an <emphasis>access control list
+       (ACL)</emphasis> with each directory, and it enables users to define a large number of their own groups, which can be placed
+       on ACLs.</para>
+ 
+       <para>AFS uses ACLs to protect files and directories, rather than relying exclusively on the mode bits. This has several
+       implications, which are discussed further in the indicated sections: <itemizedlist>
+           <listitem>
+             <para>AFS ACLs use seven access permissions rather than the three UNIX mode bits. See <link linkend="HDRWQ567">The AFS
+             ACL Permissions</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>For directories, AFS ignores the UNIX mode bits. For files, AFS uses only the first set of mode bits (the
+             <emphasis role="bold">owner</emphasis> bits) , and their meaning interacts with permissions on the directory's ACL. See
+             <link linkend="HDRWQ580">How AFS Interprets the UNIX Mode Bits</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A directory's ACL protects all of the files in a directory in the same manner. To apply a more restrictive set of
+             AFS permissions to certain file, place it in directory with a different ACL.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Moving a file to a different directory changes its protection. See <link linkend="HDRWQ566">Differences Between
+             UFS and AFS Data Protection</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>An ACL can include about 20 entries granting different combinations of permissions to different users or groups,
+             rather than only the three UNIX entities represented by the three sets of mode bits. See <link
+             linkend="HDRWQ566">Differences Between UFS and AFS Data Protection</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can designate an AFS file as write-only as in the UNIX file system, by setting only the <emphasis
+             role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) mode bit. You cannot designate an AFS directory as
+             write-only, because AFS ignores the mode bits on a directory. See <link linkend="HDRWQ580">How AFS Interprets the UNIX
+             Mode Bits</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>AFS enables users to define the groups of other users. Placing these groups on ACLs extends the same permissions to a
+       number of exactly specified users at the same time, which is much more convenient than placing the individuals on the ACLs
+       directly. See <link linkend="HDRWQ531">Administering the Protection Database</link>.</para>
+ 
+       <para>There are also system-defined groups, <emphasis role="bold">system:anyuser</emphasis> and <emphasis
+       role="bold">system:authuser</emphasis>, whose presence on an ACL extends access to a wide range of users at once. See <link
+       linkend="HDRWQ535">The System Groups</link> and <link linkend="HDRWQ571">Using Groups on ACLs</link>.</para>
+ 
+       <indexterm>
+         <primary>authentication</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ31">
+       <title>Differences in Authentication</title>
+ 
+       <para>Just as the AFS filespace is distinct from each machine's local file system, AFS authentication is separate from local
+       login. This has two practical implications, which are discussed further in <link linkend="HDRWQ65">Using an AFS-modified login
+       Utility</link>. <itemizedlist>
+           <listitem>
+             <para>To access AFS files, users must both log into the local machine's UNIX file system and authenticate with the AFS
+             authentication service. (Logging into the local UNIX file system is necessary because the AFS filespace is accessed
+             through the Cache Manager, which resides in the local machine's kernel.)</para>
+ 
+             <para>AFS provides a modified login utility for each system type that accomplishes both local login and AFS
+             authentication in one step, based on a single password. If you choose not to use the AFS-modified login utility, your
+             users must login and authenticate in separate steps, as detailed in the <emphasis>OpenAFS User Guide</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Passwords are stored in two separate places: the Authentication Database for AFS and each machine's local password
+             file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent) for the UNIX file system. A user's passwords in the
+             two places can differ if desired, though the resulting behavior depends on whether and how the cell is using an
+             AFS-modified login utility.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_37">
+       <title>Differences in the Semantics of Standard UNIX Commands</title>
+ 
+       <para>This section summarizes how AFS modifies the functionality of some UNIX commands. <variablelist>
+           <indexterm>
+             <primary>chmod command</primary>
+ 
+             <secondary>AFS compared to UNIX</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>chmod (AFS compared to UNIX)</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>setuid programs</primary>
+ 
+             <secondary>setting mode bits</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The chmod command</emphasis></term>
+ 
+             <listitem>
+               <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can use this command to turn on
+               the setuid, setgid or sticky mode bits on AFS files. For more information, see <link linkend="HDRWQ409">Determining if
+               a Client Can Run Setuid Programs</link>.</para>
+ 
+               <indexterm>
+                 <primary>chown command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>chown (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The chown command</emphasis></term>
+ 
+             <listitem>
+               <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can issue this command on AFS
+               files.</para>
+ 
+               <indexterm>
+                 <primary>chgrp command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>chgrp (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The chgrp command</emphasis></term>
+ 
+             <listitem>
+               <para>Only members of the <emphasis role="bold">system:administrators</emphasis> can issue this command on AFS files
+               and directories.</para>
+ 
+               <indexterm>
+                 <primary>ftpd command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>ftpd (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The ftpd daemon</emphasis></term>
+ 
+             <listitem>
+               <para>The AFS-modified version of this daemon attempts to authenticate remote issuers of the <emphasis
+               role="bold">ftp</emphasis> command with the local AFS authentication service. See <link linkend="HDRWQ78">Using UNIX
+               Remote Services in the AFS Environment</link>.</para>
+ 
+               <indexterm>
+                 <primary>groups command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>groups (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The groups command</emphasis></term>
+ 
+             <listitem>
+               <para>If the user's AFS tokens are associated with a process authentication group (PAG), the output of this command
+               sometimes includes two large numbers. To learn about PAGs, see <link linkend="HDRWQ64">Identifying AFS Tokens by
+               PAG</link>.</para>
+ 
+               <indexterm>
+                 <primary>inetd command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>inetd (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The inetd daemon</emphasis></term>
+ 
+             <listitem>
+               <para>The AFS-modified version of this daemon authenticates remote issuers of the AFS-modified <emphasis
+               role="bold">rcp</emphasis> and <emphasis role="bold">rsh</emphasis> commands with the local AFS authentication
+               service. See <link linkend="HDRWQ78">Using UNIX Remote Services in the AFS Environment</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The login utility</emphasis></term>
+ 
+             <listitem>
+               <para>AFS-modified login utilities both log the issuer into the local file system and authenticate the user with the
+               AFS authentication service. See <link linkend="HDRWQ65">Using an AFS-modified login Utility</link>.</para>
+ 
+               <indexterm>
+                 <primary>ln command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>ln (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The ln command</emphasis></term>
+ 
+             <listitem>
+               <para>This command cannot create hard links between files in different AFS directories. See <link
+               linkend="HDRWQ32">Creating Hard Links</link>.</para>
+ 
+               <indexterm>
+                 <primary>rcp command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>rcp (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The rcp command</emphasis></term>
+ 
+             <listitem>
+               <para>The AFS-modified version of this command enables the issuer to access files on the remote machine as an
+               authenticated AFS user. See <link linkend="HDRWQ78">Using UNIX Remote Services in the AFS Environment</link>.</para>
+ 
+               <indexterm>
+                 <primary>rlogind command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>rlogind (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The rlogind daemon</emphasis></term>
+ 
+             <listitem>
+               <para>The AFS-modified version of this daemon authenticates remote issuers of the <emphasis
+               role="bold">rlogin</emphasis> command with the local AFS authentication service. See <link linkend="HDRWQ78">Using
+               UNIX Remote Services in the AFS Environment</link>.</para>
+ 
+               <para>The AFS distribution for some system types possibly does not include a modified <emphasis
+               role="bold">rlogind</emphasis> program. See the <emphasis>OpenAFS Release Notes</emphasis>.</para>
+ 
+               <indexterm>
+                 <primary>rsh command</primary>
+ 
+                 <secondary>AFS compared to UNIX</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>rsh (AFS compared to UNIX)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The remsh or rsh command</emphasis></term>
+ 
+             <listitem>
+               <para>The AFS-modified version of this command enables the issuer to execute commands on the remote machine as an
+               authenticated AFS user. See <link linkend="HDRWQ78">Using UNIX Remote Services in the AFS Environment</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>fsck command</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fsck (AFS compared to UNIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fsck command</primary>
+ 
+         <secondary>AFS version</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fsck (AFS version)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>lost+found</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>lost+found directory</primary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_38">
+       <title>The AFS version of the fsck Command</title>
+ 
+       <para>Never run the standard UNIX <emphasis role="bold">fsck</emphasis> command on an AFS file server machine. It does not
+       understand how the File Server organizes volume data on disk, and so moves all AFS data into the <emphasis
+       role="bold">lost+found</emphasis> directory on the partition.</para>
+ 
+       <para>Instead, use the version of the <emphasis role="bold">fsck</emphasis> program that is included in the AFS distribution.
+       The <emphasis>OpenAFS Quick Beginnings</emphasis> explains how to replace the vendor-supplied <emphasis
+       role="bold">fsck</emphasis> program with the AFS version as you install each server machine.</para>
+ 
+       <para>The AFS version functions like the standard <emphasis role="bold">fsck</emphasis> program on data stored on both UFS and
+       AFS partitions. The appearance of a banner like the following as the <emphasis role="bold">fsck</emphasis> program initializes
+       confirms that you are running the correct one:</para>
+ 
+       <programlisting>
+    --- AFS (R) version fsck---
+ </programlisting>
+ 
+       <para>where <emphasis>version</emphasis> is the AFS version. For correct results, it must match the AFS version of the server
+       binaries in use on the machine.</para>
+ 
+       <para>If you ever accidentally run the standard version of the program, contact AFS Product Support immediately. It is
+       sometimes possible to recover volume data from the <emphasis role="bold">lost+found</emphasis> directory.</para>
+ 
+       <indexterm>
+         <primary>hard link</primary>
+ 
+         <secondary>AFS restrictions on</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restrictions</primary>
+ 
+         <secondary>on hard links in AFS</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ32">
+       <title>Creating Hard Links</title>
+ 
+       <para>AFS does not allow hard links (created with the UNIX <emphasis role="bold">ln</emphasis> command) between files that
+       reside in different directories, because in that case it is unclear which of the directory's ACLs to associate with the
+       link.</para>
+ 
+       <para>AFS also does not allow hard links to directories, in order to keep the file system organized as a tree.</para>
+ 
+       <para>It is possible to create symbolic links (with the UNIX <emphasis role="bold">ln -s</emphasis> command) between elements
+       in two different AFS directories, or even between an element in AFS and one in a machine's local UNIX file system. Do not
+       create a symbolic link to a file whose name begins with either a number sign (<emphasis role="bold">#</emphasis>) or a percent
+       sign (<emphasis role="bold">%</emphasis>), however. The Cache Manager interprets such links as a mount point to a regular or
+       read/write volume, respectively.</para>
+ 
+       <indexterm>
+         <primary>fsync system call</primary>
+ 
+         <secondary>for files saved on AFS client</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>close system call</primary>
+ 
+         <secondary>for files saved on AFS client</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>write</primary>
+ 
+         <secondary>system call for files saved on AFS client</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ33">
+       <title>AFS Implements Save on Close</title>
+ 
+       <para>When an application issues the UNIX <emphasis role="bold">close</emphasis> system call on a file, the Cache Manager
+       performs a synchronous write of the data to the File Server that maintains the central copy of the file. It does not return
+       control to the application until the File Server has acknowledged receipt of the data. For the <emphasis
+       role="bold">fsync</emphasis> system call, control does not return to the application until the File Server indicates that it
+       has written the data to non-volatile storage on the file server machine.</para>
+ 
+       <para>When an application issues the UNIX <emphasis role="bold">write</emphasis> system call, the Cache Manager writes
+       modifications to the local AFS client cache only. If the local machine crashes or an application program exits without issuing
+       the <emphasis role="bold">close</emphasis> system call, it is possible that the modifications are not recorded in the central
+       copy of the file maintained by the File Server. The Cache Manager does sometimes write this type of modified data from the
+       cache to the File Server without receiving the <emphasis role="bold">close</emphasis> or <emphasis
+       role="bold">fsync</emphasis> system call, for example if it needs to free cache chunks for new data. However, it is not
+       generally possible to predict when the Cache Manager transfers modified data to the File Server in this way.</para>
+ 
+       <para>The implication is that if an application's <emphasis role="bold">Save</emphasis> option invokes the <emphasis
+       role="bold">write</emphasis> system call rather than <emphasis role="bold">close</emphasis> or <emphasis
+       role="bold">fsync</emphasis>, the changes are not necessarily stored permanently on the File Server machine. Most application
+       programs issue the <emphasis role="bold">close</emphasis> system call for save operations, as well as when they finish
+       handling a file and when they exit.</para>
+     </sect2>
+ 
+     <sect2 id="Header_41">
+       <title>Setuid Programs</title>
+ 
+       <indexterm>
+         <primary>setuid programs</primary>
+ 
+         <secondary>restrictions on</secondary>
+       </indexterm>
+ 
+       <para>Set the UNIX setuid bit only for the local superuser <emphasis role="bold">root</emphasis>; this does not present an
+       automatic security risk: the local superuser has no special privilege in AFS, but only in the local machine's UNIX file system
+       and kernel.</para>
+ 
+       <para>Any file can be marked with the setuid bit, but only members of the <emphasis
+       role="bold">system:administrators</emphasis> group can issue the <emphasis role="bold">chown</emphasis> system call or the
+       <emphasis role="bold">/etc/chown</emphasis> command.</para>
+ 
+       <para>The <emphasis role="bold">fs setcell</emphasis> command determines whether setuid programs that originate in a foreign
+       cell can run on a given client machine. See <link linkend="HDRWQ409">Determining if a Client Can Run Setuid
+       Programs</link>.</para>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>name</secondary>
+ 
+         <tertiary>choosing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>choosing</primary>
+ 
+         <secondary>name</secondary>
+ 
+         <tertiary>cell</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>conventions</primary>
+ 
+         <secondary>cell name</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Internet</primary>
+ 
+         <secondary>conventions for cell name</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ34">
+     <title>Choosing a Cell Name</title>
+ 
+     <para>This section explains how to choose a cell name and explains why choosing an appropriate cell name is important.</para>
+ 
+     <para>Your cell name must distinguish your cell from all others in the AFS global namespace. By conventions, the cell name is
+     the second element in any AFS pathname; therefore, a unique cell name guarantees that every AFS pathname uniquely identifies a
+     file, even if cells use the same directory names at lower levels in their local AFS filespace. For example, both the ABC
+     Corporation cell and the State University cell can have a home directory for the user <emphasis role="bold">pat</emphasis>,
+     because the pathnames are distinct: <emphasis role="bold">/afs/abc.com/usr/pat</emphasis> and <emphasis
+     role="bold">/afs/stateu.edu/usr/pat</emphasis>.</para>
+ 
+     <para>By convention, cell names follow the ARPA Internet Domain System conventions for site names. If you are already an
+     Internet site, then it is simplest to choose your Internet domain name as the cellname.</para>
+ 
+     <para>If you are not an Internet site, it is best to choose a unique Internet-style name, particularly if you plan to connect to
+     the Internet in the future. AFS Product Support is available for help in selecting an appropriate name. There are a few
+     constraints on AFS cell names: <itemizedlist>
+         <listitem>
+           <para>It can contain as many as 64 characters, but shorter names are better because the cell name frequently is part of
+           machine and file names. If your cell name is long, you can reduce pathname length by creating a symbolic link to the
+           complete cell name, at the second level in your file tree. See <link linkend="HDRWQ42">The Second (Cellname)
+           Level</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To guarantee it is suitable for different operating system types, the cell name can contain only lowercase
+           characters, numbers, underscores, dashes, and periods. Do not include command shell metacharacters.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It can include any number of fields, which are conventionally separated by periods (see the examples below).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It must end in a suffix that indicates the type of institution it is, or the country in which it is situated. The
+           following are some of the standard suffixes: <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">.com</emphasis></term>
+ 
+                 <listitem>
+                   <para>For businesses and other commercial organizations. Example: <emphasis role="bold">abc.com</emphasis> for the
+                   ABC Corporation cell.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">.edu</emphasis></term>
+ 
+                 <listitem>
+                   <para>For educational institutions such as universities. Example: <emphasis role="bold">stateu.edu</emphasis> for
+                   the State University cell.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">.gov</emphasis></term>
+ 
+                 <listitem>
+                   <para>For United States government institutions.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">.mil</emphasis></term>
+ 
+                 <listitem>
+                   <para>For United States military installations.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>Internet</primary>
+ 
+       <secondary>Network Information Center</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Network Information Center (for Internet)</primary>
+     </indexterm>
+ 
+     <para>Other suffixes are available if none of these are appropriate. You can learn about suffixes by calling the Defense Data
+     Network [Internet] Network Information Center in the United States at (800) 235-3155. The NIC can also provide you with the
+     forms necessary for registering your cell name as an Internet domain name. Registering your name prevents another Internet site
+     from adopting the name later.</para>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>cell name</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cell</primary>
+ 
+       <secondary>name</secondary>
+ 
+       <tertiary>setting</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server machine</primary>
+ 
+       <secondary>setting home cell</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>setting home cell</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_43">
+       <title>How to Set the Cell Name</title>
+ 
+       <para>The cell name is recorded in two files on the local disk of each file server and client machine. Among other functions,
+       these files define the machine's cell membership and so affect how programs and processes run on the machine; see <link
+       linkend="HDRWQ35">Why Choosing the Appropriate Cell Name is Important</link>. The procedure for setting the cell name is
+       different for the two types of machines.</para>
+ 
+       <para>For file server machines, the two files that record the cell name are the <emphasis
+       role="bold">/usr/afs/etc/ThisCell</emphasis> and <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> files. As described
+       more explicitly in the <emphasis>OpenAFS Quick Beginnings</emphasis>, you set the cell name in both by issuing the <emphasis
+       role="bold">bos setcellname</emphasis> command on the first file server machine you install in your cell. It is not usually
+       necessary to issue the command again. If you run the United States edition of AFS and use the Update Server, it distributes
+       its copy of the <emphasis role="bold">ThisCell</emphasis> and <emphasis role="bold">CellServDB</emphasis> files to additional
+       server machines that you install. If you use the international edition of AFS, the <emphasis>OpenAFS Quick
+       Beginnings</emphasis> explains how to copy the files manually.</para>
+ 
+       <para>For client machines, the two files that record the cell name are the <emphasis
+       role="bold">/usr/vice/etc/ThisCell</emphasis> and <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> files. You create
+       these files on a per-client basis, either with a text editor or by copying them onto the machine from a central source in AFS.
+       See <link linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link> for details.</para>
+ 
+       <para>Change the cell name in these files only when you want to transfer the machine to a different cell (it can only belong
+       to one cell at a time). If the machine is a file server, follow the complete set of instructions in the <emphasis>OpenAFS
+       Quick Beginnings</emphasis> for configuring a new cell. If the machine is a client, all you need to do is change the files
+       appropriately and reboot the machine. The next section explains further the negative consequences of changing the name of an
+       existing cell.</para>
+ 
+       <para>To set the default cell name used by most AFS commands without changing the local <emphasis
+       role="bold">/usr/vice/etc/ThisCell</emphasis> file, set the AFSCELL environment variable in the command shell. It is worth
+       setting this variable if you need to complete significant administrative work in a foreign cell.</para>
+ 
+       <note>
+         <para>The <emphasis role="bold">fs checkservers</emphasis> and <emphasis role="bold">fs mkmount</emphasis> commands do not
+         use the AFSCELL variable. The <emphasis role="bold">fs checkservers</emphasis> command always defaults to the cell named in
+         the <emphasis role="bold">ThisCell</emphasis> file, unless the <emphasis role="bold">-cell</emphasis> argument is used. The
+         <emphasis role="bold">fs mkmount</emphasis> command defaults to the cell in which the parent directory of the new mount
+         point resides.</para>
+       </note>
+ 
+       <indexterm>
+         <primary>ThisCell file (client)</primary>
+ 
+         <secondary>how used by programs</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ35">
+       <title>Why Choosing the Appropriate Cell Name is Important</title>
+ 
+       <para>Take care to select a cell name that is suitable for long-term use. Changing a cell name later is complicated. An
+       appropriate cell name is important because it is the second element in the pathname of all files in a cell's file tree.
+       Because each cell name is unique, its presence in an AFS pathname makes the pathname unique in the AFS global namespace, even
+       if multiple cells use similar filespace organization at lower levels. For instance, it means that every cell can have a home
+       directory called <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+       role="bold">/usr/pat</emphasis> without causing a conflict. The presence of the cell name in pathnames also means that users
+       in every cell use the same pathname to access a file, whether the file resides in their local cell or in a foreign
+       cell.</para>
+ 
+       <para>Another reason to choose the correct cell name early in the process of installing your cell is that the cell membership
+       defined in each machine's <emphasis role="bold">ThisCell</emphasis> file affects the performance of many programs and
+       processes running on the machine. For instance, AFS commands (<emphasis role="bold">fs</emphasis>, <emphasis
+       role="bold">kas</emphasis>, <emphasis role="bold">pts</emphasis> and <emphasis role="bold">vos</emphasis> commands) by default
+       execute in the cell of the machine on which they are issued. The command interpreters check the <emphasis
+       role="bold">ThisCell</emphasis> file on the local disk and then contact the database server machines listed in the <emphasis
+       role="bold">CellServDB</emphasis> file for the indicated cell (the <emphasis role="bold">bos</emphasis> commands work
+       differently because the issuer always has to name of the machine on which to run the command).</para>
+ 
+       <para>The <emphasis role="bold">ThisCell</emphasis> file also determines the cell for which a user receives an AFS token when
+       he or she logs in to a machine. The cell name also plays a role in security. As it converts a user password into an encryption
+       key for storage in the Authentication Database, the Authentication Server combines the password with the cell name found in
+       the <emphasis role="bold">ThisCell</emphasis> file. AFS-modified login utilities use the same algorithm to convert the user's
+       password into an encryption key before contacting the Authentication Server to obtain a token for the user. (For a description
+       of how AFS's security system uses encryption keys, see <link linkend="HDRWQ75">A More Detailed Look at Mutual
+       Authentication</link>.)</para>
+ 
+       <para>This method of converting passwords into encryption keys means that the same password results in different keys in
+       different cells. Even if a user uses the same password in multiple cells, obtaining a user's token from one cell does not
+       enable unauthorized access to the user's account in another cell.</para>
+ 
+       <para>If you change the cell name, you must change the <emphasis role="bold">ThisCell</emphasis> and <emphasis
+       role="bold">CellServDB</emphasis> files on every server and client machine. Failure to change them all can prevent login,
+       because the encryption keys produced by the login utility do not match the keys stored in the Authentication Database. In
+       addition, many commands from the AFS suites do not work as expected.</para>
+ 
+       <indexterm>
+         <primary>participation</primary>
+ 
+         <secondary>in AFS global namespace</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS</primary>
+ 
+         <secondary>global namespace</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>global namespace</primary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ36">
+     <title>Participating in the AFS Global Namespace</title>
+ 
+     <para>Participating in the AFS global namespace makes your cell's local file tree visible to AFS users in foreign cells and
+     makes other cells' file trees visible to your local users. It makes file sharing across cells just as easy as sharing within a
+     cell. This section outlines the procedures necessary for participating in the global namespace. <itemizedlist>
+         <listitem>
+           <para>Participation in the global namespace is not mandatory. Some cells use AFS primarily to facilitate file sharing
+           within the cell, and are not interested in providing their users with access to foreign cells.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Making your file tree visible does not mean making it vulnerable. You control how foreign users access your cell
+           using the same protection mechanisms that control local users' access. See <link linkend="HDRWQ40">Granting and Denying
+           Foreign Users Access to Your Cell</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The two aspects of participation are independent. A cell can make its file tree visible without allowing its users
+           to see foreign cells' file trees, or can enable its users to see other file trees without advertising its own.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You make your cell visible to others by advertising your database server machines. See <link
+           linkend="HDRWQ38">Making Your Cell Visible to Others</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You control access to foreign cells on a per-client machine basis. In other words, it is possible to make a foreign
+           cell accessible from one client machine in your cell but not another. See <link linkend="HDRWQ39">Making Other Cells
+           Visible in Your Cell</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>conventions</primary>
+ 
+       <secondary>AFS pathnames</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS</primary>
+ 
+       <secondary>root directory (/afs)</secondary>
+ 
+       <tertiary>on client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>/afs</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>/afs/<emphasis>cellname</emphasis></secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cell</primary>
+ 
+       <secondary>name</secondary>
+ 
+       <tertiary>at second level in file tree</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ37">
+       <title>What the Global Namespace Looks Like</title>
+ 
+       <para>The AFS global namespace appears the same to all AFS cells that participate in it, because they all agree to follow a
+       small set of conventions in constructing pathnames.</para>
+ 
+       <para>The first convention is that all AFS pathnames begin with the string <emphasis role="bold">/afs</emphasis> to indicate
+       that they belong to the AFS global namespace.</para>
+ 
+       <para>The second convention is that the cell name is the second element in an AFS pathname; it indicates where the file
+       resides (that is, the cell in which a file server machine houses the file). As noted, the presence of a cell name in pathnames
+       makes the global namespace possible, because it guarantees that all AFS pathnames are unique even if cells use the same
+       directory names at lower levels in their AFS filespace.</para>
+ 
+       <para>What appears at the third and lower levels in an AFS pathname depends on how a cell has chosen to arrange its filespace.
+       There are some suggested conventional directories at the third level; see <link linkend="HDRWQ43">The Third
+       Level</link>.</para>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>making local visible to foreign</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local cell</primary>
+ 
+         <secondary>making visible to foreign cells</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>foreign cell</primary>
+ 
+         <secondary>making local cell visible</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ38">
+       <title>Making Your Cell Visible to Others</title>
+ 
+       <para>You make your cell visible to others by advertising your cell name and database server machines. Just like client
+       machines in the local cell, the Cache Manager on machines in foreign cells use the information to reach your cell's Volume
+       Location (VL) Servers when they need volume and file location information. Similarly, client-side authentication programs
+       running in foreign cells use the information to contact your cell's authentication service.</para>
+ 
+       <para>There are two places you can make this information available: <itemizedlist>
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>global CellServDB</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>CellServDB file maintained by AFS Product Support</primary>
+ 
+             <secondary>as global update source</secondary>
+           </indexterm>
+ 
+           <listitem>
+             <para>In the global <emphasis role="bold">CellServDB</emphasis> file maintained by the AFS Product Support group. This
+             file lists the name and database server machines of every cell that has agreed to make this information available to
+             other cells.</para>
+ 
+             <para>To add or change your cell's listing in this file, have the official support contact at your site call or write to
+             AFS Product Support. Changes to the file are frequent enough that AFS Product Support does not announce each one. It is
+             a good policy to check the file for changes on a regular schedule.</para>
+ 
+             <indexterm>
+               <primary>files</primary>
+ 
+               <secondary>CellServDB.local</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>CellServDB.local file</primary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>A file called <emphasis role="bold">CellServDB.local</emphasis> in the <emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/service/etc</emphasis> directory
+             of your cell's filespace. List only your cell's database server machines.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Update the files whenever you change the identity of your cell's database server machines. Also update the copies of the
+       <emphasis role="bold">CellServDB</emphasis> files on all of your server machines (in the <emphasis
+       role="bold">/usr/afs/etc</emphasis> directory) and client machines (in the <emphasis role="bold">/usr/vice/etc</emphasis>
+       directory). For instructions, see <link linkend="HDRWQ118">Maintaining the Server CellServDB File</link> and <link
+       linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+ 
+       <para>Once you have advertised your database server machines, it can be difficult to make your cell invisible again. You can
+       remove the <emphasis role="bold">CellServDB.local</emphasis> file and ask AFS Product Support to remove your entry from the
+       global <emphasis role="bold">CellServDB</emphasis> file, but other cells probably have an entry for your cell in their local
+       <emphasis role="bold">CellServDB</emphasis> files already. To make those entries invalid, you must change the names or IP
+       addresses of your database server machines.</para>
+ 
+       <para>Your cell does not have to be invisible to be inaccessible, however. To make your cell completely inaccessible to
+       foreign users, remove the <emphasis role="bold">system:anyuser</emphasis> group from all ACLs at the top three levels of your
+       filespace; see <link linkend="HDRWQ40">Granting and Denying Foreign Users Access to Your Cell</link>.</para>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>making foreign visible to local</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local cell</primary>
+ 
+         <secondary>making foreign cells visible in</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>foreign cell</primary>
+ 
+         <secondary>making visible in local cell</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>making foreign cell visible</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ39">
+       <title>Making Other Cells Visible in Your Cell</title>
+ 
+       <para>To make a foreign cell's filespace visible on a client machine in your cell, perform the following three steps:
+       <orderedlist>
+           <listitem>
+             <para>Mount the cell's <emphasis role="bold">root.cell</emphasis> volume at the second level in your cell's filespace
+             just below the <emphasis role="bold">/afs</emphasis> directory. Use the <emphasis role="bold">fs mkmount</emphasis>
+             command with the <emphasis role="bold">-cell</emphasis> argument as instructed in <link linkend="HDRWQ213">To create a
+             cellular mount point</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Mount AFS at the <emphasis role="bold">/afs</emphasis> directory on the client machine. The <emphasis
+             role="bold">afsd</emphasis> program, which initializes the Cache Manager, performs the mount automatically at the
+             directory named in the first field of the local <emphasis role="bold">/usr/vice/etc/cacheinfo</emphasis> file or by the
+             command's <emphasis role="bold">-mountdir</emphasis> argument. Mounting AFS at an alternate location makes it impossible
+             to reach the filespace of any cell that mounts its <emphasis role="bold">root.afs</emphasis> and <emphasis
+             role="bold">root.cell</emphasis> volumes at the conventional locations. See <link linkend="HDRWQ395">Displaying and
+             Setting the Cache Size and Location</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create an entry for the cell in the list of database server machines which the Cache Manager maintains in kernel
+             memory.</para>
+ 
+             <para>The <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on every client machine's local disk lists the
+             database server machines for the local and foreign cells. The <emphasis role="bold">afsd</emphasis> program reads the
+             contents of the <emphasis role="bold">CellServDB</emphasis> file into kernel memory as it initializes the Cache Manager.
+             You can also use the <emphasis role="bold">fs newcell</emphasis> command to add or alter entries in kernel memory
+             directly between reboots of the machine. See <link linkend="HDRWQ406">Maintaining Knowledge of Database Server
+             Machines</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>Note that making a foreign cell visible to client machines does not guarantee that your users can access its filespace.
+       The ACLs in the foreign cell must also grant them the necessary permissions.</para>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>granting local access to foreign users</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local cell</primary>
+ 
+         <secondary>granting foreign users access to</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ40">
+       <title>Granting and Denying Foreign Users Access to Your Cell</title>
+ 
+       <para>Making your cell visible in the AFS global namespace does not take away your control over the way in which users from
+       foreign cells access your file tree.</para>
+ 
+       <para>By default, foreign users access your cell as the user <emphasis role="bold">anonymous</emphasis>, which means they have
+       only the permissions granted to the <emphasis role="bold">system:anyuser</emphasis> group on each directory's ACL. Normally
+       these permissions are limited to the <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) and
+       <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permissions.</para>
+ 
+       <para>There are two ways to grant wider access to foreign users: <itemizedlist>
+           <listitem>
+             <para>Grant additional permissions to the <emphasis role="bold">system:anyuser</emphasis> group on certain ACLs. Keep in
+             mind, however, that all users can then access that directory in the indicated way (not just specific foreign users you
+             have in mind).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create a local authentication account for specific foreign users, by creating entries in the Protection and
+             Authentication Databases and local password file. It is not possible to place foreign usernames on ACLs, nor to
+             authenticate in a foreign cell without having an account in it.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>filespace configuration issues</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>filespace, issues</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file tree</primary>
+ 
+         <secondary>conventions</secondary>
+ 
+         <tertiary>for configuring</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ41">
+     <title>Configuring Your AFS Filespace</title>
+ 
+     <para>This section summarizes the issues to consider when configuring your AFS filespace. For a discussion of creating volumes
+     that correspond most efficiently to the filespace's directory structure, see <link linkend="HDRWQ44">Creating Volumes to
+     Simplify Administration</link>.</para>
+ 
+     <note>
+       <para><emphasis role="bold">For Windows users:</emphasis> Windows uses a backslash (<emphasis role="bold">\</emphasis>) rather
+       than a forward slash (<emphasis role="bold">/</emphasis>) to separate the elements in a pathname. The hierarchical
+       organization of the filespace is however the same as on a UNIX machine.</para>
+     </note>
+ 
+     <para>AFS pathnames must follow a few conventions so the AFS global namespace looks the same from any AFS client machine. There
+     are corresponding conventions to follow in building your file tree, not just because pathnames reflect the structure of a file
+     tree, but also because the AFS Cache Manager expects a certain configuration.</para>
+ 
+     <indexterm>
+       <primary>AFS</primary>
+ 
+       <secondary>root directory (/afs)</secondary>
+ 
+       <tertiary>in cell filespace</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>/afs</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_51">
+       <title>The Top /afs Level</title>
+ 
+       <para>The first convention is that the top level in your file tree be called the <emphasis role="bold">/afs</emphasis>
+       directory. If you name it something else, then you must use the <emphasis role="bold">-mountdir</emphasis> argument with the
+       <emphasis role="bold">afsd</emphasis> program to get Cache Managers to mount AFS properly. You cannot participate in the AFS
+       global namespace in that case.</para>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>name</secondary>
+ 
+         <tertiary>at second level in file tree</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>/afs/<emphasis>cellname</emphasis></secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>symbolic link</primary>
+ 
+         <secondary>at second level of AFS pathname</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ42">
+       <title>The Second (Cellname) Level</title>
+ 
+       <para>The second convention is that just below the <emphasis role="bold">/afs</emphasis> directory you place directories
+       corresponding to each cell whose file tree is visible and accessible from the local cell. Minimally, there must be a directory
+       for the local cell. Each such directory is a mount point to the indicated cell's <emphasis role="bold">root.cell</emphasis>
+       volume. For example, in the ABC Corporation cell, <emphasis role="bold">/afs/abc.com</emphasis> is a mount point for the
+       cell's own <emphasis role="bold">root.cell</emphasis> volume and <emphasis role="bold">stateu.edu</emphasis> is a mount point
+       for the State University cell's <emphasis role="bold">root.cell</emphasis> volume. The <emphasis role="bold">fs
+       lsmount</emphasis> command displays the mount points.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs lsmount /afs/abc.com</emphasis> 
+    '/afs/abc.com' is a mount point for volume '#root.cell'
+    % <emphasis role="bold">fs lsmount /afs/stateu.edu</emphasis>
+    '/afs/stateu.edu' is a mount point for volume '#stateu.edu:root.cell'
+ </programlisting>
+ 
+       <para>To reduce the amount of typing necessary in pathnames, you can create a symbolic link with an abbreviated name to the
+       mount point of each cell your users frequently access (particularly the home cell). In the ABC Corporation cell, for instance,
+       <emphasis role="bold">/afs/abc</emphasis> is a symbolic link to the <emphasis role="bold">/afs/abc.com</emphasis> mount point,
+       as the <emphasis role="bold">fs lsmount</emphasis> command reveals.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs lsmount /afs/abc</emphasis>
+    '/afs/abc' is a symbolic link, leading to a mount point for volume '#root.cell'
+ </programlisting>
+ 
+       <indexterm>
+         <primary>file tree</primary>
+ 
+         <secondary>conventions</secondary>
+ 
+         <tertiary>third level</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>conventional under /afs/cellname</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ43">
+       <title>The Third Level</title>
+ 
+       <para>You can organize the third level of your cell's file tree any way you wish. The following list describes directories
+       that appear at this level in the conventional configuration: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">common</emphasis></term>
+ 
+             <listitem>
+               <para>This directory contains programs and files needed by users working on machines of all system types, such as text
+               editors, online documentation files, and so on. Its <emphasis role="bold">/etc</emphasis> subdirectory is a logical
+               place to keep the central update sources for files used on all of your cell's client machines, such as the <emphasis
+               role="bold">ThisCell</emphasis> and <emphasis role="bold">CellServDB</emphasis> files.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">public</emphasis></term>
+ 
+             <listitem>
+               <para>A directory accessible to anyone who can access your filespace, because its ACL grants the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) and <emphasis role="bold">r</emphasis> (<emphasis
+               role="bold">read</emphasis>) permissions to the <emphasis role="bold">system:anyuser</emphasis> group. It is useful if
+               you want to enable your users to make selected information available to everyone, but do not want to grant foreign
+               users access to the contents of the <emphasis role="bold">usr</emphasis> directory which houses user home directories
+               (and is also at this level). It is conventional to create a subdirectory for each of your cell's users.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">service</emphasis></term>
+ 
+             <listitem>
+               <para>This directory contains files and subdirectories that help cells coordinate resource sharing. For a list of the
+               proposed standard files and subdirectories to create, call or write to AFS Product Support.</para>
+ 
+               <para>As an example, files that other cells expect to find in this directory's <emphasis role="bold">etc</emphasis>
+               subdirectory can include the following: <itemizedlist>
+                   <listitem>
+                     <para><emphasis role="bold">CellServDB.export</emphasis>, a list of database server machines for many
+                     cells</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">CellServDB.local</emphasis>, a list of the cell's own database server
+                     machines</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">passwd</emphasis>, a copy of the local password file (<emphasis
+                     role="bold">/etc/passwd</emphasis> or equivalent) kept on the local disk of the cell's client machines</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">group</emphasis>, a copy of the local groups file (<emphasis
+                     role="bold">/etc/group</emphasis> or equivalent) kept on the local disk of the cell's client machines</para>
+                   </listitem>
+                 </itemizedlist></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis>sys_type</emphasis></term>
+ 
+             <listitem>
+               <para>A separate directory for storing the server and client binaries for each system type you use in the cell.
+               Configuration is simplest if you use the system type names assigned in the AFS distribution, particularly if you wish
+               to use the <emphasis role="bold">@sys</emphasis> variable in pathnames (see <link linkend="HDRWQ56">Using the @sys
+               Variable in Pathnames</link>). The <emphasis>OpenAFS Release Notes</emphasis> lists the conventional name for each
+               supported system type.</para>
+ 
+               <para>Within each such directory, create directories named <emphasis role="bold">bin</emphasis>, <emphasis
+               role="bold">etc</emphasis>, <emphasis role="bold">usr</emphasis>, and so on, to store the programs normally kept in
+               the <emphasis role="bold">/bin</emphasis>, <emphasis role="bold">/etc</emphasis> and <emphasis
+               role="bold">/usr</emphasis> directories on a local disk. Then create symbolic links from the local directories on
+               client machines into AFS; see <link linkend="HDRWQ55">Configuring the Local Disk</link>. Even if you do not choose to
+               use symbolic links in this way, it can be convenient to have central copies of system binaries in AFS. If binaries are
+               accidentally removed from a machine, you can recopy them onto the local disk from AFS rather than having to recover
+               them from tape</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">usr</emphasis></term>
+ 
+             <listitem>
+               <para>This directory contains home directories for your local users. As discussed in the previous entry for the
+               <emphasis role="bold">public</emphasis> directory, it is often practical to protect this directory so that only
+               locally authenticated users can access it. This keeps the contents of your user's home directories as secure as
+               possible.</para>
+ 
+               <para>If your cell is quite large, directory lookup can be slowed if you put all home directories in a single
+               <emphasis role="bold">usr</emphasis> directory. For suggestions on distributing user home directories among multiple
+               grouping directories, see <link linkend="HDRWQ59">Grouping Home Directories</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">wsadmin</emphasis></term>
+ 
+             <listitem>
+               <para>This directory contains prototype, configuration and library files for use with the <emphasis
+               role="bold">package</emphasis> program. See <link linkend="HDRWQ419">Configuring Client Machines with the package
+               Program</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>volume name</primary>
+ 
+         <secondary>conventions for</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>conventions</primary>
+ 
+         <secondary>volume names</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>separate for each top level directory</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file tree</primary>
+ 
+         <secondary>creating volumes to match top level directories</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ44">
+     <title>Creating Volumes to Simplify Administration</title>
+ 
+     <para>This section discusses how to create volumes in ways that make administering your system easier.</para>
+ 
+     <para>At the top levels of your file tree (at least through the third level), each directory generally corresponds to a separate
+     volume. Some cells also configure the subdirectories of some third level directories as separate volumes. Common examples are
+     the <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/common</emphasis> and
+     <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/usr</emphasis>
+     directories.</para>
+ 
+     <para>You do not have to create a separate volume for every directory level in a tree, but the advantage is that each volume
+     tends to be smaller and easier to move for load balancing. The overhead for a mount point is no greater than for a standard
+     directory, nor does the volume structure itself require much disk space. Most cells find that below the fourth level in the
+     tree, using a separate volume for each directory is no longer efficient. For instance, while each user's home directory (at the
+     fourth level in the tree) corresponds to a separate volume, all of the subdirectories in the home directory normally reside in
+     the same volume.</para>
+ 
+     <para>Keep in mind that only one volume can be mounted at a given directory location in the tree. In contrast, a volume can be
+     mounted at several locations, though this is not recommended because it distorts the hierarchical nature of the file tree,
+     potentially causing confusion.</para>
+ 
+     <indexterm>
+       <primary>volume name</primary>
+ 
+       <secondary>restrictions</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restrictions</primary>
+ 
+       <secondary>on volume names</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume name</primary>
+ 
+       <secondary>two required</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>root (root.afs and root.cell)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>root volumes (root.afs and root.cell)</primary>
+     </indexterm>
+ 
+     <sect2 id="Header_55">
+       <title>Assigning Volume Names</title>
+ 
+       <para>You can name your volumes anything you choose, subject to a few restrictions: <itemizedlist>
+           <listitem>
+             <para>Read/write volume names can be up to 22 characters in length. The maximum length for volume names is 31
+             characters, and there must be room to add the <emphasis role="bold">.readonly</emphasis> extension on read-only
+             volumes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Do not add the <emphasis role="bold">.readonly</emphasis> and <emphasis role="bold">.backup</emphasis> extensions
+             to volume names yourself, even if they are appropriate. The Volume Server adds them automatically as it creates a
+             read-only or backup version of a volume.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>There must be volumes named <emphasis role="bold">root.afs</emphasis> and <emphasis
+             role="bold">root.cell</emphasis>, mounted respectively at the top (<emphasis role="bold">/afs</emphasis>) level in the
+             filespace and just below that level, at the cell's name (for example, at <emphasis role="bold">/afs/abc.com</emphasis>
+             in the ABC Corporation cell).</para>
+ 
+             <para>Deviating from these names only creates confusion and extra work. Changing the name of the <emphasis
+             role="bold">root.afs</emphasis> volume, for instance, means that you must use the <emphasis
+             role="bold">-rootvol</emphasis> argument to the <emphasis role="bold">afsd</emphasis> program on every client machine,
+             to name the alternate volume.</para>
+ 
+             <para>Similarly, changing the <emphasis role="bold">root.cell</emphasis> volume name prevents users in foreign cells
+             from accessing your filespace, if the mount point for your cell in their filespace refers to the conventional <emphasis
+             role="bold">root.cell</emphasis> name. Of course, this is one way to make your cell invisible to other cells.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>It is best to assign volume names that indicate the type of data they contain, and to use similar names for volumes with
+       similar contents. It is also helpful if the volume name is similar to (or at least has elements in common with) the name of
+       the directory at which it is mounted. Understanding the pattern then enables you accurately to guess what a volume contains
+       and where it is mounted.</para>
+ 
+       <para>Many cells find that the most effective volume naming scheme puts a common prefix on the names of all related volumes.
+       <link linkend="TBLVOL-PREFIX">Table 1</link> describes the recommended prefixing scheme.</para>
+ 
+       <table id="TBLVOL-PREFIX" label="1">
+         <title>Suggested volume prefixes</title>
+ 
+         <tgroup cols="4">
+           <colspec colwidth="14*" />
+ 
+           <colspec colwidth="28*" />
+ 
+           <colspec colwidth="22*" />
+ 
+           <colspec colwidth="36*" />
+ 
+           <thead>
+             <row>
+               <entry><emphasis role="bold">Prefix</emphasis></entry>
+ 
+               <entry><emphasis role="bold">Contents</emphasis></entry>
+ 
+               <entry><emphasis role="bold">Example Name</emphasis></entry>
+ 
+               <entry><emphasis role="bold">Example Mount Point</emphasis></entry>
+             </row>
+           </thead>
+ 
+           <tbody>
+             <row>
+               <entry><emphasis role="bold">common.</emphasis></entry>
+ 
+               <entry>popular programs and files</entry>
+ 
+               <entry><emphasis role="bold">common.etc</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/common/etc</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">src.</emphasis></entry>
+ 
+               <entry>source code</entry>
+ 
+               <entry><emphasis role="bold">src.afs</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/src/afs</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">proj.</emphasis></entry>
+ 
+               <entry>project data</entry>
+ 
+               <entry><emphasis role="bold">proj.portafs</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/proj/portafs</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">test.</emphasis></entry>
+ 
+               <entry>testing or other temporary data</entry>
+ 
+               <entry><emphasis role="bold">test.smith</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/usr/smith/test</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">user.</emphasis></entry>
+ 
+               <entry>user home directory data</entry>
+ 
+               <entry><emphasis role="bold">user.terry</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/usr/terry</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry>sys_type<emphasis role="bold">.</emphasis></entry>
+ 
+               <entry>programs compiled for an operating system type</entry>
+ 
+               <entry><emphasis role="bold">rs_aix42.bin</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/bin</emphasis></entry>
+             </row>
+           </tbody>
+         </tgroup>
+       </table>
+ 
+       <para><link linkend="TBLPREFIX-EXAMPLE">Table 2</link> is a more specific example for a cell's <emphasis
+       role="bold">rs_aix42</emphasis> system volumes and directories:</para>
+ 
+       <table id="TBLPREFIX-EXAMPLE" label="2">
+         <title>Example volume-prefixing scheme</title>
+ 
+         <tgroup cols="2">
+           <colspec colwidth="14*" />
+ 
+           <colspec colwidth="28*" />
+ 
+           <colspec colwidth="22*" />
+ 
+           <colspec colwidth="36*" />
+ 
+           <thead>
+             <row>
+               <entry><emphasis role="bold">Example Name</emphasis></entry>
+ 
+               <entry><emphasis role="bold">Example Mount Point</emphasis></entry>
+             </row>
+           </thead>
+ 
+           <tbody>
+             <row>
+               <entry><emphasis role="bold">rs_aix42.bin</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/bin</emphasis>, <emphasis
+               role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/rs_aix42/bin</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.etc</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/etc</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.afsws</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/afsws</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.lib</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/lib</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.bin</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/bin</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.etc</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/etc</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.inc</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/inc</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.man</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/man</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.sys</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/sys</emphasis></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">rs_aix42.usr.local</emphasis></entry>
+ 
+               <entry><emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+               role="bold">/rs_aix42/usr/local</emphasis></entry>
+             </row>
+           </tbody>
+         </tgroup>
+       </table>
+ 
+       <para>There are several advantages to this scheme: <itemizedlist>
+           <listitem>
+             <para>The volume name is similar to the mount point name in the filespace. In all of the entries in <link
+             linkend="TBLPREFIX-EXAMPLE">Table 2</link>, for example, the only difference between the volume and mount point name is
+             that the former uses periods as separators and the latter uses slashes. Another advantage is that the volume name
+             indicates the contents, or at least suggests the directory on which to issue the <emphasis role="bold">ls</emphasis>
+             command to learn the contents.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>It makes it easy to manipulate groups of related volumes at one time. In particular, the <emphasis role="bold">vos
+             backupsys</emphasis> command's <emphasis role="bold">-prefix</emphasis> argument enables you to create a backup version
+             of every volume whose name starts with the same string of characters. Making a backup version of each volume is one of
+             the first steps in backing up a volume with the AFS Backup System, and doing it for many volumes with one command saves
+             you a good deal of typing. For instructions for creating backup volumes, see <link linkend="HDRWQ201">Creating Backup
+             Volumes</link>, For information on the AFS Backup System, see <link linkend="HDRWQ248">Configuring the AFS Backup
+             System</link> and <link linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>It makes it easy to group related volumes together on a partition. Grouping related volumes together has several
+             advantages of its own, discussed in <link linkend="HDRWQ49">Grouping Related Volumes on a Partition</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>grouping related on same partition</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>disk partition</primary>
+ 
+         <secondary>grouping related volumes on</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ49">
+       <title>Grouping Related Volumes on a Partition</title>
+ 
+       <para>If your cell is large enough to make it practical, consider grouping related volumes together on a partition. In
+       general, you need at least three file server machines for volume grouping to be effective. Grouping has several advantages,
+       which are most obvious when the file server machine becomes inaccessible: <itemizedlist>
+           <listitem>
+             <para>If you keep a hardcopy record of the volumes on a partition, you know which volumes are unavailable. You can keep
+             such a record without grouping related volumes, but a list composed of unrelated volumes is much harder to maintain.
+             Note that the record must be on paper, because the outage can prevent you from accessing an online copy or from issuing
+             the <emphasis role="bold">vos listvol</emphasis> command, which gives you the same information.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The effect of an outage is more localized. For example, if all of the binaries for a given system type are on one
+             partition, then only users of that system type are affected. If a partition houses binary volumes from several system
+             types, then an outage can affect more people, particularly if the binaries that remain available are interdependent with
+             those that are not available.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The advantages of grouping related volumes on a partition do not necessarily extend to the grouping of all related
+       volumes on one file server machine. For instance, it is probably unwise in a cell with two file server machines to put all
+       system volumes on one machine and all user volumes on the other. An outage of either machine probably affects everyone.</para>
+ 
+       <para>Admittedly, the need to move volumes for load balancing purposes can limit the practicality of grouping related volumes.
+       You need to weigh the complementary advantages case by case.</para>
+ 
+       <indexterm>
+         <primary>replication</primary>
+ 
+         <secondary>appropriate volumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>type to replicate</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>where to place replicated</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>read-only volume</primary>
+ 
+         <secondary>selecting site</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ50">
+       <title>When to Replicate Volumes</title>
+ 
+       <para>As discussed in <link linkend="HDRWQ15">Replication</link>, replication refers to making a copy, or clone, of a
+       read/write source volume and then placing the copy on one or more additional file server machines. Replicating a volume can
+       increase the availability of the contents. If one file server machine housing the volume becomes inaccessible, users can still
+       access the copy of the volume stored on a different machine. No one machine is likely to become overburdened with requests for
+       a popular file, either, because the file is available from several machines.</para>
+ 
+       <para>However, replication is not appropriate for all cells. If a cell does not have much disk space, replication can be
+       unduly expensive, because each clone not on the same partition as the read/write source takes up as much disk space as its
+       source volume did at the time the clone was made. Also, if you have only one file server machine, replication uses up disk
+       space without increasing availability.</para>
+ 
+       <para>Replication is also not appropriate for volumes that change frequently. You must issue the <emphasis role="bold">vos
+       release</emphasis> command every time you need to update a read-only volume to reflect changes in its read/write
+       source.</para>
+ 
+       <para>For both of these reasons, replication is appropriate only for popular volumes whose contents do not change very often,
+       such as system binaries and other volumes mounted at the upper levels of your filespace. User volumes usually exist only in a
+       read/write version since they change so often.</para>
+ 
+       <para>If you are replicating any volumes, you must replicate the <emphasis role="bold">root.afs</emphasis> and <emphasis
+       role="bold">root.cell</emphasis> volumes, preferably at two or three sites each (even if your cell only has two or three file
+       server machines). The Cache Manager needs to pass through the directories corresponding to the <emphasis
+       role="bold">root.afs</emphasis> and <emphasis role="bold">root.cell</emphasis> volumes as it interprets any pathname. The
+       unavailability of these volumes makes all other volumes unavailable too, even if the file server machines storing the other
+       volumes are still functioning.</para>
+ 
+       <para>Another reason to replicate the <emphasis role="bold">root.afs</emphasis> volume is that it can lessen the load on the
+       File Server machine. The Cache Manager has a bias to access a read-only version of the <emphasis
+       role="bold">root.afs</emphasis> volume if it is replicate, which puts the Cache Manager onto the <emphasis>read-only
+       path</emphasis> through the AFS filespace. While on the read-only path, the Cache Manager attempts to access a read-only copy
+       of replicated volumes. The File Server needs to track only one callback per Cache Manager for all of the data in a read-only
+       volume, rather than the one callback per file it must track for read/write volumes. Fewer callbacks translate into a smaller
+       load on the File Server.</para>
+ 
+       <para>If the <emphasis role="bold">root.afs</emphasis> volume is not replicated, the Cache Manager follows a read/write path
+       through the filespace, accessing the read/write version of each volume. The File Server distributes and tracks a separate
+       callback for each file in a read/write volume, imposing a greater load on it.</para>
+ 
+       <para>For more on read/write and read-only paths, see <link linkend="HDRWQ209">The Rules of Mount Point
+       Traversal</link>.</para>
+ 
+       <para>It also makes sense to replicate system binary volumes in many cases, as well as the volume corresponding to the
+       <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/usr</emphasis> directory and
+       the volumes corresponding to the <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+       role="bold">/common</emphasis> directory and its subdirectories.</para>
+ 
+       <para>It is a good idea to place a replica on the same partition as the read/write source. In this case, the read-only volume
+       is a clone (like a backup volume): it is a copy of the source volume's vnode index, rather than a full copy of the volume
+       contents. Only if the read/write volume moves to another partition or changes substantially does the read-only volume consume
+       significant disk space. Read-only volumes kept on other partitions always consume the full amount of disk space that the
+       read/write source consumed when the read-only volume was created.</para>
+     </sect2>
+ 
+     <sect2 id="Header_58">
+       <title>The Default Quota and ACL on a New Volume</title>
+ 
+       <para>Every AFS volume has associated with it a quota that limits the amount of disk space the volume is allowed to use. To
+       set and change quota, use the commands described in <link linkend="HDRWQ234">Setting and Displaying Volume Quota and Current
+       Size</link>.</para>
+ 
+       <para>By default, every new volume is assigned a space quota of 5000 KB blocks unless you include the <emphasis
+       role="bold">-maxquota</emphasis> argument to the <emphasis role="bold">vos create</emphasis> command. Also by default, the ACL
+       on the root directory of every new volume grants all permissions to the members of the <emphasis
+       role="bold">system:administrators</emphasis> group. To learn how to change these values when creating an account with
+       individual commands, see <link linkend="HDRWQ503">To create one user account with individual commands</link>. When using
+       <emphasis role="bold">uss</emphasis> commands to create accounts, you can specify alternate ACL and quota values in the
+       template file's <emphasis role="bold">V</emphasis> instruction; see <link linkend="HDRWQ473">Creating a Volume with the V
+       Instruction</link>.</para>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>configuration issues</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>file server machine, issues</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>roles for server machine</primary>
+ 
+         <secondary>summary</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>roles for</secondary>
+ 
+         <tertiary>summary</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>first installed</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ51">
+     <title>Configuring Server Machines</title>
+ 
+     <para>This section discusses some issues to consider when configuring server machines, which store AFS data, transfer it to
+     client machines on request, and house the AFS administrative databases. To learn about client machines, see <link
+     linkend="HDRWQ54">Configuring Client Machines</link>.</para>
+ 
+     <para>If your cell has more than one AFS server machine, you can configure them to perform specialized functions. A machine can
+     assume one or more of the roles described in the following list. For more details, see <link linkend="HDRWQ90">The Four Roles
+     for File Server Machines</link>. <itemizedlist>
+         <listitem>
+           <para>A <emphasis>simple file server</emphasis> machine runs only the processes that store and deliver AFS files to client
+           machines. You can run as many simple file server machines as you need to satisfy your cell's performance and disk space
+           requirements.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>database server machine</emphasis> runs the four database server processes that maintain AFS's
+           replicated administrative databases: the Authentication, Backup, Protection, and Volume Location (VL) Server
+           processes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>binary distribution machine</emphasis> distributes the AFS server binaries for its system type to all
+           other server machines of that system type.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The single <emphasis>system control machine</emphasis> distributes common server configuration files to all other
+           server machines in the cell, in a cell that runs the United States edition of AFS (cells that use the international
+           edition of AFS must not use the system control machine for this purpose). The machine conventionally also serves as the
+           time synchronization source for the cell, adjusting its clock according to a time source outside the cell.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The <emphasis>OpenAFS Quick Beginnings</emphasis> explains how to configure your cell's first file server machine to
+     assume all four roles. The <emphasis>OpenAFS Quick Beginnings</emphasis> chapter on installing additional server machines also
+     explains how to configure them to perform one or more roles.</para>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>reason to run three</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>distribution</primary>
+ 
+       <secondary>of databases</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>databases, distributed</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>distributed databases</primary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ52">
+       <title>Replicating the OpenAFS Administrative Databases</title>
+ 
+       <para>The AFS administrative databases are housed on database server machines and store information that is crucial for
+       correct cell functioning. Both server processes and Cache Managers access the information frequently: <itemizedlist>
+           <listitem>
+             <para>Every time a Cache Manager fetches a file from a directory that it has not previously accessed, it must look up
+             the file's location in the Volume Location Database (VLDB).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Every time a user obtains an AFS token from the Authentication Server, the server looks up the user's password in
+             the Authentication Database.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The first time that a user accesses a volume housed on a specific file server machine, the File Server contacts
+             the Protection Server for a list of the user's group memberships as recorded in the Protection Database.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Every time you back up a volume using the AFS Backup System, the Backup Server creates records for it in the
+             Backup Database.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Maintaining your cell is simplest if the first machine has the lowest IP address of any machine you plan to use as a
+       database server machine. If you later decide to use a machine with a lower IP address as a database server machine, you must
+       update the <emphasis role="bold">CellServDB</emphasis> file on all clients before introducing the new machine.</para>
+ 
+       <para>If your cell has more than one server machine, it is best to run more than one as a database server machine (but more
+       than three are rarely necessary). Replicating the administrative databases in this way yields the same benefits as replicating
+       volumes: increased availability and reliability. If one database server machine or process stops functioning, the information
+       in the database is still available from others. The load of requests for database information is spread across multiple
+       machines, preventing any one from becoming overloaded.</para>
+ 
+       <para>Unlike replicated volumes, however, replicated databases do change frequently. Consistent system performance demands
+       that all copies of the database always be identical, so it is not acceptable to record changes in only some of them. To
+       synchronize the copies of a database, the database server processes use AFS's distributed database technology, Ubik. See <link
+       linkend="HDRWQ102">Replicating the OpenAFS Administrative Databases</link>.</para>
+ 
+       <para>If your cell has only one file server machine, it must also serve as a database server machine. If you cell has two file
+       server machines, it is not always advantageous to run both as database server machines. If a server, process, or network
+       failure interrupts communications between the database server processes on the two machines, it can become impossible to
+       update the information in the database because neither of them can alone elect itself as the synchronization site.</para>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>protecting directories on local disk</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local disk</primary>
+ 
+         <secondary>protecting on file server machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ53">
+       <title>AFS Files on the Local Disk</title>
+ 
+       <para>It is generally simplest to store the binaries for all AFS server processes in the <emphasis
+       role="bold">/usr/afs/bin</emphasis> directory on every file server machine, even if some processes do not actively run on the
+       machine. This makes it easier to reconfigure a machine to fill a new role.</para>
+ 
+       <para>For security reasons, the <emphasis role="bold">/usr/afs</emphasis> directory on a file server machine and all of its
+       subdirectories and files must be owned by the local superuser <emphasis role="bold">root</emphasis> and have only the first
+       <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) mode bit turned on. Some files even have only the
+       first <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) mode bit turned on (for example, the
+       <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file, which lists the AFS server encryption keys). Each time the BOS
+       Server starts, it checks that the mode bits on certain files and directories match the expected values. For a list, see the
+       <emphasis>OpenAFS Quick Beginnings</emphasis> section about protecting sensitive AFS directories, or the discussion of the
+       output from the <emphasis role="bold">bos status</emphasis> command in <link linkend="HDRWQ159">To display the status of
+       server processes and their BosConfig entries</link>.</para>
+ 
+       <para>For a description of the contents of all AFS directories on a file server machine's local disk, see <link
+       linkend="HDRWQ80">Administering Server Machines</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_62">
+       <title>Configuring Partitions to Store AFS Data</title>
+ 
+       <para>The partitions that house AFS volumes on a file server machine must be mounted at directories named</para>
+ 
+       <para><emphasis role="bold">/vicep</emphasis><emphasis>index</emphasis></para>
+ 
+       <para>where <emphasis>index</emphasis> is one or two lowercase letters. By convention, the first AFS partition created is
+       mounted at the <emphasis role="bold">/vicepa</emphasis> directory, the second at the <emphasis role="bold">/vicepb</emphasis>
+       directory, and so on through the <emphasis role="bold">/vicepz</emphasis> directory. The names then continue with <emphasis
+       role="bold">/vicepaa</emphasis> through <emphasis role="bold">/vicepaz</emphasis>, <emphasis role="bold">/vicepba</emphasis>
+       through <emphasis role="bold">/vicepbz</emphasis>, and so on, up to the maximum supported number of server partitions, which
+       is specified in the OpenAFS Release Notes.</para>
+ 
+       <para>Each <emphasis role="bold">/vicep</emphasis>x directory must correspond to an entire partition or logical volume, and
+       must be a subdirectory of the root directory (/). It is not acceptable to configure part of (for example) the <emphasis
+       role="bold">/usr</emphasis> partition as an AFS server partition and mount it on a directory called <emphasis
+       role="bold">/usr/vicepa</emphasis>.</para>
+ 
+       <para>Also, do not store non-AFS files on AFS server partitions. The File Server and Volume Server expect to have available
+       all of the space on the partition. Sharing space also creates competition between AFS and the local UNIX file system for
+       access to the partition, particularly if the UNIX files are frequently used.</para>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>monitoring</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>rebooting, about</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>rebooting</primary>
+ 
+         <secondary>file server machine, limiting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>weekly restart of BOS Server (automatic)</primary>
+ 
+         <secondary>about</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restart times for BOS Server</primary>
+ 
+         <secondary>about</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_63">
+       <title>Monitoring, Rebooting and Automatic Process Restarts</title>
+ 
+       <para>AFS provides several tools for monitoring the File Server, including the <emphasis role="bold">scout</emphasis> and
+       <emphasis role="bold">afsmonitor</emphasis> programs. You can configure them to alert you when certain threshold values are
+       exceeded, for example when a server partition is more than 95% full. See <link linkend="HDRWQ323">Monitoring and Auditing AFS
+       Performance</link>.</para>
+ 
+       <para>Rebooting a file server machine requires shutting down the AFS processes and so inevitably causes a service outage.
+       Reboot file server machines as infrequently as possible. For instructions, see <link linkend="HDRWQ139">Rebooting a Server
+       Machine</link>.</para>
+ 
+       <para>By default, the BOS Server on each file server machine stops and immediately restarts all AFS server processes on the
+       machine (including itself) once a week, at 4:00 a.m. on Sunday. This reduces the potential for the core leaks that can develop
+       as any process runs for an extended time.</para>
+ 
+       <para>The BOS Server also checks each morning at 5:00 a.m. for any newly installed binary files in the <emphasis
+       role="bold">/usr/afs/bin</emphasis> directory. It compares the timestamp on each binary file to the time at which the
+       corresponding process last restarted. If the timestamp on the binary is later, the BOS Server restarts the corresponding
+       process to start using it.</para>
+ 
+       <para>The default times are in the early morning hours when the outage that results from restarting a process is likely to
+       disturb the fewest number of people. You can display the restart times for each machine with the <emphasis role="bold">bos
+       getrestart</emphasis> command, and set them with the <emphasis role="bold">bos setrestart</emphasis> command. The latter
+       command enables you to disable automatic restarts entirely, by setting the time to <emphasis role="bold">never</emphasis>. See
+       <link linkend="HDRWQ171">Setting the BOS Server's Restart Times</link>.</para>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>configuration issues</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>client machine, issues</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ54">
+     <title>Configuring Client Machines</title>
+ 
+     <para>This section summarizes issues to consider as you install and configure client machines in your cell.</para>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>files required on local disk</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>local disk</primary>
+ 
+       <secondary>files required on client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file</primary>
+ 
+       <secondary>required on client machine local disk</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ55">
+       <title>Configuring the Local Disk</title>
+ 
+       <para>You can often free up significant amounts of local disk space on AFS client machines by storing standard UNIX files in
+       AFS and creating symbolic links to them from the local disk. The <emphasis role="bold">@sys</emphasis> pathname variable can
+       be useful in links to system-specific files; see <link linkend="HDRWQ56">Using the @sys Variable in Pathnames</link>.</para>
+ 
+       <para>There are two types of files that must actually reside on the local disk: boot sequence files needed before the
+       <emphasis role="bold">afsd</emphasis> program is invoked, and files that can be helpful during file server machine
+       outages.</para>
+ 
+       <para>During a reboot, AFS is inaccessible until the <emphasis role="bold">afsd</emphasis> program executes and initializes
+       the Cache Manager. (In the conventional configuration, the AFS initialization file is included in the machine's initialization
+       sequence and invokes the <emphasis role="bold">afsd</emphasis> program.) Files needed during reboot prior to that point must
+       reside on the local disk. They include the following, but this list is not necessarily exhaustive. <itemizedlist>
+           <listitem>
+             <para>Standard UNIX utilities including the following or their equivalents: <itemizedlist>
+                 <listitem>
+                   <para>Machine initialization files (stored in the <emphasis role="bold">/etc</emphasis> or <emphasis
+                   role="bold">/sbin</emphasis> directory on many system types)</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">fstab</emphasis> file</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">mount</emphasis> command binary</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">umount</emphasis> command binary</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>All subdirectories and files in the <emphasis role="bold">/usr/vice</emphasis> directory, including the following:
+             <itemizedlist>
+                 <listitem>
+                   <para>The <emphasis role="bold">/usr/vice/cache</emphasis> directory</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">/usr/vice/etc/afsd</emphasis> command binary</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">/usr/vice/etc/cacheinfo</emphasis> file</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file</para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>For more information on these files, see <link linkend="HDRWQ391">Configuration and Cache-Related Files on the
+             Local Disk</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The other type of files and programs to retain on the local disk are those you need when diagnosing and fixing problems
+       caused by a file server outage, because the outage can make inaccessible the copies stored in AFS. Examples include the
+       binaries for a text editor (such as <emphasis role="bold">ed</emphasis> or <emphasis role="bold">vi</emphasis>) and for the
+       <emphasis role="bold">fs</emphasis> and <emphasis role="bold">bos</emphasis> commands. Store copies of AFS command binaries in
+       the <emphasis role="bold">/usr/vice/etc</emphasis> directory as well as including them in the <emphasis
+       role="bold">/usr/afsws</emphasis> directory, which is normally a link into AFS. Then place the <emphasis
+       role="bold">/usr/afsws</emphasis> directory before the <emphasis role="bold">/usr/vice/etc</emphasis> directory in users'
+       <envar>PATH</envar> environment variable definition. When AFS is functioning normally, users access the copy in the <emphasis
+       role="bold">/usr/afsws</emphasis> directory, which is more likely to be current than a local copy.</para>
+ 
+       <para>You can automate the configuration of client machine local disks by using the <emphasis role="bold">package</emphasis>
+       program, which updates the contents of the local disk to match a configuration file. See <link linkend="HDRWQ419">Configuring
+       Client Machines with the package Program</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_66">
+       <title>Enabling Access to Foreign Cells</title>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>enabling access to foreign cell</secondary>
+       </indexterm>
+ 
+       <para>As detailed in <link linkend="HDRWQ39">Making Other Cells Visible in Your Cell</link>, you enable the Cache Manager to
+       access a cell's AFS filespace by storing a list of the cell's database server machines in the local <emphasis
+       role="bold">/usr/vice/etc/CellServDB</emphasis> file. The Cache Manager reads the list into kernel memory at reboot for faster
+       retrieval. You can change the list in kernel memory between reboots by using the <emphasis role="bold">fs newcell</emphasis>
+       command. It is often practical to store a central version of the <emphasis role="bold">CellServDB</emphasis> file in AFS and
+       use the <emphasis role="bold">package</emphasis> program periodically to update each client's version with the source copy.
+       See <link linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+ 
+       <para>Because each client machine maintains its own copy of the <emphasis role="bold">CellServDB</emphasis> file, you can in
+       theory enable access to different foreign cells on different client machines. This is not usually practical, however,
+       especially if users do not always work on the same machine.</para>
+ 
+       <indexterm>
+         <primary>at-sys (@sys) variable in pathnames</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>sys (@sys) variable in pathnames</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>variables</primary>
+ 
+         <secondary>@sys in pathnames</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ56">
+       <title>Using the @sys Variable in Pathnames</title>
+ 
+       <para>When creating symbolic links into AFS on the local disk, it is often practical to use the @sys variable in pathnames.
+       The Cache Manager automatically substitutes the local machine's AFS system name (CPU/operating system type) for the @sys
+       variable. This means you can place the same links on machines of various system types and still have each machine access the
+       binaries for its system type. For example, the Cache Manager on a machine running AIX 4.2 converts <emphasis
+       role="bold">/afs/abc.com/@sys</emphasis> to <emphasis role="bold">/afs/abc.com/rs_aix42</emphasis>, whereas a machine running
+       Solaris 7 converts it to <emphasis role="bold">/afs/abc.com/sun4x_57</emphasis>.</para>
+ 
+       <para>If you want to use the @sys variable, it is simplest to use the conventional AFS system type names as specified in the
+       OpenAFS Release Notes. The Cache Manager records the local machine's system type name in kernel memory during initialization.
+       If you do not use the conventional names, you must use the <emphasis role="bold">fs sysname</emphasis> command to change the
+       value in kernel memory from its default just after Cache Manager initialization, on every client machine of the relevant
+       system type. The <emphasis role="bold">fs sysname</emphasis> command also displays the current value; see <link
+       linkend="HDRWQ417">Displaying and Setting the System Type Name</link>.</para>
+ 
+       <para>In pathnames in the AFS filespace itself, use the @sys variable carefully and sparingly, because it can lead to
+       unexpected results. It is generally best to restrict its use to only one level in the filespace. The third level is a common
+       choice, because that is where many cells store the binaries for different machine types.</para>
+ 
+       <para>Multiple instances of the @sys variable in a pathname are especially dangerous to people who must explicitly change
+       directories (with the <emphasis role="bold">cd</emphasis> command, for example) into directories that store binaries for
+       system types other than the machine on which they are working, such as administrators or developers who maintain those
+       directories. After changing directories, it is recommended that such people verify they are in the desired directory.</para>
+     </sect2>
+ 
+     <sect2 id="Header_68">
+       <title>Setting Server Preferences</title>
+ 
+       <para>The Cache Manager stores a table of preferences for file server machines in kernel memory. A preference rank pairs a
+       file server machine interface's IP address with an integer in the range from 1 to 65,534. When it needs to access a file, the
+       Cache Manager compares the ranks for the interfaces of all machines that house the file, and first attempts to access the file
+       via the interface with the best rank. As it initializes, the Cache Manager sets default ranks that bias it to access files via
+       interfaces that are close to it in terms of network topology. You can adjust the preference ranks to improve performance if
+       you wish.</para>
+ 
+       <para>The Cache Manager also uses similar preferences for Volume Location (VL) Server machines. Use the <emphasis
+       role="bold">fs getserverprefs</emphasis> command to display preference ranks and the <emphasis role="bold">fs
+       setserverprefs</emphasis> command to set them. See <link linkend="HDRWQ414">Maintaining Server Preference Ranks</link>.</para>
+ 
+       <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>configuration issues</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ57">
+     <title>Configuring AFS User Accounts</title>
+ 
+     <para>This section discusses some of the issues to consider when configuring AFS user accounts. Because AFS is separate from the
+     UNIX file system, a user's AFS account is separate from her UNIX account.</para>
+ 
+     <para>The preferred method for creating a user account is with the <emphasis role="bold">uss</emphasis> suite of commands. With
+     a single command, you can create all the components of one or many accounts, after you have prepared a template file that guides
+     the account creation. See <link linkend="HDRWQ449">Creating and Deleting User Accounts with the uss Command Suite</link>.</para>
+ 
+     <para>Alternatively, you can issue the individual commands that create each component of an account. For instructions, along
+     with instructions for removing user accounts and changing user passwords, user volume quotas and usernames, see <link
+     linkend="HDRWQ491">Administering User Accounts</link>.</para>
+ 
+     <para>When users leave your system, it is often good policy to remove their accounts. Instructions appear in <link
+     linkend="HDRWQ486">Deleting Individual Accounts with the uss delete Command</link> and <link linkend="HDRWQ524">Removing a User
+     Account</link>.</para>
+ 
+     <para>An AFS user account consists of the following components, which are described in greater detail in <link
+     linkend="HDRWQ494">The Components of an AFS User Account</link>. <itemizedlist>
+         <listitem>
+           <para>A Protection Database entry</para>
+         </listitem>
+ 
+         <listitem>
+           <para>An Authentication Database entry</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A volume</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A home directory at which the volume is mounted</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Ownership of the home directory and full permissions on its ACL</para>
+         </listitem>
+ 
+         <listitem>
+           <para>An entry in the local password file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent) of each machine the
+           user needs to log into</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Optionally, standard files and subdirectories that make the account more useful</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>By creating some components but not others, you can create accounts at different levels of functionality, using either
+     <emphasis role="bold">uss</emphasis> commands as described in <link linkend="HDRWQ449">Creating and Deleting User Accounts with
+     the uss Command Suite</link> or individual commands as described in <link linkend="HDRWQ491">Administering User Accounts</link>.
+     The levels of functionality include the following <itemizedlist>
+         <listitem>
+           <para>An authentication-only account enables the user to obtain AFS tokens and so to access protected AFS data and to
+           issue privileged commands. It consists only of entries in the Authentication and Protection Database. This type of account
+           is suitable for administrative accounts and for users from foreign cells who need to access protected data. Local users
+           generally also need a volume and home directory.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A basic user account includes a volume for the user, in addition to Authentication and Protection Database entries.
+           The volume is mounted in the AFS filespace as the user's home directory, and provides a repository for the user's personal
+           files.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A full account adds configuration files for basic functions such as logging in, printing, and mail delivery to a
+           basic account, making it more convenient and useful. For a discussion of some useful types of configuration files, see
+           <link linkend="HDRWQ60">Creating Standard Files in New AFS Accounts</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>If your users have UNIX user accounts that predate the introduction of AFS in the cell, you possibly want to convert them
+     into AFS accounts. There are three main issues to consider: <itemizedlist>
+         <listitem>
+           <para>Making UNIX and AFS UIDs match</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Setting the password field in the local password file appropriately</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Moving files from the UNIX file system into AFS</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>For further discussion, see <link linkend="HDRWQ459">Converting Existing UNIX Accounts with uss</link> or <link
+     linkend="HDRWQ498">Converting Existing UNIX Accounts</link>.</para>
+ 
+     <indexterm>
+       <primary>username</primary>
+ 
+       <secondary>choosing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>name</secondary>
+ 
+       <see>username</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>choosing</primary>
+ 
+       <secondary>name</secondary>
+ 
+       <tertiary>user</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>anonymous user</primary>
+ 
+       <secondary>AFS UID reserved</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS UID</primary>
+ 
+       <secondary>reserved</secondary>
+ 
+       <tertiary>anonymous user</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ58">
+       <title>Choosing Usernames and Naming Other Account Components</title>
+ 
+       <para>This section suggests schemes for choosing usernames, AFS UIDs, user volume names and mount point names, and also
+       outlines some restrictions on your choices.</para>
+ 
+       <formalpara>
+         <title>Usernames</title>
+ 
+         <para>AFS imposes very few restrictions on the form of usernames. It is best to keep usernames short, both because many
+         utilities and applications can handle usernames of no more than eight characters and because by convention many components
+         of and AFS account incorporate the name. These include the entries in the Protection and Authentication Databases, the
+         volume, and the mount point. Depending on your electronic mail delivery system, the username can become part of the user's
+         mailing address. The username is also the string that the user types when logging in to a client machine.</para>
+       </formalpara>
+ 
+       <para>Some common choices for usernames are last names, first names, initials, or a combination, with numbers sometimes added.
+       It is also best to avoid using the following characters, many of which have special meanings to the command shell.
+       <itemizedlist>
+           <listitem>
+             <para>The comma (<emphasis role="bold">,</emphasis>)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The colon (<emphasis role="bold">:</emphasis>), because AFS reserves it as a field separator in protection group
+             names; see <link linkend="HDRWQ62">The Two Types of User-Defined Groups</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>The semicolon (<emphasis role="bold">;</emphasis>)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The "at-sign" (<emphasis role="bold">@</emphasis>); this character is reserved for Internet mailing
+             addresses</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Spaces</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The newline character</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The period (<emphasis role="bold">.</emphasis>); it is conventional to use this character only in the special
+             username that an administrator adopts while performing privileged tasks, such as <emphasis
+             role="bold">pat.admin</emphasis></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <formalpara>
+         <title>AFS UIDs and UNIX UIDs</title>
+ 
+         <para>AFS associates a unique identification number, the AFS UID, with every username, recording the mapping in the user's
+         Protection Database entry. The AFS UID functions within AFS much as the UNIX UID does in the local file system: the AFS
+         server processes and the Cache Manager use it internally to identify a user, rather than the username.</para>
+       </formalpara>
+ 
+       <para>Every AFS user also must have a UNIX UID recorded in the local password file (<emphasis
+       role="bold">/etc/passwd</emphasis> or equivalent) of each client machine they log onto. Both administration and a user's AFS
+       access are simplest if the AFS UID and UNIX UID match. One important consequence of matching UIDs is that the owner reported
+       by the <emphasis role="bold">ls -l</emphasis> command matches the AFS username.</para>
+ 
+       <para>It is usually best to allow the Protection Server to allocate the AFS UID as it creates the Protection Database entry.
+       However, both the <emphasis role="bold">pts createuser</emphasis> command and the <emphasis role="bold">uss</emphasis>
+       commands that create user accounts enable you to assign AFS UIDs explicitly. This is appropriate in two cases: <itemizedlist>
+           <listitem>
+             <para>You wish to group together the AFS UIDs of related users</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You are converting an existing UNIX account into an AFS account and want to make the AFS UID match the existing
+             UNIX UID</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>After the Protection Server initializes for the first time on a cell's first file server machine, it starts assigning
+       AFS UIDs at a default value. To change the default before creating any user accounts, or at any time, use the <emphasis
+       role="bold">pts setmax</emphasis> command to reset the <computeroutput>max user id counter</computeroutput>. To display the
+       counter, use the <emphasis role="bold">pts listmax</emphasis> command. See <link linkend="HDRWQ560">Displaying and Setting the
+       AFS UID and GID Counters</link>.</para>
+ 
+       <para>AFS reserves one AFS UID, 32766, for the user <emphasis role="bold">anonymous</emphasis>. The AFS server processes
+       assign this identity and AFS UID to any user who does not possess a token for the local cell. Do not assign this AFS UID to
+       any other user or hardcode its current value into any programs or a file's owner field, because it is subject to change in
+       future releases.</para>
+ 
+       <indexterm>
+         <primary>username</primary>
+ 
+         <secondary>part of volume name</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>choosing</primary>
+ 
+         <secondary>name</secondary>
+ 
+         <tertiary>user volume</tertiary>
+       </indexterm>
+ 
+       <formalpara>
+         <title>User Volume Names</title>
+ 
+         <para>Like any volume name, a user volume's base (read/write) name cannot exceed 22 characters in length or include the
+         <emphasis role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> extension. See <link
+         linkend="HDRWQ44">Creating Volumes to Simplify Administration</link>. By convention, user volume names have the format
+         <emphasis role="bold">user.</emphasis>username. Using the <emphasis role="bold">user.</emphasis> prefix not only makes it
+         easy to identify the volume's contents, but also to create a backup version of all user volumes by issuing a single
+         <emphasis role="bold">vos backupsys</emphasis> command.</para>
+       </formalpara>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>choosing name for user volume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>choosing</primary>
+ 
+         <secondary>name</secondary>
+ 
+         <tertiary>user volume mount point</tertiary>
+       </indexterm>
+ 
+       <formalpara>
+         <title>Mount Point Names</title>
+ 
+         <para>By convention, the mount point for a user's volume is named after the username. Many cells follow the convention of
+         mounting user volumes in the <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+         role="bold">/usr</emphasis> directory, as discussed in <link linkend="HDRWQ43">The Third Level</link>. Very large cells
+         sometimes find that mounting all user volumes in the same directory slows directory lookup, however; for suggested
+         alternatives, see the following section.</para>
+       </formalpara>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>for grouping user home directories</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>suggestions for grouping home directories</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ59">
+       <title>Grouping Home Directories</title>
+ 
+       <para>Mounting user volumes in the <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+       role="bold">/usr</emphasis> directory is an AFS-appropriate variation on the standard UNIX practice of putting user home
+       directories under the <emphasis role="bold">/usr</emphasis> subdirectory. However, cells with more than a few hundred users
+       sometimes find that mounting all user volumes in a single directory results in slow directory lookup. The solution is to
+       distribute user volume mount points into several directories; there are a number of alternative methods to accomplish this.
+       <itemizedlist>
+           <listitem>
+             <para>Distribute user home directories into multiple directories that reflect organizational divisions, such as academic
+             or corporate departments. For example, a company can create group directories called <emphasis
+             role="bold">usr/marketing</emphasis>, <emphasis role="bold">usr/research</emphasis>, <emphasis
+             role="bold">usr/finance</emphasis>. A good feature of this scheme is that knowing a user's department is enough to find
+             the user's home directory. Also, it makes it easy to set the ACL to limit access to members of the department only. A
+             potential drawback arises if departments are of sufficiently unequal size that users in large departments experience
+             slower lookup than users in small departments. This scheme is also not appropriate in cells where users frequently
+             change between divisions.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Distribute home directories into alphabetic subdirectories of the <emphasis role="bold">usr</emphasis> directory
+             (the <emphasis role="bold">usr/a</emphasis> subdirectory, the <emphasis role="bold">usr/b</emphasis> subdirectory, and
+             so on), based on the first letter of the username. If the cell is very large, create subdirectories under each letter
+             that correspond to the second letter in the user name. This scheme has the same advantages and disadvantages of a
+             department-based scheme. Anyone who knows the user's username can find the user's home directory, but users with names
+             that begin with popular letters sometimes experience slower lookup.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Distribute home directories randomly but evenly into more than one grouping directory. One cell that uses this
+             scheme has over twenty such directories called the <emphasis role="bold">usr1</emphasis> directory, the <emphasis
+             role="bold">usr2</emphasis> directory, and so on. This scheme is especially appropriate in cells where the other two
+             schemes do not seem feasible. It eliminates the potential problem of differences in lookup speed, because all
+             directories are about the same size. Its disadvantage is that there is no way to guess which directory a given user's
+             volume is mounted in, but a solution is to create a symbolic link in the regular <emphasis role="bold">usr</emphasis>
+             directory that references the actual mount point. For example, if user <emphasis role="bold">smith</emphasis>'s volume
+             is mounted at the <emphasis role="bold">/afs/bigcell.com/usr17/smith</emphasis> directory, then the <emphasis
+             role="bold">/afs/bigcell.com/usr/smith</emphasis> directory is a symbolic link to the <emphasis
+             role="bold">../usr17/smith</emphasis> directory. This way, if someone does not know which directory the user <emphasis
+             role="bold">smith</emphasis> is in, he or she can access it through the link called <emphasis
+             role="bold">usr/smith</emphasis>; people who do know the appropriate directory save lookup time by specifying it.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>For instructions on how to implement the various schemes when using the <emphasis role="bold">uss</emphasis> program to
+       create user accounts, see <link linkend="HDRWQ472">Evenly Distributing User Home Directories with the G Instruction</link> and
+       <link linkend="HDRWQ473">Creating a Volume with the V Instruction</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_72">
+       <title>Making a Backup Version of User Volumes Available</title>
+ 
+       <para>Mounting the backup version of a user's volume is a simple way to enable users themselves to restore data they have
+       accidentally removed or deleted. It is conventional to mount the backup version at a subdirectory of the user's home directory
+       (called perhaps the <emphasis role="bold">OldFiles</emphasis> subdirectory), but other schemes are possible. Once per day you
+       create a new backup version to capture the changes made that day, overwriting the previous day's backup version with the new
+       one. Users can always retrieve the previous day's copy of a file without your assistance, freeing you to deal with more
+       pressing tasks.</para>
+ 
+       <para>Users sometimes want to delete the mount point to their backup volume, because they erroneously believe that the backup
+       volume's contents count against their quota. Remind them that the backup volume is separate, so the only space it uses in the
+       user volume is the amount needed for the mount point.</para>
+ 
+       <para>For further discussion of backup volumes, see <link linkend="HDRWQ77">Backing Up AFS Data</link> and <link
+       linkend="HDRWQ201">Creating Backup Volumes</link>.</para>
+ 
+       <indexterm>
+         <primary>file</primary>
+ 
+         <secondary>creating standard ones in new user account</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>creating</secondary>
+ 
+         <tertiary>standard files in</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>standard files in new user account</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ60">
+       <title>Creating Standard Files in New AFS Accounts</title>
+ 
+       <para>From your experience as a UNIX administrator, you are probably familiar with the use of login and shell initialization
+       files (such as the <emphasis role="bold">.login</emphasis> and <emphasis role="bold">.cshrc</emphasis> files) to make an
+       account easier to use.</para>
+ 
+       <para>It is often practical to add some AFS-specific directories to the definition of the user's <envar>PATH</envar>
+       environment variable, including the following: <itemizedlist>
+           <listitem>
+             <para>The path to a <emphasis role="bold">bin</emphasis> subdirectory in the user's home directory for binaries the user
+             has created (that is, <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/usr/</emphasis><replaceable>username</replaceable><emphasis role="bold">/bin</emphasis>)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">/usr/afsws/bin</emphasis> path, which conventionally includes programs like <emphasis
+             role="bold">fs</emphasis>, <emphasis role="bold">klog</emphasis>, <emphasis role="bold">kpasswd</emphasis>, <emphasis
+             role="bold">pts</emphasis>, <emphasis role="bold">tokens</emphasis>, and <emphasis role="bold">unlog</emphasis></para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">/usr/afsws/etc</emphasis> path, if the user is an administrator; it usually houses the
+             AFS command suites that require privilege (the <emphasis role="bold">backup</emphasis>, <emphasis
+             role="bold">butc</emphasis>, <emphasis role="bold">kas</emphasis>, <emphasis role="bold">uss</emphasis>, <emphasis
+             role="bold">vos</emphasis> commands), the <emphasis role="bold">package</emphasis> program, and others</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If you are not using an AFS-modified login utility, it can be helpful to users to invoke the <emphasis
+       role="bold">klog</emphasis> command in their <emphasis role="bold">.login</emphasis> file so that they obtain AFS tokens as
+       part of logging in. In the following example command sequence, the first line echoes the string
+       <computeroutput>klog</computeroutput> to the standard output stream, so that the user understands the purpose of the
+       <computeroutput>Password:</computeroutput> prompt that appears when the second line is executed. The <emphasis
+       role="bold">-setpag</emphasis> flag associates the new tokens with a process authentication group (PAG), which is discussed
+       further in <link linkend="HDRWQ64">Identifying AFS Tokens by PAG</link>.</para>
+ 
+       <programlisting>
+    echo -n "klog "
+    klog -setpag
+ </programlisting>
+ 
+       <para>The following sequence of commands has a similar effect, except that the <emphasis role="bold">pagsh</emphasis> command
+       forks a new shell with which the PAG and tokens are associated.</para>
+ 
+       <programlisting>
+    pagsh
+    echo -n "klog "
+    klog
+ </programlisting>
+ 
+       <para>If you use an AFS-modified login utility, this sequence is not necessary, because such utilities both log a user in
+       locally and obtain AFS tokens.</para>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>AFS GID</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>restrictions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>privacy flags</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>privacy flags on Protection Database entry</primary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ61">
+     <title>Using AFS Protection Groups</title>
+ 
+     <para>AFS enables users to define their own groups of other users or machines. The groups are placed on ACLs to grant the same
+     permissions to many users without listing each user individually. For group creation instructions, see <link
+     linkend="HDRWQ531">Administering the Protection Database</link>.</para>
+ 
+     <para>Groups have AFS ID numbers, just as users do, but an AFS group ID (GID) is a negative integer whereas a user's AFS UID is
+     a positive integer. By default, the Protection Server allocates a new group's AFS GID automatically, but members of the
+     <emphasis role="bold">system:administrators</emphasis> group can assign a GID when issuing the <emphasis role="bold">pts
+     creategroup</emphasis> command. Before explicitly assigning a GID, it is best to verify that it is not already in use.</para>
+ 
+     <para>A group cannot belong to another group, but it can own another group or even itself as long as it (the owning group) has
+     at least one member. The current owner of a group can transfer ownership of the group to another user or group, even without the
+     new owner's permission. At that point the former owner loses administrative control over the group.</para>
+ 
+     <para>By default, each user can create 20 groups. A system administrator can increase or decrease this group creation quota with
+     the <emphasis role="bold">pts setfields</emphasis> command.</para>
+ 
+     <para>Each Protection Database entry (group or user) is protected by a set of five privacy flagswhich limit who can administer
+     the entry and what they can do. The default privacy flags are fairly restrictive, especially for user entries. See <link
+     linkend="HDRWQ559">Setting the Privacy Flags on Database Entries</link>.</para>
+ 
+     <indexterm>
+       <primary>system:administrators group</primary>
+ 
+       <secondary>about</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>system:anyuser group</primary>
+ 
+       <secondary>about</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>system:authuser group</primary>
+ 
+       <secondary>about</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>system-defined</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_75">
+       <title>The Three System Groups</title>
+ 
+       <para>As the Protection Server initializes for the first time on a cell's first database server machine, it automatically
+       creates three group entries: the <emphasis role="bold">system:anyuser</emphasis>, <emphasis
+       role="bold">system:authuser</emphasis>, and <emphasis role="bold">system:administrators</emphasis> groups.</para>
+ 
+       <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>reserved</secondary>
+ 
+         <tertiary>system-defined groups</tertiary>
+       </indexterm>
+ 
+       <para>The first two system groups are unlike any other groups in the Protection Database in that they do not have a stable
+       membership: <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">system:anyuser</emphasis> group includes everyone who can access a cell's AFS filespace:
+             users who have tokens for the local cell, users who have logged in on a local AFS client machine but not obtained tokens
+             (such as the local superuser <emphasis role="bold">root</emphasis>), and users who have connected to a local machine
+             from outside the cell. Placing the <emphasis role="bold">system:anyuser</emphasis> group on an ACL grants access to the
+             widest possible range of users. It is the only way to extend access to users from foreign AFS cells that do not have
+             local accounts.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">system:authuser</emphasis> group includes everyone who has a valid token obtained from
+             the cell's AFS authentication service.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Because the groups do not have a stable membership, the <emphasis role="bold">pts membership</emphasis> command produces
+       no output for them. Similarly, they do not appear in the list of groups to which a user belongs.</para>
+ 
+       <para>The <emphasis role="bold">system:administrators</emphasis> group does have a stable membership, consisting of the cell's
+       privileged administrators. Members of this group can issue any <emphasis role="bold">pts</emphasis> command, and are the only
+       ones who can issue several other restricted commands (such as the <emphasis role="bold">chown</emphasis> command on AFS
+       files). By default, they also implicitly have the <emphasis role="bold">a</emphasis> (<emphasis
+       role="bold">administer</emphasis>) and <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>)
+       permissions on every ACL in the filespace. For information about changing this default, see <link
+       linkend="HDRWQ586">Administering the system:administrators Group</link>.</para>
+ 
+       <para>For a discussion of how to use system groups effectively on ACLs, see <link linkend="HDRWQ571">Using Groups on
+       ACLs</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ62">
+       <title>The Two Types of User-Defined Groups</title>
+ 
+       <para>All users can create regular groups. A regular group name has two fields separated by a colon, the first of which must
+       indicate the group's ownership. The Protection Server refuses to create or change the name of a group if the result does not
+       accurately indicate the ownership.</para>
+ 
+       <para>Members of the <emphasis role="bold">system:administrators</emphasis> group can create prefix-less groups whose names do
+       not have the first field that indicates ownership. For suggestions on using the two types of groups effectively, see <link
+       linkend="HDRWQ545">Using Groups Effectively</link>.</para>
+ 
+       <indexterm>
+         <primary>authentication</primary>
+ 
+         <secondary>AFS separate from UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS</primary>
+ 
+         <secondary>authentication separate from UNIX</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ63">
+     <title>Login and Authentication in AFS</title>
+ 
+     <para>As explained in <link linkend="HDRWQ31">Differences in Authentication</link>, AFS authentication is separate from UNIX
+     authentication because the two file systems are separate. The separation has two practical implications: <itemizedlist>
+         <listitem>
+           <para>To access AFS files, users must both log into the local file system and authenticate with the AFS authentication
+           service. (Logging into the local file system is necessary because the only way to access the AFS filespace is through a
+           Cache Manager, which resides in the local machine's kernel.)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Passwords are stored in two separate places: in the Authentication Database for AFS and in the each machine's local
+           password file (the <emphasis role="bold">/etc/passwd</emphasis> file or equivalent) for the local file system.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>When a user successfully authenticates, the AFS authentication service passes a token to the user's Cache Manager. The
+     token is a small collection of data that certifies that the user has correctly provided the password associated with a
+     particular AFS identity. The Cache Manager presents the token to AFS server processes along with service requests, as proof that
+     the user is genuine. To learn about the mutual authentication procedure they use to establish identity, see <link
+     linkend="HDRWQ75">A More Detailed Look at Mutual Authentication</link>.</para>
+ 
+     <para>The Cache Manager stores tokens in the user's credential structure in kernel memory. To distinguish one user's credential
+     structure from another's, the Cache Manager identifies each one either by the user's UNIX UID or by a process authentication
+     group (PAG), which is an identification number guaranteed to be unique in the cell. For further discussion, see <link
+     linkend="HDRWQ64">Identifying AFS Tokens by PAG</link>.</para>
+ 
+     <indexterm>
+       <primary>tokens</primary>
+ 
+       <secondary>one-per-cell rule</secondary>
+     </indexterm>
+ 
+     <para>A user can have only one token per cell in each separately identified credential structure. To obtain a second token for
+     the same cell, the user must either log into a different machine or obtain another credential structure with a different
+     identifier than any existing credential structure, which is most easily accomplished by issuing the <emphasis
+     role="bold">pagsh</emphasis> command (see <link linkend="HDRWQ64">Identifying AFS Tokens by PAG</link>). In a single credential
+     structure, a user can have one token for each of many cells at the same time. As this implies, authentication status on one
+     machine or PAG is independent of authentication status on another machine or PAG, which can be very useful to a user or system
+     administrator.</para>
+ 
+     <para>The AFS distribution includes library files that enable each system type's login utility to authenticate users with AFS
+     and log them into the local file system in one step. If you do not configure an AFS-modified login utility on a client machine,
+     its users must issue the <emphasis role="bold">klog</emphasis> command to authenticate with AFS after logging in.</para>
+ 
+     <note>
+       <para>The AFS-modified libraries do not necessarily support all features available in an operating system's proprietary login
+       utility. In some cases, it is not possible to support a utility at all. For more information about the supported utilities in
+       each AFS version, see the OpenAFS Release Notes.</para>
+     </note>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pagsh</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>pagsh command</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>klog with -setpag flag</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>klog command</primary>
+ 
+       <secondary>with -setpag flag</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>PAG</primary>
+ 
+       <secondary>creating with klog or pagsh command</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>PAG with klog or pagsh command</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>process authentication group</primary>
+ 
+       <secondary></secondary>
+ 
+       <see>PAG</see>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ64">
+       <title>Identifying AFS Tokens by PAG</title>
+ 
+       <para>As noted, the Cache Manager identifies user credential structures either by UNIX UID or by PAG. Using a PAG is
+       preferable because it guaranteed to be unique: the Cache Manager allocates it based on a counter that increments with each
+       use. In contrast, multiple users on a machine can share or assume the same UNIX UID, which creates potential security
+       problems. The following are two common such situations: <itemizedlist>
+           <listitem>
+             <para>The local superuser <emphasis role="bold">root</emphasis> can always assume any other user's UNIX UID simply by
+             issuing the <emphasis role="bold">su</emphasis> command, without providing the user's password. If the credential
+             structure is associated with the user's UNIX UID, then assuming the UID means inheriting the AFS tokens.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Two users working on different NFS client machines can have the same UNIX UID in their respective local file
+             systems. If they both access the same NFS/AFS Translator machine, and the Cache Manager there identifies them by their
+             UNIX UID, they become indistinguishable. To eliminate this problem, the Cache Manager on a translator machine
+             automatically generates a PAG for each user and uses it, rather than the UNIX UID, to tell users apart.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Yet another advantage of PAGs over UIDs is that processes spawned by the user inherit the PAG and so share the token;
+       thus they gain access to AFS as the authenticated user. In many environments, for example, printer and other daemons run under
+       identities (such as the local superuser <emphasis role="bold">root</emphasis>) that the AFS server processes recognize only as
+       the <emphasis role="bold">anonymous</emphasis> user. Unless PAGs are used, such daemons cannot access files for which the
+       <emphasis role="bold">system:anyuser</emphasis> group does not have the necessary ACL permissions.</para>
+ 
+       <para>Once a user has a PAG, any new tokens the user obtains are associated with the PAG. The PAG expires two hours after any
+       associated tokens expire or are discarded. If the user issues the <emphasis role="bold">klog</emphasis> command before the PAG
+       expires, the new token is associated with the existing PAG (the PAG is said to be recycled in this case).</para>
+ 
+       <para>AFS-modified login utilities automatically generate a PAG, as described in the following section. If you use a standard
+       login utility, your users must issue the <emphasis role="bold">pagsh</emphasis> command before the <emphasis
+       role="bold">klog</emphasis> command, or include the latter command's <emphasis role="bold">-setpag</emphasis> flag. For
+       instructions, see <link linkend="HDRWQ69">Using Two-Step Login and Authentication</link>.</para>
+ 
+       <para>Users can also use either command at any time to create a new PAG. The difference between the two commands is that the
+       <emphasis role="bold">klog</emphasis> command replaces the PAG associated with the current command shell and tokens. The
+       <emphasis role="bold">pagsh</emphasis> command initializes a new command shell before creating a new PAG. If the user already
+       had a PAG, any running processes or jobs continue to use the tokens associated with the old PAG whereas any new jobs or
+       processes use the new PAG and its associated tokens. When you exit the new shell (by pressing &lt;<emphasis
+       role="bold">Ctrl-d</emphasis>&gt;, for example), you return to the original PAG and shell. By default, the <emphasis
+       role="bold">pagsh</emphasis> command initializes a Bourne shell, but you can include the <emphasis role="bold">-c</emphasis>
+       argument to initialize a C shell (the <emphasis role="bold">/bin/csh</emphasis> program on many system types) or Korn shell
+       (the <emphasis role="bold">/bin/ksh</emphasis> program) instead.</para>
+ 
+       <indexterm>
+         <primary>login utility</primary>
+ 
+         <secondary>AFS version</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ65">
+       <title>Using an AFS-modified login Utility</title>
+ 
+       <para>As previously mentioned, an AFS-modified login utility simultaneously obtains an AFS token and logs the user into the
+       local file system. This section outlines the login and authentication process and its interaction with the value in the
+       password field of the local password file.</para>
+ 
+       <para>An AFS-modified login utility performs a sequence of steps similar to the following; details can vary for different
+       operating systems: <orderedlist>
+           <listitem>
+             <para>It checks the user's entry in the local password file (the <emphasis role="bold">/etc/passwd</emphasis> file or
+             equivalent).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If no entry exists, or if an asterisk (<computeroutput>*</computeroutput>) appears in the entry's password field,
+             the login attempt fails. If the entry exists, the attempt proceeds to the next step.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ66" />The utility obtains a PAG.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ67" />The utility converts the password provided by the user into an encryption key and encrypts a
+             packet of data with the key. It sends the packet to the AFS authentication service (the AFS Authentication Server in the
+             conventional configuration).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The authentication service decrypts the packet and, depending on the success of the decryption, judges the
+             password to be correct or incorrect. (For more details, see <link linkend="HDRWQ75">A More Detailed Look at Mutual
+             Authentication</link>.) <itemizedlist>
+                 <listitem>
+                   <para>If the authentication service judges the password incorrect, the user does not receive an AFS token. The PAG
+                   is retained, ready to be associated with any tokens obtained later. The attempt proceeds to Step <link
+                   linkend="LIWQ68">6</link>.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If the authentication service judges the password correct, it issues a token to the user as proof of AFS
+                   authentication. The login utility logs the user into the local UNIX file system. Some login utilities echo the
+                   following banner to the screen to alert the user to authentication with AFS. Step <link linkend="LIWQ68">6</link>
+                   is skipped. <programlisting>
+    AFS(R) version Login 
+ </programlisting></para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ68" />If no AFS token was granted in Step <link linkend="LIWQ67">4</link>, the login utility
+             attempts to log the user into the local file system, by comparing the password provided to the local password file.
+             <itemizedlist>
+                 <listitem>
+                   <para>If the password is incorrect or any value other than an encrypted 13-character string appears in the
+                   password field, the login attempt fails.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If the password is correct, the user is logged into the local file system only.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>local password file</primary>
+ 
+         <secondary>when using AFS--modified login utility</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>login utility</primary>
+ 
+         <secondary>AFS version's interaction with local password file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>local password file</secondary>
+       </indexterm>
+ 
+       <para>As indicated, when you use an AFS-modified login utility, the password field in the local password file is no longer the
+       primary gate for access to your system. If the user provides the correct AFS password, then the program never consults the
+       local password file. However, you can still use the password field to control access, in the following way: <itemizedlist>
+           <listitem>
+             <para>To prevent both local login and AFS authentication, place an asterisk (<emphasis role="bold">*</emphasis>) in the
+             field. This is useful mainly in emergencies, when you want to prevent a certain user from logging into the
+             machine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To prevent login to the local file system if the user does not provide the correct AFS password, place a character
+             string of any length other than the standard thirteen characters in the field. This is appropriate if you want to permit
+             only people with local AFS accounts to login on your machines. A single <emphasis role="bold">X</emphasis> or other
+             character is the most easily recognizable way to do this.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To enable a user to log into the local file system even after providing an incorrect AFS password, record a
+             standard UNIX encrypted password in the field by issuing the standard UNIX password-setting command (<emphasis
+             role="bold">passwd</emphasis> or equivalent).</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Systems that use a Pluggable Authentication Module (PAM) for login and AFS authentication do not necessarily consult the
+       local password file at all, in which case they do not use the password field to control authentication and login attempts.
+       Instead, instructions in the PAM configuration file (on many system types, <emphasis role="bold">/etc/pam.conf</emphasis>)
+       fill the same function. See the instructions in the OpenAFS Quick Beginnings for installing AFS-modified login
+       utilities.</para>
+ 
+       <indexterm>
+         <primary>local password file</primary>
+ 
+         <secondary>when not using AFS-modified login utility</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ69">
+       <title>Using Two-Step Login and Authentication</title>
+ 
+       <para>In cells that do not use an AFS-modified login utility, users must issue separate commands to login and authenticate, as
+       detailed in the OpenAFS User Guide: <orderedlist>
+           <listitem>
+             <para>They use the standard <emphasis role="bold">login</emphasis> program to login to the local file system, providing
+             the password listed in the local password file (the <emphasis role="bold">/etc/passwd</emphasis> file or
+             equivalent).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>They must issue the <emphasis role="bold">klog</emphasis> command to authenticate with the AFS authentication
+             service, including its <emphasis role="bold">-setpag</emphasis> flag to associate the new tokens with a process
+             authentication group (PAG).</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>As mentioned in <link linkend="HDRWQ60">Creating Standard Files in New AFS Accounts</link>, you can invoke the <emphasis
+       role="bold">klog -setpag</emphasis> command in a user's <emphasis role="bold">.login</emphasis> file (or equivalent) so that
+       the user does not have to remember to issue the command after logging in. The user still must type a password twice, once at
+       the prompt generated by the login utility and once at the <emphasis role="bold">klog</emphasis> command's prompt. This implies
+       that the two passwords can differ, but it is less confusing if they do not.</para>
+ 
+       <para>Another effect of not using an AFS-modified login utility is that the AFS servers recognize the standard <emphasis
+       role="bold">login</emphasis> program as the <emphasis role="bold">anonymous</emphasis> user. If the <emphasis
+       role="bold">login</emphasis> program needs to access any AFS files (such as the <emphasis role="bold">.login</emphasis> file
+       in a user's home directory), then the ACL that protects the file must include an entry granting the <emphasis
+       role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) and <emphasis role="bold">r</emphasis> (<emphasis
+       role="bold">read</emphasis>) permissions to the <emphasis role="bold">system:anyuser</emphasis> group.</para>
+ 
+       <para>When you do not use an AFS-modified login utility, an actual (scrambled) password must appear in the local password file
+       for each user. Use the <emphasis role="bold">/bin/passwd</emphasis> file to insert or change these passwords. It is simpler if
+       the password in the local password file matches the AFS password, but it is not required.</para>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>displaying for user</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>tokens</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>listing</primary>
+ 
+         <secondary>tokens held by issuer</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>klog</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>klog command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>creating ticket (tokens) for</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tickets</primary>
+ 
+         <secondary></secondary>
+ 
+         <see>tokens</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>creating for server process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authenticated identity</primary>
+ 
+         <secondary>acquiring with klog command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>unlog command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>unlog</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>discarding</primary>
+ 
+         <secondary>tokens</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>discarding with unlog command</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_81">
+       <title>Obtaining, Displaying, and Discarding Tokens</title>
+ 
+       <para>Once logged in, a user can obtain a token at any time with the <emphasis role="bold">klog</emphasis> command. If a valid
+       token already exists, the new one overwrites it. If a PAG already exists, the new token is associated with it.</para>
+ 
+       <para>By default, the <emphasis role="bold">klog</emphasis> command authenticates the issuer using the identity currently
+       logged in to the local file system. To authenticate as a different identity, use the <emphasis
+       role="bold">-principal</emphasis> argument. To obtain a token for a foreign cell, use the <emphasis
+       role="bold">-cell</emphasis> argument (it can be combined with the <emphasis role="bold">-principal</emphasis> argument). See
+       the OpenAFS User Guide and the entry for the <emphasis role="bold">klog</emphasis> command in the OpenAFS Administration
+       Reference.</para>
+ 
+       <para>To discard either all tokens or the token for a particular cell, issue the <emphasis role="bold">unlog</emphasis>
+       command. The command affects only the tokens associated with the current command shell. See the OpenAFS User Guideand the
+       entry for the <emphasis role="bold">unlog</emphasis> command in the OpenAFS Administration Reference.</para>
+ 
+       <para>To display the tokens associated with the current command shell, issue the <emphasis role="bold">tokens</emphasis>
+       command. The following examples illustrate its output in various situations.</para>
+ 
+       <para>If the issuer is not authenticated in any cell:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+           --End of list--
+ </programlisting>
+ 
+       <para>The following shows the output for a user with AFS UID 1000 in the ABC Corporation cell:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager: 
+    User's (AFS ID 1000) tokens for afs@abc.com  [Expires Jun  2 10:00]
+        --End of list--
+ </programlisting>
+ 
+       <para>The following shows the output for a user who is authenticated in ABC Corporation cell, the State University cell and
+       the DEF Company cell. The user has different AFS UIDs in the three cells. Tokens for the last cell are expired:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 1000) tokens for afs@abc.com  [Expires Jun  2 10:00]
+    User's (AFS ID 4286) tokens for afs@stateu.edu  [Expires Jun  3 1:34]
+    User's (AFS ID 22) tokens for afs@def.com  [&gt;&gt;Expired&lt;&lt;]
+        --End of list--
+ </programlisting>
+ 
+       <para>The Kerberos version of the <emphasis role="bold">tokens</emphasis> command (the <emphasis
+       role="bold">tokens.krb</emphasis> command), also reports information on the ticket-granting ticket, including the ticket's
+       owner, the ticket-granting service, and the expiration date, as in the following example. Also see <link
+       linkend="HDRWQ70">Support for Kerberos Authentication</link>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens.krb</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 1000) tokens for afs@abc.com [Expires Jun  2 10:00]
+    User smith's tokens for krbtgt.ABC.COM@abc.com [Expires Jun  2 10:00]
+      --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_82">
+       <title>Setting Default Token Lifetimes for Users</title>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>setting default lifetimes for users</secondary>
+       </indexterm>
+ 
+       <para>The maximum lifetime of a user token is the smallest of the ticket lifetimes recorded in the following three
+       Authentication Database entries. The <emphasis role="bold">kas examine</emphasis> command reports the lifetime as
+       <computeroutput>Max ticket lifetime</computeroutput>. Administrators who have the <computeroutput>ADMIN</computeroutput> flag
+       on their Authentication Database entry can use the <emphasis role="bold">-lifetime</emphasis> argument to the <emphasis
+       role="bold">kas setfields</emphasis> command to set an entry's ticket lifetime. <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">afs</emphasis> entry, which corresponds to the AFS server processes. The default is 100
+             hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">krbtgt</emphasis>.cellname entry, which corresponds to the ticket-granting ticket used
+             internally in generating the token. The default is 720 hours (30 days).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The entry for the user of the AFS-modified login utility or issuer of the <emphasis role="bold">klog</emphasis>
+             command. The default is 25 hours for user entries created using the AFS 3.1 or later version of the Authentication
+             Server, and 100 hours for user entries created using the AFS 3.0 version of the Authentication Server. A user can use
+             the <emphasis role="bold">kas examine</emphasis> command to display his or her own Authentication Database entry.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <note>
+         <para>An AFS-modified login utility always grants a token with a lifetime calculated from the previously described three
+         values. When issuing the <emphasis role="bold">klog</emphasis> command, a user can request a lifetime shorter than the
+         default by using the <emphasis role="bold">-lifetime</emphasis> argument. For further information, see the OpenAFS User
+         Guide and the <emphasis role="bold">klog</emphasis> reference page in the OpenAFS Administration Reference.</para>
+       </note>
+     </sect2>
+ 
+     <sect2 id="Header_83">
+       <title>Changing Passwords</title>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>changing in AFS</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kpasswd command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kpasswd</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setpassword</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setpassword</secondary>
+       </indexterm>
+ 
+       <para>Regular AFS users can change their own passwords by using either the <emphasis role="bold">kpasswd</emphasis> or
+       <emphasis role="bold">kas setpassword</emphasis> command. The commands prompt for the current password and then twice for the
+       new password, to screen out typing errors.</para>
+ 
+       <para>Administrators who have the <computeroutput>ADMIN</computeroutput> flag on their Authentication Database entries can
+       change any user's password, either by using the <emphasis role="bold">kpasswd</emphasis> command (which requires knowing the
+       current password) or the <emphasis role="bold">kas setpassword</emphasis> command.</para>
+ 
+       <para>If your cell does not use an AFS-modified login utility, remember also to change the local password, using the operating
+       system's password-changing command. For more instructions on changing passwords, see <link linkend="HDRWQ516">Changing AFS
+       Passwords</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_84">
+       <title>Imposing Restrictions on Passwords and Authentication Attempts</title>
+ 
+       <para>You can help to make your cell more secure by imposing restrictions on user passwords and authentication attempts. To
+       impose the restrictions as you create an account, use the <emphasis role="bold">A</emphasis> instruction in the <emphasis
+       role="bold">uss</emphasis> template file as described in <link linkend="HDRWQ478">Increasing Account Security with the A
+       Instruction</link>. To set or change the values on an existing account, use the <emphasis role="bold">kas setfields</emphasis>
+       command as described in <link linkend="HDRWQ515">Improving Password and Authentication Security</link>.</para>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>expiration</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>lifetime</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setfields</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setfields</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Database</primary>
+ 
+         <secondary>password lifetime, setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>restricting reuse</secondary>
+       </indexterm>
+ 
+       <para>By default, AFS passwords never expire. Limiting password lifetime can help improve security by decreasing the time the
+       password is subject to cracking attempts. You can choose an lifetime from 1 to 254 days after the password was last changed.
+       It automatically applies to each new password as it is set. When the user changes passwords, you can also insist that the new
+       password is not similar to any of the 20 passwords previously used.</para>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>consequences of multiple failed authentication attempts</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setfields</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setfields</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authentication</primary>
+ 
+         <secondary>consequences of multiple failures</secondary>
+       </indexterm>
+ 
+       <para>Unscrupulous users can try to gain access to your AFS cell by guessing an authorized user's password. To protect against
+       this type of attack, you can limit the number of times that a user can consecutively fail to provide the correct password.
+       When the limit is exceeded, the authentication service refuses further authentication attempts for a specified period of time
+       (the lockout time). To reenable authentication attempts before the lockout time expires, an administrator must issue the
+       <emphasis role="bold">kas unlock</emphasis> command.</para>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>checking quality of</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kpasswd command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kpasswd</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setpassword</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kpwvalid program</primary>
+       </indexterm>
+ 
+       <para>In addition to settings on user's authentication accounts, you can improve security by automatically checking the
+       quality of new user passwords. The <emphasis role="bold">kpasswd</emphasis> and <emphasis role="bold">kas
+       setpassword</emphasis> commands pass the proposed password to a program or script called <emphasis
+       role="bold">kpwvalid</emphasis>, if it exists. The <emphasis role="bold">kpwvalid</emphasis> performs quality checks and
+       returns a code to indicate whether the password is acceptable. You can create your own program or modified the sample program
+       included in the AFS distribution. See the <emphasis role="bold">kpwvalid</emphasis> reference page in the OpenAFS
+       Administration Reference.</para>
+ 
+       <para>There are several types of quality checks that can improve password quality. <itemizedlist>
+           <listitem>
+             <para>The password is a minimum length</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The password is not a word</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The password contains both numbers and letters</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ70">
+       <title>Support for Kerberos Authentication</title>
+ 
+       <indexterm>
+         <primary>Kerberos</primary>
+ 
+         <secondary>support for in AFS</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>klog.krb</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pagsh.krb</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>tokens.krb</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>klog.krb command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pagsh.krb command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tokens.krb command</primary>
+       </indexterm>
+ 
+       <para>If your site is using standard Kerberos authentication rather than the AFS Authentication Server, use the modified
+       versions of the <emphasis role="bold">klog</emphasis>, <emphasis role="bold">pagsh</emphasis>, and <emphasis
+       role="bold">tokens</emphasis> commands that support Kerberos authentication. The binaries for the modified version of these
+       commands have the same name as the standard binaries with the addition of a <emphasis role="bold">.krb</emphasis>
+       extension.</para>
+ 
+       <para>Use either the Kerberos version or the standard command throughout the cell; do not mix the two versions. AFS Product
+       Support can provide instructions on installing the Kerberos version of these four commands. For information on the differences
+       between the two versions of these commands, see the OpenAFS Administration Reference.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ71">
+     <title>Security and Authorization in AFS</title>
+ 
+     <para>AFS incorporates several features to ensure that only authorized users gain access to data. This section summarizes the
+     most important of them and suggests methods for improving security in your cell.</para>
+ 
+     <sect2 id="HDRWQ72">
+       <title>Some Important Security Features</title>
+ 
+       <indexterm>
+         <primary>security</primary>
+ 
+         <secondary>AFS features</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS</primary>
+ 
+         <secondary>security features</secondary>
+       </indexterm>
+ 
+       <formalpara>
+         <title>ACLs on Directories</title>
+ 
+         <para>Files in AFS are protected by the access control list (ACL) associated with their parent directory. The ACL defines
+         which users or groups can access the data in the directory, and in what way. See <link linkend="HDRWQ562">Managing Access
+         Control Lists</link>.</para>
+       </formalpara>
+ 
+       <formalpara>
+         <title>Mutual Authentication Between Client and Server</title>
+ 
+         <para>When an AFS client and server process communicate, each requires the other to prove its identity during mutual
+         authentication, which involves the exchange of encrypted information that only valid parties can decrypt and respond to. For
+         a detailed description of the mutual authentication process, see <link linkend="HDRWQ75">A More Detailed Look at Mutual
+         Authentication</link>.</para>
+       </formalpara>
+ 
+       <para>AFS server processes mutually authenticate both with one another and with processes that represent human users. After
+       mutual authentication is complete, the server and client have established an authenticated connection, across which they can
+       communicate repeatedly without having to authenticate again until the connection expires or one of the parties closes it.
+       Authenticated connections have varying lifetimes.</para>
+ 
+       <formalpara>
+         <title>Tokens</title>
+ 
+         <para>In order to access AFS files, users must prove their identities to the AFS authentication service by providing the
+         correct AFS password. If the password is correct, the authentication service sends the user a token as evidence of
+         authenticated status. See <link linkend="HDRWQ63">Login and Authentication in AFS</link>.</para>
+       </formalpara>
+ 
+       <para>Servers assign the user identity <emphasis role="bold">anonymous</emphasis> to users and processes that do not have a
+       valid token. The <emphasis role="bold">anonymous</emphasis> identity has only the access granted to the <emphasis
+       role="bold">system:anyuser</emphasis> group on ACLs.</para>
+ 
+       <formalpara>
+         <title>Authorization Checking</title>
+ 
+         <para>Mutual authentication establishes that two parties communicating with one another are actually who they claim to be.
+         For many functions, AFS server processes also check that the client whose identity they have verified is also authorized to
+         make the request. Different requests require different kinds of privilege. See <link linkend="HDRWQ73">Three Types of
+         Privilege</link>.</para>
+       </formalpara>
+ 
+       <formalpara>
+         <title>Encrypted Network Communications</title>
+ 
+         <indexterm>
+           <primary>network</primary>
+ 
+           <secondary>encrypted communication in AFS</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>encrypted network communication</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>security</primary>
+ 
+           <secondary>encrypted network communication</secondary>
+         </indexterm>
+ 
+         <para>The AFS server processes encrypt particularly sensitive information before sending it back to clients. Even if an
+         unauthorized party is able to eavesdrop on an authenticated connection, they cannot decipher encrypted data without the
+         proper key.</para>
+       </formalpara>
+ 
+       <para>The following AFS commands encrypt data because they involve server encryption keys and passwords: <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">bos addkey</emphasis> command, which adds a server encryption key to the <emphasis
+             role="bold">/usr/afs/etc/KeyFile</emphasis> file</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">bos listkeys</emphasis> command, which lists the server encryption keys from the
+             <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">kpasswd</emphasis> command, which changes a password in the Authentication
+             Database</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Most commands in the <emphasis role="bold">kas</emphasis> command suite</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>In addition, the United States edition of the Update Server encrypts sensitive information (such as the contents of
+       <emphasis role="bold">KeyFile</emphasis>) when distributing it. Other commands in the <emphasis role="bold">bos</emphasis>
+       suite and the commands in the <emphasis role="bold">fs</emphasis>, <emphasis role="bold">pts</emphasis> and <emphasis
+       role="bold">vos</emphasis> suites do not encrypt data before transmitting it.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ73">
+       <title>Three Types of Privilege</title>
+ 
+       <para>AFS uses three separate types of privilege for the reasons discussed in <link linkend="HDRWQ585">The Reason for Separate
+       Privileges</link>. <itemizedlist>
+           <listitem>
+             <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. Members are entitled to issue any
+             <emphasis role="bold">pts</emphasis> command and those <emphasis role="bold">fs</emphasis> commands that set volume
+             quota. By default, they also implicitly have the <emphasis role="bold">a</emphasis> (<emphasis
+             role="bold">administer</emphasis>) and <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>)
+             permissions on every ACL in the file tree even if the ACL does not include an entry for them.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <computeroutput>ADMIN</computeroutput> flag on the Authentication Database entry. An administrator with this
+             flag can issue any <emphasis role="bold">kas</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. An administrator whose username
+             appears in this file can issue any <emphasis role="bold">bos</emphasis>, <emphasis role="bold">vos</emphasis>, or
+             <emphasis role="bold">backup</emphasis> command (although some <emphasis role="bold">backup</emphasis> commands require
+             additional privilege as described in <link linkend="HDRWQ260">Granting Administrative Privilege to Backup
+             Operators</link>).</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_89">
+       <title>Authorization Checking versus Authentication</title>
+ 
+       <para>AFS distinguishes between authentication and authorization checking. Authentication refers to the process of proving
+       identity. Authorization checking refers to the process of verifying that an authenticated identity is allowed to perform a
+       certain action.</para>
+ 
+       <para>AFS implements authentication at the level of connections. Each time two parties establish a new connection, they
+       mutually authenticate. In general, each issue of an AFS command establishes a new connection between AFS server process and
+       client.</para>
+ 
+       <para>AFS implements authorization checking at the level of server machines. If authorization checking is enabled on a server
+       machine, then all of the server processes running on it provide services only to authorized users. If authorization checking
+       is disabled on a server machine, then all of the server processes perform any action for anyone. Obviously, disabling
+       authorization checking is an extreme security exposure. For more information, see <link linkend="HDRWQ123">Managing
+       Authentication and Authorization Requirements</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ74">
+       <title>Improving Security in Your Cell</title>
+ 
+       <indexterm>
+         <primary>security</primary>
+ 
+         <secondary>suggestions for improving</secondary>
+       </indexterm>
+ 
+       <para>You can improve the level of security in your cell by configuring user accounts, server machines, and system
+       administrator accounts in the indicated way.</para>
+ 
+       <formalpara>
+         <title>User Accounts</title>
+ 
+         <para><itemizedlist>
+             <listitem>
+               <para>Use an AFS-modified login utility, or include the <emphasis role="bold">-setpag</emphasis> flag to the <emphasis
+               role="bold">klog</emphasis> command, to associate the credential structure that houses tokens with a PAG rather than a
+               UNIX UID. This prevents users from inheriting someone else's tokens by assuming their UNIX identity. For further
+               discussion, see <link linkend="HDRWQ64">Identifying AFS Tokens by PAG</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Encourage users to issue the <emphasis role="bold">unlog</emphasis> command to destroy their tokens before
+               logging out. This forestalls attempts to access tokens left behind kernel memory. Consider including the <emphasis
+               role="bold">unlog</emphasis> command in every user's <emphasis role="bold">.logout</emphasis> file or
+               equivalent.</para>
+             </listitem>
+           </itemizedlist></para>
+       </formalpara>
+ 
+       <formalpara>
+         <title>Server Machines</title>
+ 
+         <para><itemizedlist>
+             <listitem>
+               <para>Disable authorization checking only in emergencies or for very brief periods of time. It is best to work at the
+               console of the affected machine during this time, to prevent anyone else from accessing the machine through the
+               keyboard.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Change the AFS server encryption key on a frequent and regular schedule. Make it difficult to guess (a long
+               string including nonalphabetic characters, for instance). Unlike user passwords, the password from which the AFS key
+               is derived can be longer than eight characters, because it is never used during login. The <emphasis role="bold">kas
+               setpassword</emphasis> command accepts a password hundreds of characters long. For instructions, see <link
+               linkend="HDRWQ355">Managing Server Encryption Keys</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>As much as possible, limit the number of people who can login at a server machine's console or remotely.
+               Imposing this limit is an extra security precaution rather than a necessity. The machine cannot serve as an AFS client
+               in this case.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Particularly limit access to the local superuser <emphasis role="bold">root</emphasis> account on a server
+               machine. The local superuser <emphasis role="bold">root</emphasis> has free access to important administrative
+               subdirectories of the <emphasis role="bold">/usr/afs</emphasis> directory, as described in <link linkend="HDRWQ53">AFS
+               Files on the Local Disk</link>.</para>
+ 
+               <indexterm>
+                 <primary>root superuser</primary>
+ 
+                 <secondary>limiting logins</secondary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para>As in any computing environment, server machines must be located in a secured area. Any other security measures
+               are effectively worthless if unauthorized people can access the computer hardware.</para>
+             </listitem>
+           </itemizedlist></para>
+       </formalpara>
+ 
+       <formalpara>
+         <title>System Administrators</title>
+ 
+         <para><itemizedlist>
+             <listitem>
+               <para>Limit the number of system administrators in your cell. Limit the use of system administrator accounts on
+               publicly accessible workstations. Such machines are not secure, so unscrupulous users can install programs that try to
+               steal tokens or passwords. If administrators must use publicly accessible workstations at times, they must issue the
+               <emphasis role="bold">unlog</emphasis> command before leaving the machine.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Create an administrative account for each administrator separate from the personal account, and assign AFS
+               privileges only to the administrative account. The administrators must authenticate to the administrative accounts to
+               perform duties that require privilege, which provides a useful audit trail as well.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Administrators must not leave a machine unattended while they have valid tokens. Issue the <emphasis
+               role="bold">unlog</emphasis> command before leaving.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Use the <emphasis role="bold">-lifetime</emphasis> argument to the <emphasis role="bold">kas
+               setfields</emphasis> command to set the token lifetime for administrative accounts to a fairly short amount of time.
+               The default lifetime for AFS tokens is 25 hours, but 30 or 60 minutes is possibly a more reasonable lifetime for
+               administrative tokens. The tokens for administrators who initiate AFS Backup System operations must last somewhat
+               longer, because it can take several hours to complete some dump operations, depending on the speed of the tape device
+               and the network connecting it to the file server machines that house the volumes is it accessing.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Limit administrators' use of the <emphasis role="bold">telnet</emphasis> program. It sends unencrypted passwords
+               across the network. Similarly, limit use of other remote programs such as <emphasis role="bold">rsh</emphasis> and
+               <emphasis role="bold">rcp</emphasis>, which send unencrypted tokens across the network.</para>
+             </listitem>
+           </itemizedlist></para>
+       </formalpara>
+     </sect2>
+ 
+     <sect2 id="HDRWQ75">
+       <title>A More Detailed Look at Mutual Authentication</title>
+ 
+       <indexterm>
+         <primary>mutual authentication</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>distributed file system</primary>
+ 
+         <secondary>security issues</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>shared secret</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server encryption key</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <para>As in any file system, security is a prime concern in AFS. A file system that makes file sharing easy is not useful if
+       it makes file sharing mandatory, so AFS incorporates several features that prevent unauthorized users from accessing data.
+       Security in a networked environment is difficult because almost all procedures require transmission of information across
+       wires that almost anyone can tap into. Also, many machines on networks are powerful enough that unscrupulous users can monitor
+       transactions or even intercept transmissions and fake the identity of one of the participants.</para>
+ 
+       <para>The most effective precaution against eavesdropping and information theft or fakery is for servers and clients to accept
+       the claimed identity of the other party only with sufficient proof. In other words, the nature of the network forces all
+       parties on the network to assume that the other party in a transaction is not genuine until proven so. Mutual authentication
+       is the means through which parties prove their genuineness.</para>
+ 
+       <para>Because the measures needed to prevent fakery must be quite sophisticated, the implementation of mutual authentication
+       procedures is complex. The underlying concept is simple, however: parties prove their identities by demonstrating knowledge of
+       a shared secret. A shared secret is a piece of information known only to the parties who are mutually authenticating (they can
+       sometimes learn it in the first place from a trusted third party or some other source). The party who originates the
+       transaction presents the shared secret and refuses to accept the other party as valid until it shows that it knows the secret
+       too.</para>
+ 
+       <para>The most common form of shared secret in AFS transactions is the encryption key, also referred to simply as a key. The
+       two parties use their shared key to encrypt the packets of information they send and to decrypt the ones they receive.
+       Encryption using keys actually serves two related purposes. First, it protects messages as they cross the network, preventing
+       anyone who does not know the key from eavesdropping. Second, ability to encrypt and decrypt messages successfully indicates
+       that the parties are using the key (it is their shared secret). If they are using different keys, messages remain scrambled
+       and unintelligible after decryption.</para>
+ 
+       <para>The following sections describe AFS's mutual authentication procedures in more detail. Feel free to skip these sections
+       if you are not interested in the mutual authentication process.</para>
+ 
+       <sect3 id="Header_92">
+         <title>Simple Mutual Authentication</title>
+ 
+         <para>Simple mutual authentication involves only one encryption key and two parties, generally a client and server. The
+         client contacts the server by sending a challenge message encrypted with a key known only to the two of them. The server
+         decrypts the message using its key, which is the same as the client's if they really do share the same secret. The server
+         responds to the challenge and uses its key to encrypt its response. The client uses its key to decrypt the server's
+         response, and if it is correct, then the client can be sure that the server is genuine: only someone who knows the same key
+         as the client can decrypt the challenge and answer it correctly. On its side, the server concludes that the client is
+         genuine because the challenge message made sense when the server decrypted it.</para>
+ 
+         <para>AFS uses simple mutual authentication to verify user identities during the first part of the login procedure. In that
+         case, the key is based on the user's password.</para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ76">
+         <title>Complex Mutual Authentication</title>
+ 
+         <para>Complex mutual authentication involves three encryption keys and three parties. All secure AFS transactions (except
+         the first part of the login process) employ complex mutual authentication.</para>
+ 
+         <indexterm>
+           <primary>ticket-granter</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>server encryption key</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>tokens</primary>
+ 
+           <secondary>data in</secondary>
+         </indexterm>
+ 
+         <para>When a client wishes to communicate with a server, it first contacts a third party called a ticket-granter. The
+         ticket-granter and the client mutually authenticate using the simple procedure. When they finish, the ticket-granter gives
+         the client a server ticket (or simply ticket) as proof that it (the ticket-granter) has preverified the identity of the
+         client. The ticket-granter encrypts the ticket with the first of the three keys, called the server encryption key because it
+         is known only to the ticket-granter and the server the client wants to contact. The client does not know this key.</para>
+ 
+         <para>The ticket-granter sends several other pieces of information along with the ticket. They enable the client to use the
+         ticket effectively despite being unable to decrypt the ticket itself. Along with the ticket, the items constitute a token:
+         <itemizedlist>
+             <listitem>
+               <para>A session key, which is the second encryption key involved in mutual authentication. The ticket-granter invents
+               the session key at random as the shared secret between client and server. For reasons explained further below, the
+               ticket-granter also puts a copy of the session key inside the ticket. The client and server use the session key to
+               encrypt messages they send to one another during their transactions. The ticket-granter invents a different session
+               key for each connection between a client and a server (there can be several transactions during a single
+               connection).</para>
+ 
+               <indexterm>
+                 <primary>session key</primary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para>The name of the server for which the ticket is valid (and so which server encryption key encrypts the ticket
+               itself).</para>
+             </listitem>
+ 
+             <listitem>
+               <para>A ticket lifetime indicator. The default lifetime of AFS server tickets is 100 hours. If the client wants to
+               contact the server again after the ticket expires, it must contact the ticket-granter to get a new ticket.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <para>The ticket-granter seals the entire token with the third key involved in complex mutual authentication--the key known
+         only to it (the ticket-granter) and the client. In some cases, this third key is derived from the password of the human user
+         whom the client represents.</para>
+ 
+         <para>Now that the client has a valid server ticket, it is ready to contact the server. It sends the server two things:
+         <itemizedlist>
+             <listitem>
+               <para>The server ticket. This is encrypted with the server encryption key.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Its request message, encrypted with the session key. Encrypting the message protects it as it crosses the
+               network, since only the server/client pair for whom the ticket-granter invented the session key know it.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <para>At this point, the server does not know the session key, because the ticket-granter just created it. However, the
+         ticket-granter put a copy of the session key inside the ticket. The server uses the server encryption key to decrypts the
+         ticket and learns the session key. It then uses the session key to decrypt the client's request message. It generates a
+         response and sends it to the client. It encrypts the response with the session key to protect it as it crosses the
+         network.</para>
+ 
+         <para>This step is the heart of mutual authentication between client and server, because it proves to both parties that they
+         know the same secret: <itemizedlist>
+             <listitem>
+               <para>The server concludes that the client is authorized to make a request because the request message makes sense
+               when the server decrypts it using the session key. If the client uses a different session key than the one the server
+               finds inside the ticket, then the request message remains unintelligible even after decryption. The two copies of the
+               session key (the one inside the ticket and the one the client used) can only be the same if they both came from the
+               ticket-granter. The client cannot fake knowledge of the session key because it cannot look inside the ticket, sealed
+               as it is with the server encryption key known only to the server and the ticket-granter. The server trusts the
+               ticket-granter to give tokens only to clients with whom it (the ticket-granter) has authenticated, so the server
+               decides the client is legitimate.</para>
+ 
+               <para>(Note that there is no direct communication between the ticket-granter and the server, even though their
+               relationship is central to ticket-based mutual authentication. They interact only indirectly, via the client's
+               possession of a ticket sealed with their shared secret.)</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The client concludes that the server is genuine and trusts the response it gets back from the server, because
+               the response makes sense after the client decrypts it using the session key. This indicates that the server encrypted
+               the response with the same session key as the client knows. The only way for the server to learn that matching session
+               key is to decrypt the ticket first. The server can only decrypt the ticket because it shares the secret of the server
+               encryption key with the ticket-granter. The client trusts the ticket-granter to give out tickets only for legitimate
+               servers, so the client accepts a server that can decrypt the ticket as genuine, and accepts its response.</para>
+             </listitem>
+           </itemizedlist></para>
+       </sect3>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ77">
+     <title>Backing Up AFS Data</title>
+ 
+     <para>AFS provides two related facilities that help the administrator back up AFS data: backup volumes and the AFS Backup
+     System.</para>
+ 
+     <sect2 id="Header_95">
+       <title>Backup Volumes</title>
+ 
+       <para>The first facility is the backup volume, which you create by cloning a read/write volume. The backup volume is read-only
+       and so preserves the state of the read/write volume at the time the clone is made.</para>
+ 
+       <para>Backup volumes can ease administration if you mount them in the file system and make their contents available to users.
+       For example, it often makes sense to mount the backup version of each user volume as a subdirectory of the user's home
+       directory. A conventional name for this mount point is <emphasis role="bold">OldFiles</emphasis>. Create a new version of the
+       backup volume (that is, reclone the read/write) once a day to capture any changes that were made since the previous backup. If
+       a user accidentally removes or changes data, the user can restore it from the backup volume, rather than having to ask you to
+       restore it.</para>
+ 
+       <para>The OpenAFS User Guide does not mention backup volumes, so regular users do not know about them if you decide not to use
+       them. This implies that if you <emphasis role="bold">do</emphasis> make backup versions of user volumes, you need to tell your
+       users about how the backup works and where you have mounted it.</para>
+ 
+       <para>Users are often concerned that the data in a backup volume counts against their volume quota and some of them even want
+       to remove the <emphasis role="bold">OldFiles</emphasis> mount point. It does not, because the backup volume is a separate
+       volume. The only amount of space it uses in the user's volume is the amount needed for the mount point, which is about the
+       same as the amount needed for a standard directory element.</para>
+ 
+       <para>Backup volumes are discussed in detail in <link linkend="HDRWQ201">Creating Backup Volumes</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_96">
+       <title>The AFS Backup System</title>
+ 
+       <para>Backup volumes can reduce restoration requests, but they reside on disk and so do not protect data from loss due to
+       hardware failure. Like any file system, AFS is vulnerable to this sort of data loss.</para>
+ 
+       <para>To protect your cell's users from permanent loss of data, you are strongly urged to back up your file system to tape on
+       a regular and frequent schedule. The AFS Backup System is available to ease the administration and performance of backups. For
+       detailed information about the AFS Backup System, see <link linkend="HDRWQ248">Configuring the AFS Backup System</link> and
+       <link linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+ 
+       <indexterm>
+         <primary>remote services</primary>
+ 
+         <secondary>modifications for AFS</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>ftp (AFS compared to UNIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ftpd command</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>ftpd (AFS compared to UNIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>inetd command</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>inetd (AFS compared to UNIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>rcp command</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>rcp (AFS compared to UNIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>rlogind command</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>rlogind (AFS compared to UNIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>rsh command</primary>
+ 
+         <secondary>AFS compared to UNIX</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>rsh (AFS compared to UNIX)</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ78">
+     <title>Using UNIX Remote Services in the AFS Environment</title>
+ 
+     <para>The AFS distribution includes modified versions of several standard UNIX commands, daemons and programs that provide
+     remote services, including the following: <itemizedlist>
+         <listitem>
+           <para>The <emphasis role="bold">ftpd</emphasis> program</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">inetd</emphasis> daemon</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">rcp</emphasis> program</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">rlogind</emphasis> daemon</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">rsh</emphasis> command</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>These modifications enable the commands to handle AFS authentication information (tokens). This enables issuers to be
+     recognized on the remote machine as an authenticated AFS user.</para>
+ 
+     <para>Replacing the standard versions of these programs in your file tree with the AFS-modified versions is optional. It is
+     likely that AFS's transparent access reduces the need for some of the programs anyway, especially those involved in transferring
+     files from machine to machine, like the <emphasis role="bold">ftpd</emphasis> and <emphasis role="bold">rcp</emphasis>
+     programs.</para>
+ 
+     <para>If you decide to use the AFS versions of these commands, be aware that several of them are interdependent. For example,
+     the passing of AFS authentication information works correctly with the <emphasis role="bold">rcp</emphasis> command only if you
+     are using the AFS version of both the <emphasis role="bold">rcp</emphasis> and <emphasis role="bold">inetd</emphasis>
+     commands.</para>
+ 
+     <para>The conventional installation location for the modified remote commands are the <emphasis
+     role="bold">/usr/afsws/bin</emphasis> and <emphasis role="bold">/usr/afsws/etc</emphasis> directories. To learn more about
+     commands' functionality, see their reference pages in the OpenAFS Administration Reference.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ79">
+     <title>Accessing AFS through NFS</title>
+ 
+     <para>Users of NFS client machines can access the AFS filespace by mounting the <emphasis role="bold">/afs</emphasis> directory
+     of an AFS client machine that is running the NFS/AFS Translator. This is a particular advantage in cells already running NFS who
+     want to access AFS using client machines for which AFS is not available. See <link linkend="HDRWQ595">Appendix A, Managing the
+     NFS/AFS Translator</link>.</para>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/AdminGuide/auagd008.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd008.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd008.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,5711 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ80">
+   <title>Administering Server Machines</title>
+ 
+   <indexterm>
+     <primary>server machine</primary>
+ 
+     <secondary>administering</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>administering</primary>
+ 
+     <secondary>server machine</secondary>
+   </indexterm>
+ 
+   <para>This chapter describes how to administer an AFS server machine. It describes the following configuration information and
+   administrative tasks: <itemizedlist>
+       <listitem>
+         <para>The binary and configuration files that must reside in the subdirectories of the <emphasis
+         role="bold">/usr/afs</emphasis> directory on every server machine's local disk; see <link linkend="HDRWQ83">Local Disk Files
+         on a Server Machine</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The various <emphasis>roles</emphasis> or functions that an AFS server machine can perform, and how to determine which
+         machines are taking a role; see <link linkend="HDRWQ90">The Four Roles for File Server Machines</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>How to maintain database server machines; see <link linkend="HDRWQ101">Administering Database Server
+         Machines</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>How to maintain the list of database server machines in the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis>
+         file; see <link linkend="HDRWQ118">Maintaining the Server CellServDB File</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>How to control authorization checking on a server machine; see <link linkend="HDRWQ123">Managing Authentication and
+         Authorization Requirements</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>How to install new disks or partitions on a file server machine; see <link linkend="HDRWQ130">Adding or Removing Disks
+         and Partitions</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>How to change a server machine's IP addresses and manager VLDB server entries; see <link linkend="HDRWQ138">Managing
+         Server IP Addresses and VLDB Server Entries</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>How to reboot a file server machine; see <link linkend="HDRWQ139">Rebooting a Server Machine</link>.</para>
+       </listitem>
+     </itemizedlist></para>
+ 
+   <para>To learn how to install and configure a new server machine, see the <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+ 
+   <para>To learn how to administer the server processes themselves, see <link linkend="HDRWQ142">Monitoring and Controlling Server
+   Processes</link>.</para>
+ 
+   <para>To learn how to administer volumes, see <link linkend="HDRWQ174">Managing Volumes</link>.</para>
+ 
+   <sect1 id="HDRWQ81">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Install new binaries</entry>
+ 
+             <entry><emphasis role="bold">bos install</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine binary check-and-restart time</entry>
+ 
+             <entry><emphasis role="bold">bos getrestart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set binary check-and-restart time</entry>
+ 
+             <entry><emphasis role="bold">bos setrestart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine compilation dates on binary files</entry>
+ 
+             <entry><emphasis role="bold">bos getdate</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Restart a process to use new binaries</entry>
+ 
+             <entry><emphasis role="bold">bos restart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Revert to old version of binaries</entry>
+ 
+             <entry><emphasis role="bold">bos uninstall</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove obsolete <emphasis role="bold">.BAK</emphasis> and <emphasis role="bold">.OLD</emphasis> versions</entry>
+ 
+             <entry><emphasis role="bold">bos prune</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List partitions on a file server machine</entry>
+ 
+             <entry><emphasis role="bold">vos listpart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Shutdown AFS server processes</entry>
+ 
+             <entry><emphasis role="bold">bos shutdown</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List volumes on a partition</entry>
+ 
+             <entry><emphasis role="bold">vos listvldb</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Move read/write volumes</entry>
+ 
+             <entry><emphasis role="bold">vos move</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List a cell's database server machines</entry>
+ 
+             <entry><emphasis role="bold">bos listhosts</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Add a database server machine to server <emphasis role="bold">CellServDB</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">bos addhost</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove a database server machine from server <emphasis role="bold">CellServDB</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">bos removehost</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set authorization checking requirements</entry>
+ 
+             <entry><emphasis role="bold">bos setauth</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Prevent authentication for <emphasis role="bold">bos</emphasis>, <emphasis role="bold">pts</emphasis>, and
+             <emphasis role="bold">vos</emphasis> commands</entry>
+ 
+             <entry>Include <emphasis role="bold">-noauth</emphasis> flag</entry>
+           </row>
+ 
+           <row>
+             <entry>Prevent authentication for kas commands</entry>
+ 
+             <entry>Include <emphasis role="bold">-noauth</emphasis> flag on some commands or issue <emphasis
+             role="bold">noauthentication</emphasis> while in interactive mode</entry>
+           </row>
+ 
+           <row>
+             <entry>Display all VLDB server entries</entry>
+ 
+             <entry><emphasis role="bold">vos listaddrs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove a VLDB server entry</entry>
+ 
+             <entry><emphasis role="bold">vos changeaddr</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Reboot a server machine remotely</entry>
+ 
+             <entry><emphasis role="bold">bos exec</emphasis> <emphasis>reboot_command</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ83">
+     <title>Local Disk Files on a Server Machine</title>
+ 
+     <para>Several types of files must reside in the subdirectories of the <emphasis role="bold">/usr/afs</emphasis> directory on an
+     AFS server machine's local disk. They include binaries, configuration files, the administrative database files (on database
+     server machines), log files, and volume header files.</para>
+ 
+     <para><emphasis role="bold">Note for Windows users:</emphasis> Some files described in this document possibly do not exist on
+     machines that run a Windows operating system. Also, Windows uses a backslash (<emphasis role="bold">\</emphasis>) rather than a
+     forward slash (<emphasis role="bold">/</emphasis>) to separate the elements in a pathname.</para>
+ 
+     <indexterm>
+       <primary>usr/afs/bin directory on server machines</primary>
+ 
+       <secondary>contents listed</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directory</primary>
+ 
+       <secondary>/usr/afs/bin on server machines</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process binaries</primary>
+ 
+       <secondary>in /usr/afs/bin</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ84">
+       <title>Binaries in the /usr/afs/bin Directory</title>
+ 
+       <para>The <emphasis role="bold">/usr/afs/bin</emphasis> directory stores the AFS server process and command suite binaries
+       appropriate for the machine's system (CPU and operating system) type. If a process has both a server portion and a client
+       portion (as with the Update Server) or if it has separate components (as with the <emphasis role="bold">fs</emphasis>
+       process), each component resides in a separate file.</para>
+ 
+       <para>To ensure predictable system performance, all file server machines must run the same AFS build version of a given
+       process. To maintain consistency easily, use the Update Server process to distribute binaries from a binary distribution
+       machine of each system type, as described further in <link linkend="HDRWQ93">Binary Distribution Machines</link>.</para>
+ 
+       <para>It is best to keep the binaries for all processes in the <emphasis role="bold">/usr/afs/bin</emphasis> directory, even
+       if you do not run the process actively on the machine. It simplifies the process of reconfiguring machines (for example,
+       adding database server functionality to an existing file server machine). Similarly, it is best to keep the command suite
+       binaries in the directory, even if you do not often issue commands while working on the server machine. It enables you to
+       issue commands during recovery from server and machine outages.</para>
+ 
+       <para>The following lists the binary files in the <emphasis role="bold">/usr/afs/bin</emphasis> directory that are directly
+       related to the AFS server processes or command suites. Other binaries (for example, for the <emphasis
+       role="bold">klog</emphasis> command) sometimes appear in this directory on a particular file server machine's disk or in an
+       AFS distribution. <variablelist>
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>backup command binary</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>backup commands</primary>
+ 
+             <secondary>binary in /usr/afs/bin</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">backup</emphasis></term>
+ 
+             <listitem>
+               <para>The command suite for the AFS Backup System (the binary for the Backup Server is <emphasis
+               role="bold">buserver</emphasis>).</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>bos command binary</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>bos commands</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">bos</emphasis></term>
+ 
+             <listitem>
+               <para>The command suite for communicating with the Basic OverSeer (BOS) Server (the binary for the BOS Server is
+               <emphasis role="bold">bosserver</emphasis>).</para>
+ 
+               <indexterm>
+                 <primary>bosserver</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>bosserver</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>BOS Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>bosserver binary</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>bosserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>BOS Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>BOS Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">bosserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Basic OverSeer (BOS) Server process.</para>
+ 
+               <indexterm>
+                 <primary>buserver</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>buserver</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Backup Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>buserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>buserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>Backup Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Backup Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">buserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Backup Server process.</para>
+ 
+               <indexterm>
+                 <primary>fileserver</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>fileserver</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>File Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>fileserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>fileserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>File Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>File Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">fileserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the File Server component of the <emphasis role="bold">fs</emphasis> process.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>kas command binary</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>kas commands</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">kas</emphasis></term>
+ 
+             <listitem>
+               <para>The command suite for communicating with the Authentication Server (the binary for the Authentication Server is
+               <emphasis role="bold">kaserver</emphasis>).</para>
+ 
+               <indexterm>
+                 <primary>kaserver process</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>kaserver process</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Authentication Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>kaserver binary file</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>kaserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>Authentication Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Authentication Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">kaserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Authentication Server process.</para>
+ 
+               <indexterm>
+                 <primary>ntpd</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>ntpd</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>ntpd</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>NTPD, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>NTPD</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Network Time Protocol Daemon</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>NTPD</see>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ntpd</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Network Time Protocol Daemon (NTPD). AFS redistributes this binary and uses the <emphasis
+               role="bold">runntp</emphasis> program to configure and initialize the NTPD process.</para>
+ 
+               <indexterm>
+                 <primary>ntpdc</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>ntpdc</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>ntpdc</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ntpdc</emphasis></term>
+ 
+             <listitem>
+               <para>A debugging utility furnished with the <emphasis role="bold">ntpd</emphasis> program.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>pts command binary</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>pts commands</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">pts</emphasis></term>
+ 
+             <listitem>
+               <para>The command suite for communicating with the Protection Server process (the binary for the Protection Server is
+               <emphasis role="bold">ptserver</emphasis>).</para>
+ 
+               <indexterm>
+                 <primary>ptserver process</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>ptserver process</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Protection Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>ptserver binary</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>ptserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>Protection Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Protection Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ptserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Protection Server process.</para>
+ 
+               <indexterm>
+                 <primary>runntp</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>runntp</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>NTPD</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>runntp</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>runntp</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">runntp</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the program used to configure NTPD most appropriately for use with AFS.</para>
+ 
+               <indexterm>
+                 <primary>Salvager</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Salvager</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Salvager</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>salvager</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>salvager</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>Salvager, binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">salvager</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Salvager component of the <emphasis role="bold">fs</emphasis> process.</para>
+ 
+               <indexterm>
+                 <primary>udebug</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>udebug</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>udebug</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>udebug</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">udebug</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for a program that reports the status of AFS's distributed database technology, Ubik.</para>
+ 
+               <indexterm>
+                 <primary>upclient</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>upclient</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Update Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>upclient</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>upclient</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>Update Server, binaries in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Update Server</primary>
+ 
+                 <secondary>binaries in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">upclient</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the client portion of the Update Server process.</para>
+ 
+               <indexterm>
+                 <primary>upserver</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>upserver</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Update Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>upserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>upserver</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">upserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the server portion of the Update Server process.</para>
+ 
+               <indexterm>
+                 <primary>vlserver</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>vlserver</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>VL Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>vlserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>vlserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>VL Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>VL Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Volume Location Server</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>VL Server</see>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">vlserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Volume Location (VL) Server process.</para>
+ 
+               <indexterm>
+                 <primary>volserver</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>volserver</primary>
+ 
+                 <secondary></secondary>
+ 
+                 <see>Volume Server</see>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>volserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>programs</primary>
+ 
+                 <secondary>volserver</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>processes</primary>
+ 
+                 <secondary>Volume Server, binary in /usr/afs/bin</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Volume Server</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">volserver</emphasis></term>
+ 
+             <listitem>
+               <para>The binary for the Volume Server component of the <emphasis role="bold">fs</emphasis> process.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>vos command binary</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>vos commands</primary>
+ 
+                 <secondary>binary in /usr/afs/bin</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">vos</emphasis></term>
+ 
+             <listitem>
+               <para>The command suite for communicating with the Volume and VL Server processes (the binaries for the servers are
+               <emphasis role="bold">volserver</emphasis> and <emphasis role="bold">vlserver</emphasis>, respectively).</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>usr/afs/etc directory on server machines</primary>
+ 
+         <secondary>contents listed</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>/usr/afs/etc</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>server configuration, in /usr/afs/etc directory</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>common configuration files (server)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>configuration files in /usr/afs/etc</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ85">
+       <title>Common Configuration Files in the /usr/afs/etc Directory</title>
+ 
+       <para>The directory <emphasis role="bold">/usr/afs/etc</emphasis> on every file server machine's local disk contains
+       configuration files in ASCII and machine-independent binary format. For predictable AFS performance throughout a cell, all
+       server machines must have the same version of each configuration file: <itemizedlist>
+           <indexterm>
+             <primary>Update Server</primary>
+ 
+             <secondary>distributing server configuration files</secondary>
+           </indexterm>
+ 
+           <listitem>
+             <para>Cells that run the United States edition of AFS conventionally use the Update Server to distribute a common
+             version of each file from the cell's system control machine to other server machines (for more on the system control
+             machine, see <link linkend="HDRWQ94">The System Control Machine</link>). Run the Update Server's server portion on the
+             system control machine, and the client portion on all other server machines. Update the files on the system control
+             machine only, except as directed by instructions for dealing with emergencies.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Cells that run the international edition of AFS must not use the Update Server to distribute the contents of the
+             <emphasis role="bold">/usr/afs/etc</emphasis> directory. Due to United States government regulations, the data
+             encryption routines that AFS uses to protect the files in this directory as they cross the network are not available to
+             the Update Server in the international edition of AFS. You must instead update the files on each server machine
+             individually, taking extra care to issue exactly the same <emphasis role="bold">bos</emphasis> command for each machine.
+             The necessary data encryption routines are available to the <emphasis role="bold">bos</emphasis> commands, so
+             information is safe as it crosses the network from the machine where the <emphasis role="bold">bos</emphasis> command is
+             issued to the server machines.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Never directly edit any of the files in the <emphasis role="bold">/usr/afs/etc</emphasis> directory, except as directed
+       by instructions for dealing with emergencies. In normal circumstances, use the appropriate <emphasis
+       role="bold">bos</emphasis> commands to change the files. The following list includes pointers to instructions.</para>
+ 
+       <para>The files in this directory include: <variablelist>
+           <indexterm>
+             <primary>CellServDB file (server)</primary>
+ 
+             <secondary>about</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>CellServDB (server)</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">CellServDB</emphasis></term>
+ 
+             <listitem>
+               <para>An ASCII file that names the cell's database server machines, which run the Authentication, Backup, Protection,
+               and VL Server processes. You create the initial version of this file by issuing the <emphasis role="bold">bos
+               setcellname</emphasis> command while installing your cell's first server machine. It is very important to update this
+               file when you change the identity of your cell's database server machines.</para>
+ 
+               <para>The server <emphasis role="bold">CellServDB</emphasis> file is not the same as the <emphasis
+               role="bold">CellServDB</emphasis> file stored in the <emphasis role="bold">/usr/vice/etc</emphasis> directory on
+               client machines. The client version lists the database server machines for every AFS cell that you choose to make
+               accessible from the client machine. The server <emphasis role="bold">CellServDB</emphasis> file lists only the local
+               cell's database server machines, because server processes never contact processes in other cells.</para>
+ 
+               <para>For instructions on maintaining this file, see <link linkend="HDRWQ118">Maintaining the Server CellServDB
+               File</link>.</para>
+ 
+               <indexterm>
+                 <primary>KeyFile file</primary>
+ 
+                 <secondary>function of</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>KeyFile</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>server encryption key</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">KeyFile</emphasis></term>
+ 
+             <listitem>
+               <para>A machine-independent, binary-format file that lists the server encryption keys the AFS server processes use to
+               encrypt and decrypt tickets. The information in this file is the basis for secure communication in the cell, and so is
+               extremely sensitive. The file is specially protected so that only privileged users can read or change it.</para>
+ 
+               <para>For instructions on maintaining this file, see <link linkend="HDRWQ355">Managing Server Encryption
+               Keys</link>.</para>
+ 
+               <indexterm>
+                 <primary>ThisCell file (server)</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>ThisCell (server)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ThisCell</emphasis></term>
+ 
+             <listitem>
+               <para>An ASCII file that consists of a single line defining the complete Internet domain-style name of the cell (such
+               as <computeroutput>abc.com</computeroutput>). You create this file with the <emphasis role="bold">bos
+               setcellname</emphasis> command during the installation of your cell's first file server machine, as instructed in the
+               <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+ 
+               <para>Note that changing this file is only one step in changing your cell's name. For discussion, see <link
+               linkend="HDRWQ34">Choosing a Cell Name</link>.</para>
+ 
+               <indexterm>
+                 <primary>UserList file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>UserList</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">UserList</emphasis></term>
+ 
+             <listitem>
+               <para>An ASCII file that lists the usernames of the system administrators authorized to issue privileged <emphasis
+               role="bold">bos</emphasis>, <emphasis role="bold">vos</emphasis>, and <emphasis role="bold">backup</emphasis>
+               commands. For instructions on maintaining the file, see <link linkend="HDRWQ592">Administering the UserList
+               File</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>usr/afs/local directory on server machines</primary>
+ 
+         <secondary>contents listed</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>/usr/afs/local on server machines</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local configuration files (server)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>configuration files in /usr/afs/local</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ86">
+       <title>Local Configuration Files in the /usr/afs/local Directory</title>
+ 
+       <para>The directory <emphasis role="bold">/usr/afs/local</emphasis> contains configuration files that are different for each
+       file server machine in a cell. Thus, they are not updated automatically from a central source like the files in <emphasis
+       role="bold">/usr/afs/bin</emphasis> and <emphasis role="bold">/usr/afs/etc</emphasis> directories. The most important file is
+       the <emphasis role="bold">BosConfig</emphasis> file; it defines which server processes are to run on that machine.</para>
+ 
+       <para>As with the common configuration files in <emphasis role="bold">/usr/afs/etc</emphasis>, you must not edit these files
+       directly. Use commands from the <emphasis role="bold">bos</emphasis> command suite where appropriate; some files never need to
+       be altered.</para>
+ 
+       <para>The files in this directory include the following: <variablelist>
+           <indexterm>
+             <primary>BosConfig file</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>BosConfig</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">BosConfig</emphasis></term>
+ 
+             <listitem>
+               <para>This file lists the server processes to run on the server machine, by defining which processes the BOS Server
+               monitors and what it does if the process fails. It also defines the times at which the BOS Server automatically
+               restarts processes for maintenance purposes.</para>
+ 
+               <para>As you create server processes during a file server machine's installation, their entries are defined in this
+               file automatically. The <emphasis>OpenAFS Quick Beginnings</emphasis> outlines the <emphasis
+               role="bold">bos</emphasis> commands to use. For a more complete description of the file, and instructions for
+               controlling process status by editing the file with commands from the <emphasis role="bold">bos</emphasis> suite, see
+               <link linkend="HDRWQ142">Monitoring and Controlling Server Processes</link>.</para>
+ 
+               <indexterm>
+                 <primary>NetInfo file (server version)</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>NetInfo (server version)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">NetInfo</emphasis></term>
+ 
+             <listitem>
+               <para>This optional ASCII file lists one or more of the network interface addresses on the server machine. If it
+               exists when the File Server initializes, the File Server uses it as the basis for the list of interfaces that it
+               registers in its Volume Location Database (VLDB) server entry. See <link linkend="HDRWQ138">Managing Server IP
+               Addresses and VLDB Server Entries</link>.</para>
+ 
+               <indexterm>
+                 <primary>NetRestrict file (server version)</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>NetRestrict (server version)</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">NetRestrict</emphasis></term>
+ 
+             <listitem>
+               <para>This optional ASCII file lists one or more network interface addresses. If it exists when the File Server
+               initializes, the File Server removes the specified addresses from the list of interfaces that it registers in its VLDB
+               server entry. See <link linkend="HDRWQ138">Managing Server IP Addresses and VLDB Server Entries</link>.</para>
+ 
+               <indexterm>
+                 <primary>NoAuth file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>NoAuth</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">NoAuth</emphasis></term>
+ 
+             <listitem>
+               <para>This zero-length file instructs all AFS server processes running on the machine not to perform authorization
+               checking. Thus, they perform any action for any user, even <emphasis role="bold">anonymous</emphasis>. This very
+               insecure state is useful only in rare instances, mainly during the installation of the machine.</para>
+ 
+               <para>The file is created automatically when you start the initial <emphasis role="bold">bosserver</emphasis> process
+               with the <emphasis role="bold">-noauth</emphasis> flag, or issue the <emphasis role="bold">bos setauth</emphasis>
+               command to turn off authentication requirements. When you use the <emphasis role="bold">bos setauth</emphasis> command
+               to turn on authentication, the BOS Server removes this file. For more information, see <link
+               linkend="HDRWQ123">Managing Authentication and Authorization Requirements</link>.</para>
+ 
+               <indexterm>
+                 <primary>SALVAGE.fs file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>SALVAGE.fs</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">SALVAGE.fs</emphasis></term>
+ 
+             <listitem>
+               <para>This zero-length file controls how the BOS Server handles a crash of the File Server component of the <emphasis
+               role="bold">fs</emphasis> process. The BOS Server creates this file each time it starts or restarts the <emphasis
+               role="bold">fs</emphasis> process. If the file is present when the File Server crashes, then the BOS Server runs the
+               Salvager before restarting the File Server and Volume Server again. When the File Server exits normally, the BOS
+               Server removes the file so that the Salvager does not run.</para>
+ 
+               <para>Do not create or remove this file yourself; the BOS Server does so automatically. If necessary, you can salvage
+               a volume or partition by using the <emphasis role="bold">bos salvage</emphasis> command; see <link
+               linkend="HDRWQ232">Salvaging Volumes</link>.</para>
+ 
+               <indexterm>
+                 <primary>salvage.lock file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>salvage.lock</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">salvage.lock</emphasis></term>
+ 
+             <listitem>
+               <para>This file guarantees that only one Salvager process runs on a file server machine at a time (the single process
+               can fork multiple subprocesses to salvage multiple partitions in parallel). As the Salvager initiates (when invoked by
+               the BOS Server or by issue of the <emphasis role="bold">bos salvage</emphasis> command), it creates this zero-length
+               file and issues the <emphasis role="bold">flock</emphasis> system call on it. It removes the file when it completes
+               the salvage operation. Because the Salvager must lock the file in order to run, only one Salvager can run at a
+               time.</para>
+ 
+               <indexterm>
+                 <primary>sysid file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>sysid</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>File Server</primary>
+ 
+                 <secondary>interfaces registered in VLDB</secondary>
+ 
+                 <tertiary>listed in sysid file</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>VLDB</primary>
+ 
+                 <secondary>server machine interfaces registered</secondary>
+ 
+                 <tertiary>listed in sysid file</tertiary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">sysid</emphasis></term>
+ 
+             <listitem>
+               <para>This file records the network interface addresses that the File Server (<emphasis
+               role="bold">fileserver</emphasis> process) registers in its VLDB server entry. When the Cache Manager requests volume
+               location information, the Volume Location (VL) Server provides all of the interfaces registered for each server
+               machine that houses the volume. This enables the Cache Manager to make use of multiple addresses when accessing AFS
+               data stored on a multihomed file server machine. For further information, see <link linkend="HDRWQ138">Managing Server
+               IP Addresses and VLDB Server Entries</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>usr/afs/db directory on server machines</primary>
+ 
+         <secondary>contents listed</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>/usr/afs/db on server machines</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database files</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>replicated database files</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>log files</primary>
+ 
+         <secondary>for replicated databases</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>database files in /usr/afs/db</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ87">
+       <title>Replicated Database Files in the /usr/afs/db Directory</title>
+ 
+       <para>The directory <emphasis role="bold">/usr/afs/db</emphasis> contains two types of files pertaining to the four replicated
+       databases in the cell--the Authentication Database, Backup Database, Protection Database, and Volume Location Database (VLDB):
+       <itemizedlist>
+           <listitem>
+             <para>A file that contains each database, with a <emphasis role="bold">.DB0</emphasis> extension.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A log file for each database, with a <emphasis role="bold">.DBSYS1</emphasis> extension. The database server
+             process logs each database operation in this file before performing it. If the operation is interrupted, the process
+             consults this file to learn how to finish it.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Each database server process (Authentication, Backup, Protection, or VL Server) maintains its own database and log
+       files. The database files are in binary format, so you must always access or alter them using commands from the <emphasis
+       role="bold">kas</emphasis> suite (for the Authentication Database), <emphasis role="bold">backup</emphasis> suite (for the
+       Backup Database), <emphasis role="bold">pts</emphasis> suite (for the Protection Database), or <emphasis
+       role="bold">vos</emphasis> suite (for the VLDB).</para>
+ 
+       <para>If a cell runs more than one database server machine, each database server process keeps its own copy of its database on
+       its machine's hard disk. However, it is important that all the copies of a given database are the same. To synchronize them,
+       the database server processes call on AFS's distributed database technology, Ubik, as described in <link
+       linkend="HDRWQ102">Replicating the OpenAFS Administrative Databases</link>.</para>
+ 
+       <para>The files listed here appear in this directory only on database server machines. On non-database server machines, this
+       directory is empty. <variablelist>
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>bdb.DB0</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>bdb.DB0 file</primary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">bdb.DB0</emphasis></term>
+ 
+             <listitem>
+               <para>The Backup Database file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>bdb.DBSYS1</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>bdb.DBSYS1 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">bdb.DBSYS1</emphasis></term>
+ 
+             <listitem>
+               <para>The Backup Database log file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>kaserver.DB0</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>kaserver.DB0 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">kaserver.DB0</emphasis></term>
+ 
+             <listitem>
+               <para>The Authentication Database file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>kaserver.DBSYS1</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>kaserver.DBSYS1 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">kaserver.DBSYS1</emphasis></term>
+ 
+             <listitem>
+               <para>The Authentication Database log file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>prdb.DB0</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>prdb.DB0 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">prdb.DB0</emphasis></term>
+ 
+             <listitem>
+               <para>The Protection Database file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>prdb.DBSYS1</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>prdb.DBSYS1 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">prdb.DBSYS1</emphasis></term>
+ 
+             <listitem>
+               <para>The Protection Database log file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>vldb.DB0</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>vldb.DB0 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">vldb.DB0</emphasis></term>
+ 
+             <listitem>
+               <para>The Volume Location Database file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>vldb.DBSYS1</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>vldb.DBSYS1 file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">vldb.DBSYS1</emphasis></term>
+ 
+             <listitem>
+               <para>The Volume Location Database log file.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>usr/afs/logs directory on server machines</primary>
+ 
+         <secondary>contents listed</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>/usr/afs/logs on server machines</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>core files in /usr/afs/logs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>log files in /usr/afs/logs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>log files</primary>
+ 
+         <secondary>for server processes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>core files</primary>
+ 
+         <secondary>for server processes</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ88">
+       <title>Log Files in the /usr/afs/logs Directory</title>
+ 
+       <para>The <emphasis role="bold">/usr/afs/logs</emphasis> directory contains log files from various server processes. The files
+       detail interesting events that occur during normal operations. For instance, the Volume Server can record volume moves in the
+       <emphasis role="bold">VolserLog</emphasis> file. Events are recorded at completion, so the server processes do not use these
+       files to reconstruct failed operations unlike the ones in the <emphasis role="bold">/usr/afs/db</emphasis> directory.</para>
+ 
+       <para>The information in log files can be very useful as you evaluate process failures and other problems. For instance, if
+       you receive a timeout message when you try to access a volume, checking the <emphasis role="bold">FileLog</emphasis> file
+       possibly provides an explanation, showing that the File Server was unable to attach the volume. To examine a log file
+       remotely, use the <emphasis role="bold">bos getlog</emphasis> command as described in <link linkend="HDRWQ173">Displaying
+       Server Process Log Files</link>.</para>
+ 
+       <para>This directory also contains the core image files generated if a process being monitored by the BOS Server crashes. The
+       BOS Server attempts to add an extension to the standard <emphasis role="bold">core</emphasis> name to indicate which process
+       generated the core file (for example, naming a core file generated by the Protection Server <emphasis
+       role="bold">core.ptserver</emphasis>). The BOS Server cannot always assign the correct extension if two processes fail at
+       about the same time, so it is not guaranteed to be correct.</para>
+ 
+       <para>The directory contains the following files: <variablelist>
+           <indexterm>
+             <primary>AuthLog file</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>AuthLog</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">AuthLog</emphasis></term>
+ 
+             <listitem>
+               <para>The Authentication Server's log file.</para>
+ 
+               <indexterm>
+                 <primary>BackupLog file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>BackupLog</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">BackupLog</emphasis></term>
+ 
+             <listitem>
+               <para>The Backup Server's log file.</para>
+ 
+               <indexterm>
+                 <primary>BosLog file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>BosLog</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">BosLog</emphasis></term>
+ 
+             <listitem>
+               <para>The BOS Server's log file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>FileLog</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>FileLog file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">FileLog</emphasis></term>
+ 
+             <listitem>
+               <para>The File Server's log file.</para>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>SalvageLog</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>SalvageLog file</primary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">SalvageLog</emphasis></term>
+ 
+             <listitem>
+               <para>The Salvager's log file.</para>
+ 
+               <indexterm>
+                 <primary>VLLog file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>VLLog</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">VLLog</emphasis></term>
+ 
+             <listitem>
+               <para>The Volume Location (VL) Server's log file.</para>
+ 
+               <indexterm>
+                 <primary>VolserLog file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>VolserLog</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">VolserLog</emphasis></term>
+ 
+             <listitem>
+               <para>The Volume Server's log file.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">core.process</emphasis></term>
+ 
+             <listitem>
+               <para>If present, a core image file produced as an AFS server process on the machine crashed (probably the process
+               named by process).</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <note>
+         <para>To prevent log files from growing unmanageably large, restart the server processes periodically, particularly the
+         database server processes. To avoid restarting the processes, use the UNIX <emphasis role="bold">rm</emphasis> command to
+         remove the file as the process runs; it re-creates it automatically.</para>
+       </note>
+ 
+       <indexterm>
+         <primary>vicep directory on server machines</primary>
+ 
+         <secondary>contents listed</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>/vicep on server machines</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume header</primary>
+ 
+         <secondary>in /vicep directories</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>partition</primary>
+ 
+         <secondary>housing AFS volumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>partitions, naming</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ89">
+       <title>Volume Headers on Server Partitions</title>
+ 
+       <para>A partition that houses AFS volumes must be mounted at a subdirectory of the machine's root ( / ) directory (not, for
+       instance under the <emphasis role="bold">/usr</emphasis> directory). The file server machine's file system registry file
+       (<emphasis role="bold">/etc/fstab</emphasis> or equivalent) must correctly map the directory name and the partition's device
+       name. The directory name is of the form <emphasis role="bold">/vicep</emphasis>index, where each index is one or two lowercase
+       letters. By convention, the first AFS partition on a machine is mounted at <emphasis role="bold">/vicepa</emphasis>, the
+       second at <emphasis role="bold">/vicepb</emphasis>, and so on. If there are more than 26 partitions, continue with <emphasis
+       role="bold">/vicepaa</emphasis>, <emphasis role="bold">/vicepab</emphasis> and so on. The <emphasis>OpenAFS Release
+       Notes</emphasis> specifies the number of supported partitions per server machine.</para>
+ 
+       <para>Do not store non-AFS files on AFS partitions. The File Server and Volume Server expect to have available all of the
+       space on the partition.</para>
+ 
+       <para>The <emphasis role="bold">/vicep</emphasis> directories contain two types of files: <variablelist>
+           <indexterm>
+             <primary>V.<emphasis>vol_ID</emphasis>.vol file</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>V.<emphasis>vol_ID</emphasis>.vol</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">Vvol_ID.vol</emphasis></term>
+ 
+             <listitem>
+               <para>Each such file is a volume header. The vol_ID corresponds to the volume ID number displayed in the output from
+               the <emphasis role="bold">vos examine</emphasis>, <emphasis role="bold">vos listvldb</emphasis>, and <emphasis
+               role="bold">vos listvol</emphasis> commands.</para>
+ 
+               <indexterm>
+                 <primary>FORCESALVAGE file</primary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>FORCESALVAGE</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">FORCESALVAGE</emphasis></term>
+ 
+             <listitem>
+               <para>This zero-length file triggers the Salvager to salvage the entire partition. The AFS-modified version of the
+               <emphasis role="bold">fsck</emphasis> program creates this file if it discovers corruption.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <note>
+         <para>For most system types, it is important never to run the standard <emphasis role="bold">fsck</emphasis> program
+         provided with the operating system on an AFS file server machine. It removes all AFS volume data from server partitions
+         because it does not recognize their format.</para>
+       </note>
+ 
+       <indexterm>
+         <primary>roles for server machine</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>roles summarized</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ90">
+     <title>The Four Roles for File Server Machines</title>
+ 
+     <para>In cells that have more than one server machine, not all server machines have to perform exactly the same functions. The
+     are four possible <emphasis>roles</emphasis> a machine can assume, determined by which server processes it is running. A machine
+     can assume more than one role by running all of the relevant processes. The following list summarizes the four roles, which are
+     described more completely in subsequent sections. <itemizedlist>
+         <listitem>
+           <para>A <emphasis>simple file server</emphasis> machine runs only the processes that store and deliver AFS files to client
+           machines. You can run as many simple file server machines as you need to satisfy your cell's performance and disk space
+           requirements.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>database server machine</emphasis> runs the four database server processes that maintain AFS's
+           replicated administrative databases: the Authentication, Backup, Protection, and Volume Location (VL) Server
+           processes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>binary distribution machine</emphasis> distributes the AFS server binaries for its system type to all
+           other server machines of that system type.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The single <emphasis>system control machine</emphasis> distributes common server configuration files to all other
+           server machines in the cell, in a cell that runs the United States edition of AFS (cells that use the international
+           edition of AFS must not use the system control machine for this purpose). The machine conventionally also serves as the
+           time synchronization source for the cell, adjusting its clock according to a time source outside the cell.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>If a cell has a single server machine, it assumes the simple file server and database server roles. The instructions in
+     the <emphasis>OpenAFS Quick Beginnings</emphasis> also have you configure it as the system control machine and binary
+     distribution machine for its system type, but it does not actually perform those functions until you install another server
+     machine.</para>
+ 
+     <para>It is best to keep the binaries for all of the AFS server processes in the <emphasis role="bold">/usr/afs/bin</emphasis>
+     directory, even if not all processes are running. You can then change which roles a machine assumes simply by starting or
+     stopping the processes that define the role.</para>
+ 
+     <indexterm>
+       <primary>simple file server machine</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server machine</primary>
+ 
+       <secondary>simple file server role</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ91">
+       <title>Simple File Server Machines</title>
+ 
+       <para>A <emphasis>simple file server machine</emphasis> runs only the server processes that store and deliver AFS files to
+       client machines, monitor process status, and pick up binaries and configuration files from the cell's binary distribution and
+       system control machines.</para>
+ 
+       <para>In general, only cells with more than three server machines need to run simple file server machines. In cells with three
+       or fewer machines, all of them are usually database server machines (to benefit from replicating the administrative
+       databases); see <link linkend="HDRWQ92">Database Server Machines</link>.</para>
+ 
+       <para>The following processes run on a simple file server machine: <itemizedlist>
+           <listitem>
+             <para>The BOS Server (<emphasis role="bold">bosserver</emphasis> process)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">fs</emphasis> process, which combines the File Server, Volume Server, and Salvager
+             processes so that they can coordinate their operations on the data in volumes and avoid the inconsistencies that can
+             result from multiple simultaneous operations on the same data</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The NTP coordinator (<emphasis role="bold">runntp</emphasis> process), which helps keep the machine's clock
+             synchronized with the clocks on the other server machines in the cell</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A client portion of the Update Server that picks up binary files from the binary distribution machine of its AFS
+             system type (the <emphasis role="bold">upclientbin</emphasis> process)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A client portion of the Update Server that picks up common configuration files from the system control machine, in
+             cells running the United States edition of AFS (the <emphasis role="bold">upclientetc</emphasis> process)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>database server role</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>runs on database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>runs on database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>runs on database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>runs on database server machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ92">
+       <title>Database Server Machines</title>
+ 
+       <para>A <emphasis>database server machine</emphasis> runs the four processes that maintain the AFS replicated administrative
+       databases: the Authentication Server, Backup Server, Protection Server, and Volume Location (VL) Server, which maintain the
+       Authentication Database, Backup Database, Protection Database, and Volume Location Database (VLDB), respectively. To review
+       the functions of these server processes and their databases, see <link linkend="HDRWQ17">AFS Server Processes and the Cache
+       Manager</link>.</para>
+ 
+       <para>If a cell has more than one server machine, it is best to run more than one database server machine, but more than three
+       are rarely necessary. Replicating the databases in this way yields the same benefits as replicating volumes: increased
+       availability and reliability of information. If one database server machine or process goes down, the information in the
+       database is still available from others. The load of requests for database information is spread across multiple machines,
+       preventing any one from becoming overloaded.</para>
+ 
+       <para>Unlike replicated volumes, however, replicated databases do change frequently. Consistent system performance demands
+       that all copies of the database always be identical, so it is not possible to record changes in only some of them. To
+       synchronize the copies of a database, the database server processes use AFS's distributed database technology, Ubik. See <link
+       linkend="HDRWQ102">Replicating the OpenAFS Administrative Databases</link>.</para>
+ 
+       <para>It is critical that the AFS server processes on every server machine in a cell know which machines are the database
+       server machines. The database server processes in particular must maintain constant contact with their peers in order to
+       coordinate the copies of the database. The other server processes often need information from the databases. Every file server
+       machine keeps a list of its cell's database server machines in its local <emphasis
+       role="bold">/usr/afs/etc/CellServDB</emphasis> file. Cells that use the States edition of AFS can use the system control
+       machine to distribute this file (see <link linkend="HDRWQ94">The System Control Machine</link>).</para>
+ 
+       <para>The following processes define a database server machine: <itemizedlist>
+           <listitem>
+             <para>The Authentication Server (<emphasis role="bold">kaserver</emphasis> process)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Backup Server (<emphasis role="bold">buserver</emphasis> process)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Protection Server (<emphasis role="bold">ptserver</emphasis> process)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The VL Server (<emphasis role="bold">vlserver</emphasis> process)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Database server machines can also run the processes that define a simple file server machine, as listed in <link
+       linkend="HDRWQ91">Simple File Server Machines</link>. One database server machine can act as the cell's system control
+       machine, and any database server machine can serve as the binary distribution machine for its system type; see <link
+       linkend="HDRWQ94">The System Control Machine</link> and <link linkend="HDRWQ93">Binary Distribution Machines</link>.</para>
+ 
+       <indexterm>
+         <primary>binary distribution machine</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>binary distribution role</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>server portion</secondary>
+ 
+         <tertiary>on binary distribution machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>client portion</secondary>
+ 
+         <tertiary>for binaries</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ93">
+       <title>Binary Distribution Machines</title>
+ 
+       <para>A <emphasis>binary distribution machine</emphasis> stores and distributes the binary files for the AFS processes and
+       command suites to all other server machines of its system type. Each file server machine keeps its own copy of AFS server
+       process binaries on its local disk, by convention in the <emphasis role="bold">/usr/afs/bin</emphasis> directory. For
+       consistent system performance, however, all server machines must run the same version (build level) of a process. For
+       instructions for checking a binary's build level, see <link linkend="HDRWQ117">Displaying A Binary File's Build Level</link>.
+       The easiest way to keep the binaries consistent is to have a binary distribution machine of each system type distribute them
+       to its system-type peers.</para>
+ 
+       <para>The process that defines a binary distribution machine is the server portion of the Update Server (<emphasis
+       role="bold">upserver</emphasis> process). The client portion of the Update Server (<emphasis
+       role="bold">upclientbin</emphasis> process) runs on the other server machines of that system type and references the binary
+       distribution machine.</para>
+ 
+       <para>Binary distribution machines usually also run the processes that define a simple file server machine, as listed in <link
+       linkend="HDRWQ91">Simple File Server Machines</link>. One binary distribution machine can act as the cell's system control
+       machine, and any binary distribution machine can serve as a database server machine; see <link linkend="HDRWQ94">The System
+       Control Machine</link> and <link linkend="HDRWQ92">Database Server Machines</link>.</para>
+ 
+       <indexterm>
+         <primary>system control machine</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuration files</primary>
+ 
+         <secondary>server machine, common</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>system control role</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ94">
+       <title>The System Control Machine</title>
+ 
+       <para>In cells that run the United States edition of AFS, the <emphasis>system control machine</emphasis> stores and
+       distributes system configuration files shared by all of the server machines in the cell. Each file server machine keeps its
+       own copy of the configuration files on its local disk, by convention in the <emphasis role="bold">/usr/afs/etc</emphasis>
+       directory. For consistent system performance, however, all server machines must use the same files. The easiest way to keep
+       the files consistent is to have the system control machine distribute them. You make changes only to the copy stored on the
+       system control machine, as directed by the instructions in this document. The United States edition of AFS is available to
+       cells in the United States and Canada and to selected institutions in other countries, as determined by United States
+       government regulations.</para>
+ 
+       <para>Cells that run the international version of AFS do not use the system control machine to distribute system configuration
+       files. Some of the files contain information that is too sensitive to cross the network unencrypted, and United States
+       government regulations forbid the export of the necessary encryption routines in the form that the Update Server uses. You
+       must instead update the configuration files on each file server machine individually. The <emphasis role="bold">bos</emphasis>
+       commands that you use to update the files encrypt the information using an exportable form of the encryption routines.</para>
+ 
+       <para>For a list of the configuration files stored in the <emphasis role="bold">/usr/afs/etc</emphasis> directory, see <link
+       linkend="HDRWQ85">Common Configuration Files in the /usr/afs/etc Directory</link>.</para>
+ 
+       <para>The <emphasis>OpenAFS Quick Beginnings</emphasis> configures a cell's first server machine as the system control
+       machine. If you wish, you can reassign the role to a different machine that you install later, but you must then change the
+       client portion of the Update Server (<emphasis role="bold">upclientetc</emphasis>) process running on all other server
+       machines to refer to the new system control machine.</para>
+ 
+       <para>The following processes define the system control machine: <itemizedlist>
+           <indexterm>
+             <primary>Update Server</primary>
+ 
+             <secondary>server portion</secondary>
+ 
+             <tertiary>on system control machine</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Update Server</primary>
+ 
+             <secondary>client portion</secondary>
+ 
+             <tertiary>for configuration files</tertiary>
+           </indexterm>
+ 
+           <listitem>
+             <para>The server portion of the Update Server (<emphasis role="bold">upserver</emphasis>) process, in cells using the
+             United States edition of AFS. The client portion of the Update Server (<emphasis role="bold">upclientetc</emphasis>
+             process) runs on the other server machines and references the system control machine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The NTP coordinator (<emphasis role="bold">runntp</emphasis> process) which points to a time source outside the
+             cell, if the cell uses NTPD to synchronize its clocks. The <emphasis role="bold">runntp</emphasis> process on other
+             machines reference the system control machine as their main time source.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The system control machine can also run the processes that define a simple file server machine, as listed in <link
+       linkend="HDRWQ91">Simple File Server Machines</link>. It can also server as a database server machine, and by convention acts
+       as the binary distribution machine for its system type. A single <emphasis role="bold">upserver</emphasis> process can
+       distribute both configuration files and binaries. See <link linkend="HDRWQ92">Database Server Machines</link> and <link
+       linkend="HDRWQ93">Binary Distribution Machines</link>.</para>
+ 
+       <indexterm>
+         <primary>determining</primary>
+ 
+         <secondary>roles taken by server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>identifying</primary>
+ 
+         <secondary>roles taken by server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>determining roles</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>roles for server machine</primary>
+ 
+         <secondary>determining</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>identifying with bos status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>determining</primary>
+ 
+         <secondary>identity of database server machines</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>identifying</primary>
+ 
+         <secondary>database server machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ95">
+       <title>To locate database server machines</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos listhosts</emphasis> command. <programlisting>
+    % <emphasis role="bold">bos listhosts</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The machines listed in the output are the cell's database server machines. For complete instructions and example
+           output, see <link linkend="HDRWQ120">To display a cell's database server machines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">bos status</emphasis> command to verify
+           that a machine listed in the output of the <emphasis role="bold">bos listhosts</emphasis> command is actually running the
+           processes that define it as a database server machine. For complete instructions, see <link linkend="HDRWQ158">Displaying
+           Process Status and Information from the BosConfig File</link>. <programlisting>
+    % <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver kaserver ptserver vlserver</emphasis>
+ </programlisting></para>
+ 
+           <para>If the specified machine is a database server machine, the output from the <emphasis role="bold">bos
+           status</emphasis> command includes the following lines:</para>
+ 
+           <programlisting>
+    Instance buserver, currently running normally.
+    Instance kaserver, currently running normally.
+    Instance ptserver, currently running normally.
+    Instance vlserver, currently running normally.
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>system control machine</primary>
+ 
+         <secondary>identifying with bos status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>determining</primary>
+ 
+         <secondary>identity of system control machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>identifying</primary>
+ 
+         <secondary>system control machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ96">
+       <title>To locate the system control machine</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos status</emphasis> command for any server machine. Complete instructions appear
+           in <link linkend="HDRWQ158">Displaying Process Status and Information from the BosConfig File</link>. <programlisting>
+    % <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">upserver upclientbin upclientetc</emphasis> <emphasis
+                 role="bold">-long</emphasis>
+ </programlisting></para>
+ 
+           <para>The output you see depends on the machine you have contacted: a simple file server machine, the system control
+           machine, or a binary distribution machine. See <link linkend="HDRWQ98">Interpreting the Output from the bos status
+           Command</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>binary distribution machine</primary>
+ 
+         <secondary>identifying with bos status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>determining</primary>
+ 
+         <secondary>identity of binary distribution machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>identifying</primary>
+ 
+         <secondary>binary distribution machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ97">
+       <title>To locate the binary distribution machine for a system type</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos status</emphasis> command for a file server machine of the system type you are
+           checking (to determine a machine's system type, issue the <emphasis role="bold">fs sysname</emphasis> or <emphasis
+           role="bold">sys</emphasis> command as described in <link linkend="HDRWQ417">Displaying and Setting the System Type
+           Name</link>. Complete instructions for the <emphasis role="bold">bos status</emphasis> command appear in <link
+           linkend="HDRWQ158">Displaying Process Status and Information from the BosConfig File</link>. <programlisting>
+    % <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">upserver upclientbin upclientetc -long</emphasis>
+ </programlisting></para>
+ 
+           <para>The output you see depends on the machine you have contacted: a simple file server machine, the system control
+           machine, or a binary distribution machine. See <link linkend="HDRWQ98">Interpreting the Output from the bos status
+           Command</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>simple file server machine</primary>
+ 
+         <secondary>identifying with bos status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>determining</primary>
+ 
+         <secondary>identity of:</secondary>
+ 
+         <tertiary>simple file server machines</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>identifying</primary>
+ 
+         <secondary>simple file server machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ98">
+       <title>Interpreting the Output from the bos status Command</title>
+ 
+       <para>Interpreting the output of the <emphasis role="bold">bos status</emphasis> command is most straightforward for a simple
+       file server machine. There is no <emphasis role="bold">upserver</emphasis> process, so the output includes the following
+       message:</para>
+ 
+       <programlisting>
+    bos: failed to get instance info for 'upserver' (no such entity)
+ </programlisting>
+ 
+       <para>A simple file server machine runs the <emphasis role="bold">upclientbin</emphasis> process, so the output includes a
+       message like the following. It indicates that <emphasis role="bold">fs7.abc.com</emphasis> is the binary distribution machine
+       for this system type.</para>
+ 
+       <programlisting>
+    Instance upclientbin, (type is simple) currently running normally.
+    Process last started at Wed Mar 10  23:37:09 1999 (1 proc start)
+    Command 1 is '/usr/afs/bin/upclient fs7.abc.com -t 60 /usr/afs/bin'
+ </programlisting>
+ 
+       <para>If you run the United States edition of AFS, a simple file server machine also runs the <emphasis
+       role="bold">upclientetc</emphasis> process, so the output includes a message like the following. It indicates that <emphasis
+       role="bold">fs1.abc.com</emphasis> is the system control machine.</para>
+ 
+       <programlisting>
+    Instance upclientetc, (type is simple) currently running normally.
+    Process last started at Mon Mar 22  05:23:49 1999 (1 proc start)
+    Command 1 is '/usr/afs/bin/upclient fs1.abc.com -t 60 /usr/afs/etc'
+ </programlisting>
+ 
+       <sect3 id="HDRWQ99">
+         <title>The Output on the System Control Machine</title>
+ 
+         <para>If you run the United States edition of AFS and have issued the <emphasis role="bold">bos status</emphasis> command
+         for the system control machine, the output includes an entry for the <emphasis role="bold">upserver</emphasis> process
+         similar to the following:</para>
+ 
+         <programlisting>
+    Instance upserver, (type is simple) currently running normally.
+    Process last started at Mon Mar 22 05:23:54 1999 (1 proc start)
+    Command 1 is '/usr/afs/bin/upserver'
+ </programlisting>
+ 
+         <para>If you are using the default configuration recommended in the <emphasis>OpenAFS Quick Beginnings</emphasis>, the
+         system control machine is also the binary distribution machine for its system type, and a single <emphasis
+         role="bold">upserver</emphasis> process distributes both kinds of updates. In that case, the output includes the following
+         messages:</para>
+ 
+         <programlisting>
+    bos: failed to get instance info for 'upclientbin' (no such entity)
+    bos: failed to get instance info for 'upclientetc' (no such entity)
+ </programlisting>
+ 
+         <para>If the system control machine is not a binary distribution machine, the output includes an error message for the
+         <emphasis role="bold">upclientetc</emphasis> process, but a complete a listing for the <emphasis
+         role="bold">upclientbin</emphasis> process (in this case it refers to the machine <emphasis
+         role="bold">fs5.abc.com</emphasis> as the binary distribution machine):</para>
+ 
+         <programlisting>
+    Instance upclientbin, (type is simple) currently running normally.
+    Process last started at Mon Mar 22  05:23:49 1999 (1 proc start)
+    Command 1 is '/usr/afs/bin/upclient fs5.abc.com -t 60 /usr/afs/bin'
+    bos: failed to get instance info for 'upclientetc' (no such entity)
+ </programlisting>
+       </sect3>
+ 
+       <sect3 id="HDRWQ100">
+         <title>The Output on a Binary Distribution Machine</title>
+ 
+         <para>If you have issued the <emphasis role="bold">bos status</emphasis> command for a binary distribution machine, the
+         output includes an entry for the <emphasis role="bold">upserver</emphasis> process similar to the following and error
+         message for the <emphasis role="bold">upclientbin</emphasis> process:</para>
+ 
+         <programlisting>
+    Instance upserver, (type is simple) currently running normally.
+    Process last started at Mon Apr 5 05:23:54 1999 (1 proc start)
+    Command 1 is '/usr/afs/bin/upserver'
+    bos: failed to get instance info for 'upclientbin' (no such entity)
+ </programlisting>
+ 
+         <para>Unless this machine also happens to be the system control machine, a message like the following references the system
+         control machine (in this case, <emphasis role="bold">fs3.abc.com</emphasis>):</para>
+ 
+         <programlisting>
+    Instance upclientetc, (type is simple) currently running normally.
+    Process last started at Mon Apr 5 05:23:49 1999 (1 proc start)
+    Command 1 is '/usr/afs/bin/upclient fs3.abc.com -t 60 /usr/afs/etc'
+ </programlisting>
+       </sect3>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ101">
+     <title>Administering Database Server Machines</title>
+ 
+     <para>This section explains how to administer database server machines. For installation instructions, see the <emphasis>OpenAFS
+     Quick Beginnings</emphasis>.</para>
+ 
+     <indexterm>
+       <primary>distribution</primary>
+ 
+       <secondary>of databases</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>database, distributed</primary>
+ 
+       <secondary></secondary>
+ 
+       <see>administrative database</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>distributed database</primary>
+ 
+       <secondary></secondary>
+ 
+       <see>administrative database</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>administrative database</primary>
+ 
+       <secondary>about replicating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>maintaining</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Ubik</primary>
+ 
+       <secondary>operation described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>synchronization site (Ubik)</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>secondary site (Ubik)</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>coordinator (Ubik)</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Ubik</primary>
+ 
+       <secondary>automatic updates</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>automatic</primary>
+ 
+       <secondary>update to admin. databases by Ubik</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ102">
+       <title>Replicating the OpenAFS Administrative Databases</title>
+ 
+       <para>There are several benefits to replicating the AFS administrative databases (the Authentication, Backup, Protection, and
+       Volume Location Databases), as discussed in <link linkend="HDRWQ52">Replicating the OpenAFS Administrative Databases</link>. For
+       correct cell functioning, the copies of each database must be identical at all times. To keep the databases synchronized, AFS
+       uses library of utilities called <emphasis>Ubik</emphasis>. Each database server process runs an associated lightweight Ubik
+       process, and client-side programs call Ubik's client-side subroutines when they submit requests to read and change the
+       databases.</para>
+ 
+       <para>Ubik is designed to work with minimal administrator intervention, but there are several configuration requirements, as
+       detailed in <link linkend="HDRWQ103">Configuring the Cell for Proper Ubik Operation</link>. The following brief overview of
+       Ubik's operation is helpful for understanding the requirements. For more details, see <link linkend="HDRWQ104">How Ubik
+       Operates Automatically</link>.</para>
+ 
+       <para>Ubik is designed to distribute changes made in an AFS administrative database to all copies as quickly as possible. Only
+       one copy of the database, the <emphasis>synchronization site</emphasis>, accepts change requests from clients; the lightweight
+       Ubik process running there is the <emphasis>Ubik coordinator</emphasis>. To maintain maximum availability, there is a separate
+       Ubik coordinator for each database, and the synchronization site for each of the four databases can be on a different machine.
+       The synchronization site for a database can also move from machine to machine in response to process, machine, or network
+       outages.</para>
+ 
+       <para>The other copies of a database, and the Ubik processes that maintain them, are termed <emphasis>secondary</emphasis>.
+       The secondary sites do not accept database changes directly from client-side programs, but only from the synchronization
+       site.</para>
+ 
+       <para>After the Ubik coordinator records a change in its copy of a database, it immediately sends the change to the secondary
+       sites. During the brief distribution period, clients cannot access any of the copies of the database, even for reading. If the
+       coordinator cannot reach a majority of the secondary sites, it halts the distribution and informs the client that the
+       attempted change failed.</para>
+ 
+       <para>To avoid distribution failures, the Ubik processes maintain constant contact by exchanging time-stamped messages. As
+       long as a majority of the secondary sites respond to the coordinator's messages, there is a <emphasis>quorum</emphasis> of
+       sites that are synchronized with the coordinator. If a process, machine, or network outage breaks the quorum, the Ubik
+       processes attempt to elect a new coordinator in order to establish a new quorum among the highest possible number of sites.
+       See <link linkend="HDRWQ106">A Flexible Coordinator Boosts Availability</link>.</para>
+ 
+       <indexterm>
+         <primary>Ubik</primary>
+ 
+         <secondary>requirements summarized</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server process</primary>
+ 
+         <secondary>need to run all on every database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (server)</primary>
+ 
+         <secondary>importance to Ubik operation</secondary>
+       </indexterm>
+ 
+       <sect3 id="HDRWQ103">
+         <title>Configuring the Cell for Proper Ubik Operation</title>
+ 
+         <para>This section describes how to configure your cell to maintain proper Ubik operation. <itemizedlist>
+             <listitem>
+               <para>Run all four database server processes--Authentication Server, Backup Server, Protection Server, and VL
+               Server--on all database server machines.</para>
+ 
+               <para>Both the client and server portions of Ubik expect that all the database server machines listed in the <emphasis
+               role="bold">CellServDB</emphasis> file are running all of the database server processes. There is no mechanism for
+               indicating that only some database server processes are running on a machine.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Maintain correct information in the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file at all
+               times.</para>
+ 
+               <para>Ubik consults the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file to determine the sites with
+               which to establish and maintain a quorum. Incorrect information can result in unsynchronized databases or election of
+               a coordinator in each of several subgroups of machines, because the Ubik processes on various machines do not agree on
+               which machines need to participate in the quorum.</para>
+ 
+               <para>If you run the United States version of AFS and use the Update Server, it is simplest to maintain the <emphasis
+               role="bold">/usr/afs/etc/CellServDB</emphasis> file on the system control machine, which distributes its copy to all
+               other server machines. The <emphasis>OpenAFS Quick Beginnings</emphasis> explains how to configure the Update Server.
+               If you run the international version of AFS, you must update the file on each machine individually.</para>
+ 
+               <para>The only reason to alter the file is when configuring or decommissioning a database server machine. Use the
+               appropriate <emphasis role="bold">bos</emphasis> commands rather than editing the file by hand. For instructions, see
+               <link linkend="HDRWQ118">Maintaining the Server CellServDB File</link>. The instructions in <link
+               linkend="HDRWQ142">Monitoring and Controlling Server Processes</link> for stopping and starting processes remind you
+               to alter the <emphasis role="bold">CellServDB</emphasis> file when appropriate, as do the instructions in the
+               <emphasis>OpenAFS Quick Beginnings</emphasis> for installing or decommissioning a database server machine.</para>
+ 
+               <para>(Client processes and the server processes that do not maintain databases also rely on correct information in
+               the <emphasis role="bold">CellServDB</emphasis> file for proper operation, but their use of the information does not
+               affect Ubik's operation. See <link linkend="HDRWQ118">Maintaining the Server CellServDB File</link> and <link
+               linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.)</para>
+ 
+               <indexterm>
+                 <primary>clocks</primary>
+ 
+                 <secondary>need to synchronize for Ubik</secondary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para>Keep the clocks synchronized on all machines in the cell, especially the database server machines.</para>
+ 
+               <para>In the conventional configuration specified in the <emphasis>OpenAFS Quick Beginnings</emphasis>, you run the
+               <emphasis role="bold">runntp</emphasis> process to supervise the local Network Time Protocol Daemon (NTPD) on every
+               AFS server machine. The NTPD on the system control machine synchronizes its clock with a reliable source outside the
+               cell and broadcasts the time to the NTPDs on the other server machines. You can choose to run a different time
+               synchronization protocol if you wish.</para>
+ 
+               <para>Keeping clocks synchronized is important because the Ubik processes at a database's sites timestamp the messages
+               which they exchange to maintain constant contact. Timestamping the messages is necessary because in a networked
+               environment it is not safe to assume that a message reaches its destination instantly. Ubik compares the timestamp on
+               an incoming message with the current time. If the difference is too great, it is possible that an outage is preventing
+               reliable communication between the Ubik sites, which can possibly result in unsynchronized databases. Ubik considers
+               the message invalid, which can prompt it to attempt election of a different coordinator.</para>
+ 
+               <para>Electing a new coordinator is appropriate if a timestamped message is expired due to actual interruption of
+               communication, but not if a message appears expired only because the sender and recipient do not share the same time.
+               For detailed examples of how unsynchronized clocks can destabilize Ubik operation, see <link linkend="HDRWQ105">How
+               Ubik Uses Timestamped Messages</link>.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <indexterm>
+           <primary>Ubik</primary>
+ 
+           <secondary>features summarized</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>process</primary>
+ 
+           <secondary>lightweight Ubik</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>Ubik</primary>
+ 
+           <secondary>server and client portions</secondary>
+         </indexterm>
+       </sect3>
+ 
+       <sect3 id="HDRWQ104">
+         <title>How Ubik Operates Automatically</title>
+ 
+         <para>The following Ubik features help keep its maintenance requirements to a minimum: <itemizedlist>
+             <listitem>
+               <para>Ubik's server and client portions operate automatically.</para>
+ 
+               <para>Each database server process runs a lightweight process to call on the server portion of the Ubik library. It is
+               common to refer to this lightweight process itself as Ubik. Because it is lightweight, the Ubik process does not
+               appear in process listings such as those generated by the UNIX <emphasis role="bold">ps</emphasis> command.
+               Client-side programs that need to read and change the databases directly call the subroutines in the Ubik library's
+               client portion, rather than running a separate lightweight process. Examples of such programs are the <emphasis
+               role="bold">klog</emphasis> command and the commands in the <emphasis role="bold">pts</emphasis> suite.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Ubik tracks database version numbers.</para>
+ 
+               <para>As the coordinator records a change to a database, it increments the database's version number. The version
+               number makes it easy for the coordinator to determine if a site has the most recent version or not. The version number
+               speeds the return to normal functioning after election of a new coordinator or when communication is restored after an
+               outage, because it makes it easy to determine which site has the most current database and which need to be
+               updated.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Ubik's use of timestamped messages guarantees that database copies are always synchronized during normal
+               operation.</para>
+ 
+               <para>Replicating a database to increase data availability is pointless if all copies of the database are not the
+               same. Inconsistent performance can result if clients receive different information depending on which copy of the
+               database they access. As previously noted, Ubik sites constantly track the status of their peers by exchanging
+               timestamped messages. For a detailed description, see <link linkend="HDRWQ105">How Ubik Uses Timestamped
+               Messages</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The ability to move the coordinator maximizes database availability.</para>
+ 
+               <para>Suppose, for example, that in a cell with three database server machines a network partition separates the two
+               secondary sites from the coordinator. The coordinator retires because it is no longer in contact with a majority of
+               the sites listed in the <emphasis role="bold">CellServDB</emphasis> file. The two sites on the other side of the
+               partition can elect a new coordinator among themselves, and it can then accept database changes from clients. If the
+               coordinator cannot move in this way, the database has to be read-only until the network partition is repaired. For a
+               detailed description of Ubik's election procedure, see <link linkend="HDRWQ106">A Flexible Coordinator Boosts
+               Availability</link>.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <indexterm>
+           <primary>consistency guarantees</primary>
+ 
+           <secondary>administrative databases</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>Ubik</primary>
+ 
+           <secondary>consistency guarantees</secondary>
+         </indexterm>
+ 
+         <sect4 id="HDRWQ105">
+           <title>How Ubik Uses Timestamped Messages</title>
+ 
+           <para>Ubik synchronizes the copies of a database by maintaining constant contact between the synchronization site and the
+           secondary sites. The Ubik coordinator frequently sends a time-stamped <emphasis>guarantee</emphasis> message to each of
+           the secondary sites. When the secondary site receives the message, it concludes that it is in contact with the
+           coordinator. It considers its copy of the database to be valid until time <emphasis>T</emphasis>, which is usually 60
+           seconds from the time the coordinator sent the message. In response, the secondary site returns a
+           <emphasis>vote</emphasis> message that acknowledges the coordinator as valid until a certain time X, which is usually 120
+           seconds in the future.</para>
+ 
+           <para>The coordinator sends guarantee messages more frequently than every <emphasis>T</emphasis> seconds, so that the
+           expiration periods overlap. There is no danger of expiration unless a network partition or other outage actually
+           interrupts communication. If the guarantee expires, the secondary site's copy of the database it not necessarily current.
+           Nonetheless, the database server continues to service client requests. It is considered better for overall cell
+           functioning that a secondary site remains accessible even if the information it is distributing is possibly out of date.
+           Most of the AFS administrative databases do not change that frequently, in any case, and making a database inaccessible
+           causes a timeout for clients that happen to access that copy.</para>
+ 
+           <para>As previously mentioned, Ubik's use of timestamped messages makes it vital to synchronize the clocks on database
+           server machines. There are two ways that skewed clocks can interrupt normal Ubik functioning, depending on which clock is
+           ahead of the others.</para>
+ 
+           <para>Suppose, for example, that the Ubik coordinator's clock is ahead of the secondary sites: the coordinator's clock
+           says 9:35:30, but the secondary clocks say 9:31:30. The secondary sites send votes messages that acknowledge the
+           coordinator as valid until 9:33:30. This is two minutes in the future according to the secondary clocks, but is already in
+           the past from the coordinator's perspective. The coordinator concludes that it no longer has enough support to remain
+           coordinator and forces election of a new coordinator. Election takes about three minutes, during which time no copy of the
+           database accepts changes.</para>
+ 
+           <para>The opposite possibility is that a secondary site's clock (14:50:00) is ahead of the coordinator's (14:46:30). When
+           the coordinator sends a guarantee message good until 14:47:30), it has already expired according to the secondary clock.
+           Believing that it is out of contact with the coordinator, the secondary site stops sending votes for the coordinator and
+           tries get itself elected as coordinator. This is appropriate if the coordinator has actually failed, but is inappropriate
+           when there is no actual outage.</para>
+ 
+           <para>The attempt of a single secondary site to get elected as the new coordinator usually does not affect the performance
+           of the other sites. As long as their clocks agree with the coordinator's, they ignore the other secondary site's request
+           for votes and continue voting for the current coordinator. However, if enough of the secondary sites's clocks get ahead of
+           the coordinator's, they can force election of a new coordinator even though the current one is actually working
+           fine.</para>
+ 
+           <indexterm>
+             <primary>Ubik</primary>
+ 
+             <secondary>election of coordinator</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>coordinator (Ubik)</primary>
+ 
+             <secondary>election procedure described</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>election of Ubik coordinator</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>flexible synchronization site (Ubik)</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>synchronization site (Ubik)</primary>
+ 
+             <secondary>flexibility</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Ubik</primary>
+ 
+             <secondary>majority defined</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>majority</primary>
+ 
+             <secondary>defined for Ubik</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>outages</primary>
+ 
+             <secondary>due to Ubik election</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>system outages</primary>
+ 
+             <secondary>due to Ubik election</secondary>
+           </indexterm>
+         </sect4>
+ 
+         <sect4 id="HDRWQ106">
+           <title>A Flexible Coordinator Boosts Availability</title>
+ 
+           <para>Ubik uses timestamped messages to determine when coordinator election is necessary, just as it does to keep the
+           database copies synchronized. As long as the coordinator receives vote messages from a majority of the sites (it
+           implicitly votes for itself), it is appropriate for it to continue as coordinator because it is successfully distributing
+           database changes. A majority is defined as more than 50% of all database sites when there are an odd number of sites; with
+           an even number of sites, the site with the lowest Internet address has an extra vote for breaking ties as necessary.If the
+           coordinator is not receiving sufficient votes, it retires and the Ubik sites elect a new coordinator. This does not happen
+           spontaneously, but only when the coordinator really fails or stops receiving a majority of the votes. The secondary sites
+           have a built-in bias to continue voting for an existing coordinator, which prevents undue elections.</para>
+ 
+           <para>The election of the new coordinator is by majority vote. The Ubik subprocesses have a bias to vote for the site with
+           the lowest Internet address, which helps it gather the necessary majority quicker than if all the sites were competing to
+           receive votes themselves. During the election (which normally lasts less than three minutes), clients can read information
+           from the database, but cannot make any changes.</para>
+ 
+           <para>Ubik's election procedure makes it possible for each database server process's coordinator to be on a different
+           machine. For example, if the Ubik coordinators for all four processes start out on machine A and the Protection Server on
+           machine A fails for some reason, then a different site (say machine B) must be elected as the new Protection Database Ubik
+           coordinator. Machine B remains the coordinator for the Protection Database even after the Protection Server on machine A
+           is working again. The failure of the Protection Server has no effect on the Authentication, Backup, or VL Servers, so
+           their coordinators remain on machine A.</para>
+         </sect4>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ107">
+       <title>Backing Up and Restoring the Administrative Databases</title>
+ 
+       <para>The AFS administrative databases store information that is critical for AFS operation in your cell. If a database
+       becomes corrupted due to a hardware failure or other problem on a database server machine, it likely to be difficult and
+       time-consuming to recreate all of the information from scratch. To protect yourself against loss of data, back up the
+       administrative databases to a permanent media, such as tape, on a regular basis. The recommended method is to use a standard
+       local disk backup utility such as the UNIX <emphasis role="bold">tar</emphasis> command.</para>
+ 
+       <para>When deciding how often to back up a database, consider the amount of data that you are willing to recreate by hand if
+       it becomes necessary to restore the database from a backup copy. In most cells, the databases differ quite a bit in how often
+       and how much they change. Changes to the Authentication Database are probably the least frequent, and consist mostly of
+       changed user passwords. Protection Database and VLDB changes are probably more frequent, as users add or delete groups and
+       change group memberships, and as you and other administrators create or move volumes. The number and frequency of changes is
+       probably greatest in the Backup Database, particularly if you perform backups every day.</para>
+ 
+       <para>The ease with which you can recapture lost changes also differs for the different databases: <itemizedlist>
+           <listitem>
+             <para>If regular users make a large proportion of the changes to the Authentication Database and Protection Database in
+             your cell, then recovering them possibly requires a large amount of detective work and interviewing of users, assuming
+             that they can even remember what changes they made at what time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Recovering lost changes to the VLDB is more straightforward, because you can use the <emphasis role="bold">vos
+             syncserv</emphasis> and <emphasis role="bold">vos syncvldb</emphasis> commands to correct any discrepancies between the
+             VLDB and the actual state of volumes on server machines. Running these commands can be time-consuming, however.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The configuration information in the Backup Database (Tape Coordinator port offsets, volume sets and entries, the
+             dump hierarchy, and so on) probably does not change that often, in which case it is not that hard to recover a few
+             recent changes. In contrast, there are likely to be a large number of new dump records resulting from dump operations.
+             You can recover these records by using the <emphasis role="bold">-dbadd</emphasis> argument to the <emphasis
+             role="bold">backup scantape</emphasis> command, reading in information from the backup tapes themselves. This can take a
+             long time and require numerous tape changes, however, depending on how much data you back up in your cell and how you
+             append dumps. Furthermore, the <emphasis role="bold">backup scantape</emphasis> command is subject to several
+             restrictions. The most basic is that it halts if it finds that an existing dump record in the database has the same dump
+             ID number as a dump on the tape it is scanning. If you want to continue with the scanning operation, you must locate and
+             remove the existing record from the database. For further discussion, see the <emphasis role="bold">backup
+             scantape</emphasis> command's reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>These differences between the databases possibly suggest backing up the database at different frequencies, ranging from
+       every few days or weekly for the Backup Database to every few weeks for the Authentication Database. On the other hand, it is
+       probably simpler from a logistical standpoint to back them all up at the same time (and frequently), particularly if tape
+       consumption is not a major concern. Also, it is not generally necessary to keep backup copies of the databases for a long
+       time, so you can recycle the tapes fairly frequently.</para>
+ 
+       <indexterm>
+         <primary>administrative database</primary>
+ 
+         <secondary>backing up</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backing up</primary>
+ 
+         <secondary>administrative databases</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ108">
+       <title>To back up the administrative databases</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Log in as the local superuser <emphasis role="bold">root</emphasis> on a database server machine that is not the
+           synchronization site. The machine with the highest IP address is normally the best choice, since it is least likely to
+           become the synchronization site in an election.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIDBBK_SHUTDOWN" />Issue the <emphasis role="bold">bos shutdown</emphasis> command to shut down the
+           relevant server process on the local machine. For a complete description of the command, see <link linkend="HDRWQ168">To
+           stop processes temporarily</link>.</para>
+ 
+           <para>For the <emphasis role="bold">-instance</emphasis> argument, specify one or more database server process names
+           (<emphasis role="bold">buserver</emphasis> for the Backup Server, <emphasis role="bold">kaserver</emphasis> for the
+           Authentication Server, <emphasis role="bold">ptserver</emphasis> for the Protection Server, or <emphasis
+           role="bold">vlserver</emphasis> for the Volume Location Server. Include the <emphasis role="bold">-localauth</emphasis>
+           flag because you are logged in as the local superuser <emphasis role="bold">root</emphasis> but do not necessarily have
+           administrative tokens.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-instance</emphasis> &lt;<replaceable>instances</replaceable>&gt;+ <emphasis
+               role="bold">-localauth</emphasis> [<emphasis role="bold">-wait</emphasis>]
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Use a local disk backup utility, such as the UNIX <emphasis role="bold">tar</emphasis> command, to transfer one or
+           more database files to tape. If the local database server machine does not have a tape device attached, use a remote copy
+           command to transfer the file to a machine with a tape device, then use the <emphasis role="bold">tar</emphasis> command
+           there.</para>
+ 
+           <para>The following command sequence backs up the complete contents of the <emphasis role="bold">/usr/afs/db</emphasis>
+           directory</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">cd /usr/afs/db</emphasis>
+    # <emphasis role="bold">tar cvf</emphasis>  tape_device <emphasis role="bold">.</emphasis>
+ </programlisting>
+ 
+           <para>To back up individual database files, substitute their names for the period in the preceding <emphasis
+           role="bold">tar</emphasis> command: <itemizedlist>
+               <listitem>
+                 <para><emphasis role="bold">bdb.DB0</emphasis> for the Backup Database</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><emphasis role="bold">kaserver.DB0</emphasis> for the Authentication Database</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><emphasis role="bold">prdb.DB0</emphasis> for the Protection Database</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><emphasis role="bold">vldb.DB0</emphasis> for the VLDB</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos start</emphasis> command to restart the server processes on the local machine.
+           For a complete description of the command, see <link linkend="HDRWQ166">To start processes by changing their status flags
+           to Run</link>. Provide the same values for the <emphasis role="bold">-instance</emphasis> argument as in Step <link
+           linkend="LIDBBK_SHUTDOWN">2</link>, and the <emphasis role="bold">-localauth</emphasis> flag for the same reason.
+           <programlisting>
+    # <emphasis role="bold">bos start</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-instance</emphasis> &lt;<replaceable>server process name</replaceable>&gt;+ <emphasis
+                 role="bold">-localauth</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>administrative database</primary>
+ 
+         <secondary>restoring</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restoring</primary>
+ 
+         <secondary>administrative databases</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ109">
+       <title>To restore an administrative database</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Log in as the local superuser <emphasis role="bold">root</emphasis> on each database server machine in the
+           cell.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIDBREST_SHUTDOWN" />Working on one of the machines, issue the <emphasis role="bold">bos
+           shutdown</emphasis> command once for each database server machine, to shut down the relevant server process on all of
+           them. For a complete description of the command, see <link linkend="HDRWQ168">To stop processes temporarily</link>.</para>
+ 
+           <para>For the <emphasis role="bold">-instance</emphasis> argument, specify one or more database server process names
+           (<emphasis role="bold">buserver</emphasis> for the Backup Server, <emphasis role="bold">kaserver</emphasis> for the
+           Authentication Server, <emphasis role="bold">ptserver</emphasis> for the Protection Server, or <emphasis
+           role="bold">vlserver</emphasis> for the Volume Location Server. Include the <emphasis role="bold">-localauth</emphasis>
+           flag because you are logged in as the local superuser <emphasis role="bold">root</emphasis> but do not necessarily have
+           administrative tokens.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-instance</emphasis> &lt;<replaceable>instances</replaceable>&gt;+ <emphasis
+               role="bold">-localauth</emphasis> [<emphasis role="bold">-wait</emphasis>]
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Remove the database from each database server machine, by issuing the following commands on each one.
+           <programlisting>
+    # <emphasis role="bold">cd /usr/afs/db</emphasis>
+ </programlisting></para>
+ 
+           <para>For the Backup Database:</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">rm bdb.DB0</emphasis>
+    # <emphasis role="bold">rm bdb.DBSYS1</emphasis>
+ </programlisting>
+ 
+           <para>For the Authentication Database:</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">rm kaserver.DB0</emphasis>
+    # <emphasis role="bold">rm kaserver.DBSYS1</emphasis>
+ </programlisting>
+ 
+           <para>For the Protection Database:</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">rm prdb.DB0</emphasis>
+    # <emphasis role="bold">rm prdb.DBSYS1</emphasis>
+ </programlisting>
+ 
+           <para>For the VLDB:</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">rm vldb.DB0</emphasis>
+    # <emphasis role="bold">rm vldb.DBSYS1</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Using the local disk backup utility that you used to back up the database, copy the most recently backed-up version
+           of it to the appropriate file on the database server machine with the lowest IP address. The following is an appropriate
+           <emphasis role="bold">tar</emphasis> command if the synchronization site has a tape device attached: <programlisting>
+    # <emphasis role="bold">cd /usr/afs/db</emphasis>
+    # <emphasis role="bold">tar xvf</emphasis> tape_device  database_file
+ </programlisting></para>
+ 
+           <para>where <emphasis>database_file</emphasis> is one of the following: <itemizedlist>
+               <listitem>
+                 <para><emphasis role="bold">bdb.DB0</emphasis> for the Backup Database</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><emphasis role="bold">kaserver.DB0</emphasis> for the Authentication Database</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><emphasis role="bold">prdb.DB0</emphasis> for the Protection Database</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><emphasis role="bold">vldb.DB0</emphasis> for the VLDB</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Working on one of the machines, issue the <emphasis role="bold">bos start</emphasis> command to restart the server
+           process on each of the database server machines in turn. Start with the machine with the lowest IP address, which becomes
+           the synchronization site for the Backup Database. Wait for it to establish itself as the synchronization site before
+           repeating the command to restart the process on the other database server machines. For a complete description of the
+           command, see <link linkend="HDRWQ166">To start processes by changing their status flags to Run</link>. Provide the same
+           values for the <emphasis role="bold">-instance</emphasis> argument as in Step <link linkend="LIDBREST_SHUTDOWN">2</link>,
+           and the <emphasis role="bold">-localauth</emphasis> flag for the same reason. <programlisting>
+    # <emphasis role="bold">bos start</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-instance</emphasis>  &lt;<replaceable>server process name</replaceable>&gt;+  <emphasis
+                 role="bold">-localauth</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the database has changed since you last backed it up, issue the appropriate commands from the instructions in the
+           indicated sections to recreate the information in the restored database. If issuing <emphasis role="bold">pts</emphasis>
+           commands, you must first obtain administrative tokens. The <emphasis role="bold">backup</emphasis> and <emphasis
+           role="bold">vos</emphasis> commands accept the <emphasis role="bold">-localauth</emphasis> flag if you are logged in as
+           the local superuser <emphasis role="bold">root</emphasis>, so you do not need administrative tokens. The Authentication
+           Server always performs a separate authentication anyway, so you only need to include the <emphasis
+           role="bold">-admin</emphasis> argument if issuing <emphasis role="bold">kas</emphasis> commands. <itemizedlist>
+               <listitem>
+                 <para>To define or remove volume sets and volume entries in the Backup Database, see <link
+                 linkend="HDRWQ265">Defining and Displaying Volume Sets and Volume Entries</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To edit the dump hierarchy in the Backup Database, see <link linkend="HDRWQ267">Defining and Displaying the
+                 Dump Hierarchy</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To define or remove Tape Coordinator port offset entries in the Backup Database, see <link
+                 linkend="HDRWQ261">Configuring Tape Coordinator Machines and Tape Devices</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To restore dump records in the Backup Database, see <link linkend="HDRWQ305">To scan the contents of a
+                 tape</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To recreate Authentication Database entries or password changes for users, see the appropriate section of
+                 <link linkend="HDRWQ491">Administering User Accounts</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To recreate Protection Database entries or group membership information, see the appropriate section of <link
+                 linkend="HDRWQ531">Administering the Protection Database</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To synchronize the VLDB with volume headers, see <link linkend="HDRWQ227">Synchronizing the VLDB and Volume
+                 Headers</link>.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>installing</primary>
+ 
+         <secondary>server process binaries, about</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process binaries</primary>
+ 
+         <secondary>installing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>maintainer of server process binaries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>binaries</secondary>
+ 
+         <see>server process binaries</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories (server)</primary>
+ 
+         <secondary>/usr/afs/bin</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>need for consistent version of software</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ110">
+     <title>Installing Server Process Software</title>
+ 
+     <para>This section explains how to install new server process binaries on file server machines, how to revert to a previous
+     version if the current version is not working properly, and how to install new disks to house AFS volumes on a file server
+     machine.</para>
+ 
+     <para>The most frequent reason to replace a server process's binaries is to upgrade AFS to a new version. In general,
+     installation instructions accompany the updated software, but this chapter provides an additional reference.</para>
+ 
+     <para>Each AFS server machine must store the server process binaries in a local disk directory, called <emphasis
+     role="bold">/usr/afs/bin</emphasis> by convention. For predictable system performance, it is best that all server machines run
+     the same build level, or at least the same version, of the server software. For instructions on checking AFS build level, see
+     <link linkend="HDRWQ117">Displaying A Binary File's Build Level</link>.</para>
+ 
+     <para>The Update Server makes it easy to distribute a consistent version of software to all server machines. You designate one
+     server machine of each system type as the <emphasis>binary distribution machine</emphasis> by running the server portion of the
+     Update Server (<emphasis role="bold">upserver</emphasis> process) on it. All other server machines of that system type run the
+     client portion of the Update Server (<emphasis role="bold">upclientbin</emphasis> process) to retrieve updated software from the
+     binary distribution machine. The <emphasis>OpenAFS Quick Beginnings</emphasis> explains how to install the appropriate
+     processes. For more on binary distribution machines, see <link linkend="HDRWQ93">Binary Distribution Machines</link>.</para>
+ 
+     <para>When you use the Update Server, you install new binaries on binary distribution machines only. If you install binaries
+     directly on a machine that is running the <emphasis role="bold">upclientbin</emphasis> process, they are overwritten the next
+     time the process compares the contents of the local <emphasis role="bold">/usr/afs/bin</emphasis> directory to the contents on
+     the system control machine, by default within five minutes.</para>
+ 
+     <para>The following instructions explain how to use the appropriate commands from the <emphasis role="bold">bos</emphasis> suite
+     to install and uninstall server binaries.</para>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>server binaries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process binaries</primary>
+ 
+       <secondary>installing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>command suite</primary>
+ 
+       <secondary>binaries</secondary>
+ 
+       <tertiary>installing</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file server machine</primary>
+ 
+       <secondary>installing command and process binaries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>restarting for changed binaries</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ111">
+       <title>Installing New Binaries</title>
+ 
+       <para>An AFS server process does not automatically switch to a new process binary file as soon as it is installed in the
+       <emphasis role="bold">/usr/afs/bin</emphasis> directory. The process continues to use the previous version of the binary file
+       until it (the process) next restarts. By default, the BOS Server restarts processes for which there are new binary files every
+       day at 5:00 a.m., as specified in the <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file. To display or change
+       this <emphasis>binary restart time</emphasis>, use the <emphasis role="bold">bos getrestart</emphasis> and <emphasis
+       role="bold">bos setrestart</emphasis> commands, as described in <link linkend="HDRWQ171">Setting the BOS Server's Restart
+       Times</link>.</para>
+ 
+       <para>You can force the server machine to start using new server process binaries immediately by issuing the <emphasis
+       role="bold">bos restart</emphasis> command as described in the following instructions.</para>
+ 
+       <para>You do not need to restart processes when you install new command suite binaries. The new binary is invoked
+       automatically the next time a command from the suite is issued.</para>
+ 
+       <indexterm>
+         <primary>file extension</primary>
+ 
+         <secondary>.BAK</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file extension</primary>
+ 
+         <secondary>.OLD</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BAK version of binary file</primary>
+ 
+         <secondary>created by bos install command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>OLD version of binary file</primary>
+ 
+         <secondary>created by bos install command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>saving</primary>
+ 
+         <secondary>previous version of server binaries</secondary>
+       </indexterm>
+ 
+       <para>When you use the <emphasis role="bold">bos install</emphasis> command, the BOS Server automatically saves the current
+       version of a binary file by adding a <emphasis role="bold">.BAK</emphasis> extension to its name. It renames the current
+       <emphasis role="bold">.BAK</emphasis> version, if any, to the <emphasis role="bold">.OLD</emphasis> version, if there is no
+       <emphasis role="bold">.OLD</emphasis> version already. If there is a current <emphasis role="bold">.OLD</emphasis> version,
+       the current <emphasis role="bold">.BAK</emphasis> version must be at least seven days old to replace it.</para>
+ 
+       <para>It is best to store AFS binaries in the <emphasis role="bold">/usr/afs/bin</emphasis> directory, because that is the
+       only directory the BOS Server automatically checks for new binaries. You can, however, use the <emphasis role="bold">bos
+       install</emphasis> command's <emphasis role="bold">-dir</emphasis> argument to install non-AFS binaries into other directories
+       on a server machine's local disk. See the command's reference page in the <emphasis>OpenAFS Administration
+       Reference</emphasis> for further information.</para>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>install</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos install</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_130">
+       <title>To install new server binaries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that the binaries are available in the source directory from which you are installing them. If the machine is
+           also an AFS client, you can retrieve the binaries from a central directory in AFS. Otherwise, you can obtain them directly
+           from the AFS distribution media, from a local disk directory where you previously installed them, or from a remote machine
+           using a transfer utility such as the <emphasis role="bold">ftp</emphasis> command.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ112" />Issue the <emphasis role="bold">bos install</emphasis> command for the binary distribution
+           machine. (If you have forgotten which machine is performing that role, see <link linkend="HDRWQ97">To locate the binary
+           distribution machine for a system type</link>.) <programlisting>
+    % <emphasis role="bold">bos install</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>files to install</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">i</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">install</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the binary distribution machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">files to install</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each binary file to install into the local <emphasis role="bold">/usr/afs/bin</emphasis> directory.
+                   Partial pathnames are interpreted relative to the current working directory. The last element in each pathname
+                   (the filename itself) matches the name of the file it is replacing, such as <emphasis
+                   role="bold">bosserver</emphasis> or <emphasis role="bold">volserver</emphasis> for server processes, <emphasis
+                   role="bold">bos</emphasis> or <emphasis role="bold">vos</emphasis> for commands.</para>
+ 
+                   <para>Each AFS server process other than the <emphasis role="bold">fs</emphasis> process uses a single binary
+                   file. The <emphasis role="bold">fs</emphasis> process uses three binary files: <emphasis
+                   role="bold">fileserver</emphasis>, <emphasis role="bold">volserver</emphasis>, and <emphasis
+                   role="bold">salvager</emphasis>. Installing a new version of one component does not necessarily mean that you need
+                   to replace all three.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Repeat Step <link linkend="LIWQ112">3</link> for each binary distribution machine.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If you want to restart processes to use the new binaries immediately,
+           wait until the <emphasis role="bold">upclientbin</emphasis> process retrieves them from the binary distribution machine.
+           You can verify the timestamps on binary files by using the <emphasis role="bold">bos getdate</emphasis> command as
+           described in <link linkend="HDRWQ115">Displaying Binary Version Dates</link>. When the binary files are available on each
+           server machine, issue the <emphasis role="bold">bos restart</emphasis> command, for which complete instructions appear in
+           <link linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+ 
+           <para>If you are working on an AFS client machine, it is a wise precaution to have a copy of the <emphasis
+           role="bold">bos</emphasis> command suite binaries on the local disk before restarting server processes. In the
+           conventional configuration, the <emphasis role="bold">/usr/afsws/bin</emphasis> directory that houses the <emphasis
+           role="bold">bos</emphasis> command binary on client machines is a symbolic link into AFS, which conserves local disk
+           space. However, restarting certain processes (particularly the database server processes) can make the AFS filespace
+           inaccessible, particularly if a problem arises during the restart. Having a local copy of the <emphasis
+           role="bold">bos</emphasis> binary enables you to uninstall or reinstall process binaries or restart processes even in this
+           case. Use the <emphasis role="bold">cp</emphasis> command to copy the <emphasis role="bold">bos</emphasis> command binary
+           from the <emphasis role="bold">/usr/afsws/bin</emphasis> directory to a local directory such as <emphasis
+           role="bold">/tmp</emphasis>.</para>
+ 
+           <para>Restarting a process causes a service outage. It is best to perform the restart at times of low system usage if
+           possible.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>instances</replaceable>&gt;+
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>uninstalling</primary>
+ 
+         <secondary>server process and command suite binaries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>reverting</primary>
+ 
+         <secondary>to old version of server process and command binaries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process binaries</primary>
+ 
+         <secondary>uninstalling</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process binaries</primary>
+ 
+         <secondary>reverting to old version</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>command suite</primary>
+ 
+         <secondary>binaries</secondary>
+ 
+         <tertiary>uninstalling</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>uninstalling command &amp; process binaries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BAK version of binary file</primary>
+ 
+         <secondary>used by bos uninstall command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>OLD version of binary file</primary>
+ 
+         <secondary>used by bos uninstall command</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ113">
+       <title>Reverting to the Previous Version of Binaries</title>
+ 
+       <para>In rare cases, installing a new binary can cause problems serious enough to require reverting to the previous version.
+       Just as with installing binaries, consistent system performance requires reverting every server machine back to the same
+       version. Issue the <emphasis role="bold">bos uninstall</emphasis> command described here on each binary distribution
+       machine.</para>
+ 
+       <para>When you use the <emphasis role="bold">bos uninstall</emphasis> command, the BOS Server discards the current version of
+       a binary file and promotes the <emphasis role="bold">.BAK</emphasis> version of the file by removing the extension. It renames
+       the current <emphasis role="bold">.OLD</emphasis> version, if any, to <emphasis role="bold">.BAK</emphasis>.</para>
+ 
+       <para>If there is no current <emphasis role="bold">.BAK</emphasis> version, the <emphasis role="bold">bos uninstall</emphasis>
+       command operation fails and generates an error message. If a <emphasis role="bold">.OLD</emphasis> version still exists, issue
+       the <emphasis role="bold">mv</emphasis> command to rename it to <emphasis role="bold">.BAK</emphasis> before reissuing the
+       <emphasis role="bold">bos uninstall</emphasis> command.</para>
+ 
+       <para>Just as when you install new binaries, the server processes do not start using a reverted version immediately.
+       Presumably you are reverting because the current binaries do not work, so the following instructions have you restart the
+       relevant processes.</para>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>uninstall</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos install</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_132">
+       <title>To revert to the previous version of binaries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that the <emphasis role="bold">.BAK</emphasis> version of each relevant binary is available in the <emphasis
+           role="bold">/usr/afs/bin</emphasis> directory on each binary distribution machine. If necessary, you can use the <emphasis
+           role="bold">bos getdate</emphasis> command as described in <link linkend="HDRWQ115">Displaying Binary Version
+           Dates</link>. If necessary, rename the <emphasis role="bold">.OLD</emphasis> version to <emphasis
+           role="bold">.BAK</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ114" />Issue the <emphasis role="bold">bos uninstall</emphasis> command for a binary distribution
+           machine. (If you have forgotten which machine is performing that role, see <link linkend="HDRWQ97">To locate the binary
+           distribution machine for a system type</link>.) <programlisting>
+    % <emphasis role="bold">bos uninstall</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>files to uninstall</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">u</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">uninstall</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the binary distribution machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">files to uninstall</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each binary file in the <emphasis role="bold">/usr/afs/bin</emphasis> directory to replace with its
+                   <emphasis role="bold">.BAK</emphasis> version. The file name alone is sufficient, because the <emphasis
+                   role="bold">/usr/afs/bin</emphasis> directory is assumed.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Repeat Step <link linkend="LIWQ114">3</link> for each binary distribution machine.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Wait until the <emphasis role="bold">upclientbin</emphasis> process on each server machine retrieves the reverted
+           from the binary distribution machine. You can verify the timestamps on binary files by using the <emphasis role="bold">bos
+           getdate</emphasis> command as described in <link linkend="HDRWQ115">Displaying Binary Version Dates</link>. When the
+           binary files are available on each server machine, issue the <emphasis role="bold">bos restart</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ170">Stopping and Immediately Restarting
+           Processes</link>.</para>
+ 
+           <para>If you are working on an AFS client machine, it is a wise precaution to have a copy of the <emphasis
+           role="bold">bos</emphasis> command suite binaries on the local disk before restarting server processes. In the
+           conventional configuration, the <emphasis role="bold">/usr/afsws/bin</emphasis> directory that houses the <emphasis
+           role="bold">bos</emphasis> command binary on client machines is a symbolic link into AFS, which conserves local disk
+           space. However, restarting certain processes (particularly the database server processes) can make the AFS filespace
+           inaccessible, particularly if a problem arises during the restart. Having a local copy of the <emphasis
+           role="bold">bos</emphasis> binary enables you to uninstall or reinstall process binaries or restart processes even in this
+           case. Use the <emphasis role="bold">cp</emphasis> command to copy the <emphasis role="bold">bos</emphasis> command binary
+           from the <emphasis role="bold">/usr/afsws/bin</emphasis> directory to a local directory such as <emphasis
+           role="bold">/tmp</emphasis>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>instances</replaceable>&gt;+
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>server process binaries</primary>
+ 
+         <secondary>displaying time stamp</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>command suite</primary>
+ 
+         <secondary>binaries</secondary>
+ 
+         <tertiary>displaying time stamp</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>time stamp</primary>
+ 
+         <secondary>on binary file, listing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>date</primary>
+ 
+         <secondary>on binary file, listing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>compilation</primary>
+ 
+         <secondary>date of, listing on binary file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>time stamp on binary file</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ115">
+       <title>Displaying Binary Version Dates</title>
+ 
+       <para>You can check the compilation dates for all three versions of a binary file in the <emphasis
+       role="bold">/usr/afs/bin</emphasis> directory--the current, <emphasis role="bold">.BAK</emphasis> and .<emphasis
+       role="bold">OLD</emphasis> versions. This is useful for verifying that new binaries have been copied to a file server machine
+       from its binary distribution machine before restarting a server process to use the new binaries.</para>
+ 
+       <para>To check dates on binaries in a directory other than <emphasis role="bold">/usr/afs/bin</emphasis>, add the <emphasis
+       role="bold">-dir</emphasis> argument. See the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>getdate</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos getdate</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_134">
+       <title>To display binary version dates</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos getdate</emphasis> command. <programlisting>
+    % <emphasis role="bold">bos getdate</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>files to check</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">getd</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">getdate</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Name the file server machine for which to display binary dates.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">files to check</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each binary file to display.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>BAK version of binary file</primary>
+ 
+         <secondary>removing obsolete</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>OLD version of binary file</primary>
+ 
+         <secondary>removing obsolete</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>obsolete .BAK and .OLD version of binaries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process binaries</primary>
+ 
+         <secondary>removing obsolete</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>command suite</primary>
+ 
+         <secondary>binaries</secondary>
+ 
+         <tertiary>removing obsolete</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>core files from /usr/afs/logs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>core files</primary>
+ 
+         <secondary>removing from /usr/afs/logs directory</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>usr/afs/bin directory</primary>
+ 
+         <secondary>removing obsolete .BAK and .OLD files</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ116">
+       <title>Removing Obsolete Binary Files</title>
+ 
+       <para>When processes with new binaries have been running without problems for a number of days, it is generally safe to remove
+       the <emphasis role="bold">.BAK</emphasis> and <emphasis role="bold">.OLD</emphasis> versions from the <emphasis
+       role="bold">/usr/afs/bin</emphasis> directory, both to reduce clutter and to free space on the file server machine's local
+       disk.</para>
+ 
+       <para>You can use the <emphasis role="bold">bos prune</emphasis> command's flags to remove the following types of files:
+       <itemizedlist>
+           <listitem>
+             <para>To remove files in the <emphasis role="bold">/usr/afs/bin</emphasis> directory with a <emphasis
+             role="bold">.BAK</emphasis> extension, use the <emphasis role="bold">-bak</emphasis> flag.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To remove files in the <emphasis role="bold">/usr/afs/bin</emphasis> directory with a <emphasis
+             role="bold">.OLD</emphasis> extension, use the <emphasis role="bold">-old</emphasis> flag.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To remove files in the <emphasis role="bold">/usr/afs/logs</emphasis> directory called <emphasis
+             role="bold">core</emphasis>, with any extension, use the <emphasis role="bold">-core</emphasis> flag.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To remove all three types of files, use the <emphasis role="bold">-all</emphasis> flag.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos prune</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>prune</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_136">
+       <title>To remove obsolete binaries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos prune</emphasis> command with one or more of its flags. <programlisting>
+    % <emphasis role="bold">bos prune</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [<emphasis role="bold">-bak</emphasis>] [<emphasis
+                 role="bold">-old</emphasis>] [<emphasis role="bold">-core</emphasis>] [<emphasis role="bold">-all</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">p</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">prune</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine on which to remove obsolete files.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-bak</emphasis></term>
+ 
+                 <listitem>
+                   <para>Removes all the files with a <emphasis role="bold">.BAK</emphasis> extension from the <emphasis
+                   role="bold">/usr/afs/bin</emphasis> directory. Do not combine this flag with the <emphasis
+                   role="bold">-all</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-old</emphasis></term>
+ 
+                 <listitem>
+                   <para>Removes all the files a .<emphasis role="bold">OLD</emphasis> extension from the <emphasis
+                   role="bold">/usr/afs/bin</emphasis> directory. Do not combine this flag with the <emphasis
+                   role="bold">-all</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-core</emphasis></term>
+ 
+                 <listitem>
+                   <para>Removes all core files from the <emphasis role="bold">/usr/afs/logs</emphasis> directory. Do not combine
+                   this flag with the <emphasis role="bold">-all</emphasis> flag</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-all</emphasis></term>
+ 
+                 <listitem>
+                   <para>Combines the effect of the other three flags. Do not combine it with the other three flags.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ117">
+       <title>Displaying A Binary File's Build Level</title>
+ 
+       <para>For the most consistent performance on a server machine, and cell-wide, it is best for all server processes to come from
+       the same AFS distribution. Every AFS binary includes an ASCII string that specifies its version, or <emphasis>build
+       level</emphasis>. To display it, use the <emphasis role="bold">strings</emphasis> and <emphasis role="bold">grep</emphasis>
+       commands, which are included in most UNIX distributions.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>which</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>strings</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>strings command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>which command</primary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_138">
+       <title>To display an AFS binary's build level</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Change to the directory that houses the binary file . If you are not sure where the binary resides, issue the
+           <emphasis role="bold">which</emphasis> command. <programlisting>
+    % <emphasis role="bold">which</emphasis> binary_file
+    /bin_dir_path/binary_file
+    % <emphasis role="bold">cd</emphasis> bin_dir_path
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">strings</emphasis> command to extract all ASCII strings from the binary file. Pipe
+           the output to the <emphasis role="bold">grep</emphasis> command to locate the relevant line. <programlisting>
+    % <emphasis role="bold">strings ./</emphasis>binary_file <emphasis role="bold">| grep Base</emphasis>
+ </programlisting></para>
+ 
+           <para>The output reports the AFS build level in a format like the following:</para>
+ 
+           <programlisting>
+    @(#)Base configuration afsversion  build_level
+ </programlisting>
+ 
+           <para>For example, the following string indicates the binary is from AFS M.m build 3.0:</para>
+ 
+           <programlisting>
+    @(#)Base configuration afsM.m 3.0
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>CellServDB file (server)</primary>
+ 
+         <secondary>maintaining</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>CellServDB (server)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server process</primary>
+ 
+         <secondary>use of CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Ubik</primary>
+ 
+         <secondary>use of CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>use of CellServDB file</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ118">
+     <title>Maintaining the Server CellServDB File</title>
+ 
+     <para>Every file server machine maintains a list of its home cell's database server machines in the local disk file <emphasis
+     role="bold">/usr/afs/etc/CellServDB</emphasis> on its local disk. Both database server processes and non-database server
+     processes consult the file: <itemizedlist>
+         <listitem>
+           <para>The database server processes (the Authentication, Backup, Protection, and Volume Location Servers) maintain
+           constant contact with their peers in order to keep their copies of the replicated administrative databases
+           synchronized.</para>
+ 
+           <para>As detailed in <link linkend="HDRWQ102">Replicating the OpenAFS Administrative Databases</link>, the database server
+           processes use the Ubik utility to synchronize the information in the databases they maintain. The Ubik coordinator at the
+           synchronization site for each database maintains the single read/write copy of the database and distributes changes to the
+           secondary sites as necessary. It must maintain contact with a majority of the secondary sites to remain the coordinator,
+           and consults the <emphasis role="bold">CellServDB</emphasis> file to learn how many peers it has and on which machines
+           they are running.</para>
+ 
+           <para>If the coordinator loses contact with the majority of its peers, they all cooperate to elect a new coordinator by
+           majority vote. During the election, all of the Ubik processes consult the <emphasis role="bold">CellServDB</emphasis> file
+           to learn where to send their votes, and what number constitutes a majority.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The non-database server processes must know which machines are running the database server processes in order to
+           retrieve information from the databases. For example, the first time that a user accesses an AFS file, the File Server
+           that houses it contacts the Protection Server to obtain a list of the user's group memberships (the list is called a
+           current protection subgroup, or CPS). The File Server uses the CPS as it determines if the access control list (ACL)
+           protecting the file grants the required permissions to the user (for more details, see <link linkend="HDRWQ534">About the
+           Protection Database</link>).</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>CellServDB file (server)</primary>
+ 
+       <secondary>effect of wrong information in</secondary>
+     </indexterm>
+ 
+     <para>The consequences of missing or incorrect information in the <emphasis role="bold">CellServDB</emphasis> file are as
+     follows: <itemizedlist>
+         <listitem>
+           <para>If the file does not list a machine, then it is effectively not a database server machine even if the database
+           server processes are running. The Ubik coordinator does not send it database updates or include it in the count that
+           establishes a majority. It does not participate in Ubik elections, and so refuses to distribute database information to
+           any client machines that happen to contact it (which they can do if their <emphasis
+           role="bold">/usr/vice/etc/CellServDB</emphasis> file lists it). Users of the client machine must wait for a timeout before
+           they can contact a correctly functioning database server machine.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the file lists a machine that is not running the database server processes, the consequences can be serious. The
+           Ubik coordinator cannot send it database updates, but includes it in the count that establishes a majority. If valid
+           secondary sites go down and stop sending their votes to the coordinator, it can wrongly appear that the coordinator no
+           longer has the majority it needs. The resulting election of a new coordinator causes a service outage during which
+           information from the database becomes unavailable. Furthermore, the lack of a vote from the incorrectly listed site can
+           disturb the election, if it makes the other sites believe that a majority of sites are not voting for the new
+           coordinator.</para>
+ 
+           <para>A more minor consequence is that non-database server processes attempt to contact the database server processes on
+           the machine. They experience a timeout delay because the processes are not running.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Note that the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on a server machine is not the same as the
+     <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on client machine. The client version includes entries for
+     foreign cells as well as the local cell. However, it is important to update both versions of the file whenever you change your
+     cell's database server machines. A server machine that is also a client needs to have both files, and you need to update them
+     both. For more information on maintaining the client version of the <emphasis role="bold">CellServDB</emphasis> file, see <link
+     linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+ 
+     <indexterm>
+       <primary>system control machine</primary>
+ 
+       <secondary>CellServDB file, distributing to server machines</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>distribution</primary>
+ 
+       <secondary>of CellServDB file (server)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Update Server</primary>
+ 
+       <secondary>CellServDB file (server), distributing</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ119">
+       <title>Distributing the Server CellServDB File</title>
+ 
+       <para>To avoid the negative consequences of incorrect information in the <emphasis
+       role="bold">/usr/afs/etc/CellServDB</emphasis> file, you must update it on all of your cell's server machines every time you
+       add or remove a database server machine. The <emphasis>OpenAFS Quick Beginnings</emphasis> provides complete instructions for
+       installing or removing a database server machine and for updating the <emphasis role="bold">CellServDB</emphasis> file in that
+       context. This section explains how to distribute the file to your server machines and how to make other cells aware of the
+       changes if you participate in the AFS global name space.</para>
+ 
+       <para>If you use the United States edition of AFS, use the Update Server to distribute the central copy of the server
+       <emphasis role="bold">CellServDB</emphasis> file stored on the cell's system control machine. If you use the international
+       edition of AFS, instead change the file on each server machine individually. For further discussion of the system control
+       machine and why international cells must not use it for files in the <emphasis role="bold">/usr/afs/etc</emphasis> directory,
+       see <link linkend="HDRWQ94">The System Control Machine</link>. For instructions on configuring the Update Server when using
+       the United States version of AFS, see the <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+ 
+       <para>To avoid formatting errors that can cause errors, always use the <emphasis role="bold">bos addhost</emphasis> and
+       <emphasis role="bold">bos removehost</emphasis> commands, rather than editing the file directly. You must also restart the
+       database server processes running on the machine, to initiate a coordinator election among the new set of database server
+       machines. This step is included in the instructions that appear in <link linkend="HDRWQ121">To add a database server machine
+       to the CellServDB file</link> and <link linkend="HDRWQ122">To remove a database server machine from the CellServDB
+       file</link>. For instructions on displaying the contents of the file, see <link linkend="HDRWQ120">To display a cell's
+       database server machines</link>.</para>
+ 
+       <para>If you make your cell accessible to foreign users as part of the AFS global name space, you also need to inform other
+       cells when you change your cell's database server machines. The AFS Support group maintains a <emphasis
+       role="bold">CellServDB</emphasis> file that lists all cells that participate in the AFS global name space, and can change your
+       cell's entry at your request. For further details, see <link linkend="HDRWQ38">Making Your Cell Visible to
+       Others</link>.</para>
+ 
+       <para>Another way to advertise your cell's database server machines is to maintain a copy of the file at the conventional
+       location in your AFS filespace, <emphasis role="bold">/afs/</emphasis><emphasis>cellname</emphasis><emphasis
+       role="bold">/service/etc/CellServDB.local</emphasis>. For further discussion, see <link linkend="HDRWQ43">The Third
+       Level</link>.</para>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>listhosts</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos listhosts</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (server)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>CellServDB file (server)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>displaying list in server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>database server machines in server CellServDB file</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ120">
+       <title>To display a cell's database server machines</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos listhosts</emphasis> command. If you have maintained the file properly, the
+           output is the same on every server machine, but the <emphasis>machine name</emphasis> argument enables you to check
+           various machines if you wish. <programlisting>
+    % <emphasis role="bold">bos listhosts</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>cell name</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listhosts</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine from which to display the <emphasis
+                   role="bold">/usr/afs/etc/CellServDB</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">cell name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete Internet domain name of a foreign cell. You must already know the name of at least
+                   one server machine in the cell, to provide as the <emphasis role="bold">machine name</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output lists the machines in the order they appear in the <emphasis role="bold">CellServDB</emphasis> file on the
+       specified server machine. It assigns each one a <computeroutput>Host</computeroutput> index number, as in the following
+       example. There is no implied relationship between the index and a machine's IP address, name, or role as Ubik coordinator or
+       secondary site.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos listhosts fs1.abc.com</emphasis>
+    Cell name is abc.com
+        Host 1 is fs1.abc.com
+        Host 2 is fs7.abc.com
+        Host 3 is fs4.abc.com
+ </programlisting>
+ 
+       <para>The output lists machines by name rather than IP address as long as the naming service (such as the Domain Name Service
+       or local host table) is functioning properly. To display IP addresses, login to a server machine as the local superuser
+       <emphasis role="bold">root</emphasis> and use a text editor or display command, such as the <emphasis
+       role="bold">cat</emphasis> command, to view the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file.</para>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>database server machine</secondary>
+ 
+         <tertiary>to server CellServDB file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>adding</secondary>
+ 
+         <tertiary>to server CellServDB file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (server)</primary>
+ 
+         <secondary>adding database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>CellServDB file (server) entry for database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>CellServDB file (server) entry</secondary>
+ 
+         <tertiary>adding</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server process</primary>
+ 
+         <secondary>restarting after adding entry to server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>restarting after adding entry to server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>restarting after adding entry to server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>restarting after adding entry to server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>restarting after adding entry to server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>addhost</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos addhost</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ121">
+       <title>To add a database server machine to the CellServDB file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos addhost</emphasis> command to add each new database server machine to the
+           <emphasis role="bold">CellServDB</emphasis> file. If you use the United States edition of AFS, specify the system control
+           machine as <emphasis>machine name</emphasis>. (If you have forgotten which machine is the system control machine, see
+           <link linkend="HDRWQ99">The Output on the System Control Machine</link>.) If you use the international edition of AFS,
+           repeat the command on each or your cell's server machines in turn by substituting its name for <emphasis>machine
+           name</emphasis>. <programlisting>
+    % <emphasis role="bold">bos addhost</emphasis>  &lt;<replaceable>machine name</replaceable>&gt;  &lt;<replaceable>host name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addhost</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the system control machine, if you are using the United States edition of AFS. If you are using the
+                   international edition of AFS, it names each of your server machines in turn.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">host name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully qualified hostname of each database server machine to add to the <emphasis
+                   role="bold">CellServDB</emphasis> file (for example: <emphasis role="bold">fs4.abc.com</emphasis>). The BOS Server
+                   uses the <emphasis role="bold">gethostbyname()</emphasis> routine to obtain each machine's IP address and records
+                   both the name and address automatically.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Restart the Authentication Server, Backup Server, Protection Server, and VL Server on every database server machine,
+           so that the new set of machines participate in the election of a new Ubik coordinator. The instruction uses the
+           conventional names for the processes; make the appropriate substitution if you use different process names. For complete
+           syntax, see <link linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+ 
+           <para><emphasis role="bold">Important:</emphasis> Repeat the following command in quick succession on all of the database
+           server machines.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver kaserver ptserver vlserver</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Edit the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on each of your cell's client machines. For
+           instructions, see <link linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you participate in the AFS global name space, please have one of your cell's designated site contacts register
+           the changes you have made with the AFS Product Support group.</para>
+ 
+           <para>If you maintain a central copy of your cell's server <emphasis role="bold">CellServDB</emphasis> file in the
+           conventional location (<emphasis role="bold">/afs/</emphasis><emphasis>cellname</emphasis><emphasis
+           role="bold">/service/etc/CellServDB.local</emphasis>), edit the file to reflect the change.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>database server machine</secondary>
+ 
+         <tertiary>from server CellServDB file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>removing</secondary>
+ 
+         <tertiary>from server CellServDB file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (server)</primary>
+ 
+         <secondary>removing database server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>CellServDB file (server) entry</secondary>
+ 
+         <tertiary>removing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server process</primary>
+ 
+         <secondary>restarting after removing entry from server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>restarting after removing entry from server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>restarting after removing entry from server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>restarting after removing entry from server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>restarting after removing entry from server CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>removehost</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos removehost</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ122">
+       <title>To remove a database server machine from the CellServDB file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos removehost</emphasis> command to remove each database server machine from the
+           <emphasis role="bold">CellServDB</emphasis> file. If you use the United States edition of AFS, specify the system control
+           machine as <emphasis>machine name</emphasis>. (If you have forgotten which machine is the system control machine, see
+           <link linkend="HDRWQ99">The Output on the System Control Machine</link>.) If you use the international edition of AFS,
+           repeat the command on each or your cell's server machines in turn by substituting its name for <emphasis>machine
+           name</emphasis>. <programlisting>
+    % <emphasis role="bold">bos removehost</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  &lt;<replaceable>host name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">removeh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">removehost</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the system control machine, if you are using the United States edition of AFS. If you are using the
+                   international edition of AFS, it names each of your server machines in turn.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">host name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully qualified hostname of each database server machine to remove from the <emphasis
+                   role="bold">CellServDB</emphasis> file (for example: <emphasis role="bold">fs4.abc.com</emphasis>).</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Restart the Authentication Server, Backup Server, Protection Server, and VL Server on every database server machine,
+           so that the new set of machines participate in the election of a new Ubik coordinator. The instruction uses the
+           conventional names for the processes; make the appropriate substitution if you use different process names. For complete
+           syntax, see <link linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+ 
+           <para><emphasis role="bold">Important:</emphasis> Repeat the following command in quick succession on all of the database
+           server machines.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver kaserver ptserver vlserver</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Edit the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on each of your cell's client machines. For
+           instructions, see <link linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you participate in the AFS global name space, please have one of your cell's designated site contacts register
+           the changes you have made with the AFS Product Support group.</para>
+ 
+           <para>If you maintain a central copy of your cell's server <emphasis role="bold">CellServDB</emphasis> file in the
+           conventional location (<emphasis role="bold">/afs/</emphasis><emphasis>cellname</emphasis><emphasis
+           role="bold">/service/etc/CellServDB.local</emphasis>), edit the file to reflect the change.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ123">
+     <title>Managing Authentication and Authorization Requirements</title>
+ 
+     <para>This section describes how the AFS server processes guarantee that only properly authorized users perform privileged
+     commands, by checking authorization checking and mutually authenticating with their clients. It explains how you can control
+     authorization checking requirements on a per-machine or per-cell basis, and how to bypass mutual authentication when issuing
+     commands.</para>
+ 
+     <indexterm>
+       <primary>authorization checking</primary>
+ 
+       <secondary>compared to authentication</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>authentication</primary>
+ 
+       <secondary>compared to authorization checking</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privileged commands</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>privileged, defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>anonymous user</primary>
+ 
+       <secondary>identity assigned to unauthenticated user</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>authorization checking</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ124">
+       <title>Authentication versus Authorization</title>
+ 
+       <para>Many AFS commands are <emphasis>privileged</emphasis> in that the AFS server process invoked by the command performs it
+       only for a properly authorized user. The server process performs the following two tests to determine if someone is properly
+       authorized: <itemizedlist>
+           <listitem>
+             <para>In the <emphasis>authentication</emphasis> test, the server process mutually authenticates with the command
+             interpreter, Cache Manager, or other client process that is acting on behalf of a user or application. The goal of this
+             test is to determine who is issuing the command. The server process verifies that the issuer really is who he or she
+             claims to be, by examining the server ticket and other components of the issuer's token. (Secondarily, it allows the
+             client process to verify that the server process is genuine.) If the issuer has no token or otherwise fails the test,
+             the server process assigns him or her the identity <emphasis role="bold">anonymous</emphasis>, a completely unprivileged
+             user. For a more complete description of mutual authentication, see <link linkend="HDRWQ75">A More Detailed Look at
+             Mutual Authentication</link>.</para>
+ 
+             <para>Many individual commands enable you to bypass the authentication test by assuming the <emphasis
+             role="bold">anonymous</emphasis> identity without even attempting to mutually authenticate. Note, however, that this is
+             futile if the command is privileged and the server process is still performing the <emphasis>authorization</emphasis>
+             test, because in that case the process refuses to execute privileged commands for the <emphasis
+             role="bold">anonymous</emphasis> user.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In the authorization test, the server process determines if the issuer is authorized to use the command by
+             consulting a list of privileged users. The goal of this test is to determine what the issuer is allowed to do. Different
+             server processes consult different lists of users, as described in <link linkend="HDRWQ581">Managing Administrative
+             Privilege</link>. The server process refuses to execute any privileged command for an unauthorized issuer. If a command
+             has no privilege requirements, the server process skips this step and executes and immediately.</para>
+ 
+             <note>
+               <para>Never place the <emphasis role="bold">anonymous</emphasis> user or the <emphasis
+               role="bold">system:anyuser</emphasis> group on a privilege list; it makes authorization checking meaningless.</para>
+ 
+               <para>You can use the <emphasis role="bold">bos setauth</emphasis> command to control whether the server processes on
+               a server machine check for authorization. Other server machines are not affected. Keep in mind that turning off
+               authorization checking is a grave security risk, because the server processes on that machine perform any action for
+               any user.</para>
+             </note>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>controlling</primary>
+ 
+         <secondary>authorization checking for entire cell</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authorization checking</primary>
+ 
+         <secondary>controlling cell-wide</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restarting</primary>
+ 
+         <secondary>server process</secondary>
+ 
+         <tertiary>when changing authorization checking</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authorization checking</primary>
+ 
+         <secondary>and restarting processes</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ125">
+       <title>Controlling Authorization Checking on a Server Machine</title>
+ 
+       <para>Disabling authorization checking is a serious breach of security because it means that the AFS server processes on a
+       file server machine performs any action for any user, even the <emphasis role="bold">anonymous</emphasis> user.</para>
+ 
+       <para>The only time it is common to disable authorization checking is when installing a new file server machine (see the IBM
+       AFS Quick Beginnings). It is necessary then because it is not possible to configure all of the necessary security mechanisms
+       before performing other actions that normally make use of them. For greatest security, work at the console of the machine you
+       are installing and enable authorization checking as soon as possible.</para>
+ 
+       <para>During normal operation, the only reason to disable authorization checking is if an error occurs with the server
+       encryption keys, leaving the servers unable to authenticate users properly. For instructions on handling key-related
+       emergencies, see <link linkend="HDRWQ370">Handling Server Encryption Key Emergencies</link>.</para>
+ 
+       <para>You control authorization checking on each file server machine separately; turning it on or off on one machine does not
+       affect the others. Because client machines generally choose a server process at random, it is hard to predict what
+       authorization checking conditions prevail for a given command unless you make the requirement the same on all machines. To
+       turn authorization checking on or off for the entire cell, you must repeat the appropriate command on every file server
+       machine.</para>
+ 
+       <para>The server processes constantly monitor the directory <emphasis role="bold">/usr/afs/local</emphasis> on their local
+       disks to determine if they need to check for authorization. If the file called <emphasis role="bold">NoAuth</emphasis> appears
+       in that directory, then the servers do not check for authorization. When it is not present (the usual case), they perform
+       authorization checking.</para>
+ 
+       <para>Control the presence of the <emphasis role="bold">NoAuth</emphasis> file through the BOS Server. When you disable
+       authorization checking with the <emphasis role="bold">bos setauth</emphasis> command (or, during installation, by putting the
+       <emphasis role="bold">-noauth</emphasis> flag on the command that starts up the BOS Server), the BOS Server creates the
+       zero-length <emphasis role="bold">NoAuth</emphasis> file. When you reenable authorization checking, the BOS Server removes the
+       file.</para>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>setauth</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos setauth</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authorization checking</primary>
+ 
+         <secondary>disabling</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>turning off authorization checking</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>disabling</primary>
+ 
+         <secondary>authorization checking</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ126">
+       <title>To disable authorization checking on a server machine</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos setauth</emphasis> command to disable authorization checking. <programlisting>
+    % <emphasis role="bold">bos setauth</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">off</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">seta</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setauth</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine on which server processes do not check for authorization.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>authorization checking</primary>
+ 
+         <secondary>enabling</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>enabling authorization checking</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>turning on authorization checking</primary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ127">
+       <title>To enable authorization checking on a server machine</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Reenable authorization checking. (No privilege is required because the machine is not currently checking for
+           authorization.) For detailed syntax information, see the preceding section. <programlisting>
+    % <emphasis role="bold">bos setauth</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">on</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>mutual authentication</primary>
+ 
+         <secondary>preventing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>preventing</primary>
+ 
+         <secondary>mutual authentication</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ128">
+       <title>Bypassing Mutual Authentication for an Individual Command</title>
+ 
+       <para>Several of the server processes allow any user (not just system administrators) to disable mutual authentication when
+       issuing a command. The server process treats the issuer as the unauthenticated user <emphasis
+       role="bold">anonymous</emphasis>.</para>
+ 
+       <para>The facilities for preventing mutual authentication are provided for use in emergencies (such as the key emergency
+       discussed in <link linkend="HDRWQ370">Handling Server Encryption Key Emergencies</link>). During normal circumstances,
+       authorization checking is turned on, making it useless to prevent authentication: the server processes refuse to perform
+       privileged commands for the user <emphasis role="bold">anonymous</emphasis>.</para>
+ 
+       <para>It can be useful to prevent authentication when authorization checking is turned off. The very act of trying to
+       authenticate can cause problems if the server cannot understand a particular encryption key, as is likely to happen in a key
+       emergency.</para>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>mutual authentication, bypassing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>mutual authentication, bypassing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>mutual authentication, bypassing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>mutual authentication, bypassing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>interactive</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas interactive</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>entering</primary>
+ 
+         <secondary>kas interactive mode</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>interactive mode (kas commands)</primary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ129">
+       <title>To bypass mutual authentication for bos, kas, pts, and vos commands</title>
+ 
+       <para>Provide the <emphasis role="bold">-noauth</emphasis> flag which is available on many of the commands in the suites. To
+       verify that a command accepts the flag, issue the <emphasis role="bold">help</emphasis> command in its suite, or consult the
+       command's reference page in the <emphasis>OpenAFS Administration Reference</emphasis> (the reference page also specifies the
+       shortest acceptable abbreviation for the flag on each command). The suites' <emphasis role="bold">apropos</emphasis> and
+       <emphasis role="bold">help</emphasis> commands do not themselves accept the flag.</para>
+ 
+       <para>You can bypass mutual authentication for all <emphasis role="bold">kas</emphasis> commands issued during an interactive
+       session by including the <emphasis role="bold">-noauth</emphasis> flag on the <emphasis role="bold">kas interactive</emphasis>
+       command. If you have already entered interactive mode with an authenticated identity, issue the <emphasis role="bold">(kas)
+       noauthentication</emphasis> command to assume the <emphasis role="bold">anonymous</emphasis> identity.</para>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>mutual authentication, bypassing</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_151">
+       <title>To bypass mutual authentication for fs commands</title>
+ 
+       <para>This is not possible, except by issuing the <emphasis role="bold">unlog</emphasis> command to discard your tokens before
+       issuing the <emphasis role="bold">fs</emphasis> command.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ130">
+     <title>Adding or Removing Disks and Partitions</title>
+ 
+     <para>AFS makes it very easy to add storage space to your cell, just by adding disks to existing file server machines. This
+     section explains how to install or remove a disk used to store AFS volumes. (Another way to add storage space is to install
+     additional server machines, as instructed in the <emphasis>OpenAFS Quick Beginnings</emphasis>.)</para>
+ 
+     <para>Both adding and removing a disk cause at least a brief file system outage, because you must restart the <emphasis
+     role="bold">fs</emphasis> process to have it recognize the new set of server partitions. Some operating systems require that you
+     shut the machine off before adding or removing a disk, in which case you must shut down all of the AFS server processes first.
+     Otherwise, the AFS-related aspects of adding or removing a disk are not complicated, so the duration of the outage depends
+     mostly on how long it takes to install or remove the disk itself.</para>
+ 
+     <para>The following instructions for installing a new disk completely prepare it to house AFS volumes. You can then use the
+     <emphasis role="bold">vos create</emphasis> command to create new volumes, or the <emphasis role="bold">vos move</emphasis>
+     command to move existing ones from other partitions. For instructions, see <link linkend="HDRWQ185">Creating Read/write
+     Volumes</link> and <link linkend="HDRWQ226">Moving Volumes</link>. The instructions for removing a disk are basically the
+     reverse of the installation instructions, but include extra steps that protect against data loss.</para>
+ 
+     <para>A server machines can house 256 AFS server partitions, each one mounted at a directory with a name of the form <emphasis
+     role="bold">/vicep</emphasis><emphasis>index</emphasis>, where <emphasis>index</emphasis> is one or two lowercase letters. By
+     convention, the first partition on a machine is mounted at <emphasis role="bold">/vicepa</emphasis>, the second at <emphasis
+     role="bold">/vicepb</emphasis>, and so on to the twenty-sixth at <emphasis role="bold">/vicepz</emphasis>. Additional partitions
+     are mounted at <emphasis role="bold">/vicepaa</emphasis> through <emphasis role="bold">/vicepaz</emphasis> and so on up to
+     <emphasis role="bold">/vicepiv</emphasis>. Using the letters consecutively is not required, but is simpler.</para>
+ 
+     <para>Mount each <emphasis role="bold">/vicep</emphasis> directory directly under the local file system's root directory (
+     <emphasis role="bold">/</emphasis> ), not as a subdirectory of any other directory; for example, <emphasis
+     role="bold">/usr/vicepa</emphasis> is not an acceptable location. You must also map the directory to the partition's device name
+     in the file server machine's file systems registry file (<emphasis role="bold">/etc/fstab</emphasis> or equivalent).</para>
+ 
+     <para>These instructions assume that the machine's AFS initialization file includes the following command to restart the BOS
+     Server after each reboot. The BOS Server starts the other AFS server processes listed in the local <emphasis
+     role="bold">/usr/afs/local/BosConfig</emphasis> file. For information on the <emphasis role="bold">bosserver</emphasis>
+     command's optional arguments, see its reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+     <programlisting>
+    /usr/afs/bin/bosserver &amp;
+ </programlisting>
+ 
+     <indexterm>
+       <primary>adding</primary>
+ 
+       <secondary>disk to file server machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>disk on file server machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>disk</primary>
+ 
+       <secondary>file server machine</secondary>
+ 
+       <tertiary>adding/installing</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file server machine</primary>
+ 
+       <secondary>disk</secondary>
+ 
+       <tertiary>adding/installing</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mounting</primary>
+ 
+       <secondary>disk on file server machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>vos listpart</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>listpart</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ131">
+       <title>To add and mount a new disk to house AFS volumes</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide how many AFS partitions to divide the new disk into and the names of the directories at which to mount them
+           (the introduction to this section describes the naming conventions). To display the names of the existing server
+           partitions on the machine, issue the <emphasis role="bold">vos listpart</emphasis> command. Include the <emphasis
+           role="bold">-localauth</emphasis> flag because you are logged in as the local superuser <emphasis
+           role="bold">root</emphasis> but do not necessarily have administrative tokens. <programlisting>
+    # <emphasis role="bold">vos listpart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-localauth</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listp</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listpart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the local file server machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-localauth</emphasis></term>
+ 
+                 <listitem>
+                   <para>Constructs a server ticket using a key from the local <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis>
+                   file. The <emphasis role="bold">bos</emphasis> command interpreter presents it to the BOS Server during mutual
+                   authentication.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create each directory at which to mount a partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>x</replaceable>[<replaceable>x</replaceable>]
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>file systems registry (fstab)</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>file systems registry file</primary>
+ 
+             <secondary>adding new disk to file server machine</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>etc/fstab file</primary>
+ 
+             <secondary></secondary>
+ 
+             <see>file systems registry file</see>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fstab file</primary>
+ 
+             <secondary></secondary>
+ 
+             <see>file systems registry file</see>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ132" />Using a text editor, create an entry in the machine's file systems registry file (<emphasis
+           role="bold">/etc/fstab</emphasis> or equivalent) for each new disk partition, mapping its device name to the directory you
+           created in the previous step. Refer to existing entries in the file to learn the proper format, which varies for different
+           operating systems.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ133" />If the operating system requires that you shut off the machine to install a new disk, issue
+           the <emphasis role="bold">bos shutdown</emphasis> command to shut down all AFS server processes other than the BOS Server
+           (it terminates safely when you shut off the machine). Include the <emphasis role="bold">-localauth</emphasis> flag because
+           you are logged in as the local superuser <emphasis role="bold">root</emphasis> but do not necessarily have administrative
+           tokens. For a complete description of the command, see <link linkend="HDRWQ168">To stop processes temporarily</link>.
+           <programlisting>
+    # <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-localauth</emphasis> [<emphasis
+                 role="bold">-wait</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ134" />If necessary, shut off the machine. Install and format the new disk according to the
+           instructions provided by the disk and operating system vendors. If necessary, edit the disk's partition table to reflect
+           the changes you made to the files system registry file in step <link linkend="LIWQ132">4</link>; consult the operating
+           system documentation for instructions.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you shut off the machine down in step <link linkend="LIWQ134">6</link>, turn it on. Otherwise, issue the
+           <emphasis role="bold">bos restart</emphasis> command to restart the <emphasis role="bold">fs</emphasis> process, forcing
+           it to recognize the new set of server partitions. Include the <emphasis role="bold">-localauth</emphasis> flag because you
+           are logged in as the local superuser <emphasis role="bold">root</emphasis> but do not necessarily have administrative
+           tokens. For complete instructions for the <emphasis role="bold">bos restart</emphasis> command, see <link
+           linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>. <programlisting>
+    # <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  <emphasis role="bold">fs -localauth</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos status</emphasis> command to verify that all server processes are running
+           correctly. For more detailed instructions, see <link linkend="HDRWQ158">Displaying Process Status and Information from the
+           BosConfig File</link>. <programlisting>
+    # <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>disk from file server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>disk</primary>
+ 
+         <secondary>file server machine</secondary>
+ 
+         <tertiary>removing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>disk</secondary>
+ 
+         <tertiary>removing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>unmounting</primary>
+ 
+         <secondary>file server machine disk</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>move</secondary>
+ 
+         <tertiary>when removing file server machine disk</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ135">
+       <title>To unmount and remove a disk housing AFS volumes</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos listvol</emphasis> command to list the volumes housed on each partition of each
+           disk you are about to remove, in preparation for removing them or moving them to other partitions. For detailed
+           instructions, see <link linkend="HDRWQ219">Displaying Volume Headers</link>. <programlisting>
+    % <emphasis role="bold">vos listvol</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>partition name</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Move any volume you wish to retain in the file system to another partition. You can move only read/write volumes.
+           For more detailed instructions, and for instructions on moving read-only and backup volumes, see <link
+           linkend="HDRWQ226">Moving Volumes</link>. <programlisting>
+    % <emphasis role="bold">vos move</emphasis>  &lt;<replaceable>volume name or ID</replaceable>&gt;  \
+         &lt;<replaceable>machine name on source</replaceable>&gt; &lt;<replaceable>partition name on source</replaceable>&gt;  \
+         &lt;<replaceable>machine name on destination</replaceable>&gt; &lt;<replaceable>partition name on destination</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If there are any volumes you do not wish to retain, back them up using
+           the <emphasis role="bold">vos dump</emphasis> command or the AFS Backup System. See <link linkend="HDRWQ240">Dumping and
+           Restoring Volumes</link> or <link linkend="HDRWQ296">Backing Up Data</link>, respectively.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>umount command</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>umount</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">umount</emphasis> command, repeating it for each partition on the disk to be
+           removed. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">umount /dev/</emphasis>&lt;<replaceable>partition_block_device_name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>file systems registry file</primary>
+ 
+             <secondary>removing disk from file server machine</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ136" />Using a text editor, remove or comment out each partition's entry from the machine's file
+           systems registry file (<emphasis role="bold">/etc/fstab</emphasis> or equivalent).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Remove the <emphasis role="bold">/vicep</emphasis> directory associated with each partition. <programlisting>
+    # <emphasis role="bold">rmdir /vicep</emphasis>xx
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the operating system requires that you shut off the machine to remove a disk, issue the <emphasis role="bold">bos
+           shutdown</emphasis> command to shut down all AFS server processes other than the BOS Server (it terminates safely when you
+           shut off the machine). Include the <emphasis role="bold">-localauth</emphasis> flag because you are logged in as the local
+           superuser <emphasis role="bold">root</emphasis> but do not necessarily have administrative tokens. For a complete
+           description of the command, see <link linkend="HDRWQ168">To stop processes temporarily</link>. <programlisting>
+    # <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-localauth</emphasis> [<emphasis
+                 role="bold">-wait</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ137" />If necessary, shut off the machine. Remove the disk according to the instructions provided by
+           the disk and operating system vendors. If necessary, edit the disk's partition table to reflect the changes you made to
+           the files system registry file in step <link linkend="LIWQ136">7</link>; consult the operating system documentation for
+           instructions.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you shut off the machine down in step <link linkend="LIWQ137">10</link>, turn it on. Otherwise, issue the
+           <emphasis role="bold">bos restart</emphasis> command to restart the <emphasis role="bold">fs</emphasis> process, forcing
+           it to recognize the new set of server partitions. Include the <emphasis role="bold">-localauth</emphasis> flag because you
+           are logged in as the local superuser <emphasis role="bold">root</emphasis> but do not necessarily have administrative
+           tokens. For complete instructions for the <emphasis role="bold">bos restart</emphasis> command, see <link
+           linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>. <programlisting>
+    # <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  <emphasis role="bold">fs -localauth</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos status</emphasis> command to verify that all server processes are running
+           correctly. For more detailed instructions, see <link linkend="HDRWQ158">Displaying Process Status and Information from the
+           BosConfig File</link>. <programlisting>
+    # <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>use of NetInfo file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>use of NetRestrict file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>use of sysid file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Ubik</primary>
+ 
+         <secondary>use of NetInfo and NetRestrict files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>use of NetInfo and NetRestrict files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>interfaces registered in VLDB server entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>server machine interfaces registered in VLDB</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>controlling</primary>
+ 
+         <secondary>server machine interfaces registered in VLDB</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>server entries from VLDB</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>VLDB server entries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server entry in VLDB</primary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ138">
+     <title>Managing Server IP Addresses and VLDB Server Entries</title>
+ 
+     <para>The AFS support for multihomed file server machines is largely automatic. The File Server process records the IP addresses
+     of its file server machine's network interfaces in the local <emphasis role="bold">/usr/afs/local/sysid</emphasis> file and also
+     registers them in a <emphasis>server entry</emphasis> in the Volume Location Database (VLDB). The <emphasis
+     role="bold">sysid</emphasis> file and server entry are identified by the same unique number, which creates an association
+     between them.</para>
+ 
+     <para>When the Cache Manager requests volume location information, the Volume Location (VL) Server provides all of the
+     interfaces registered for each server machine that houses the volume. This enables the Cache Manager to make use of multiple
+     addresses when accessing AFS data stored on a multihomed file server machine.</para>
+ 
+     <para>If you wish, you can control which interfaces the File Server registers in its VLDB server entry by creating two files in
+     the local <emphasis role="bold">/usr/afs/local</emphasis> directory: <emphasis role="bold">NetInfo</emphasis> and <emphasis
+     role="bold">NetRestrict</emphasis>. Each time the File Server restarts, it builds a list of the local machine's interfaces by
+     reading the <emphasis role="bold">NetInfo</emphasis> file, if it exists. If you do not create the file, the File Server uses the
+     list of network interfaces configured with the operating system. It then removes from the list any addresses that appear in the
+     <emphasis role="bold">NetRestrict</emphasis> file, if it exists. The File Server records the resulting list in the <emphasis
+     role="bold">sysid</emphasis> file and registers the interfaces in the VLDB server entry that has the same unique
+     identifier.</para>
+ 
+     <para>On database server machines, the <emphasis role="bold">NetInfo</emphasis> and <emphasis role="bold">NetRestrict</emphasis>
+     files also determine which interfaces the Ubik database synchronization library uses when communicating with the database server
+     processes running on other database server machines.</para>
+ 
+     <para>There is a maximum number of IP addresses in each server entry, as documented in the <emphasis>OpenAFS Release
+     Notes</emphasis>. If a multihomed file server machine has more interfaces than the maximum, AFS simply ignores the excess ones.
+     It is probably appropriate for such machines to use the <emphasis role="bold">NetInfo</emphasis> and <emphasis
+     role="bold">NetRestrict</emphasis> files to control which interfaces are registered.</para>
+ 
+     <para>If for some reason the <emphasis role="bold">sysid</emphasis> file no longer exists, the File Server creates a new one
+     with a new unique identifier. When the File Server registers the contents of the new file, the Volume Location (VL) Server
+     normally recognizes automatically that the new file corresponds to an existing server entry, and overwrites the existing server
+     entry with the new file contents and identifier. However, it is best not to remove the <emphasis role="bold">sysid</emphasis>
+     file if that can be avoided.</para>
+ 
+     <para>Similarly, it is important not to copy the <emphasis role="bold">sysid</emphasis> file from one file server machine to
+     another. If you commonly copy the contents of the <emphasis role="bold">/usr/afs</emphasis> directory from an existing machine
+     as part of installing a new file server machine, be sure to remove the <emphasis role="bold">sysid</emphasis> file from the
+     <emphasis role="bold">/usr/afs/local</emphasis> directory on the new machine before starting the File Server.</para>
+ 
+     <para>There are certain cases where the VL Server cannot determine whether it is appropriate to overwrite an existing server
+     entry with a new <emphasis role="bold">sysid</emphasis> file's contents and identifier. It then refuses to allow the File Server
+     to register the interfaces, which prevents the File Server from starting. This can happen if, for example, a new <emphasis
+     role="bold">sysid</emphasis> file includes two interfaces that currently are registered by themselves in separate server
+     entries. In such cases, error messages in the <emphasis role="bold">/usr/afs/log/VLLog</emphasis> file on the VL Server machine
+     and in the <emphasis role="bold">/usr/afs/log/FileLog</emphasis> file on the file server machine indicate that you need to use
+     the <emphasis role="bold">vos changeaddr</emphasis> command to resolve the problem. Contact the AFS Product Support group for
+     instructions and assistance.</para>
+ 
+     <para>Except in this type of rare error case, the only appropriate use of the <emphasis role="bold">vos changeaddr</emphasis>
+     command is to remove a VLDB server entry completely when you remove a file server machine from service. The VLDB can accommodate
+     a maximum number of server entries, as specified in the <emphasis>OpenAFS Release Notes</emphasis>. Removing obsolete entries
+     makes it possible to allocate server entries for new file server machines as required. See the instructions that follow.</para>
+ 
+     <para>Do not use the <emphasis role="bold">vos changeaddr</emphasis> command to change the list of interfaces registered in a
+     VLDB server entry. To change a file server machine's IP addresses and server entry, see the instructions that follow.</para>
+ 
+     <indexterm>
+       <primary>NetInfo file (server version)</primary>
+ 
+       <secondary>creating/editing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>NetInfo file (server version)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>editing</primary>
+ 
+       <secondary>NetInfo file (server version)</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_156">
+       <title>To create or edit the server NetInfo file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using a text editor, open the <emphasis role="bold">/usr/afs/local/NetInfo</emphasis> file. Place one IP address in
+           dotted decimal format (for example, <computeroutput>192.12.107.33</computeroutput>) on each line. The order of entries is
+           not significant.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you want the File Server to start using the revised list immediately, use the <emphasis role="bold">bos
+           restart</emphasis> command to restart the <emphasis role="bold">fs</emphasis> process. For instructions, see <link
+           linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>NetRestrict file (server version)</primary>
+ 
+         <secondary>creating/editing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>NetRestrict file (server version)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>editing</primary>
+ 
+         <secondary>NetRestrict file (server version)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_157">
+       <title>To create or edit the server NetRestrict file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using a text editor, open the <emphasis role="bold">/usr/afs/local/NetRestrict</emphasis> file. Place one IP address
+           in dotted decimal format on each line. The order of the addresses is not significant. Use the value <emphasis
+           role="bold">255</emphasis> as a wildcard that represents all possible addresses in that field. For example, the entry
+           <computeroutput>192.12.105.255</computeroutput> indicates that the Cache Manager does not register any of the addresses in
+           the 192.12.105 subnet.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you want the File Server to start using the revised list immediately, use the <emphasis role="bold">bos
+           restart</emphasis> command to restart the <emphasis role="bold">fs</emphasis> process. For instructions, see <link
+           linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>listaddrs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos listaddrs</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_158">
+       <title>To display all server entries from the VLDB</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos listaddrs</emphasis> command to display all server entries from the VLDB.
+           <programlisting>
+    % <emphasis role="bold">vos listaddrs</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">lista</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">listaddrs</emphasis>.</para>
+ 
+           <para>The output displays all server entries from the VLDB, each on its own line. If a file server machine is multihomed,
+           all of its registered addresses appear on the line. The first one is the one reported as a volume's site in the output
+           from the <emphasis role="bold">vos examine</emphasis> and <emphasis role="bold">vos listvldb</emphasis> commands.</para>
+ 
+           <para>VLDB server entries record IP addresses, and the command interpreter has the local name service (either a process
+           like the Domain Name Service or a local host table) translate them to hostnames before displaying them. If an IP address
+           appears in the output, it is not possible to translate it.</para>
+ 
+           <para>The existence of an entry does not necessarily indicate that the machine that is still an active file server
+           machine. To remove obsolete server entries, see the following instructions.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>changeaddr</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos changeaddr</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_159">
+       <title>To remove obsolete server entries from the VLDB</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos changeaddr</emphasis> command to remove a server entry from the VLDB.
+           <programlisting>
+    % <emphasis role="bold">vos changeaddr</emphasis> &lt;<replaceable>original IP address</replaceable>&gt; <emphasis role="bold">-remove</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">ch</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">changeaddr</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">original IP address</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one of the IP addresses currently registered for the file server machine in the VLDB. Any of a
+                   multihomed file server machine's addresses are acceptable to identify it.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-remove</emphasis></term>
+ 
+                 <listitem>
+                   <para>Removes the server entry.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_160">
+       <title>To change a server machine's IP addresses</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is the system control machine or a binary distribution machine, and you are also changing its
+           hostname, redefine all relevant <emphasis role="bold">upclient</emphasis> processes on other server machines to refer to
+           the new hostname. Use the <emphasis role="bold">bos delete</emphasis> and <emphasis role="bold">bos create</emphasis>
+           commands as instructed in <link linkend="HDRWQ161">Creating and Removing Processes</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is a database server machine, edit its entry in the <emphasis
+           role="bold">/usr/afs/etc/CellServDB</emphasis> file on every server machine in the cell to list one of the new IP
+           addresses. If you use the United States edition of AFS, you can edit the file on the system control machine and wait the
+           required time (by default, five minutes) for the Update Server to distribute the changed file to all server
+           machines.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is a database server machine, issue the <emphasis role="bold">bos shutdown</emphasis> command to stop
+           all server processes. If the machine is also a file server, the volumes on it are inaccessible during this time. For a
+           complete description of the command, see <link linkend="HDRWQ168">To stop processes temporarily</link>. <programlisting>
+    % <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Use the utilities provided with the operating system to change one or more of the machine's IP addresses.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If appropriate, edit the <emphasis role="bold">/usr/afs/local/NetInfo</emphasis> file, the <emphasis
+           role="bold">/usr/afs/local/NetRestrict</emphasis> file, or both, to reflect the changed addresses. Instructions appear
+           earlier in this section.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is a database server machine, issue the <emphasis role="bold">bos restart</emphasis> command to
+           restart all server processes on the machine. For complete instructions for the <emphasis role="bold">bos
+           restart</emphasis> command, see <link linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-all</emphasis>
+ </programlisting></para>
+ 
+           <para>At the same time, issue the <emphasis role="bold">bos restart</emphasis> command on all other database server
+           machines in the cell to restart the database server processes only (the Authentication, Backup, Protection, and Volume
+           Location Servers). Issue the commands in quick succession so that all of the database server processes vote in the quorum
+           election.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">kaserver buserver ptserver vlserver</emphasis>
+ </programlisting>
+ 
+           <para>If you are changing IP addresses on every database server machine in the cell, you must also issue the <emphasis
+           role="bold">bos restart</emphasis> command on every file server machine in the cell to restart the <emphasis
+           role="bold">fs</emphasis> process.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is not a database server machine, issue the <emphasis role="bold">bos restart</emphasis> command to
+           restart the <emphasis role="bold">fs</emphasis> process (if the machine is a database server, you already restarted the
+           process in the previous step). The File Server automatically compiles a new list of interfaces, records them in the
+           <emphasis role="bold">/usr/afs/local/sysid</emphasis> file, and registers them in its VLDB server entry. <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">fs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is a database server machine, edit its entry in the <emphasis
+           role="bold">/usr/vice/etc/CellServDB</emphasis> file on every client machine in the cell to list one of the new IP
+           addresses. Instructions appear in <link linkend="HDRWQ406">Maintaining Knowledge of Database Server
+           Machines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If there are machine entries in the Protection Database for the machine's previous IP addresses, use the <emphasis
+           role="bold">pts rename</emphasis> command to change them to the new addresses. For instructions, see <link
+           linkend="HDRWQ556">Changing a Protection Database Entry's Name</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>rebooting</primary>
+ 
+         <secondary>server machine, instructions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server machine</primary>
+ 
+         <secondary>rebooting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>role in reboot of server machine</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ139">
+     <title>Rebooting a Server Machine</title>
+ 
+     <para>You can reboot a server machine either by typing the appropriate commands at its console or by issuing the <emphasis
+     role="bold">bos exec</emphasis> command on a remote machine. Remote rebooting can be more convenient, because you do not need to
+     leave your present location, but you cannot track the progress of the reboot as you can at the console. Remote rebooting is
+     possible because the server machine's operating system recognizes the BOS Server, which executes the <emphasis role="bold">bos
+     exec</emphasis> command, as the local superuser <emphasis role="bold">root</emphasis>.</para>
+ 
+     <para>Rebooting server machines is part of routine maintenance in some cells, and some instructions in the AFS documentation
+     include it as a step. It is certainly not intended to be the standard method for recovering from AFS-related problems, however,
+     but only a last resort when the machine is unresponsive and you have tried all other reasonable options.</para>
+ 
+     <para>Rebooting causes a service outage. If the machine stores volumes, they are all inaccessible until the reboot completes and
+     the File Server reattaches them. If the machine is a database server machine, information from the databases can become
+     unavailable during the reelection of the synchronization site for each database server process; the VL Server outage generally
+     has the greatest impact, because the Cache Manager must be able to access the VLDB to fetch AFS data.</para>
+ 
+     <para>By convention, a server machine's AFS initialization file includes the following command to restart the BOS Server after
+     each reboot. It starts the other AFS server processes listed in the local <emphasis
+     role="bold">/usr/afs/local/BosConfig</emphasis> file. These instructions assume that the initialization file includes the
+     command.</para>
+ 
+     <programlisting>
+    /usr/afs/bin/bosserver &amp;
+ </programlisting>
+ 
+     <sect2 id="HDRWQ140">
+       <title>To reboot a file server machine from its console</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos shutdown</emphasis> command to shut down all AFS server processes other than the
+           BOS Server, which terminates safely when you reboot the machine. Include the <emphasis role="bold">-localauth</emphasis>
+           flag because you are logged in as the local superuser <emphasis role="bold">root</emphasis> but do not necessarily have
+           administrative tokens. For a complete description of the command, see <link linkend="HDRWQ168">To stop processes
+           temporarily</link>. <programlisting>
+    # <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-localauth</emphasis> [<emphasis
+                 role="bold">-wait</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Reboot the machine. On many system types, the appropriate command is <emphasis role="bold">shutdown</emphasis>, but
+           the appropriate options vary; consult your UNIX administrator's guide. <programlisting>
+     # <emphasis role="bold">shutdown</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos exec</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>exec</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ141">
+       <title>To reboot a file server machine remotely</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file on the machine you are
+           rebooting. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in
+           <link linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos shutdown</emphasis> to halt AFS server processes other than the BOS Server,
+           which terminates safely when you turn off the machine. For a complete description of the command, see <link
+           linkend="HDRWQ168">To stop processes temporarily</link>. <programlisting>
+    % <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  [<emphasis role="bold">-wait</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos exec</emphasis> command to reboot the machine remotely. <programlisting>
+    % <emphasis role="bold">bos exec</emphasis> &lt;<replaceable>machine name</replaceable>&gt; reboot_command
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine to reboot.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">reboot_command</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the rebooting command for the machine's operating system. The <emphasis role="bold">shutdown</emphasis>
+                   command is appropriate on many system types, but consult your operating system documentation.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd009.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd009.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd009.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,3039 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ142">
+   <title>Monitoring and Controlling Server Processes</title>
+ 
+   <indexterm>
+     <primary>monitoring</primary>
+ 
+     <secondary>server processes</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>BOS Server</primary>
+ 
+     <secondary>monitoring server processes</secondary>
+   </indexterm>
+ 
+   <para>One of your most important responsibilities as a system administrator is ensuring that the processes on file server machines
+   are running correctly. The BOS Server, which runs on every file server machine, relieves you of much of the responsibility by
+   constantly monitoring the other AFS server processes on its machine. It can automatically restart processes that have failed,
+   ordering the restarts to take interdependencies into account.</para>
+ 
+   <para>Because different file server machines run different combinations of processes, you must define which processes the BOS
+   Server on each file server machine is to monitor (to learn how, see <link linkend="HDRWQ154">Controlling and Checking Process
+   Status</link>).</para>
+ 
+   <para>It is sometimes necessary to take direct control of server process status before performing routine maintenance or
+   correcting problems that the BOS Server cannot correct (such as problems with database replication or mutual authentication). At
+   those times, you control process status through the BOS Server by issuing <emphasis role="bold">bos</emphasis> commands.</para>
+ 
+   <sect1 id="HDRWQ143">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <tbody>
+           <row>
+             <entry>Examine process status</entry>
+ 
+             <entry><emphasis role="bold">bos status</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine information from the <emphasis role="bold">BosConfig file</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">bos status</emphasis> with <emphasis role="bold">-long</emphasis> flag</entry>
+           </row>
+ 
+           <row>
+             <entry>Create a process instance</entry>
+ 
+             <entry><emphasis role="bold">bos create</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Stop a process</entry>
+ 
+             <entry><emphasis role="bold">bos stop</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Start a stopped process</entry>
+ 
+             <entry><emphasis role="bold">bos start</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Stop a process temporarily</entry>
+ 
+             <entry><emphasis role="bold">bos shutdown</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Start a temporarily stopped process</entry>
+ 
+             <entry><emphasis role="bold">bos startup</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Stop and immediately restart a process</entry>
+ 
+             <entry><emphasis role="bold">bos restart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Stop and immediately restart all processes</entry>
+ 
+             <entry><emphasis role="bold">bos restart</emphasis> with <emphasis role="bold">-bosserver</emphasis> flag</entry>
+           </row>
+ 
+           <row>
+             <entry>Examine BOS Server's restart times</entry>
+ 
+             <entry><emphasis role="bold">bos getrestart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set BOS Server's restart times</entry>
+ 
+             <entry><emphasis role="bold">bos setrestart</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine a log file</entry>
+ 
+             <entry><emphasis role="bold">bos getlog</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Execute a command remotely</entry>
+ 
+             <entry><emphasis role="bold">bos exec</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ145">
+     <title>Brief Descriptions of the AFS Server Processes</title>
+ 
+     <para>This section briefly describes the different server processes that can run on an AFS server machine. In cells with
+     multiple server machines, not all processes necessarily run on all machines.</para>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>different names for</secondary>
+     </indexterm>
+ 
+     <para>An AFS server process is referred to in one of three ways, depending on the context: <itemizedlist>
+         <listitem>
+           <para>The output from the <emphasis role="bold">bos status</emphasis> command refers to a process by the name assigned
+           when the <emphasis role="bold">bos create</emphasis> command creates its entry in the <emphasis
+           role="bold">/usr/afs/local/BosConfig</emphasis> file. The name can differ from machine to machine, but it is easiest to
+           maintain the cell if you assign the same name on all machines. The <emphasis>OpenAFS Quick Beginnings</emphasis> and the
+           reference page for the <emphasis role="bold">bos create</emphasis> command list the conventional names. Examples are
+           <emphasis role="bold">bosserver</emphasis>, <emphasis role="bold">kaserver</emphasis>, and <emphasis
+           role="bold">vlserver</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The process listing produced by the standard <emphasis role="bold">ps</emphasis> command generally matches the
+           process's binary file. Examples of process binary files are <emphasis role="bold">/usr/afs/bin/bosserver</emphasis>,
+           <emphasis role="bold">/usr/afs/bin/kaserver</emphasis>, and <emphasis role="bold">/usr/afs/bin/vlserver</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>In most contexts, including most references in the documentation, a process is referred to as (for example) the
+           <emphasis role="bold">Basic OverSeer (BOS) Server</emphasis>, the <emphasis role="bold">Authentication Server</emphasis>,
+           or the <emphasis role="bold">Volume Location Server</emphasis>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The following sections specify each name for the process as well as some of the administrative tasks in which you use the
+     process. For a more general description of the servers, see <link linkend="HDRWQ17">AFS Server Processes and the Cache
+     Manager</link>.</para>
+ 
+     <sect2 id="HDRWQ146">
+       <title>The bosserver Process: the Basic OverSeer Server</title>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>as bosserver process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>bosserver</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">bosserver</emphasis> process, which runs on every AFS server machine, is the Basic OverSeer
+       (BOS) Server responsible for monitoring the other AFS server processes running on its machine. If a process fails, the BOS
+       Server can restart it automatically, without human intervention. It takes interdependencies into account when restarting a
+       process that has multiple component processes (such as the <emphasis role="bold">fs</emphasis> process described in <link
+       linkend="HDRWQ148">The fs Collection of Processes: the File Server, Volume Server and Salvager</link>).</para>
+ 
+       <indexterm>
+         <primary>usr/afs/bin/bosserver</primary>
+       </indexterm>
+ 
+       <para>Because the BOS Server does not monitor or restart itself, it does not appear in the output from the <emphasis
+       role="bold">bos status</emphasis> command. It appears in the <emphasis role="bold">ps</emphasis> command's output as
+       <computeroutput>/usr/afs/bin/bosserver</computeroutput>.</para>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>BOS Server</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>summary of functions</secondary>
+       </indexterm>
+ 
+       <para>As a system administrator, you contact the BOS Server when you issue <emphasis role="bold">bos</emphasis> commands to
+       perform the following kinds of tasks. <itemizedlist>
+           <listitem>
+             <para>Defining the processes for the BOS Server to monitor by creating entries in the <emphasis
+             role="bold">/usr/afs/local/BosConfig</emphasis> file as described in <link linkend="HDRWQ154">Controlling and Checking
+             Process Status</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Stopping and starting processes on the file server machines according to subsequent instructions in this
+             chapter</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Defining your cell's database server machines in the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file
+             as described in <link linkend="HDRWQ118">Maintaining the Server CellServDB File</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Defining AFS server encryption keys in the <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file as described
+             in <link linkend="HDRWQ355">Managing Server Encryption Keys</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Granting system administrator privileges with respect to BOS Server, Volume Server, and Backup Server operations,
+             by adding a user to the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file as described in <link
+             linkend="HDRWQ592">Administering the UserList File</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Setting authorization checking requirements on a server machine as described in <link linkend="HDRWQ123">Managing
+             Authentication and Authorization Requirements</link></para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ147">
+       <title>The buserver Process: the Backup Server</title>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>as buserver process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>buserver</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">buserver</emphasis> process, which runs on database server machines, is the Backup Server. It
+       maintains information about Backup System configuration and operations in the Backup Database.</para>
+ 
+       <para>The process appears as <computeroutput>buserver</computeroutput> in the <emphasis role="bold">bos status</emphasis>
+       command's output, if the conventional name is assigned. It appears in the <emphasis role="bold">ps</emphasis> command's output
+       as <computeroutput>/usr/afs/bin/buserver</computeroutput>.</para>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>Backup Server</secondary>
+       </indexterm>
+ 
+       <para>As a system administrator, you contact the Backup Server when you issue any <emphasis role="bold">backup</emphasis>
+       command that manipulates information in the Backup Database, including those that change Backup System configuration
+       information, that dump data from volumes to permanent storage, or that restore data to AFS. See <link
+       linkend="HDRWQ248">Configuring the AFS Backup System</link> and <link linkend="HDRWQ283">Backing Up and Restoring AFS
+       Data</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ148">
+       <title>The fs Collection of Processes: the File Server, Volume Server and Salvager</title>
+ 
+       <indexterm>
+         <primary>fs process</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>fs</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">fs</emphasis> process, which runs on every file server machine, combines three component
+       processes: File Server, Volume Server and Salvager. The three components perform independent functions, but are controlled as
+       a single process for the following reasons. <itemizedlist>
+           <listitem>
+             <para>They all operate on the same data, namely files and directories stored in AFS volumes. Combining them as a single
+             process enables them to coordinate their actions, never attempting simultaneous operations on the same data that can
+             possibly corrupt it.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>It enables the BOS Server to stop and restart the processes in the required order. When the File Server fails, the
+             BOS Server stops the Volume Server and runs the Salvager to correct any corruption that resulted from the failure. (The
+             Salvager runs only in this special circumstance or when you invoke it yourself by issuing the <emphasis role="bold">bos
+             salvage</emphasis> command as instructed in <link linkend="HDRWQ232">Salvaging Volumes</link>.) If only the Volume
+             Server fails, the BOS Server can restart it without affecting the File Server or Salvager.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The File Server component handles AFS data at the level of files and directories, manipulating file system elements as
+       requested by application programs and the standard operating system commands. Its main duty is to deliver requested files to
+       client machines and store them again on the server machine when the client is finished. It also maintains status and
+       protection information about each file and directory. It runs continuously during normal operation.</para>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>as part of fs process</secondary>
+       </indexterm>
+ 
+       <para>The Volume Server component handles AFS data at the level of complete volumes rather than files and directories. In
+       response to <emphasis role="bold">vos</emphasis> commands, it creates, removes, moves, dumps and restores entire volumes,
+       among other actions. It runs continuously during normal operation.</para>
+ 
+       <indexterm>
+         <primary>Volume Server</primary>
+ 
+         <secondary>as part of fs process</secondary>
+       </indexterm>
+ 
+       <para>The Salvager component runs only after the failure of one of the other two processes. It checks the file system for
+       internal consistency and repairs any errors it finds.</para>
+ 
+       <indexterm>
+         <primary>Salvager</primary>
+ 
+         <secondary>as part of fs process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file system</primary>
+ 
+         <secondary>salvager</secondary>
+ 
+         <see>Salvager</see>
+       </indexterm>
+ 
+       <para>The process appears as <computeroutput>fs</computeroutput> in the <emphasis role="bold">bos status</emphasis> command's
+       output, if the conventional name is assigned. An auxiliary message reports the status of the File Server or Salvager
+       component. See <link linkend="HDRWQ158">Displaying Process Status and Information from the BosConfig File</link>.</para>
+ 
+       <para>The component processes of the <emphasis role="bold">fs</emphasis> process appear individually in the <emphasis
+       role="bold">ps</emphasis> command's output, as follows. There is no entry for the <computeroutput>fs</computeroutput> process
+       itself. <itemizedlist>
+           <listitem>
+             <para><computeroutput>/usr/afs/bin/fileserver</computeroutput></para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>/usr/afs/bin/volserver</computeroutput></para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>/usr/afs/bin/salvager</computeroutput></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>File Server</secondary>
+       </indexterm>
+ 
+       <para>The Cache Manager contacts the File Server component on your behalf whenever you access data or status information in an
+       AFS file or directory or issue file manipulation commands such as the UNIX <emphasis role="bold">cp</emphasis> and <emphasis
+       role="bold">ls</emphasis> commands. You can contact the File Server directly by issuing <emphasis role="bold">fs</emphasis>
+       commands that perform the following functions <itemizedlist>
+           <listitem>
+             <para>Administering the ACL of any directory in the file system as described in <link linkend="HDRWQ562">Managing Access
+             Control Lists</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Installing new partitions for housing AFS volumes, in which case you must restart the <emphasis
+             role="bold">fs</emphasis> process for it to recognize the new partition; for instructions, see <link
+             linkend="HDRWQ130">Adding or Removing Disks and Partitions</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Creating and deleting volume mount points in the AFS filespace as described in <link linkend="HDRWQ208">Mounting
+             Volumes</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Setting volume quota and displaying information about the space used and available in a volume or partition as
+             described in <link linkend="HDRWQ234">Setting and Displaying Volume Quota and Current Size</link></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>Volume Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>Volume Server</secondary>
+       </indexterm>
+ 
+       <para>You contact the Volume Server component when you issue <emphasis role="bold">vos</emphasis> commands that manipulate
+       volumes in any way--creating, removing, replicating, moving, renaming, converting to different formats, and salvaging. For
+       instructions, see <link linkend="HDRWQ174">Managing Volumes</link>.</para>
+ 
+       <para>The Salvager normally runs automatically in case of a failure. You can also start it with the <emphasis role="bold">bos
+       salvage</emphasis> command as described in <link linkend="HDRWQ232">Salvaging Volumes</link>.</para>
+ 
+       <indexterm>
+         <primary>Salvager</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>Salvager</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ149">
+       <title>The kaserver Process: the Authentication Server</title>
+ 
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>as kaserver process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>kaserver</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">kaserver</emphasis> process, which runs on database server machines, is the Authentication
+       Server responsible for several aspects of AFS security. It verifies AFS user identity by requiring a password. It maintains
+       all AFS server encryption keys and user passwords in the Authentication Database. The Authentication Server's Ticket Granting
+       Service (TGS) module creates the shared secrets that AFS client and server processes use when establishing secure
+       connections.</para>
+ 
+       <para>The process appears as <computeroutput>kaserver</computeroutput> in the <emphasis role="bold">bos status</emphasis>
+       command's output, if the conventional name is assigned. The <emphasis role="bold">ka</emphasis> string stands for
+       <emphasis>Kerberos Authentication</emphasis>, reflecting the fact that AFS's authentication protocols are based on Kerberos,
+       which was originally developed at the Massachusetts Institute of Technology's Project Athena.</para>
+ 
+       <para>It appears in the <emphasis role="bold">ps</emphasis> command's output as
+       <computeroutput>/usr/afs/bin/kaserver</computeroutput>.</para>
+ 
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>Authentication Server</secondary>
+       </indexterm>
+ 
+       <para>As a system administrator, you contact the Authentication Server when you issue <emphasis role="bold">kas</emphasis>
+       commands to perform the following kinds of tasks. <itemizedlist>
+           <listitem>
+             <para>Setting a user's password. Users normally change their own passwords, so you probably perform this task only
+             creating a new user account as described in <link linkend="HDRWQ502">Creating AFS User Accounts</link> and <link
+             linkend="HDRWQ516">Changing AFS Passwords</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Setting the AFS server encryption key in the Authentication Database, which the TGS uses to seal server tickets;
+             see <link linkend="HDRWQ355">Managing Server Encryption Keys</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Granting or revoking system administrator privileges with respect to the Authentication Server as described in
+             <link linkend="HDRWQ589">Granting Privilege for kas Commands: the ADMIN Flag</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ150">
+       <title>The ptserver Process: the Protection Server</title>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>as ptserver process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>ptserver</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">ptserver</emphasis> process, which runs on database server machines, is the Protection Server.
+       Its main responsibility is maintaining the Protection Database which contains user, machine, and group entries. The Protection
+       Server allocates AFS IDs and maintains the mapping between them and names. The File Server consults the Protection Server when
+       verifying that a user is authorized to perform a requested action.</para>
+ 
+       <para>The process appears as <computeroutput>ptserver</computeroutput> in the <emphasis role="bold">bos status</emphasis>
+       command's output, if the conventional name is assigned. It appears in the <emphasis role="bold">ps</emphasis> command's output
+       as <computeroutput>/usr/afs/bin/ptserver</computeroutput>.</para>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>Protection Server</secondary>
+       </indexterm>
+ 
+       <para>As a system administrator, you contact the Protection Server when you issue <emphasis role="bold">pts</emphasis>
+       commands to perform the following kinds of tasks. <itemizedlist>
+           <listitem>
+             <para>Creating a new user, machine, or group entry in the Protection Database as described in <link
+             linkend="HDRWQ531">Administering the Protection Database</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Adding or removing group members or otherwise manipulating Protection Database entries as described in <link
+             linkend="HDRWQ531">Administering the Protection Database</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Granting or revoking system administrator privilege by changing the membership of the <emphasis
+             role="bold">system:administrators</emphasis> group as described in <link linkend="HDRWQ586">Administering the
+             system:administrators Group</link></para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ151">
+       <title>The runntp Process</title>
+ 
+       <indexterm>
+         <primary>runntp process</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ntpd</primary>
+ 
+         <secondary>invoked by runntp process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>runntp</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">runntp</emphasis> process, which runs on every server machine, is a controller program for the
+       Network Time Protocol Daemon (NTPD), which synchronizes the hardware clocks on server machines. You need to run the <emphasis
+       role="bold">runntp</emphasis> process if you are not already running NTP or another time synchronization protocol on your
+       server machines.</para>
+ 
+       <para>The clocks on database server machines need to be synchronized because AFS's distributed database technology (Ubik)
+       works properly only when the clocks agree within a narrow range of variation (see <link linkend="HDRWQ103">Configuring the
+       Cell for Proper Ubik Operation</link>). The clocks on file server machines need to be correct not only because the File Server
+       sets modification time stamps on files, but because in the conventional configuration they serve as the time source for AFS
+       client machines.</para>
+ 
+       <para>The process appears as <computeroutput>runntp</computeroutput> in the <emphasis role="bold">bos status</emphasis>
+       command's output, if the conventional name is assigned. It appears in the output from the <emphasis role="bold">ps</emphasis>
+       command as <computeroutput>/usr/afs/bin/runntp</computeroutput>. The <emphasis role="bold">ps</emphasis> command's output also
+       includes an entry called <computeroutput>ntpd</computeroutput>; its exact form depends on the arguments you provide to the
+       <emphasis role="bold">runntp</emphasis> command.</para>
+ 
+       <indexterm>
+         <primary>ntpd</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>NTPD</secondary>
+       </indexterm>
+ 
+       <para>As a system administrator, you do not contact the NTPD directly once you have installed it according to the instructions
+       in the <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ152">
+       <title>The upserver and upclient Processes: the Update Server</title>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>as upserver and upclient processes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>upserver</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>upclient</secondary>
+       </indexterm>
+ 
+       <para>The Update Server has two separate parts, each of which runs on a different type of server machine. The <emphasis
+       role="bold">upserver</emphasis> process is the server portion of the Update Server. Its function depends on which edition of
+       AFS you use: <itemizedlist>
+           <listitem>
+             <para>With both the United States and international editions, it runs on the binary distribution machine of each system
+             type you use as a server machine, distributing the contents of each one's <emphasis role="bold">/usr/afs/bin</emphasis>
+             directory to the other server machines of that type. This guarantees that all machines have the same version of AFS
+             binaries. (For a list of the binaries, see <link linkend="HDRWQ84">Binaries in the /usr/afs/bin
+             Directory</link>.)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In you use the United States edition of AFS, it also runs on the cell's system control machine, distributing the
+             contents of its <emphasis role="bold">/usr/afs/etc</emphasis> directory to all the other server machines in order to
+             synchronize the configuration files stored in that directory. (For a list of the configuration files, see <link
+             linkend="HDRWQ85">Common Configuration Files in the /usr/afs/etc Directory</link>.)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The <emphasis role="bold">upclient</emphasis> process is the client portion of the Update Server, and like the server
+       portion its function depends on the AFS edition in use. <itemizedlist>
+           <listitem>
+             <para>It runs on every server machine that is not a binary distribution machine, referencing the binary distribution
+             machine of its system type as the source for updates to the binaries in the <emphasis
+             role="bold">/usr/afs/bin</emphasis> directory. The conventional process name to assign is <emphasis
+             role="bold">upclientbin</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you use the United States edition of AFS, another instance of the process runs on every server machine except
+             the system control machine. It references the system control machine as the source for updates to the common
+             configuration files in the <emphasis role="bold">/usr/afs/etc</emphasis> directory. The conventional process name to
+             assign is <emphasis role="bold">upclientetc</emphasis>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>In output from the <emphasis role="bold">bos status</emphasis> command, the server portion appears as
+       <computeroutput>upserver</computeroutput> and the client portions as <computeroutput>upclientbin</computeroutput> and
+       <computeroutput>upclientetc</computeroutput>, if the conventional names are assigned. In the output from the <emphasis
+       role="bold">ps</emphasis> command, the server portion appears as <computeroutput>/usr/afs/bin/upserver</computeroutput> and
+       the client portions as /usr/afs/bin/upclient.</para>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>Update Server</secondary>
+       </indexterm>
+ 
+       <para>You do not contact the Update Server directly once you have installed it. It operates automatically whenever you use
+       <emphasis role="bold">bos</emphasis> commands to change the files that it distributes.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ153">
+       <title>The vlserver Process: the Volume Location Server</title>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>as vlserver process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>vlserver</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vlserver</emphasis> process, which runs on database server machines, is the Volume Location
+       (VL) Server that automatically tracks which file server machines house each volume, making its location transparent to client
+       applications.</para>
+ 
+       <para>The process appears as <computeroutput>vlserver</computeroutput> in the <emphasis role="bold">bos status</emphasis>
+       command's output, if the conventional name is assigned. It appears in the <emphasis role="bold">ps</emphasis> command's output
+       as <computeroutput>/usr/afs/bin/vlserver</computeroutput>.</para>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>when to contact</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>contacting processes</primary>
+ 
+         <secondary>VL Server</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>summary of functions</secondary>
+       </indexterm>
+ 
+       <para>As a system administrator, you contact the VL Server when you issue any <emphasis role="bold">vos</emphasis> command
+       that changes the status of a volume (it records the status changes in the VLDB).</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ154">
+     <title>Controlling and Checking Process Status</title>
+ 
+     <para>To define the AFS server processes that run on a server machine, use the <emphasis role="bold">bos create</emphasis>
+     command to create entries for them in the local <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file. The BOS Server
+     monitors the processes listed in the <emphasis role="bold">BosConfig</emphasis> file that are marked with the
+     <computeroutput>Run</computeroutput> status flag, and automatically attempts to restart them if they fail. After creating
+     process entries, you use other commands from the <emphasis role="bold">bos</emphasis> suite to stop and start processes or
+     change the status flag as desired.</para>
+ 
+     <para>Never edit the <emphasis role="bold">BosConfig</emphasis> file directly rather than using <emphasis
+     role="bold">bos</emphasis> commands. Similarly, it is not a good practice to run server processes without listing them in the
+     <emphasis role="bold">BosConfig</emphasis> file, or to stop them using process termination commands such as the UNIX <emphasis
+     role="bold">kill</emphasis> command.</para>
+ 
+     <sect2 id="Header_176">
+       <title>The Information in the BosConfig File</title>
+ 
+       <indexterm>
+         <primary>BosConfig file</primary>
+ 
+         <secondary>information</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>BosConfig</secondary>
+       </indexterm>
+ 
+       <para>A process's entry in the <emphasis role="bold">BosConfig</emphasis> file includes the following information:
+       <itemizedlist>
+           <listitem>
+             <para>The process's name. The recommended conventional names are defined in both the <emphasis>OpenAFS Quick
+             Beginnings</emphasis> and <link linkend="HDRWQ161">Creating and Removing Processes</link>. The name of a simple process
+             usually matches the name of its binary file (for example, <emphasis role="bold">ptserver</emphasis> for the Protection
+             Server).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Its type, which is one of the following: <variablelist>
+                 <indexterm>
+                   <primary>simple-type server process</primary>
+ 
+                   <secondary>defined</secondary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>server process</primary>
+ 
+                   <secondary>simple type, defined</secondary>
+                 </indexterm>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">simple</emphasis></term>
+ 
+                   <listitem>
+                     <para>A process that runs independently of any other on the server machine. If several simple processes fail at
+                     the same time, the BOS Server can restart them in any order. All standard AFS processes except the <emphasis
+                     role="bold">fs</emphasis> process are simple.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">fs</emphasis></term>
+ 
+                   <listitem>
+                     <indexterm>
+                       <primary>fs-type server process</primary>
+ 
+                       <secondary>defined</secondary>
+                     </indexterm>
+ 
+                     <indexterm>
+                       <primary>server process</primary>
+ 
+                       <secondary>fs type, defined</secondary>
+                     </indexterm>
+ 
+                     <indexterm>
+                       <primary>File Server</primary>
+ 
+                       <secondary>as part of fs process</secondary>
+                     </indexterm>
+ 
+                     <indexterm>
+                       <primary>Volume Server</primary>
+ 
+                       <secondary>as part of fs process</secondary>
+                     </indexterm>
+ 
+                     <indexterm>
+                       <primary>Salvager</primary>
+ 
+                       <secondary>as part of fs process</secondary>
+                     </indexterm>
+ 
+                     <para>A process type reserved for the server process for which the conventional name is also <emphasis
+                     role="bold">fs</emphasis>. This process combines three components: the File Server, the Volume Server, and the
+                     Salvager.</para>
+ 
+                     <indexterm>
+                       <primary>cron-type server process</primary>
+ 
+                       <secondary>defined</secondary>
+                     </indexterm>
+ 
+                     <indexterm>
+                       <primary>server process</primary>
+ 
+                       <secondary>cron type, defined</secondary>
+                     </indexterm>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">cron</emphasis></term>
+ 
+                   <listitem>
+                     <para>A process that runs at a defined time rather than continuously. There are no standard processes of this
+                     type.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+ 
+             <indexterm>
+               <primary>status flag for process in BosConfig file</primary>
+ 
+               <secondary>Run and Not Run, meaning of</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>Run status flag in BosConfig file</primary>
+ 
+               <secondary>defined</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>NotRun status flag in BosConfig file</primary>
+ 
+               <secondary>defined</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>process</primary>
+ 
+               <secondary>status flag in BosConfig file</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Its status flag, which tells the BOS Server whether it performs the following two actions with respect to the
+             process: <itemizedlist>
+                 <listitem>
+                   <para>Start the process during BOS Server initialization</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Restart the process if it (the process) fails</para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>The two possible values are <computeroutput>Run</computeroutput> (which directs the BOS Server to perform these
+             actions) and <computeroutput>NotRun</computeroutput> (which directs the BOS Server to ignore the process). The BOS
+             Server itself never changes the setting of this flag, even if the process fails repeatedly. Also, this flag is for
+             internal use only; it does not appear in the <emphasis role="bold">bos status</emphasis> command's output.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Its command parameters, which are the commands that the BOS Server runs to start the process. <itemizedlist>
+                 <indexterm>
+                   <primary>command parameters</primary>
+ 
+                   <secondary>in BosConfig file</secondary>
+                 </indexterm>
+ 
+                 <listitem>
+                   <para>A simple processes has one: the complete pathname to its binary file</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">fs</emphasis> process has three: the complete pathnames to each of the three
+                   component processes (<emphasis role="bold">/usr/afs/bin/fileserver</emphasis>, <emphasis
+                   role="bold">/usr/afs/bin/volserver</emphasis>, and <emphasis role="bold">/usr/afs/bin/salvager</emphasis>)</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>A cron process has two: the first the complete pathname to its binary file, the second the time at which the
+                   BOS Server runs it</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>In addition to process definitions, the <emphasis role="bold">BosConfig</emphasis> file also records automatic restart
+       times for processes that have new binaries, and for all server processes including the BOS Server. See <link
+       linkend="HDRWQ171">Setting the BOS Server's Restart Times</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ155">
+       <title>How the BOS Server Uses the Information in the BosConfig File</title>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>use of BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>memory state</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>memory state of BOS Server</primary>
+       </indexterm>
+ 
+       <para>Whenever the BOS Server starts or restarts, it reads the <emphasis role="bold">BosConfig</emphasis> file to learn which
+       processes it is to start and monitor. It transfers the information into kernel memory and does not read the <emphasis
+       role="bold">BosConfig</emphasis> file again until it next restarts. This implies that the BOS Server's memory state can change
+       independently of the <emphasis role="bold">BosConfig</emphasis> file. You can, for example, stop a process but leave its
+       status flag in the <emphasis role="bold">BosConfig</emphasis> file as <computeroutput>Run</computeroutput>, or start a process
+       even though its status flag in the <emphasis role="bold">BosConfig</emphasis> file is
+       <computeroutput>NotRun</computeroutput>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ156">
+       <title>About Starting and Stopping the Database Server Processes</title>
+ 
+       <indexterm>
+         <primary>database server process</primary>
+ 
+         <secondary>about starting and stopping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Server</primary>
+ 
+         <secondary>about starting and stopping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Server</primary>
+ 
+         <secondary>about starting and stopping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>about starting and stopping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Server</primary>
+ 
+         <secondary>about starting and stopping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>starting</primary>
+ 
+         <secondary>database server process, about</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>stopping</primary>
+ 
+         <secondary>database server process, about</secondary>
+       </indexterm>
+ 
+       <para>When you start or stop a database server process (Authentication Server, Backup Server, Protection Server, or Volume
+       Location Server) for more than a short time, you must follow the instructions in the <emphasis>OpenAFS Quick
+       Beginnings</emphasis> for installing or removing a database server machine. Here is a summary of the tasks you must perform to
+       preserve correct AFS functioning. <itemizedlist>
+           <listitem>
+             <para>Start or stop all four database server processes on that machine. All AFS server processes and the Cache Manager
+             processes expect all four database server processes to be running on each machine listed in the <emphasis
+             role="bold">CellServDB</emphasis> file. There is no way to indicate in the file that a machine is running only some of
+             the database server processes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Add or remove the machine in the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on all server
+             machines and the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on all client machines.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Restart the database server processes on the other database server machines to force an election of a new Ubik
+             coordinator for each one.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ157">
+       <title>About Starting and Stopping the Update Server</title>
+ 
+       <indexterm>
+         <primary>Update Server</primary>
+ 
+         <secondary>about starting and stopping</secondary>
+       </indexterm>
+ 
+       <para>In the conventional cell configuration, one server machine of each system type acts as a binary distribution machine,
+       running the server portion of the Update Server (<emphasis role="bold">upserver</emphasis> process) to distribute the contents
+       of its <emphasis role="bold">/usr/afs/bin</emphasis> directory. The other server machines of its system type run an instance
+       of the Update Server client portion (by convention called <emphasis role="bold">upclientbin</emphasis>) that references the
+       binary distribution machine.</para>
+ 
+       <para>If you run the United States edition of AFS, it is conventional for the first server machine you install to act as the
+       system control machine, running the server portion of the Update Server (<emphasis role="bold">upserver</emphasis> process) to
+       distribute the contents of its <emphasis role="bold">/usr/afs/etc</emphasis> directory. All other server machines run an
+       instance of the Update Server client portion (by convention called <emphasis role="bold">upclientetc</emphasis>) that
+       references the system control machine.</para>
+ 
+       <note>
+         <para>If you are using the international edition of AFS, do not use the Update Server to distribute the contents of the
+         <emphasis role="bold">/usr/afs/etc</emphasis> directory (you do not run a system control machine). Ignore all references to
+         the process in this chapter.</para>
+       </note>
+ 
+       <para>It is simplest not to move binary distribution or system control responsibilities to a different machine unless you
+       completely decommission a machine that is currently serving in one of those roles. Running the Update Server usually imposes
+       very little processing load. If you must move the functionality, perform the following related tasks. <itemizedlist>
+           <listitem>
+             <para>If you replace the system control machine, you must stop the <emphasis role="bold">upclientetc</emphasis> process
+             on every other server machine and define a new one that references the new system control machine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you replace a binary distribution machine, you must stop the <emphasis role="bold">upclientbin</emphasis>
+             process on every other server machine of its system type and define a new one that references the new binary
+             distribution machine (unless you are no longer running any server machines of that system type).</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ158">
+     <title>Displaying Process Status and Information from the BosConfig File</title>
+ 
+     <para>To display the status of the AFS server processes on a server machine, issue the <emphasis role="bold">bos
+     status</emphasis> command. Adding the <emphasis role="bold">-long</emphasis> flag displays most of the information from each
+     process's entry in the <emphasis role="bold">BosConfig</emphasis> file, including its type and command parameters. It also
+     displays a warning message if the mode bits on files and subdirectories in the <emphasis role="bold">/usr/afs</emphasis>
+     directory do not match the expected values.</para>
+ 
+     <sect2 id="HDRWQ159">
+       <title>To display the status of server processes and their BosConfig entries</title>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>server process status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>displaying status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>status</primary>
+ 
+         <secondary>displaying for server process</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>entries from BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>displaying entry in BosConfig</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BosConfig file</primary>
+ 
+         <secondary>displaying entries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos status</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos status</emphasis> command. <programlisting>
+    % <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  [&lt;<replaceable>server process name</replaceable>&gt;+]  [<emphasis
+                 role="bold">-long</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">stat</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">status</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine for which to display process status.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">server process name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each process for which to display status, using the name assigned when its entry was defined with the
+                   <emphasis role="bold">bos create</emphasis> command. Omit this argument to display the status of all server
+                   processes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-long</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays, in addition to status, information from the process's entry in the <emphasis
+                   role="bold">BosConfig</emphasis> file: its type, its status flag, its command parameters, the associated notifier
+                   program, and so on.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output includes an entry for each process and uses one of the following strings to indicate the process's status:
+       <itemizedlist>
+           <listitem>
+             <para><computeroutput>currently running normally</computeroutput> indicates that the process is running and its status
+             flag in the <emphasis role="bold">BosConfig</emphasis> file is <computeroutput>Run</computeroutput>. For cron entries,
+             this message indicates that the command is still scheduled to run, not necessarily that it is actually running when the
+             <emphasis role="bold">bos status</emphasis> command was issued.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>temporarily enabled</computeroutput> indicates that the process is running but that its status
+             flag in the <emphasis role="bold">BosConfig</emphasis> file is <computeroutput>NotRun</computeroutput>. The most common
+             reason is that a system administrator has used the <emphasis role="bold">bos startup</emphasis> command to start the
+             process.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>temporarily disabled</computeroutput> indicates that the process is not running even though its
+             status flag in the <emphasis role="bold">BosConfig</emphasis> file is <computeroutput>Run</computeroutput>. The most
+             common reasons are either that a system administrator has used the <emphasis role="bold">bos shutdown</emphasis> command
+             to stop the process or that the BOS Server ceased trying to restart the process after numerous failed attempts. In the
+             latter case, a supplementary message appears: <computeroutput>stopped for too many errors</computeroutput>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>disabled indicates that the process is not running and that its status flag in the <emphasis
+             role="bold">BosConfig</emphasis> file is <computeroutput>NotRun</computeroutput>. The BOS Server is not monitoring the
+             process. Only a system administrator can set the flag this way; the BOS Server never does.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The output for the <emphasis role="bold">fs</emphasis> process always includes a message marked
+       <computeroutput>Auxiliary status</computeroutput>, which can be one of the following: <itemizedlist>
+           <listitem>
+             <para><computeroutput>file server running</computeroutput> indicates that the File Server and Volume Server components
+             of the File Server process are running normally.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>salvaging file system</computeroutput> indicates that the Salvager is running, which usually
+             implies that the File Server and Volume Server are temporarily disabled. The BOS Server restarts them as soon as the
+             Salvager is finished.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The output for a cron process also includes an <computeroutput>Auxiliary status</computeroutput> message to report when
+       the command is scheduled to run next; see the example that follows.</para>
+ 
+       <para>The output for any process can include the supplementary message <computeroutput>has core file</computeroutput> to
+       indicate that at some point the process failed and generated a core file in the <emphasis role="bold">/usr/afs/logs</emphasis>
+       directory. In most cases, the BOS Server is able to restart the process and it is running.</para>
+ 
+       <para>The following example includes a user-defined cron entry called <emphasis role="bold">backupusers</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos status fs3.abc.com</emphasis>
+    Instance kaserver, currently running normally.
+    Instance ptserver, currently running normally.
+    Instance vlserver, has core file, currently running normally.
+    Instance buserver, currently running normally.
+    Instance fs, currently running normally.
+        Auxiliary status is: file server running.
+    Instance upserver, currently running normally.
+    Instance runntp, currently running normally.
+    Instance backupusers, currently running normally.
+        Auxiliary status is: run next at Mon Jun 7 02:00:00 1999.
+ </programlisting>
+ 
+       <para>If you include the <emphasis role="bold">-long</emphasis> flag to the <emphasis role="bold">bos status</emphasis>
+       command, a process's entry in the output includes the following additional information from the <emphasis
+       role="bold">BosConfig</emphasis> file: <itemizedlist>
+           <listitem>
+             <para>The process's type (<computeroutput>simple</computeroutput>, <computeroutput>fs</computeroutput>, or
+             <computeroutput>cron</computeroutput>).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The day and time the process last started or restarted.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The number of <computeroutput>proc starts</computeroutput>, which is how many times the BOS Server has started or
+             restarted the process since it started itself.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <computeroutput>Last exit</computeroutput> time when the process (or one of the component processes in the
+             <emphasis role="bold">fs</emphasis> process) last terminated. This line does not appear if the process has not
+             terminated since the BOS Server started.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <computeroutput>Last error exit</computeroutput> time when the process (or one of the component processes in
+             the <emphasis role="bold">fs</emphasis> process) last failed due to an error. A further explanation such as
+             <computeroutput>due to shutdown request</computeroutput> sometimes appears. This line does not appear if the process has
+             not failed since the BOS Server started.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Each command that the BOS Server invokes to start the process, as specified by the <emphasis
+             role="bold">-cmd</emphasis> argument to the <emphasis role="bold">bos create</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The pathname of the notifier program that the BOS Server invokes when the process terminates (if any), as
+             specified by the <emphasis role="bold">-notifier</emphasis> argument to the <emphasis role="bold">bos create</emphasis>
+             command.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>In addition, if the BOS Server has found that the mode bits on certain files and directories under <emphasis
+       role="bold">/usr/afs</emphasis> deviate from what it expects, it prints the following warning message:</para>
+ 
+       <programlisting>
+    Bosserver process reports inappropriate access on server directories
+ </programlisting>
+ 
+       <para>The expected protections for the directories and files in the <emphasis role="bold">/usr/afs</emphasis> directory are as
+       follows. A question mark indicates that the BOS Server does not check the mode bit. See the <emphasis>OpenAFS Quick
+       Beginnings</emphasis> for more information about setting the protections on these files and directories.</para>
+ 
+       <informaltable frame="none">
+         <tgroup cols="2">
+           <tbody>
+             <row>
+               <entry><emphasis role="bold">/usr/afs</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr?xr-x</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/backup</emphasis></entry>
+ 
+               <entry><computeroutput>drwx???---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/bin</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr?xr-x</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/db</emphasis></entry>
+ 
+               <entry><computeroutput>drwx???---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/etc</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr?xr-x</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/etc/KeyFile</emphasis></entry>
+ 
+               <entry><computeroutput>-rw????---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/etc/UserList</emphasis></entry>
+ 
+               <entry><computeroutput>-rw?????--</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/local</emphasis></entry>
+ 
+               <entry><computeroutput>drwx???---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/logs</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr?xr-x</computeroutput></entry>
+             </row>
+           </tbody>
+         </tgroup>
+       </informaltable>
+ 
+       <para>The following illustrates the extended output for the <emphasis role="bold">fs</emphasis> process running on the machine
+       <emphasis role="bold">fs3.abc.com</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos status fs3.abc.com fs -long</emphasis>
+    Instance fs, (type is fs), currently running normally.
+        Auxiliary status is file server running
+    Process last started at Mon May 3 8:29:19 1999 (3 proc starts)
+    Last exit at Mon May 3 8:29:19 1999
+    Last error exit at Mon May 3 8:29:19 1999, due to shutdown request
+    Command 1 is '/usr/afs/bin/fileserver'
+    Command 2 is '/usr/afs/bin/volserver'
+    Command 3 is '/usr/afs/bin/salvager'
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ161">
+     <title>Creating and Removing Processes</title>
+ 
+     <indexterm>
+       <primary>initializing</primary>
+ 
+       <secondary>server process</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>server process</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>defining</primary>
+ 
+       <secondary>server process in BosConfig file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>server process</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>starting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>stopping permanently</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>removing from BosConfig file</secondary>
+     </indexterm>
+ 
+     <para>To start a new AFS server process on a server machine, issue the <emphasis role="bold">bos create</emphasis> command,
+     which creates an entry in the <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file, sets the process's status flag to
+     <computeroutput>Run</computeroutput> both in the file and in the BOS Server's memory, and starts it running immediately. The
+     binary file for the new process must already be installed, by convention in the <emphasis role="bold">/usr/afs/bin</emphasis>
+     directory (see <link linkend="HDRWQ111">Installing New Binaries</link>).</para>
+ 
+     <para>To stop a process permanently, first issue the <emphasis role="bold">bos stop</emphasis> command, which changes the
+     process's status flag to <computeroutput>NotRun</computeroutput> in both the <emphasis role="bold">BosConfig</emphasis> file and
+     the BOS Server's memory; it is marked as <computeroutput>disabled</computeroutput> in the output from the <emphasis
+     role="bold">bos status</emphasis> command. If desired, issue the <emphasis role="bold">bos delete</emphasis> command to remove
+     the process's entry from the <emphasis role="bold">BosConfig</emphasis> file; the process no longer appears in the <emphasis
+     role="bold">bos status</emphasis> command's output.</para>
+ 
+     <note>
+       <para>If you are starting or stopping a database server process in the manner described in this section, follow the complete
+       instructions in the <emphasis>OpenAFS Quick Beginnings</emphasis> for creating or removing a database server machine. If you
+       run one database server process on a given machine, you must run them all; for more information, see <link
+       linkend="HDRWQ156">About Starting and Stopping the Database Server Processes</link>. Similarly, if you are stopping the
+       <emphasis role="bold">upserver</emphasis> process on the system control machine or a binary distribution machine, you must
+       complete the additional tasks described in <link linkend="HDRWQ157">About Starting and Stopping the Update
+       Server</link>.</para>
+     </note>
+ 
+     <sect2 id="HDRWQ162">
+       <title>To create and start a new process</title>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>creating and starting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>defining in BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>simple server process</primary>
+ 
+         <secondary>defining in BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cron server process</primary>
+ 
+         <secondary>defining in BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs server process</primary>
+ 
+         <secondary>defining in BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BosConfig file</primary>
+ 
+         <secondary>creating server process entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>create</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos create</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Verify that the process's binaries are installed in the <emphasis
+           role="bold">/usr/afs/bin</emphasis> directory on this machine. If necessary, login at the console or telnet to the machine
+           and list the contents of the <emphasis role="bold">/usr/afs/bin</emphasis> directory.</para>
+ 
+           <para>If the binaries are not present, install them on the binary distribution machine of the appropriate system type, and
+           wait for the Update Server to copy them to this machine. For instructions, see <link linkend="HDRWQ111">Installing New
+           Binaries</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">ls /usr/afs/bin</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ163" />Issue the <emphasis role="bold">bos create</emphasis> command to create an entry in the
+           <emphasis role="bold">BosConfig</emphasis> file and start the process. <programlisting>
+    % <emphasis role="bold">bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>server process name</replaceable>&gt;   \
+              &lt;<replaceable>server type</replaceable>&gt; &lt;<replaceable>command lines</replaceable>&gt;+ [ <emphasis
+                 role="bold">-notifier</emphasis> &lt;<replaceable>Notifier program</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">cr</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">create</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine on which to create the process.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">server process name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the process to create and start. For simple processes, the conventional value is the name of the
+                   process's binary file. It is best to use the same name on every server machine that runs the process. The
+                   following is a list of the conventional names for simple and fs-type processes (there are no standard cron
+                   processes). <itemizedlist>
+                       <listitem>
+                         <para><emphasis role="bold">buserver</emphasis> for the Backup Server</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">fs</emphasis> for the process that combines the File Server, Volume Server, and
+                         Salvager</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">kaserver</emphasis> for the Authentication Server</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">ptserver</emphasis> for the Protection Server</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">runntp</emphasis> for the controller process for the Network Time Protocol
+                         Daemon</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">upclientbin</emphasis> for the client portion of the Update Server that
+                         references the binary distribution machine of this machine's system type</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">upclientetc</emphasis> for the client portion of the Update Server that
+                         references the system control machine</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">vlserver</emphasis> for the Volume Location (VL) Server</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">server type</emphasis></term>
+ 
+                 <listitem>
+                   <para>Defines the process's type. Choose one of the following values: <itemizedlist>
+                       <listitem>
+                         <para><emphasis role="bold">cron</emphasis> for a cron process</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">fs</emphasis> for the process named <emphasis role="bold">fs</emphasis></para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">simple</emphasis> for all other processes listed as acceptable values for the
+                         server process name argument</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">command lines</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each command the BOS Server runs to start the process. Specify no more than six commands (which
+                   can include the command's options, in which case the entire string is surrounded by double quotes); any additional
+                   commands are ignored.</para>
+ 
+                   <para>For a simple process, provide the complete pathname of the process's binary file on the local disk (for
+                   example, <emphasis role="bold">/usr/afs/bin/ptserver</emphasis> for the Protection Server). If including any of
+                   the initialization command's options, surround the entire command in double quotes (<emphasis role="bold">"
+                   "</emphasis>). The <emphasis role="bold">upclient</emphasis> process has a required argument, and the commands for
+                   all other processes take optional arguments.</para>
+ 
+                   <indexterm>
+                     <primary>simple process</primary>
+ 
+                     <secondary>creating with bos create command</secondary>
+                   </indexterm>
+ 
+                   <para>For the <emphasis role="bold">fs</emphasis> process, provide the complete pathname of the local disk binary
+                   file for each of the component processes: <emphasis role="bold">fileserver</emphasis>, <emphasis
+                   role="bold">volserver</emphasis>, and <emphasis role="bold">salvager</emphasis>, in that order. The standard
+                   binary directory is <emphasis role="bold">/usr/afs/bin</emphasis>. If including any of an initialization command's
+                   options, surround the entire command in double quotes (<emphasis role="bold">" "</emphasis>).</para>
+ 
+                   <indexterm>
+                     <primary>fs process</primary>
+ 
+                     <secondary>creating</secondary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>cron process</primary>
+ 
+                     <secondary>creating with bos create command</secondary>
+                   </indexterm>
+ 
+                   <para>For a <emphasis role="bold">cron</emphasis> process, provide two parameters: <itemizedlist>
+                       <listitem>
+                         <para>The complete local disk pathname of either an executable file or a command from one of the AFS suites
+                         (complete with all of the necessary arguments). Surround this parameter with double quotes (<emphasis
+                         role="bold">" "</emphasis>) if it contains spaces.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>A specification of when the BOS Server executes the file or command indicated by the first parameter.
+                         There are three acceptable values: <itemizedlist>
+                             <listitem>
+                               <para>The string <emphasis role="bold">now</emphasis>, which directs the BOS Server to execute the
+                               file or command immediately and only once. It is usually simpler to issue the command directly or
+                               issue the <emphasis role="bold">bos exec</emphasis> command.</para>
+                             </listitem>
+ 
+                             <listitem>
+                               <para>A time of day. The BOS Server executes the file or command daily at the indicated time. Separate
+                               the hours and minutes with a colon (<emphasis>hh</emphasis>:<emphasis>MM</emphasis>), and use either
+                               24-hour format, or a value in the range from <emphasis role="bold">1:00</emphasis> through <emphasis
+                               role="bold">12:59</emphasis> with the addition of <emphasis role="bold">am</emphasis> or <emphasis
+                               role="bold">pm</emphasis>. For example, both <emphasis role="bold">14:30</emphasis> and <emphasis
+                               role="bold">"2:30 pm"</emphasis> indicate 2:30 in the afternoon. Surround this parameter with double
+                               quotes (<emphasis role="bold">" "</emphasis>) if it contains a space.</para>
+                             </listitem>
+ 
+                             <listitem>
+                               <para>A day of the week and time of day, separated by a space and surrounded with double quotes
+                               (<emphasis role="bold">" "</emphasis>). The BOS Server executes the file or command weekly at the
+                               indicated day and time. For the day, provide either the whole name or the first three letters, all in
+                               lowercase letters (<emphasis role="bold">sunday</emphasis> or <emphasis role="bold">sun</emphasis>,
+                               <emphasis role="bold">thursday</emphasis> or <emphasis role="bold">thu</emphasis>, and so on). For the
+                               time, use the same format as when specifying the time alone.</para>
+                             </listitem>
+                           </itemizedlist></para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-notifier</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of a program that the BOS Server runs when the process terminates. For more
+                   information on notifier programs, see the <emphasis role="bold">bos create</emphasis> command reference page in
+                   the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example defines and starts the Protection Server on the machine <emphasis
+       role="bold">db2.abc.com</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos create db2.abc.com ptserver simple /usr/afs/bin/ptserver</emphasis>
+ </programlisting>
+ 
+       <para>The following example defines and starts the <emphasis role="bold">fs</emphasis> process on the machine <emphasis
+       role="bold">fs6.abc.com</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos create fs6.abc.com fs fs /usr/afs/bin/fileserver</emphasis>   \
+         <emphasis role="bold">/usr/afs/bin/volserver /usr/afs/bin/salvager</emphasis>
+ </programlisting>
+ 
+       <para>The following example defines and starts a cron process called <emphasis role="bold">backupuser</emphasis> process on
+       the machine <emphasis role="bold">fs3.abc.com</emphasis>, scheduling it to run each day at 3:00 a.m.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos create fs3.abc.com backupuser cron  "/usr/afs/bin/vos backupsys -prefix user -local" 3:00</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_184">
+       <title>To stop a process and remove it from the BosConfig file</title>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>server process from BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BosConfig file</primary>
+ 
+         <secondary>removing server process entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>stopping</primary>
+ 
+         <secondary>server process</secondary>
+ 
+         <tertiary>permanently</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>removing from BosConfig file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>stopping permanently</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>delete</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos delete</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIPROC-STOP" />Issue the <emphasis role="bold">bos stop</emphasis> command to change each process's
+           status flag in the <emphasis role="bold">BosConfig</emphasis> file to <computeroutput>NotRun</computeroutput> and to stop
+           it. You must issue this command even for cron processes that you wish to remove from the <emphasis
+           role="bold">BosConfig</emphasis> file, even though they do not run continuously. For a detailed description of this
+           command, see <link linkend="HDRWQ165">To stop a process by changing its status to
+           <computeroutput>NotRun</computeroutput></link>. <programlisting>
+    % <emphasis role="bold">bos stop</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>server process name</replaceable>&gt;+ [<emphasis
+                 role="bold">-wait</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIPROC-DEL" />Issue the <emphasis role="bold">bos delete</emphasis> command to remove each process from
+           the <emphasis role="bold">BosConfig</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos delete</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>server process name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">d</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">delete</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which to remove processes from the <emphasis
+                   role="bold">BosConfig</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">server process name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each process entry to remove from the <emphasis role="bold">BosConfig</emphasis> file. Provide the
+                   same names as in Step <link linkend="LIPROC-STOP">2</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ164">
+     <title>Stopping and Starting Processes Permanently</title>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>server process</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>starting up</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>stopping permanently</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>stopping</primary>
+ 
+       <secondary>server process</secondary>
+ 
+       <tertiary>permanently</tertiary>
+     </indexterm>
+ 
+     <para>To stop a process so that the BOS Server no longer attempts to monitor it, issue the <emphasis role="bold">bos
+     stop</emphasis> command. The process's status flag is set to <computeroutput>NotRun</computeroutput> in both the BOS Server's
+     memory and in the <emphasis role="bold">BosConfig</emphasis> file. The process does not run again until you issue the <emphasis
+     role="bold">bos start</emphasis> command, which sets its status flag back to <computeroutput>Run</computeroutput> in both the
+     BOS Server's memory and in the <emphasis role="bold">BosConfig</emphasis> file. (You can also use the <emphasis role="bold">bos
+     startup</emphasis> command to start the process again without changing its status flag in the <emphasis
+     role="bold">BosConfig</emphasis> file; see <link linkend="HDRWQ167">Stopping and Starting Processes Temporarily</link>.)</para>
+ 
+     <para>There is no entry for the BOS Server in the <emphasis role="bold">BosConfig</emphasis> file, so the <emphasis
+     role="bold">bos stop</emphasis> and <emphasis role="bold">bos start</emphasis> commands do not control it. To stop and
+     immediately restart the BOS Server along with all other processes, use the <emphasis role="bold">-bosserver</emphasis> flag to
+     the <emphasis role="bold">bos restart</emphasis> command as described in <link linkend="HDRWQ170">Stopping and Immediately
+     Restarting Processes</link>.</para>
+ 
+     <note>
+       <para>If you are starting or stopping a database server process in the manner described in this section, follow the complete
+       instructions in the <emphasis>OpenAFS Quick Beginnings</emphasis> for creating or removing a database server machine. If you
+       run one database server process on a given machine, you must run them all; for more information, see <link
+       linkend="HDRWQ156">About Starting and Stopping the Database Server Processes</link>. Similarly, if you are stopping the
+       <emphasis role="bold">upserver</emphasis> process on the system control machine or a binary distribution machine, you must
+       complete the additional tasks described in <link linkend="HDRWQ157">About Starting and Stopping the Update
+       Server</link>.</para>
+     </note>
+ 
+     <sect2 id="HDRWQ165">
+       <title>To stop a process by changing its status to NotRun</title>
+ 
+       <indexterm>
+         <primary>Run status flag in BosConfig file</primary>
+ 
+         <secondary>changing to NotRun</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>status flag in BosConfig file</primary>
+ 
+         <secondary>changing Run to NotRun</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BosConfig file</primary>
+ 
+         <secondary>changing status flag from Run to NotRun</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>stopping permanently</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>stop</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos stop</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos stop</emphasis> command to stop each process and set its status flag to
+           <computeroutput>NotRun</computeroutput> in the <emphasis role="bold">BosConfig</emphasis> file and the BOS Server's
+           memory. <programlisting>
+    % <emphasis role="bold">bos stop</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>server process name</replaceable>&gt;+ [<emphasis
+                 role="bold">-wait</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sto</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">stop</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which to stop the process.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">server process name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each process to stop, using the name assigned when its entry was defined with the <emphasis
+                   role="bold">bos create</emphasis> command.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-wait</emphasis></term>
+ 
+                 <listitem>
+                   <para>Delays the return of the command shell prompt until all specified processes have stopped. If you omit the
+                   flag, the prompt returns almost immediately, even if all processes are not yet stopped.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ166">
+       <title>To start processes by changing their status flags to Run</title>
+ 
+       <indexterm>
+         <primary>NotRun status flag in BosConfig file</primary>
+ 
+         <secondary>changing to Run</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>status flag in BosConfig file</primary>
+ 
+         <secondary>changing NotRun to Run</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BosConfig file</primary>
+ 
+         <secondary>changing status flag from NotRun to Run</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos start</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>start</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIPROC-START" />Issue the <emphasis role="bold">bos start</emphasis> command to change each process's
+           status flag to <computeroutput>Run</computeroutput> in both the <emphasis role="bold">BosConfig</emphasis> file and the
+           BOS Server's memory and to start it. <programlisting>
+    %  <emphasis role="bold">bos start</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>server process name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">start</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which to start running each process.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">server process name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each process to start on machine name. Use the name assigned to the process at creation.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ167">
+     <title>Stopping and Starting Processes Temporarily</title>
+ 
+     <para>It is sometimes necessary to halt a process temporarily (for example, to make slight configuration changes or to perform
+     maintenance). The commands described in this section change a process's status in the BOS Server's memory only; the effect is
+     immediate and lasts until you change the memory state again (or until the BOS Server restarts, at which time it starts the
+     process according to its entry in the <emphasis role="bold">BosConfig</emphasis> file).</para>
+ 
+     <para>To stop a process temporarily by changing its status flag in BOS Server memory to <computeroutput>NotRun</computeroutput>,
+     use the <emphasis role="bold">bos shutdown</emphasis> command. To restart a stopped process by changing its status flag in the
+     BOS Server's memory to <computeroutput>Run</computeroutput>, use the <emphasis role="bold">bos startup</emphasis> command. The
+     process starts regardless of its status flag in the <emphasis role="bold">BosConfig</emphasis> file. You can also use the
+     <emphasis role="bold">bos startup</emphasis> command to start all processes marked with status flag
+     <computeroutput>Run</computeroutput> in the <emphasis role="bold">BosConfig</emphasis> file, as described in the following
+     instructions.</para>
+ 
+     <para>Because the <emphasis role="bold">bos startup</emphasis> command starts a process without changing it status flag in the
+     <emphasis role="bold">BosConfig</emphasis> file, it is useful for testing a server process without enabling it permanently. To
+     stop and start processes by changing their status flags in the <emphasis role="bold">BosConfig</emphasis> file, see <link
+     linkend="HDRWQ164">Stopping and Starting Processes Permanently</link>; to stop and immediately restart a process, see <link
+     linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+ 
+     <note>
+       <para>Do not temporarily stop a database server process on all machines at once. Doing so makes the database completely
+       unavailable.</para>
+     </note>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>bos shutdown</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>shutdown</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ168">
+       <title>To stop processes temporarily</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ169" />Issue the <emphasis role="bold">bos shutdown</emphasis> command to stop each process by
+           changing its status flag in the BOS Server's memory to <computeroutput>NotRun</computeroutput>. <programlisting>
+    % <emphasis role="bold">bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>instances</replaceable>&gt;+] [<emphasis
+                 role="bold">-wait</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">shutdown</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which to stop processes temporarily.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">instances</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each process to stop temporarily. Use the name assigned to the process at creation.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-wait</emphasis></term>
+ 
+                 <listitem>
+                   <para>Delays the return of the command shell prompt until all specified processes have actually stopped. If you
+                   omit the flag, the prompt returns almost immediately, even if all processes are not yet stopped.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos startup</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>startup</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_190">
+       <title>To start all stopped processes that have status flag Run in the BosConfig file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos startup</emphasis> command to start each process on a machine that has status
+           flag <computeroutput>Run</computeroutput> in the <emphasis role="bold">BosConfig</emphasis> file by changing its status
+           flag in the BOS Server's memory from <computeroutput>NotRun</computeroutput> to <computeroutput>Run</computeroutput>.
+           <programlisting>
+    % <emphasis role="bold">bos startup</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">startup</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which you wish to start all processes that have status flag
+                   <computeroutput>Run</computeroutput> in the <emphasis role="bold">BosConfig</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_191">
+       <title>To start specific processes</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos startup</emphasis> command to start specific processes by changing their status
+           flags in the BOS Server's memory to <computeroutput>Run</computeroutput> without changing their status flags in the
+           <emphasis role="bold">BosConfig</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos startup</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>instances</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">startup</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the server machine on which to start processes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">instances</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each process to start. Use the name assigned to the process at creation.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ170">
+     <title>Stopping and Immediately Restarting Processes</title>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>restarting immediately after stopping</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>stopping</primary>
+ 
+       <secondary>server process and immediately restarting</secondary>
+     </indexterm>
+ 
+     <para>Although by default the BOS Server checks each day for new installed binary files and restarts the associated processes,
+     it is sometimes desirable to stop and restart processes immediately. The <emphasis role="bold">bos restart</emphasis> command
+     provides this functionality, starting a completely new instance of each affected process: <itemizedlist>
+         <listitem>
+           <para>To stop and restart the BOS Server, which then restarts all processes marked with the
+           <computeroutput>Run</computeroutput> status flag in the <emphasis role="bold">BosConfig</emphasis> file, include the
+           <emphasis role="bold">-bosserver</emphasis> flag.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To stop and restart all processes marked with the <computeroutput>Run</computeroutput> status flag in the <emphasis
+           role="bold">BosConfig</emphasis> file, include the <emphasis role="bold">-all</emphasis> flag. The BOS Server does not
+           restart</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To stop and restart specific processes regardless of the setting of their status flags in the <emphasis
+           role="bold">BosConfig</emphasis> file, specify the name of each process to restart.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Restarting processes causes a service outage. It is usually best to schedule restarts for periods of low usage. The BOS
+     Server automatically restarts all processes once a week, to reduce the potential for the <emphasis>core leaks</emphasis> that
+     can develop as any process runs for an extended time; see <link linkend="HDRWQ171">Setting the BOS Server's Restart
+     Times</link>.</para>
+ 
+     <indexterm>
+       <primary>outages</primary>
+ 
+       <secondary>due to server process restart</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>system outages</primary>
+ 
+       <secondary>due to server process restart</secondary>
+     </indexterm>
+ 
+     <para><indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>restarting by restarting BOS Server</secondary>
+       </indexterm> <indexterm>
+         <primary>restarting</primary>
+ 
+         <secondary>server process</secondary>
+ 
+         <tertiary>including BOS Server</tertiary>
+       </indexterm> <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>restart</secondary>
+ 
+         <tertiary>with -bosserver flag</tertiary>
+       </indexterm> <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>restart</secondary>
+ 
+         <tertiary>including BOS Server</tertiary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos restart</secondary>
+ 
+         <tertiary>including BOS Server</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_193">
+       <title>To stop and restart all processes including the BOS Server</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command with the <emphasis role="bold">-bosserver</emphasis>
+           flag to stop and restart the BOS Server, which restarts every process marked with status flag
+           <computeroutput>Run</computeroutput> in the <emphasis role="bold">BosConfig</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  <emphasis role="bold">-bosserver</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which to restart all processes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-bosserver</emphasis></term>
+ 
+                 <listitem>
+                   <para>Stops the BOS Server and all processes running on the machine. A new BOS Server instance starts; it then
+                   starts new instances of all processes marked with status flag <computeroutput>Run</computeroutput> in the
+                   <emphasis role="bold">BosConfig</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>restart</secondary>
+ 
+         <tertiary>excluding BOS Server</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos restart</secondary>
+ 
+         <tertiary>excluding BOS Server</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>restarting</secondary>
+ 
+         <tertiary>except BOS Server</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restarting</primary>
+ 
+         <secondary>server process</secondary>
+ 
+         <tertiary>except BOS Server</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_194">
+       <title>To stop and immediately restart all processes except the BOS Server</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command with the <emphasis role="bold">-all</emphasis> flag
+           to stop and immediately restart every process marked with status flag <computeroutput>Run</computeroutput> in the
+           <emphasis role="bold">BosConfig</emphasis> file. The BOS Server does not restart. <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-all</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine on which to stop and restart processes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-all</emphasis></term>
+ 
+                 <listitem>
+                   <para>Stops and immediately restarts all processes marked with status flag <computeroutput>Run</computeroutput> in
+                   the <emphasis role="bold">BosConfig</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>restart</secondary>
+ 
+         <tertiary>selected processes</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos restart</secondary>
+ 
+         <tertiary>selected processes</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restarting</primary>
+ 
+         <secondary>server processes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server process</primary>
+ 
+         <secondary>restarting specific processes</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_195">
+       <title>To stop and immediately restart specific processes</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command to stop and immediately restart one or more specified
+           processes, regardless of their status flag setting in the <emphasis role="bold">BosConfig</emphasis> file.
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>instances</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the server machine on which to restart the specified processes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">instances</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each process to stop and immediately restart. Use the name assigned to the process at
+                   creation.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ171">
+     <title>Setting the BOS Server's Restart Times</title>
+ 
+     <indexterm>
+       <primary>core leak</primary>
+ 
+       <secondary>preventing with scheduled restarts</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>preventing</primary>
+ 
+       <secondary>core leaks, with scheduled BOS Server restarts</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>BOS Server</primary>
+ 
+       <secondary>restart times, displaying and setting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>automatic</primary>
+ 
+       <secondary>process restarts by BOS Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>weekly restart of BOS Server (automatic)</primary>
+ 
+       <secondary>displaying and setting time</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restart time for BOS Server (automatic)</primary>
+ 
+       <secondary>displaying and setting time</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restart times for BOS Server</primary>
+ 
+       <secondary>displaying and setting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>daily restart for new binaries</primary>
+ 
+       <secondary>displaying and setting time</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restart times for BOS Server</primary>
+ 
+       <secondary>setting</secondary>
+     </indexterm>
+ 
+     <para>The BOS Server by default restarts once a week, and the new instance restarts all processes marked with status flag
+     <computeroutput>Run</computeroutput> in the local <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file (this is
+     equivalent to issuing the <emphasis role="bold">bos restart</emphasis> command with the <emphasis
+     role="bold">-bosserver</emphasis> flag). The default restart time is Sunday at 4:00 a.m. The weekly restart is designed to
+     minimize core leaks, which can develop as a process continues to allocate virtual memory but does not free it again. When the
+     memory is completely exhausted, the machine can no longer function correctly.</para>
+ 
+     <para>The BOS Server also by default checks once a day for any newly installed binary files. If it finds that the modification
+     time stamp on a process's binary file in the <emphasis role="bold">/usr/afs/bin</emphasis> directory is more recent than the
+     time at which the process last started, it restarts the process so that a new instance starts using the new binary file. The
+     default binary-checking time is 5:00 a.m.</para>
+ 
+     <para>Because restarts can cause outages during which the file system is inaccessible, the default times for restarts are in the
+     early morning when usage is likely to be lowest. Restarting a database server process on any database server machine usually
+     makes the entire system unavailable to everyone for a brief time, whereas restarting other types of processes inconveniences
+     only users interacting with that process on that machine. The longest outages typically result from restarting the <emphasis
+     role="bold">fs</emphasis> process, because the File Server must reattach all volumes.</para>
+ 
+     <indexterm>
+       <primary>outages</primary>
+ 
+       <secondary>due to automatic server restart</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>system outages</primary>
+ 
+       <secondary>due to automatic server restart</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>BosConfig file</primary>
+ 
+       <secondary>restart times defined</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">BosConfig</emphasis> file on each file server machine records the two restart times. To display
+     the current setting, issue the <emphasis role="bold">bos getrestart</emphasis> command. To reset a time, use the <emphasis
+     role="bold">bos setrestart</emphasis> command.</para>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>getrestart</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>bos getrestart</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>BOS Server's automatic restart times</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_197">
+       <title>To display the BOS Server restart times</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos getrestart</emphasis> command to display the automatic restart times.
+           <programlisting>
+    % <emphasis role="bold">bos getrestart</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">getr</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">getrestart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine for which to display the restart times.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>setrestart</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos setrestart</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>BOS Server's automatic restart times</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ172">
+       <title>To set the general or binary restart time</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos setrestart</emphasis> command with the <emphasis role="bold">-general</emphasis>
+           flag to set the general restart time or the <emphasis role="bold">-newbinary</emphasis> flag to set the binary restart
+           time. The command accepts only one of the flags at a time. <programlisting>
+    % <emphasis role="bold">bos setrestart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; "&lt;<replaceable>time to restart server</replaceable>&gt;" [<emphasis
+                 role="bold">-general</emphasis>]  [<emphasis role="bold">-newbinary</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">setr</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setrestart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">time to restart server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets when the BOS Server restarts itself (if combined with the <emphasis role="bold">-general</emphasis>
+                   flag) or any process with a new binary file (if combined with the <emphasis role="bold">-newbinary</emphasis>
+                   flag). Provide one of the following types of values: <itemizedlist>
+                       <listitem>
+                         <para>The string <emphasis role="bold">never</emphasis>, which directs the BOS Server never to perform the
+                         indicated type of restart.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>A time of day (the conventional type of value for the binary restart time). Separate the hours and
+                         minutes with a colon (<emphasis>hh</emphasis>:<emphasis>MM</emphasis>), and use either 24-hour format, or a
+                         value in the range from <emphasis role="bold">1:00</emphasis> through <emphasis role="bold">12:59</emphasis>
+                         with the addition of <emphasis role="bold">am</emphasis> or <emphasis role="bold">pm</emphasis>. For
+                         example, both <emphasis role="bold">14:30</emphasis> and <emphasis role="bold">"2:30 pm"</emphasis> indicate
+                         2:30 in the afternoon. Surround this parameter with double quotes (<emphasis role="bold">" "</emphasis>) if
+                         it contains a space.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>A day of the week and time of day, separated by a space and surrounded with double quotes (<emphasis
+                         role="bold">" "</emphasis>). This is the conventional type of value for the general restart. For the day,
+                         provide either the whole name or the first three letters, all in lowercase letters (<emphasis
+                         role="bold">sunday</emphasis> or <emphasis role="bold">sun</emphasis>, <emphasis
+                         role="bold">thursday</emphasis> or <emphasis role="bold">thu</emphasis>, and so on). For the time, use the
+                         same format as when specifying the time alone.</para>
+                       </listitem>
+                     </itemizedlist></para>
+ 
+                   <para>If desired, precede a time or day and time definition with the string <emphasis role="bold">every</emphasis>
+                   or <emphasis role="bold">at</emphasis>. These words do not change the meaning, but possibly make the output of the
+                   <emphasis role="bold">bos getrestart</emphasis> command easier to understand.</para>
+ 
+                   <note>
+                     <para>If the specified time is within one hour of the current time, the BOS Server does not perform the restart
+                     until the next eligible time (the next day for a time or next week for a day and time).</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-general</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the general restart time when the BOS Server restarts itself.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-newbinary</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the restart time for processes with new binary files.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ173">
+     <title>Displaying Server Process Log Files</title>
+ 
+     <indexterm>
+       <primary>file server machine</primary>
+ 
+       <secondary>displaying log files</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>displaying log files</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>log files</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>log files for server processes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>displaying log files</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>FileLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>SalvageLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>VLLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>VolserLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>BackupLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>BosLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AuthLog file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Authentication Server</primary>
+ 
+       <secondary>displaying log file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup Server</primary>
+ 
+       <secondary>displaying log file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>BOS Server</primary>
+ 
+       <secondary>displaying log file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>File Server</primary>
+ 
+       <secondary>displaying log file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Salvager</primary>
+ 
+       <secondary>displaying log file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Volume Server</primary>
+ 
+       <secondary>displaying log file</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">/usr/afs/logs</emphasis> directory on each file server machine contains log files that detail
+     interesting events that occur during normal operation of some AFS server processes. The self-explanatory information in the log
+     files can help you evaluate process failures and other problems. To display a log file remotely, issue the <emphasis
+     role="bold">bos getlog</emphasis> command. You can also establish a connection to the server machine and use a text editor or
+     other file display program (such as the <emphasis role="bold">cat</emphasis> command).</para>
+ 
+     <note>
+       <para>Log files can grow unmanageably large if you do not periodically shutdown and restart the database server processes (for
+       example, if you disable the general restart time). In this case it is a good policy periodically to issue the UNIX <emphasis
+       role="bold">rm</emphasis> command to delete the current log file. The server process automatically creates a new one as
+       needed.</para>
+     </note>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>getlog</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>bos getlog</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_200">
+       <title>To examine a server process log file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos getlog</emphasis> command to display a log file. <programlisting>
+    % <emphasis role="bold">bos getlog</emphasis>  &lt;<replaceable>machine name</replaceable>&gt;  &lt;<replaceable>log file to examine</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">getl</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">getlog</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the server machine from which to display the log file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">log file to examine</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the log file to be displayed. Provide one of the following file names to display the indicated log
+                   file from the <emphasis role="bold">/usr/afs/logs</emphasis> directory. <itemizedlist>
+                       <listitem>
+                         <para><emphasis role="bold">AuthLog</emphasis> for the Authentication Server log file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">BackupLog</emphasis> for the Backup Server log file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">BosLog</emphasis> for the BOS Server log file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">FileLog</emphasis> for the File Server log file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">SalvageLog</emphasis> for the Salvager log file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">VLLog</emphasis> for the Volume Location (VL) Server log file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">VolserLog</emphasis> for the Volume Server log file</para>
+                       </listitem>
+                     </itemizedlist></para>
+ 
+                   <para>You can provide a full or relative pathname to display a file from another directory. Relative pathnames are
+                   interpreted relative to the <emphasis role="bold">/usr/afs/logs</emphasis> directory.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd010.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd010.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd010.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,6861 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ174">
+   <title>Managing Volumes</title>
+ 
+   <para>This chapter explains how to manage the volumes stored on file server machines. The volume is the designated unit of
+   administration in AFS, so managing them is a large part of the administrator's duties.</para>
+ 
+   <sect1 id="HDRWQ175">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="58*" />
+ 
+         <colspec colwidth="42*" />
+ 
+         <tbody>
+           <row>
+             <entry>Create read/write volume</entry>
+ 
+             <entry><emphasis role="bold">vos create</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create read-only volume</entry>
+ 
+             <entry><emphasis role="bold">vos addsite</emphasis> <emphasis role="bold">and</emphasis> <emphasis role="bold">vos
+             release</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create backup volume</entry>
+ 
+             <entry><emphasis role="bold">vos backup</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create many backup volumes at once</entry>
+ 
+             <entry><emphasis role="bold">vos backupsys</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine VLDB entry</entry>
+ 
+             <entry><emphasis role="bold">vos listvldb</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine volume header</entry>
+ 
+             <entry><emphasis role="bold">vos listvol</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine both VLDB entry and volume header</entry>
+ 
+             <entry><emphasis role="bold">vos examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display volume's name</entry>
+ 
+             <entry><emphasis role="bold">fs listquota</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">fs
+             examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display volume's ID number</entry>
+ 
+             <entry><emphasis role="bold">fs examine</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">vos
+             examine</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">vos listvol</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display partition's size and space available</entry>
+ 
+             <entry><emphasis role="bold">vos partinfo</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display volume's location</entry>
+ 
+             <entry><emphasis role="bold">fs whereis</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">vos
+             examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create mount point</entry>
+ 
+             <entry><emphasis role="bold">fs mkmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove mount point</entry>
+ 
+             <entry><emphasis role="bold">fs rmmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display mount point</entry>
+ 
+             <entry><emphasis role="bold">fs lsmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Move read/write volume</entry>
+ 
+             <entry><emphasis role="bold">vos move</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Synchronize VLDB with volume headers</entry>
+ 
+             <entry><emphasis role="bold">vos syncvldb</emphasis> <emphasis role="bold">and</emphasis> <emphasis role="bold">vos
+             syncserv</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set volume quota</entry>
+ 
+             <entry><emphasis role="bold">fs setvol</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">fs
+             setquota</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display volume quota</entry>
+ 
+             <entry><emphasis role="bold">fs quota</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">fs
+             listquota</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">fs examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display volume's current size</entry>
+ 
+             <entry><emphasis role="bold">fs listquota</emphasis> <emphasis role="bold">or</emphasis> <emphasis role="bold">fs
+             examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display list of volumes on a machine/partition</entry>
+ 
+             <entry><emphasis role="bold">vos listvol</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove read/write volume</entry>
+ 
+             <entry><emphasis role="bold">vos remove</emphasis> <emphasis role="bold">and</emphasis> <emphasis role="bold">fs
+             rmmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove read-only volume</entry>
+ 
+             <entry><emphasis role="bold">vos remove</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove backup volume</entry>
+ 
+             <entry><emphasis role="bold">vos remove</emphasis> <emphasis role="bold">and</emphasis> <emphasis role="bold">fs
+             rmmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove volume; no VLDB change</entry>
+ 
+             <entry><emphasis role="bold">vos zap</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove read-only site definition</entry>
+ 
+             <entry><emphasis role="bold">vos remsite</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove VLDB entry; no volume change</entry>
+ 
+             <entry><emphasis role="bold">vos delentry</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Dump volume</entry>
+ 
+             <entry><emphasis role="bold">vos dump</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Restore dumped volume</entry>
+ 
+             <entry><emphasis role="bold">vos restore</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Rename volume</entry>
+ 
+             <entry><emphasis role="bold">vos rename</emphasis>, <emphasis role="bold">fs rmmount</emphasis> <emphasis
+             role="bold">and</emphasis> <emphasis role="bold">fs mkmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Unlock volume</entry>
+ 
+             <entry><emphasis role="bold">vos unlock</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Unlock multiple volumes</entry>
+ 
+             <entry><emphasis role="bold">vos unlockvldb</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Lock volume</entry>
+ 
+             <entry><emphasis role="bold">vos lock</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ177">
+     <title>About Volumes</title>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <para>An AFS <emphasis>volume</emphasis> is a logical unit of disk space that functions like a container for the files in an AFS
+     directory, keeping them all together on one partition of a file server machine. To make a volume's contents visible in the
+     cell's file tree and accessible to users, you mount the volume at a directory location in the AFS filespace. The association
+     between the volume and its location in the filespace is called a <emphasis>mount point</emphasis>, and because of AFS's internal
+     workings it looks and acts just like a standard directory element. Users can access and manipulate a volume's contents in the
+     same way they access and manipulate the contents of a standard UNIX directory. For more on the relationship between volumes and
+     directories, see <link linkend="HDRWQ183">About Mounting Volumes</link>.</para>
+ 
+     <para>Many of an administrator's daily activities involve manipulating volumes, since they are the basic storage and
+     administrative unit of AFS. For a discussion of some of the ways volumes can make your job easier, see <link
+     linkend="HDRWQ179">How Volumes Improve AFS Efficiency</link>.</para>
+ 
+     <sect2 id="HDRWQ178">
+       <title>The Three Types of Volumes</title>
+ 
+       <para>There are three types of volumes in AFS, as described in the following list: <itemizedlist>
+           <listitem>
+             <para>The single <emphasis>read/write</emphasis> version of a volume houses the modifiable versions of the files and
+             directories in that volume. It is often referred to as the <emphasis>read/write</emphasis> source because volumes of the
+             other two types are derived from it by a copying procedure called <emphasis>cloning</emphasis>. For instructions on
+             creating read/write volumes, see <link linkend="HDRWQ185">Creating Read/write Volumes</link>.</para>
+ 
+             <indexterm>
+               <primary>read/write volume</primary>
+ 
+               <secondary>defined</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>A <emphasis>read-only</emphasis> volume is a copy of the read/write source volume and can exist at multiple
+             <emphasis>sites</emphasis> (a site is a particular partition on a particular file server machine). Placing the same data
+             at more than one site is called <emphasis>replication</emphasis>; see <link linkend="HDRWQ179">How Volumes Improve AFS
+             Efficiency</link>. As the name suggests, a read-only volume's contents do not change automatically as the read/write
+             source changes, but only when an administrator issues the <emphasis role="bold">vos release</emphasis> command. For
+             users to have a consistent view of the AFS filespace, all copies of the read-only volume must match each other and their
+             read/write source. All read-only volumes share the same name, which is derived by adding the <emphasis
+             role="bold">.readonly</emphasis> extension to the read/write source's name. For instructions on creating of read-only
+             volumes, see <link linkend="HDRWQ192">Replicating Volumes (Creating Read-only Volumes)</link>.</para>
+ 
+             <indexterm>
+               <primary>read-only volume</primary>
+ 
+               <secondary>defined</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>site</primary>
+ 
+               <secondary>volume, defined</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>site, defined</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>A <emphasis>backup</emphasis> volume is a clone of the read/write source volume and is stored at the same site as
+             the source. A backup version is useful because it records the state of the read/write source at a certain time, allowing
+             recovery of data that is later mistakenly changed or deleted (for further discussion see <link linkend="HDRWQ179">How
+             Volumes Improve AFS Efficiency</link>). A backup volume's name is derived by adding the <emphasis
+             role="bold">.backup</emphasis> extension to the read/write source's name. For instructions on creating of backup
+             volumes, see <link linkend="HDRWQ201">Creating Backup Volumes</link>.</para>
+ 
+             <indexterm>
+               <primary>backup volume</primary>
+ 
+               <secondary>defined</secondary>
+             </indexterm>
+ 
+             <note>
+               <para>A backup volume is not the same as the backup of a volume transferred to tape using the AFS Backup System,
+               although making a backup version of a volume is usually a stage in the process of backing up the volume to tape. For
+               information on backing up a volume using the AFS Backup System, see <link linkend="HDRWQ296">Backing Up
+               Data</link>.</para>
+             </note>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>As noted, the three types of volumes are related to one another: read-only and backup volumes are both derived from a
+       read/write volume through a process called cloning. Read-only and backup volumes are exact copies of the read/write source at
+       the time they are created.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ179">
+       <title>How Volumes Improve AFS Efficiency</title>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>benefits for efficiency</secondary>
+       </indexterm>
+ 
+       <para>Volumes make your cell easier to manage and more efficient in the following three ways: <itemizedlist>
+           <listitem>
+             <para>Volumes are easy to move between partitions, on the same or different machines, because they are by definition
+             smaller than a partition. Perhaps the most common reasons to move volumes are to balance the load among file server
+             machines or to take advantage of greater disk capacity on certain machines. You can move volumes as often as necessary
+             without disrupting user access to their contents, because the move procedure makes the contents unavailable for only a
+             few seconds. The automatic tracking of volume locations in the Volume Location Database (VLDB) assures that access
+             remains transparent. For instructions on moving volumes, see <link linkend="HDRWQ226">Moving Volumes</link>.</para>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>in load balancing</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Volumes are the unit of replication in AFS. <emphasis>Replication</emphasis> refers to creating a read-only clone
+             from the read/write source and distributing of the clone to one or more sites. Replication improves system efficiency
+             because more than one machine can fill requests for popular files. It also boosts system reliability by helping to keep
+             data available in the face of machine or server process outage. In general, volumes containing popular application
+             programs and other files that do not change often are the best candidates for replication, but you can replicate any
+             read/write volume. See <link linkend="HDRWQ192">Replicating Volumes (Creating Read-only Volumes)</link>.</para>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>as unit of replication</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>replication</primary>
+ 
+               <secondary>defined</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>as unit of backup</secondary>
+             </indexterm>
+ 
+             <para>Volumes are the unit of backup in AFS, in two senses. You can create a backup volume version to preserves the
+             state of a read/write source volume at a specified time. You can mount the backup version in the AFS filespace, enabling
+             users to restore data they have accidentally changed or deleted without administrator assistance, which frees you for
+             more important jobs. If you make a new backup version of user volumes once a day (presumably overwriting the former
+             backup), then users are always be able to retrieve the previous day's version of a file. For instructions, see <link
+             linkend="HDRWQ201">Creating Backup Volumes</link>.</para>
+ 
+             <para>Backup also refers to using the AFS Backup System to store permanent copies of volume contents on tape or in a
+             special backup data. See <link linkend="HDRWQ248">Configuring the AFS Backup System</link>and <link
+             linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ180">
+       <title>Volume Information in the VLDB</title>
+ 
+       <para>The Volume Location Database (VLDB) includes entries for every volume in a cell. Perhaps the most important information
+       in the entry is the volume's location, which is key to transparent access to AFS data. When a user opens a file, the Cache
+       Manager consults the Volume Location (VL) Server, which maintains the VLDB, for a list of the file server machines that house
+       the volume containing the file. The Cache Manager then requests the file from the File Server running on one of the relevant
+       file server machines. The file location procedure is invisible to the user, who only needs to know the file's pathname.</para>
+ 
+       <indexterm>
+         <primary>VLDB</primary>
+ 
+         <secondary>volume entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>entry in VLDB</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>entry in VLDB</primary>
+ 
+         <secondary>for volume</secondary>
+       </indexterm>
+ 
+       <para>The VLDB volume entry for a read/write volume also contains the pertinent information about the read-only and backup
+       versions, which do not have their own VLDB entries. (The rare exception is a read-only volume that has its own VLDB entry
+       because its read/write source has been removed.) A volume's VLDB entry records the volume's name, the unique volume ID number
+       for each version (read/write, read-only, backup, and releaseClone), a count of the number of sites that house a read/write or
+       read-only version, and a list of the sites.</para>
+ 
+       <para>To display the VLDB entry for one or more volumes, use the <emphasis role="bold">vos listvldb</emphasis> command as
+       described in <link linkend="HDRWQ218">To display VLDB entries</link>. To display the VLDB entry for a single volume along with
+       its <emphasis>volume header</emphasis>, use the <emphasis role="bold">vos examine</emphasis> command as described in <link
+       linkend="HDRWQ222">To display one volume's VLDB entry and volume header</link>. (See the following section for a description
+       of the volume header.)</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ181">
+       <title>The Information in Volume Headers</title>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>header</secondary>
+ 
+         <see>volume header</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume header</primary>
+ 
+         <secondary>about</secondary>
+       </indexterm>
+ 
+       <para>Whereas all versions of a volume share one VLDB entry, each volume on an AFS server partition has its own volume header,
+       a data structure that maps the files and directories in the volume to physical memory addresses on the partition that stores
+       them. The volume header binds the volume's contents into a logical unit without requiring that they be stored in contiguous
+       memory blocks. The volume header also records the following information about the volume, some of it redundant with the VLDB
+       entry: name, volume ID number, type, size, status (online, offline, or busy), space quota, timestamps for creation date and
+       date of last modification, and number of accesses during the current day.</para>
+ 
+       <para>To display the volume headers on one or more partitions, use the <emphasis role="bold">vos listvol</emphasis> command as
+       described in <link linkend="HDRWQ220">To display volume headers</link>. To display the VLDB entry for a single volume along
+       with its volume header, use the <emphasis role="bold">vos examine</emphasis> command as described in <link
+       linkend="HDRWQ222">To display one volume's VLDB entry and volume header</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ182">
+       <title>Keeping the VLDB and Volume Headers Synchronized</title>
+ 
+       <indexterm>
+         <primary>synchrony of VLDB and volume headers</primary>
+ 
+         <secondary>maintained by VL and Volume Servers</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VLDB</primary>
+ 
+         <secondary>synchronizing with volume headers</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume header</primary>
+ 
+         <secondary>synchronizing with VLDB</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>maintaining</primary>
+ 
+         <secondary>synchrony of VLDB with volume headers</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VL Server</primary>
+ 
+         <secondary>role in VLDB/volume header synchronization</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Volume Server</primary>
+ 
+         <secondary>role in VLDB/volume header synchronization</secondary>
+       </indexterm>
+ 
+       <para>It is vital that the information in the VLDB correspond to the status of the actual volumes on the servers (as recorded
+       in volume headers) as much of the time as possible. If a volume's location information in the VLDB is incorrect, the Cache
+       Manager cannot find access its contents. Whenever you issue a <emphasis role="bold">vos</emphasis> command that changes a
+       volume's status, the Volume Server and VL Server cooperate to keep the volume header and VLDB synchronized. In rare cases, the
+       header and VLDB can diverge, for instance because a <emphasis role="bold">vos</emphasis> operation halts prematurely. For
+       instructions on resynchronizing them, see <link linkend="HDRWQ227">Synchronizing the VLDB and Volume Headers</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ183">
+       <title>About Mounting Volumes</title>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>mounting</secondary>
+ 
+         <tertiary>about</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mounting</primary>
+ 
+         <secondary>volume</secondary>
+ 
+         <tertiary>about</tertiary>
+       </indexterm>
+ 
+       <para>To make a volume's contents visible in the cell's file tree and accessible to users, you mount the volume at a directory
+       location in the AFS filespace. The association between the volume and its location in the filespace is called a
+       <emphasis>mount point</emphasis>. An AFS mount point looks and functions like a regular UNIX file system directory, but
+       structurally it is more like a symbolic link that tells the Cache Manager the name of the volume associated with the
+       directory. A mount point looks and acts like a directory only because the Cache Manager knows how to interpret it.</para>
+ 
+       <para>Consider the common case where the Cache Manager needs to retrieve a file requested by an application program. The Cache
+       Manager traverses the file's complete pathname, starting at the AFS root (by convention mounted at the <emphasis
+       role="bold">/afs</emphasis> directory) and continuing to the file. When the Cache Manager encounters (or
+       <emphasis>crosses</emphasis>) a mount point during the traversal, it reads it to learn the name of the volume mounted at that
+       directory location. After obtaining location information about the volume from the Volume Location (VL) Server, the Cache
+       Manager fetches the indicated volume and opens its <emphasis>root directory</emphasis>. The root directory of a volume lists
+       all the files, subdirectories, and mount points that reside in it. The Cache Manager scans the root directory listing for the
+       next element in the pathname. It continues down the path, using this method to interpret any other mount points it encounters,
+       until it reaches the volume that houses the requested file.</para>
+ 
+       <indexterm>
+         <primary>root directory</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>as interpreter of mount points</secondary>
+       </indexterm>
+ 
+       <para>Mount points act as the glue that connects the AFS file space, creating the illusion of a single, seamless file tree
+       even when volumes reside on many different file server machines. A volume's contents are visible and accessible when the
+       volume is mounted at a directory location, and are not accessible at all if the volume is not mounted.</para>
+ 
+       <para>You can mount a volume at more than one location in the file tree, but this is not recommended for two reasons. First,
+       it distorts the hierarchical nature of the filespace. Second, the Cache Manager can become confused about which pathname it
+       followed to reach the file (causing unpredictable output from the <emphasis role="bold">pwd</emphasis> command, for example).
+       However, if you mount a volume at more than one directory, the access control list (ACL) associated with the volume's root
+       directory applies to all of the mount points.</para>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>creating multiple per volume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>mounting</secondary>
+ 
+         <tertiary>more than once</tertiary>
+       </indexterm>
+ 
+       <para>There are several types of mount points, each of which the Cache Manager handles in a different way and each of which is
+       appropriate for a different purpose. See <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ184">
+       <title>About Volume Names</title>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>name</secondary>
+ 
+         <see>volume name</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>length restriction on volume names</primary>
+       </indexterm>
+ 
+       <para>A read/write volume's name can be up to 22 characters in length. The Volume Server automatically adds the <emphasis
+       role="bold">.readonly</emphasis> and <emphasis role="bold">.backup</emphasis> extensions to read-only and backup volumes
+       respectively. Do not explicitly add the extensions to volume names, even if they are appropriate.</para>
+ 
+       <para>It is conventional for a volume's name to indicate the type of data it houses. For example, it is conventional to name
+       all user volumes <emphasis role="bold">user</emphasis>.username where username is the user's login name. Similarly, many cells
+       elect to put system binaries in volumes with names that begin with the system type code. For a list of other naming
+       conventions, see <link linkend="HDRWQ44">Creating Volumes to Simplify Administration</link>.</para>
+ 
+       <indexterm>
+         <primary>conventions</primary>
+ 
+         <secondary>volume names</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume name</primary>
+ 
+         <secondary>conventions</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ185">
+     <title>Creating Read/write Volumes</title>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>read/write volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>read/write</secondary>
+ 
+       <see>read/write volume</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>read/write volume</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <para>A read/write volume is the most basic type of volume, and must exist before you can create read-only or backup versions of
+     it. When you issue the <emphasis role="bold">vos create</emphasis> command to create a read/write volume, the VL Server creates
+     a VLDB entry for it which records the name you specify, assigns a read/write volume ID number, and reserves the next two
+     consecutive volume ID numbers for read-only and backup versions that possibly are to be created later. At the same time, the
+     Volume Server creates a volume header at the site you designate, allocating space on disk to record the name of the volume's
+     root directory. The name is filled in when you issue the <emphasis role="bold">fs mkmount</emphasis> command to mount the
+     volume, and matches the mount point name. The following is also recorded in the volume header: <itemizedlist>
+         <listitem>
+           <para>An initial ACL associated with the volume's root directory. By default it grants all seven AFS access permissions to
+           the <emphasis role="bold">system:administrators</emphasis> group. After you mount the volume, you can use the <emphasis
+           role="bold">fs setacl</emphasis> command to add other entries and to remove or change the entry for the <emphasis
+           role="bold">system:administrators</emphasis> group. See <link linkend="HDRWQ573">Setting ACL Entries</link>.</para>
+ 
+           <indexterm>
+             <primary>default</primary>
+ 
+             <secondary>ACL</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>ACL</primary>
+ 
+             <secondary>default on new volume</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>A space quota, which limits the amount of disk space the read/write version of the volume can use on the file server
+           partition. The default is of 5000 kilobyte blocks, but you can use the <emphasis role="bold">-maxquota</emphasis> argument
+           to the <emphasis role="bold">vos create</emphasis> command to set a different quota.</para>
+ 
+           <para>To change the quota after creation, use the <emphasis role="bold">fs setquota</emphasis> command as described in
+           <link linkend="HDRWQ234">Setting and Displaying Volume Quota and Current Size</link>.</para>
+ 
+           <indexterm>
+             <primary>volume quota</primary>
+ 
+             <secondary>default for new volume</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>default</primary>
+ 
+             <secondary>volume quota</secondary>
+           </indexterm>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="Header_212">
+       <title>To create (and mount) a read/write volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>), <emphasis
+           role="bold">i</emphasis>( <emphasis role="bold">insert</emphasis>), and <emphasis role="bold">l</emphasis>( <emphasis
+           role="bold">lookup</emphasis>) permissions on the ACL of the directory where you plan to mount the volume. If necessary,
+           issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully described in <link
+           linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<emphasis>dir/file path</emphasis>&gt;]</programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos partinfo</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>partinfo</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ186" />Select a site (disk partition on a file server machine) for the new volume. To verify that
+           the site has enough free space to house the volume (now, or if it grows to use its entire quota), issue the <emphasis
+           role="bold">vos partinfo</emphasis> command.</para>
+ 
+           <note>
+             <para>The partition-related statistics in this command's output do not always agree with the corresponding values in the
+             output of the standard UNIX <emphasis role="bold">df</emphasis> command. The statistics reported by this command can be
+             up to five minutes old, because the Cache Manager polls the File Server for partition information at that frequency.
+             Also, on some operating systems, the <emphasis role="bold">df</emphasis> command's report of partition size includes
+             reserved space not included in this command's calculation, and so is likely to be about 10% larger.</para>
+           </note>
+ 
+           <programlisting>
+    % <emphasis role="bold">vos partinfo</emphasis> &lt;<emphasis>machine name</emphasis>&gt; [&lt;<emphasis>partition name</emphasis>&gt;]</programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">p</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">partinfo</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine for which to display partition size and usage.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names one partition for which to display partition size and usage. If you omit it, the output displays the
+                   size and space available for all partitions on the machine.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ187" />Select a volume name, taking note of the information in <link linkend="HDRWQ184">About Volume
+           Names</link>.</para>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>create</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos create</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ188" />Issue the <emphasis role="bold">vos create</emphasis> command to create the volume.
+           <programlisting>
+    % <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt; \
+         [<emphasis role="bold">-maxquota</emphasis> &lt;<replaceable>initial quota (KB)</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">cr</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">create</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine on which to place the volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the disk partition on which to place the volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume. It can be up to 22 alphanumeric and punctuation characters in length. Your cell possibly
+                   has naming conventions for volumes, such as beginning user volume names with the string <emphasis
+                   role="bold">user</emphasis> and using the period to separate parts of the name.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-maxquota</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the volume's quota, as a number of kilobyte blocks. If you omit this argument, the quota is set to 5000
+                   kilobyte blocks.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <indexterm>
+             <primary>mounting</primary>
+ 
+             <secondary>read/write volume</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>read/write volume</primary>
+ 
+             <secondary>mounting</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs mkmount</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>mkmount</secondary>
+ 
+             <tertiary>for read/write volume</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <anchor id="LIWQ189" />
+ 
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount
+           the volume in the filespace. For complete syntax, see <link linkend="HDRWQ212">To create a regular or read/write mount
+           point</link>. <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<emphasis>directory</emphasis>&gt; &lt;<emphasis>volume name</emphasis>&gt;</programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs lsmount</emphasis> command to verify
+           that the mount point refers to the correct volume. Complete instructions appear in <link linkend="HDRWQ211">To display a
+           mount point</link>. <programlisting>
+    % <emphasis role="bold">fs lsmount</emphasis> &lt;<emphasis>directory</emphasis>&gt;</programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs setvol</emphasis> command with the
+           <emphasis role="bold">-offlinemsg</emphasis> argument to record auxiliary information about the volume in its volume
+           header. For example, you can record who owns the volume or where you have mounted it in the filespace. To display the
+           information, use the <emphasis role="bold">fs examine</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs setvol</emphasis> &lt;<replaceable>dir/file path</replaceable>&gt; <emphasis role="bold">-offlinemsg </emphasis> &lt;<replaceable>offline message</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setvol</emphasis>(and <emphasis role="bold">setv</emphasis>
+                   the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point of the volume with which to associate the message. Partial pathnames are interpreted
+                   relative to the current working directory.</para>
+ 
+                   <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to change
+                   a read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at
+                   the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further discussion
+                   of the concept of read/write and read-only paths through the filespace, see <link linkend="HDRWQ209">The Rules of
+                   Mount Point Traversal</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-offlinemsg</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies up to 128 characters of auxiliary information to record in the volume header.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ190">
+     <title>About Clones and Cloning</title>
+ 
+     <indexterm>
+       <primary>cloning</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>clone</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vnode index</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup volume</primary>
+ 
+       <secondary>space-saving nature of</secondary>
+     </indexterm>
+ 
+     <para>To create a backup or read-only volume, the Volume Server begins by <emphasis>cloning</emphasis> the read/write source
+     volume to create a <emphasis>clone</emphasis>. The Volume Server creates the clone automatically when you issue the <emphasis
+     role="bold">vos backup</emphasis> or <emphasis role="bold">vos backupsys</emphasis> command (for a backup volume) or the
+     <emphasis role="bold">vos release</emphasis> command (for a read-only volume). No special action is required on your
+     part.</para>
+ 
+     <para>A clone is not a copy of the data in the read/write source volume, but rather a copy of the read/write volume's
+     <emphasis>vnode index</emphasis>. The vnode index is a table of pointers between the files and directories in the volume and the
+     physical disk blocks on the partition where the data resides. From the clone, backup and read-only volumes are created in the
+     following manner: <itemizedlist>
+         <listitem>
+           <para>A read-only volume that occupies the same partition as its read/write source (also known as a <emphasis>read-only
+           clone</emphasis>), and a backup volume, are created by attaching a volume header to the clone. These volumes initially
+           consume very little disk space, because the clone portion (the vnode index) points to exactly the same files as the
+           read/write volume, as illustrated in <link linkend="FIGWQ191">Figure 1</link>. The file sharing is possible only because
+           the clone is on the same partition as the read/write source volume. When a file in the read/write volume is deleted, it is
+           not actually removed from the partition, because the backup or read-only clone still points to it. Similarly, when a file
+           in the read/write is changed, the entire original file is preserved on disk because the clone still points to it, and the
+           read/write volume's vnode index changes to point to newly space for the changed file. When this happens, the backup or
+           read-only volume is said to grow or start occupying actual disk space.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A read-only volume that does not occupy the same site as the read/write source is a copy of the clone and of all of
+           the data in the read/write source volume. It occupies the same amount of disk space as the read/write volume did at the
+           time the read-only volume was created.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <figure id="FIGWQ191" label="1">
+       <title>File Sharing Between the Read/write Source and a Clone Volume</title>
+ 
+       <mediaobject>
+         <imageobject>
+           <imagedata fileref="vnode.png" scale="50" />
+         </imageobject>
+       </mediaobject>
+     </figure>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>detailed discussion</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>replicating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>read-only</secondary>
+ 
+       <see>read-only volume</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>read-only volume</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>read-only volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cloning</primary>
+ 
+       <secondary>for replication</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>read/write volume</primary>
+ 
+       <secondary>cloning</secondary>
+ 
+       <tertiary>for replication</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ192">
+     <title>Replicating Volumes (Creating Read-only Volumes)</title>
+ 
+     <para><emphasis>Replication</emphasis> refers to creating a read-only copy of a read/write volume and distributing the copy to
+     one or more additional file server machines. Replication makes a volume's contents accessible on more than one file server
+     machine, which increases data availability. It can also increase system efficiency by reducing load on the network and File
+     Server. Network load is reduced if a client machine's server preference ranks lead the Cache Manager to access the copy of a
+     volume stored on the closest file server machine. Load on the File Server is reduced because it issues only one callback for all
+     data fetched from a read-only volume, as opposed to a callback for each file fetched from a read/write volume. The single
+     callback is sufficient for an entire read-only volume because the volume does not change except in response to administrator
+     action, whereas each read/write file can change at any time.</para>
+ 
+     <indexterm>
+       <primary>stages in volume replication</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>site definition stage in replication</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>site definition stage</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>release stage in replication</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>release stage</secondary>
+     </indexterm>
+ 
+     <para>Replicating a volume requires issuing two commands. First, use the <emphasis role="bold">vos addsite</emphasis> command to
+     add one or more read-only site definitions to the volume's VLDB entry (a <emphasis>site</emphasis> is a particular partition on
+     a file server machine). Then use the <emphasis role="bold">vos release</emphasis> command to clone the read/write source volume
+     and distribute the clone to the defined read-only sites. You issue the <emphasis role="bold">vos addsite</emphasis> only once
+     for each read-only site, but must reissue the <emphasis role="bold">vos release</emphasis> command every time the read/write
+     volume's contents change and you want to update the read-only volumes.</para>
+ 
+     <para>For users to have a consistent view of the file system, the release of updated volume contents to read-only sites must be
+     atomic: either all read-only sites receive the new version of the volume, or all sites keep the version they currently have. The
+     <emphasis role="bold">vos release</emphasis> command is designed to ensure that all copies of the volume's read-only version
+     match both the read/write source and each other. In cases where problems such as machine or server process outages prevent
+     successful completion of the release operation, AFS uses two mechanisms to alert you.</para>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>determining success of</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>determining</primary>
+ 
+       <secondary>success of replication</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>need for all-or-nothing release</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>all-or-nothing release of read-only volumes</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>read-only volume</primary>
+ 
+       <secondary>need for atomic release</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>releasing</primary>
+ 
+       <secondary>read-only volume, need for atomicity</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ReleaseClone</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>role of ReleaseClone</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>New release site flag in VLDB</primary>
+ 
+       <secondary>as indicator of failed replication</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Old release site flag in VLDB</primary>
+ 
+       <secondary>as indicator of failed replication</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>clone</primary>
+ 
+       <secondary>forcing creation of new</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replication</primary>
+ 
+       <secondary>forcing creation of new clone</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>release</secondary>
+ 
+       <tertiary>forcing new cloning with -f flag</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>releasing</primary>
+ 
+       <secondary>read-only volume, forcing new cloning</secondary>
+     </indexterm>
+ 
+     <para>First, the command interpreter generates an error message on the standard error stream naming each read-only site that did
+     not receive the new volume version. Second, during the release operation the Volume Location (VL) Server marks site definitions
+     in the VLDB entry with flags (<computeroutput>New release</computeroutput> and <computeroutput>Old release</computeroutput>)
+     that indicate whether or not the site has the new volume version. If any flags remain after the operation completes, it was not
+     successful. The Cache Manager refuses to access a read-only site marked with the <computeroutput>Old release</computeroutput>
+     flag, which potentially imposes a greater load on the sites marked with the <computeroutput>New release</computeroutput> flag.
+     It is important to investigate and eliminate the cause of the failure and then to issue the <emphasis role="bold">vos
+     release</emphasis> command as many times as necessary to complete the release without errors.</para>
+ 
+     <para>The pattern of site flags remaining in the volume's VLDB entry after a failed release operation can help determine the
+     point at which the operation failed. Use the <emphasis role="bold">vos examine</emphasis> or <emphasis role="bold">vos
+     listvldb</emphasis> command to display the VLDB entry. The VL Server sets the flags in concert with the Volume Server's
+     operations, as follows: <orderedlist>
+         <listitem>
+           <para>Before the operation begins, the VL Server sets the <computeroutput>New release</computeroutput> flag on the
+           read/write site definition in the VLDB entry and the <computeroutput>Old release</computeroutput> flag on read-only site
+           definitions (unless the read-only site has been defined since the last release operation and has no actual volume, in
+           which case its site flag remains <computeroutput>Not released</computeroutput>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If necessary, the Volume Server creates a temporary copy (a <emphasis>clone</emphasis>) of the read/write source
+           called the ReleaseClone (see the following discussion of when the Volume Server does or does not create a new
+           ReleaseClone.) It assigns the ReleaseClone its own volume ID number, which the VL Server records in the
+           <computeroutput>RClone</computeroutput> field of the source volume's VLDB entry.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The Volume Server distributes a copy of the ReleaseClone to each read-only site defined in the VLDB entry. As the
+           site successfully receives the new clone, the VL Server sets the site's flag in the VLDB entry to <computeroutput>New
+           release</computeroutput>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>When all the read-only copies are successfully released, the VL Server clears all the <computeroutput>New
+           release</computeroutput> site flags. The ReleaseClone is no longer needed, so the Volume Server deletes it and the VL
+           Server erases its ID from the VLDB entry.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>By default, the Volume Server determines automatically whether or not it needs to create a new ReleaseClone: <itemizedlist>
+         <listitem>
+           <para>If there are no flags (<computeroutput>New release</computeroutput>, <computeroutput>Old release</computeroutput>,
+           or <computeroutput>Not released</computeroutput>) on site definitions in the VLDB entry, the previous <emphasis
+           role="bold">vos release</emphasis> command completed successfully and all read-only sites currently have the same volume.
+           The Volume Server infers that the current <emphasis role="bold">vos release</emphasis> command was issued because the
+           read/write volume has changed. The Volume Server creates a new ReleaseClone and distributes it to all of the read-only
+           sites.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If any site definition in the VLDB entry is marked with a flag, either the previous release operation did not
+           complete successfully or a new read-only site was defined since the last release. The Volume Server does not create a new
+           ReleaseClone, instead distributing the existing ReleaseClone to sites marked with the <computeroutput>Old
+           release</computeroutput> or <computeroutput>Not released</computeroutput> flag. As previously noted, the VL Server marks
+           each VLDB site definition with the <computeroutput>New release</computeroutput> flag as the site receives the
+           ReleaseClone, and clears all flags after all sites successfully receive it.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>To override the default behavior, forcing the Volume Server to create and release a new ReleaseClone to the read-only
+     sites, include the <emphasis role="bold">-f</emphasis> flag. This is appropriate if, for example, the data at the read/write
+     site has changed since the existing ReleaseClone was created during the previous release operation.</para>
+ 
+     <sect2 id="HDRWQ193">
+       <title>Using Read-only Volumes Effectively</title>
+ 
+       <indexterm>
+         <primary>criteria for replicating volumes</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>replication</primary>
+ 
+         <secondary>suitable types of volumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>suitability of volumes for replication</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>read/write volume</primary>
+ 
+         <secondary>types suitable for replication</secondary>
+       </indexterm>
+ 
+       <para>For maximum effectiveness, replicate only volumes that satisfy two criteria: <itemizedlist>
+           <listitem>
+             <para>The volume's contents are heavily used. Examples include a volume housing binary files for text editors or other
+             popular application programs, and volumes mounted along heavily traversed directory paths such as the paths leading to
+             user home directories. It is an inefficient use of disk space to replicate volumes for which the demand is low enough
+             that a single File Server can easily service all requests.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The volume's contents change infrequently. As noted, file system consistency demands that the contents of
+             read-only volumes must match each other and their read/write source at all times. Each time the read/write volume
+             changes, you must issue the <emphasis role="bold">vos release</emphasis> command to update the read-only volumes. This
+             can become tedious (and easy to forget) if the read/write volume changes frequently.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>mounting</primary>
+ 
+         <secondary>read-only volume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>read-only volume</primary>
+ 
+         <secondary>mounting</secondary>
+       </indexterm>
+ 
+       <para>Explicitly mounting a read-only volume (creating a mount point that names a volume with a <emphasis
+       role="bold">.readonly</emphasis> extension) is not generally necessary or appropriate. The Cache Manager has a built-in bias
+       to access the read-only version of a replicated volume whenever possible. As described in more detail in <link
+       linkend="HDRWQ209">The Rules of Mount Point Traversal</link>, when the Cache Manager encounters a mount point it reads the
+       volume name inside it and contacts the VL Server for a list of the sites that house the volume. In the normal case, if the
+       mount point resides in a read-only volume and names a read/write volume (one that does not have a <emphasis
+       role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> extension), the Cache Manager always attempts to
+       access a read-only copy of the volume. Thus there is normally no reason to force the Cache Manager to access a read-only
+       volume by mounting it explicitly.</para>
+ 
+       <para>It is a good practice to place a read-only volume at the read/write site, for a couple of reasons. First, the read-only
+       volume at the read/write site requires only a small amount of disk space, because it is a clone rather a copy of all of the
+       data (see <link linkend="HDRWQ190">About Clones and Cloning</link>). Only if a large number of files are removed or changed in
+       the read/write volume does the read-only copy occupy much disk space. That normally does not happen because the appropriate
+       response to changes in a replicated read/write volume is to reclone it. The other reason to place a read-only volume at the
+       read/write site is that the Cache Manager does not attempt to access the read/write version of a replicated volume if all
+       read-only copies become inaccessible. If the file server machine housing the read/write volume is the only accessible machine,
+       the Cache Manager can access the data only if there is a read-only copy at the read/write site.</para>
+ 
+       <para>The number of read-only sites to define depends on several factors. Perhaps the main trade-off is between the level of
+       demand for the volume's contents and how much disk space you are willing to use for multiple copies of the volume. Of course,
+       each prospective read-only site must have enough available space to accommodate the volume. The limit on the number of
+       read-only copies of a volume is determined by the maximum number of site definitions in a volume's VLDB entry, which is
+       defined in the <emphasis> OpenAFS Release Notes</emphasis>. The site housing the read/write and backup versions of the volume
+       counts as one site, and each read-only site counts as an additional site (even the read-only site defined on the same file
+       server machine and partition as the read/write site counts as a separate site). Note also that the Volume Server permits only
+       one read-only copy of a volume per file server machine.</para>
+     </sect2>
+ 
+     <sect2 id="Header_216">
+       <title>Replication Scenarios</title>
+ 
+       <indexterm>
+         <primary>variations possible</primary>
+ 
+         <secondary>in replication</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>replication</primary>
+ 
+         <secondary>variations possible in</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>possible variations</primary>
+ 
+         <secondary>on replication</secondary>
+       </indexterm>
+ 
+       <para>The instructions in the following section explain how to replicate a volume for which no read-only sites are currently
+       defined. However, you can also use the instructions in other common situations: <itemizedlist>
+           <listitem>
+             <para>If you are releasing a new clone to sites that already exist, you can skip Step <link linkend="LIWQ196">2</link>.
+             It can still be useful to issue the <emphasis role="bold">vos examine</emphasis> command, however, to verify that the
+             desired read-only sites are defined.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you are adding new read-only sites to existing ones, perform all of the steps. In Step <link
+             linkend="LIWQ197">3</link>, issue the <emphasis role="bold">vos addsite</emphasis> command for the new sites
+             only.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you are defining sites but do not want to release a clone to them yet, stop after Step <link
+             linkend="LIWQ197">3</link>and continue when you are ready.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you are removing one or more sites before releasing a new clone to the remaining sites, follow the instructions
+             for site removal in <link linkend="HDRWQ235">Removing Volumes and their Mount Points</link>and then start with Step
+             <link linkend="LIWQ198">4</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ194">
+       <title>To replicate a read/write volume (create a read-only volume)</title>
+ 
+       <indexterm>
+         <primary>read-only volume</primary>
+ 
+         <secondary>creating</secondary>
+ 
+         <tertiary>instructions</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>read/write volume</primary>
+ 
+         <secondary>replication instructions</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para><anchor id="LIWQ195" />Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ196" />Select one or more sites at which to replicate the volume. There are several factors to
+           consider: <itemizedlist>
+               <listitem>
+                 <para>How many sites are already defined. As previously noted, it is usually appropriate to define a read-only site
+                 at the read/write site. Also, the Volume Server permits only one read-only copy of a volume per file server machine.
+                 To display the volume's current sites, issue the <emphasis role="bold">vos examine</emphasis> command, which is
+                 described fully in <link linkend="HDRWQ221">Displaying One Volume's VLDB Entry and Volume Header</link>.
+                 <programlisting>
+    % <emphasis role="bold">vos examine</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+                 <para>The final lines of output display the volume's site definitions from the VLDB.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Whether your cell dedicates any file server machines to housing read-only volumes only. In general, only very
+                 large cells use read-only server machines.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Whether a site has enough free space to accommodate the volume. A read-only volume requires the same amount of
+                 space as the read/write version (unless it is at the read/write site itself). The first line of output from the
+                 <emphasis role="bold">vos examine</emphasis> command displays the read/write volume's current size in kilobyte
+                 blocks, as shown in <link linkend="HDRWQ221">Displaying One Volume's VLDB Entry and Volume Header</link>.</para>
+ 
+                 <para>To display the amount of space available on a file server machine's partitions, use the <emphasis
+                 role="bold">vos partinfo</emphasis> command, which is described fully in <link linkend="HDRWQ185">Creating
+                 Read/write Volumes</link>.</para>
+ 
+                 <programlisting>
+    % <emphasis role="bold">vos partinfo</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>partition name</replaceable>&gt;]
+ </programlisting>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <indexterm>
+             <primary>read-only volume</primary>
+ 
+             <secondary>defining site for in VLDB</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>defining</primary>
+ 
+             <secondary>read-only site in VLDB</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>adding</primary>
+ 
+             <secondary>read-only site definition in VLDB</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>VLDB</primary>
+ 
+             <secondary>defining read-only site in</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos addsite</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>addsite</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ197" />Issue the <emphasis role="bold">vos addsite</emphasis> command to define each new read-only
+           site in the VLDB. <programlisting>
+    % <emphasis role="bold">vos addsite</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">ad</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addsite</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Defines the file server machine for the new site.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a disk partition on the machine machine name.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the read/write volume to be replicated, either by its complete name or its volume ID
+                   number.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ198" /><emphasis role="bold">(Optional)</emphasis> Verify that the <emphasis
+           role="bold">fs</emphasis> process (which incorporates the Volume Server) is functioning normally on each file server
+           machine where you have defined a read-only site, and that the <emphasis role="bold">vlserver</emphasis> process (the
+           Volume Location Server) is functioning correctly on each database server machine. Knowing that they are functioning
+           eliminates two possible sources of failure for the release. Issue the <emphasis role="bold">bos status</emphasis> command
+           on each file server machine housing a read-only site for this volume and on each database server machine. The command is
+           described fully in <link linkend="HDRWQ158">Displaying Process Status and Information from the BosConfig File</link>.
+           <programlisting>
+    % <emphasis role="bold">bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">fs vlserver</emphasis>
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>releasing</primary>
+ 
+             <secondary>read-only volume</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>read-only volume</primary>
+ 
+             <secondary>releasing</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos release</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>release</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ199" />Issue the <emphasis role="bold">vos release</emphasis> command to clone the read/write source
+           volume and distribute the clone to each read-only site. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt; [<emphasis role="bold">-f</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">rel</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">release</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the read/write volume to clone, either by its complete name or volume ID number. The read-only
+                   version is given the same name with a <emphasis role="bold">.readonly</emphasis> extension. All read-only copies
+                   share the same read-only volume ID number.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-f</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates and releases a brand new clone.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <anchor id="LIWQ200" />
+ 
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">vos examine</emphasis> command to verify
+           that no site definition in the VLDB entry is marked with an <computeroutput>Old release</computeroutput> or
+           <computeroutput>New release</computeroutput> flag. The command is described fully in <link linkend="HDRWQ221">Displaying
+           One Volume's VLDB Entry and Volume Header</link>. <programlisting>
+    % <emphasis role="bold">vos examine</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>If any flags appear in the output from Step <link linkend="LIWQ200">6</link>, repeat Steps <link
+       linkend="LIWQ198">4</link>and <link linkend="LIWQ199">5</link>until the Volume Server does not produce any error messages
+       during the release operation and the flags no longer appear. Do not issue the <emphasis role="bold">vos release</emphasis>
+       command when you know that the read/write site or any read-only site is inaccessible due to network, machine or server process
+       outage.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ201">
+     <title>Creating Backup Volumes</title>
+ 
+     <indexterm>
+       <primary>read/write volume</primary>
+ 
+       <secondary>cloning</secondary>
+ 
+       <tertiary>for backup version</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cloning</primary>
+ 
+       <secondary>for backup</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>backup volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>backup</secondary>
+ 
+       <see>backup volume</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup volume</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <para>A <emphasis>backup volume</emphasis> is a clone that resides at the same site as its read/write source (to review the
+     concept of cloning, see <link linkend="HDRWQ190">About Clones and Cloning</link>). Creating a backup version of a volume has two
+     purposes: <itemizedlist>
+         <listitem>
+           <para>It is by convention the first step when dumping a volume's contents to tape with the AFS Backup System. A volume is
+           inaccessible while it is being dumped, so instead of dumping the read/write volume, you create and dump a backup version.
+           Users do not normally access the backup version, so it is unlikely that the dump will disturb them. For more details, see
+           <link linkend="HDRWQ296">Backing Up Data</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It enables users to restore mistakenly deleted or changed data themselves, freeing you for more crucial tasks. The
+           backup version captures the state of its read/write source at the time the backup is made, and its contents cannot change.
+           Mount the backup version in the filespace so that users can restore a file to its state at the time you made the backup.
+           See <link linkend="HDRWQ204">Making the Contents of Backup Volumes Available to Users</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>multiple backup volumes at once</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>creating backup version of many at once</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup volume</primary>
+ 
+       <secondary>creating multiple at once</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ202">
+       <title>Backing Up Multiple Volumes at Once</title>
+ 
+       <para>The <emphasis role="bold">vos backupsys</emphasis> command creates a backup version of many read/write volumes at once.
+       This command is useful when preparing for large-scale backups to tape using the AFS Backup System.</para>
+ 
+       <para>To clone every read/write volume listed in the VLDB, omit all of the command's options. Otherwise, combine the command's
+       options to clone various groups of volumes. The options use one of two basic criteria to select volumes: location (the
+       <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments) or presence in the volume
+       name of one of a set of specified character strings (the <emphasis role="bold">-prefix</emphasis>, <emphasis
+       role="bold">-exclude</emphasis>, and <emphasis role="bold">-xprefix</emphasis> options).</para>
+ 
+       <para>To clone only volumes that reside on one file server machine, include the <emphasis role="bold">-server</emphasis>
+       argument. To clone only volumes that reside on one partition, combine the <emphasis role="bold">-server</emphasis> and
+       <emphasis role="bold">-partition</emphasis> arguments. The <emphasis role="bold">-partition</emphasis> argument can also be
+       used alone to clone volumes that reside on the indicated partition on every file server machine. These arguments can be
+       combined with those that select volumes based on their names.</para>
+ 
+       <para>Combine the <emphasis role="bold">-prefix</emphasis>, <emphasis role="bold">-exclude</emphasis>, and <emphasis
+       role="bold">-xprefix</emphasis> options (with or without the <emphasis role="bold">-server</emphasis> and <emphasis
+       role="bold">-partition</emphasis> arguments) in the indicated ways to select volumes based on character strings contained in
+       their names: <itemizedlist>
+           <listitem>
+             <para>To clone every read/write volume at the specified location whose name includes one of a set of specified character
+             strings (for example, begins with <emphasis role="bold">user.</emphasis> or includes the string <emphasis
+             role="bold">afs</emphasis>), use the <emphasis role="bold">-prefix</emphasis> argument or combine the <emphasis
+             role="bold">-xprefix</emphasis> and <emphasis role="bold">-exclude</emphasis> options.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To clone every read/write volume at the specified location except those whose name includes one of a set of
+             specified character strings, use the <emphasis role="bold">-xprefix</emphasis> argument or combine the <emphasis
+             role="bold">-prefix</emphasis> and <emphasis role="bold">-exclude</emphasis> options.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To clone every read/write volume at the specified location whose name includes one of one of a set of specified
+             character strings, except those whose names include one of a different set of specified character strings, combine the
+             <emphasis role="bold">-prefix</emphasis> and <emphasis role="bold">-xprefix</emphasis> arguments. The command creates a
+             list of all volumes that match the <emphasis role="bold">-prefix</emphasis> argument and then removes from the list the
+             volumes that match the <emphasis role="bold">-xprefix</emphasis> argument. For effective results, the strings specified
+             by the <emphasis role="bold">-xprefix</emphasis> argument must designate a subset of the volumes specified by the
+             <emphasis role="bold">-prefix</emphasis> argument.</para>
+ 
+             <para>If the <emphasis role="bold">-exclude</emphasis> flag is combined with the <emphasis
+             role="bold">-prefix</emphasis> and <emphasis role="bold">-xprefix</emphasis> arguments, the command creates a list of
+             all volumes that do not match the <emphasis role="bold">-prefix</emphasis> argument and then adds to the list any
+             volumes that match the <emphasis role="bold">-xprefix</emphasis> argument. As when the <emphasis
+             role="bold">-exclude</emphasis> flag is not used, the result is effective only if the strings specified by the <emphasis
+             role="bold">-xprefix</emphasis> argument designate a subset of the volumes specified by the <emphasis
+             role="bold">-prefix</emphasis> argument.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The <emphasis role="bold">-prefix</emphasis> and <emphasis role="bold">-xprefix</emphasis> arguments both accept
+       multiple values, which can be used to define disjoint groups of volumes. Each value can be one of two types: <orderedlist>
+           <listitem>
+             <para>A simple character string, which matches volumes whose name begin with the string. All characters are interpreted
+             literally (that is, characters that potentially have special meaning to the command shell, such as the period, have only
+             their literal meaning).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A regular expression, which matches volumes whose names contain the expressions. Place a caret ( <emphasis
+             role="bold">^</emphasis>) at the beginning of the expression, and enclose the entire string in single quotes ( <emphasis
+             role="bold">'</emphasis> <emphasis role="bold">'</emphasis>). Explaining regular expressions is outside the scope of
+             this reference page; see the UNIX manual page for <emphasis role="bold">regexp(5)</emphasis> or (for a brief
+             introduction) <link linkend="HDRWQ265">Defining and Displaying Volume Sets and Volume Entries</link>. As an example, the
+             following expression matches volumes that have the string <emphasis role="bold">aix</emphasis> anywhere in their names:
+             <programlisting>
+   <emphasis role="bold">-prefix '^.*aix'</emphasis>
+           </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>To display a list of the volumes to be cloned, without actually cloning them, include the <emphasis
+       role="bold">-dryrun</emphasis> flag. To display a statement that summarizes the criteria being used to select volume, include
+       the <emphasis role="bold">-verbose</emphasis> flag.</para>
+ 
+       <para>To back up a single volume, use the <emphasis role="bold">vos backup</emphasis> command, which employs a more
+       streamlined technique for finding a single volume.</para>
+ 
+       <indexterm>
+         <primary>automating</primary>
+ 
+         <secondary>creation of backup volumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup volume</primary>
+ 
+         <secondary>automating creation of</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>automating creation of backup version</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup volume</primary>
+ 
+         <secondary>suggested schedule for creation of</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scheduling</primary>
+ 
+         <secondary>creation of backup volumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cron-type server process</primary>
+ 
+         <secondary>used to automate volume backup</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ203">
+       <title>Automating Creation of Backup Volumes</title>
+ 
+       <para>Most cells find that it is best to make a new backup version of relevant volumes each day. It is best to create the
+       backup versions at a time when usage is low, because the backup operation causes the read/write volume to be unavailable
+       momentarily.</para>
+ 
+       <para>You can either issue the necessary the <emphasis role="bold">vos backupsys</emphasis> or <emphasis role="bold">vos
+       backup</emphasis> commands at the console or create a <emphasis role="bold">cron</emphasis> entry in the <emphasis
+       role="bold">BosConfig</emphasis> file on a file server machine, which eliminates the need for an administrator to initiate the
+       backup operation.</para>
+ 
+       <para>The following example command creates a <emphasis role="bold">cron</emphasis> process called <emphasis
+       role="bold">backupusers</emphasis> in the <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file on the machine
+       <emphasis role="bold">fs3.abc.com</emphasis>. The process runs every day at 1:00 a.m. to create a backup version of every
+       volume in the cell whose name starts with the string <emphasis role="bold">user</emphasis>. The <emphasis
+       role="bold">-localauth</emphasis> flag enables the process to invoke the privileged <emphasis role="bold">vos
+       backupsys</emphasis> command while unauthenticated. Note that the <emphasis role="bold">-cmd</emphasis> argument specifies a
+       complete pathname for the <emphasis role="bold">vos</emphasis> binary, because the PATH environment variable for the BOS
+       Server (running as the local superuser <emphasis role="bold">root</emphasis>) generally does not include the path to AFS
+       binaries. <programlisting>
+    % <emphasis role="bold">bos create fs3.abc.com backupusers cron</emphasis>\ 
+   <emphasis role="bold">-cmd "/usr/afs/bin/vos backupsys -prefix user -localauth" "1:00"</emphasis>
+ </programlisting></para>
+ 
+       <indexterm>
+         <primary>mounting</primary>
+ 
+         <secondary>backup volume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup volume</primary>
+ 
+         <secondary>mounting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>OldFiles directory</primary>
+ 
+         <secondary>as mount point for backup volume</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ204">
+       <title>Making the Contents of Backup Volumes Available to Users</title>
+ 
+       <para>As noted, a backup volume preserves the state of the read/write source at the time the backup is created. Many cells
+       choose to mount backup volumes so that users can access and restore data they have accidentally deleted or changed since the
+       last backup was made, without having to request help from administrators. The most sensible place to mount the backup version
+       of a user volume is at a subdirectory of the user's home directory. Suitable names for this directory include <emphasis
+       role="bold">OldFiles</emphasis> and <emphasis role="bold">Backup</emphasis>. The subdirectory looks just like the user's own
+       home directory as it was at the time the backup was created, with all files and subdirectories in the same relative
+       positions.</para>
+ 
+       <para>If you do create and mount backup volumes for your users, inform users of their existence. The <emphasis> OpenAFS User
+       Guide</emphasis> does not mention backup volumes because making them available to users is optional. Explain to users how
+       often you make a new backup, so they know what they can recover. Remind them also that the data in their backup volume cannot
+       change; however, they can use the standard UNIX <emphasis role="bold">cp</emphasis> command to copy it into their home volume
+       and modify it there. Reassure users that the data in their backup volumes does not count against their read/write volume
+       quota.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ205">
+       <title>To create and mount a backup volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">insert</emphasis>( <emphasis role="bold">i</emphasis>) and <emphasis
+           role="bold">administer</emphasis>( <emphasis role="bold">a</emphasis>) permissions on the ACL of the directory in which
+           you wish to mount the volume. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully
+           described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos backup</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>backup</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ206" />Issue the <emphasis role="bold">vos backup</emphasis> command to create a backup version of a
+           read/write source volume. The message shown confirms the success of the backup operation. <programlisting>
+    % <emphasis role="bold">vos backup</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt; Created backup volume for volume name or ID
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">backup</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the read/write volume to back up, either by its complete name or volume ID number. The backup
+                   volume has the same name with the addition of the <emphasis role="bold">.backup</emphasis> extension. It has its
+                   own volume ID number.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs mkmount</secondary>
+ 
+             <tertiary>when mounting backup volume</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>mkmount</secondary>
+ 
+             <tertiary>when mounting backup volume</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ207" /><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs
+           mkmount</emphasis> to mount the backup volume. While this step is optional, Cache Managers cannot access the volume's
+           contents if it is not mounted. <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt; <emphasis
+                 role="bold">.backup</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">mk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">mkmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point to create. Do not create a file or directory of the same name beforehand. Partial
+                   pathnames are interpreted relative to the current working directory. For the backup version of a user volume, the
+                   conventional location is the user's home directory.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name</emphasis>.backup</term>
+ 
+                 <listitem>
+                   <para>Is the full name of the backup volume.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs lsmount</emphasis> command to verify
+           that the mount point refers to the correct volume. Complete instructions appear in <link linkend="HDRWQ211">To display a
+           mount point</link>. <programlisting>
+    % <emphasis role="bold">fs lsmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos backupsys</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>backupsys</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_223">
+       <title>To create multiple backup volumes at once</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos backupsys</emphasis> command to create a backup version of every read/write
+           volume that shares the same prefix or site. The effects of combining the three arguments are described in <link
+           linkend="HDRWQ202">Backing Up Multiple Volumes at Once</link>. <programlisting>
+    % <emphasis role="bold">vos backupsys</emphasis> [<emphasis role="bold">-prefix</emphasis> &lt;<replaceable>common prefix on volume(s)</replaceable>&gt;+] \ 
+         [<emphasis role="bold">-server</emphasis> &lt;<replaceable>machine name</replaceable>&gt;] [<emphasis role="bold">-partition</emphasis> &lt;<replaceable>partition name</replaceable>&gt;] \
+         [<emphasis role="bold">-exclude</emphasis>] [<emphasis role="bold">-xprefix</emphasis> &lt;<replaceable>negative prefix on volume(s)</replaceable>&gt;+] \
+         [<emphasis role="bold">-dryrun</emphasis>] [<emphasis role="bold">-verbose</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">backups</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">backupsys</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-prefix</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more simple character strings or regular expressions of any length; a volume whose name
+                   includes the string is placed on the list of volumes to be cloned. Include field separators (such as periods) if
+                   appropriate. This argument can be combined with any combination of the <emphasis role="bold">-server</emphasis>,
+                   <emphasis role="bold">-partition</emphasis>, <emphasis role="bold">-exclude</emphasis>, and <emphasis
+                   role="bold">-xprefix</emphasis> options.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine housing the volumes to backup. Can be combined with any combination of the
+                   <emphasis role="bold">-prefix</emphasis>, <emphasis role="bold">-partition</emphasis>, <emphasis
+                   role="bold">-exclude</emphasis>, and <emphasis role="bold">-xprefix</emphasis> options.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the partition housing the volumes you wish to backup. Can be combined with any combination of the
+                   <emphasis role="bold">-prefix</emphasis>, <emphasis role="bold">-server</emphasis>, <emphasis
+                   role="bold">-exclude</emphasis>, and <emphasis role="bold">-xprefix</emphasis> options.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-exclude</emphasis></term>
+ 
+                 <listitem>
+                   <para>Indicates that all volumes except those indicated with the <emphasis role="bold">-prefix</emphasis> argument
+                   are to be backed up. The <emphasis role="bold">-prefix</emphasis> argument must be provided along with this one.
+                   Can also be combined with any combination of the <emphasis role="bold">-prefix</emphasis>, <emphasis
+                   role="bold">-server</emphasis>, and <emphasis role="bold">-partition</emphasis> arguments; or with both the
+                   <emphasis role="bold">-prefix</emphasis> and <emphasis role="bold">-xprefix</emphasis> arguments, but not with the
+                   <emphasis role="bold">-xprefix</emphasis> argument alone.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-xprefix</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more simple character strings or regular expressions of any length; a volume whose name
+                   does not include the string is placed on the list of volumes to be cloned. Can be combined with any combination of
+                   the <emphasis role="bold">-prefix</emphasis>, <emphasis role="bold">-server</emphasis>, and <emphasis
+                   role="bold">-partition</emphasis> arguments; in addition, it can be combined with both the <emphasis
+                   role="bold">-prefix</emphasis> and <emphasis role="bold">-exclude</emphasis> options, but not with the <emphasis
+                   role="bold">-exclude</emphasis> flag alone.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dryrun</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays on the standard output stream a list of the volumes to be cloned, without actually cloning
+                   them.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays on the standard output stream a statement that summarizes the criteria being used to select
+                   volumes, if combined with the <emphasis role="bold">-dryrun</emphasis> flag; otherwise, traces the cloning
+                   operation for each volume.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ208">
+     <title>Mounting Volumes</title>
+ 
+     <indexterm>
+       <primary>mounting</primary>
+ 
+       <secondary>volume</secondary>
+ 
+       <tertiary>general instructions</tertiary>
+     </indexterm>
+ 
+     <para>Mount points make the contents of AFS volumes visible and accessible in the AFS filespace, as described in <link
+     linkend="HDRWQ183">About Mounting Volumes</link>. This section discusses in more detail how the Cache Manager handles mount
+     points as it traverses the filespace. It describes the three types of mount points, their purposes, and how to distinguish
+     between them, and provides instructions for creating, removing, and examining mount points.</para>
+ 
+     <sect2 id="HDRWQ209">
+       <title>The Rules of Mount Point Traversal</title>
+ 
+       <para>The Cache Manager observes three basic rules as it traverses the AFS filespace and encounters mount points:
+       <itemizedlist>
+           <listitem>
+             <para><emphasis role="bold">Rule 1:</emphasis> Access Backup and Read-only Volumes When Specified</para>
+ 
+             <para>When the Cache Manager encounters a mount point that specifies a volume with either a <emphasis
+             role="bold">.readonly</emphasis> or a <emphasis role="bold">.backup</emphasis> extension, it accesses that type of
+             volume only. If a mount point does not have either a <emphasis role="bold">.backup</emphasis> or <emphasis
+             role="bold">.readonly</emphasis> extension, the Cache Manager uses Rules 2 and 3.</para>
+ 
+             <para>For example, the Cache Manager never accesses the read/write version of a volume if the mount point names the
+             backup version. If the specified version is inaccessible, the Cache Manager reports an error.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">Rule 2:</emphasis> Follow the Read-only Path When Possible</para>
+ 
+             <para>If a mount point resides in a read-only volume and the volume that it references is replicated, the Cache Manager
+             attempts to access a read-only copy of the volume; if the referenced volume is not replicated, the Cache Manager
+             accesses the read/write copy. The Cache Manager is thus said to prefer a <emphasis>read-only</emphasis> path through the
+             filespace, accessing read-only volumes when they are available.</para>
+ 
+             <para>The Cache Manager starts on the read-only path in the first place because it always accesses a read-only copy of
+             the <emphasis role="bold">root.afs</emphasis> volume if it exists; the volume is mounted at the root of a cell's AFS
+             filespace (named <emphasis role="bold">/afs</emphasis> by convention). That is, if the <emphasis
+             role="bold">root.afs</emphasis> volume is replicated, the Cache Manager attempts to access a read-only copy of it rather
+             than the read/write copy. This rule then keeps the Cache Manager on a read-only path as long as each successive volume
+             is replicated. The implication is that both the <emphasis role="bold">root.afs</emphasis> and <emphasis
+             role="bold">root.cell</emphasis> volumes must be replicated for the Cache Manager to access replicated volumes mounted
+             below them in the AFS filespace. The volumes are conventionally mounted at the <emphasis role="bold">/afs</emphasis> and
+             <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable> directories, respectively.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">Rule 3:</emphasis> Once on a Read/write Path, Stay There</para>
+ 
+             <para>If a mount point resides in a read/write volume and the volume name does not have a <emphasis
+             role="bold">.readonly</emphasis> or a <emphasis role="bold">.backup</emphasis> extension, the Cache Manager attempts to
+             access only the a read/write version of the volume. The access attempt fails with an error if the read/write version is
+             inaccessible, even if a read-only version is accessible. In this situation the Cache Manager is said to be on a
+             <emphasis>read/write path</emphasis> and cannot switch back to the read-only path unless mount point explicitly names a
+             volume with a <emphasis role="bold">.readonly</emphasis> extension. (Cellular mount points are an important exception to
+             this rule, as explained in the following discussion.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ210">
+       <title>The Three Types of Mount Points</title>
+ 
+       <para>AFS uses three types of mount points, each appropriate for a different purpose because of how the Cache Manager handles
+       them. <itemizedlist>
+           <listitem>
+             <para>When the Cache Manager crosses a <emphasis>regular</emphasis> mount point, it obeys all three of the mount point
+             traversal rules previously described.</para>
+ 
+             <indexterm>
+               <primary>regular mount point</primary>
+ 
+               <secondary></secondary>
+ 
+               <see>mount point</see>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>mount point</primary>
+ 
+               <secondary>regular</secondary>
+ 
+               <tertiary>described</tertiary>
+             </indexterm>
+ 
+             <para>AFS performs best when the vast majority of mount points in the filespace are regular, because the mount point
+             traversal rules promote the most efficient use of both replicated and nonreplicated volumes. Because there are likely to
+             be multiple read-only copies of a replicated volume, it makes sense for the Cache Manager to access one of them rather
+             than the single read/write version, and the second rule leads it to do so. If a volume is not replicated, the third rule
+             means that the Cache Manager still accesses the read/write volume when that is the only type available. In other words,
+             a regular mount point does not force the Cache Manager always to access read-only volumes (it is explicitly not a
+             "read-only mount point").</para>
+ 
+             <para>To create a regular mount point, use the <emphasis role="bold">fs mkmount</emphasis> command as described in <link
+             linkend="HDRWQ212">To create a regular or read/write mount point</link>.</para>
+ 
+             <note>
+               <para>To enable the Cache Manager to access the read-only version of a replicated volume named by a regular mount
+               point, all volumes that are mounted above it in the pathname must also be replicated. That is the only way the Cache
+               Manager can stay on a read-only path to the target volume.</para>
+             </note>
+           </listitem>
+ 
+           <listitem>
+             <para>When the Cache Manager crosses a <emphasis>read/write</emphasis> mount point, it attempts to access only the
+             volume version named in the mount point. If the volume name is the base (read/write) form, without a <emphasis
+             role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> extension, the Cache Manager accesses the
+             read/write version of the volume, even if it is replicated. In other words, the Cache Manager disregards the second
+             mount point traversal rule when crossing a read/write mount point: it switches to the read/write path through the
+             filespace.</para>
+ 
+             <indexterm>
+               <primary>read/write mount point</primary>
+ 
+               <secondary></secondary>
+ 
+               <see>mount point</see>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>mount point</primary>
+ 
+               <secondary>read/write</secondary>
+ 
+               <tertiary>described</tertiary>
+             </indexterm>
+ 
+             <para>It is conventional to create only one read/write mount point in a cell's filespace, using it to mount the cell's
+             <emphasis role="bold">root.cell</emphasis> volume just below the AFS filespace root (by convention, <emphasis
+             role="bold">/afs/.</emphasis><replaceable>cellname</replaceable>). As indicated, it is conventional to place a period at
+             the start of the read/write mount point's name (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). The period
+             distinguishes the read/write mount point from the regular mount point for the <emphasis role="bold">root.cell</emphasis>
+             volume at the same level. This is the only case in which it is conventional to create two mount points for the same
+             volume. A desirable side effect of this naming convention for this read/write mount point is that it does not appear in
+             the output of the UNIX <emphasis role="bold">ls</emphasis> command unless the <emphasis role="bold">-a</emphasis> flag
+             is included, essentially hiding it from regular users who have no use for it.</para>
+ 
+             <para>The existence of a single read/write mount point at this point in the filespace provides access to the read/write
+             version of every volume when necessary, because it puts the Cache Manager on a read/write path right at the top of the
+             filespace. At the same time, the regular mount point for the <emphasis role="bold">root.cell</emphasis> volume puts the
+             Cache Manager on a read-only path most of the time.</para>
+ 
+             <para>Using a read/write mount point for a read-only or backup volume is acceptable, but unnecessary. The first rule of
+             mount point traversal already specifies that the Cache Manager accesses them if the volume name in a regular mount point
+             has a <emphasis role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> extension.</para>
+ 
+             <para>To create a read/write mount point, use the <emphasis role="bold">-rw</emphasis> flag on the <emphasis
+             role="bold">fs mkmount</emphasis> command as described in <link linkend="HDRWQ212">To create a regular or read/write
+             mount point</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When the Cache Manager crosses a <emphasis>cellular</emphasis> mount point, it accesses the indicated volume in
+             the specified cell, which is normally a foreign cell. (If the mount point does not name a cell along with the volume,
+             the Cache Manager accesses the volume in the cell where the mount point resides.) When crossing a regular cellular mount
+             point, the Cache Manager disregards the third mount point traversal rule. Instead, it accesses a read-only version of
+             the volume if it is replicated, even if the volume that houses the mount point is read/write.</para>
+ 
+             <para>It is inappropriate to circumvent this behavior by creating a read/write cellular mount point, because traversing
+             the read/write path imposes an unfair load on the foreign cell's file server machines. The File Server must issue a
+             callback for each file fetched from the read/write volume, rather than single callback required for a read-only volume.
+             In any case, only a cell's own administrators generally need to access the read/write versions of replicated
+             volumes.</para>
+ 
+             <indexterm>
+               <primary>cellular mount point</primary>
+ 
+               <secondary></secondary>
+ 
+               <see>mount point</see>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>mount point</primary>
+ 
+               <secondary>cellular</secondary>
+ 
+               <tertiary>described</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>mounting</primary>
+ 
+               <secondary>foreign volume in local cell</secondary>
+             </indexterm>
+ 
+             <para>It is conventional to create cellular mount points only at the second level in a cell's filespace, using them to
+             mount foreign cells' <emphasis role="bold">root.cell</emphasis> volumes just below the AFS filespace root (by
+             convention, at <emphasis role="bold">/afs/</emphasis><replaceable>foreign_cellname</replaceable>). The mount point
+             enables local users to access the foreign cell's filespace, assuming they have the necessary permissions on the ACL of
+             the volume's root directory and that there is an entry for the foreign cell in each local client machine's <emphasis
+             role="bold">/usr/vice/etc/CellServDB</emphasis> file, as described in <link linkend="HDRWQ406">Maintaining Knowledge of
+             Database Server Machines</link>.</para>
+ 
+             <para>Creating cellular mount points at other levels in the filespace and mounting foreign volumes other than the
+             <emphasis role="bold">root.cell</emphasis> volume is not generally appropriate. It can be confusing to users if the
+             Cache Manager switches between cells at various points in a pathname.</para>
+ 
+             <para>To create a regular cellular mount point, use the <emphasis role="bold">-cell</emphasis> argument to specify the
+             cell name, as described in <link linkend="HDRWQ213">To create a cellular mount point</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>To examine a mount point, use the <emphasis role="bold">fs lsmount</emphasis> command as described in <link
+       linkend="HDRWQ211">To display a mount point</link>. The command's output uses distinct notation to identify regular,
+       read/write, and cellular mount points. To remove a mount point, use the <emphasis role="bold">fs rmmount</emphasis> command as
+       described in <link linkend="HDRWQ215">To remove a mount point</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_227">
+       <title>Creating a mount point in a foreign cell</title>
+ 
+       <para>Creating a mount point in a foreign cell's filespace (as opposed to mounting a foreign volume in the local cell) is
+       basically the same as creating a mount point in the local filespace. The differences are that the <emphasis role="bold">fs
+       mkmount</emphasis> command's directory argument specifies a pathname in the foreign cell rather than the local cell, and you
+       must have the required permissions on the ACL of the foreign directory where you are creating the mount point. The <emphasis
+       role="bold">fs mkmount</emphasis> command's <emphasis role="bold">-cell</emphasis> argument always specifies the cell in which
+       the volume resides, not the cell in which to create the mount point.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ211">
+       <title>To display a mount point</title>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>mount point</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>distinguishing different types</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs lsmount</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>lsmount</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs lsmount</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs lsmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">ls</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">lsmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point to display.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>If the specified directory is a mount point, the output is of the following form:</para>
+ 
+       <programlisting>
+    'directory' is a mount point for volume 'volume name'
+ </programlisting>
+ 
+       <para>For a regular mount point, a number sign (<computeroutput>#</computeroutput>) precedes the volume name string, as in the
+       following example command issued on a client machine in the <emphasis role="bold">abc.com</emphasis> cell.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs lsmount /afs/abc.com/usr/terry</emphasis>
+    '/afs/abc.com/usr/terry' is a mount point for volume '#user.terry'
+ </programlisting>
+ 
+       <para>For a read/write mount point, a percent sign (<computeroutput>%</computeroutput>) precedes the volume name string, as in
+       the following example command issued on a client machine in the <emphasis role="bold">abc.com</emphasis> cell. The cell's
+       administrators have followed the convention of preceding the read/write mount point's name with a period.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs lsmount /afs/.abc.com</emphasis>
+    '/afs/.abc.com' is a mount point for volume '%root.cell'
+ </programlisting>
+ 
+       <para>For a cellular mount point, a cell name and colon (<computeroutput>:</computeroutput>) follow the number or percent sign
+       and precede the volume name string, as in the following example command issued on a client machine in the <emphasis
+       role="bold">abc.com</emphasis> cell.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs lsmount /afs/ghi.gov</emphasis>
+    '/afs/ghi.gov' is a mount point for volume '#ghi.gov:root.cell'
+ </programlisting>
+ 
+       <para>For a symbolic link to a mount point, the output is of the form shown in the following example command issued on a
+       client machine in the <emphasis role="bold">abc.com</emphasis> cell.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs lsmount /afs/abc</emphasis>
+    '/afs/abc' is a symbolic link, leading to a mount point for volume '#root.cell'
+ </programlisting>
+ 
+       <para>If the directory is not a mount point or is not in AFS, the output reads as follows.</para>
+ 
+       <programlisting>
+    'directory' is not a mount point.
+ </programlisting>
+ 
+       <para>If the output is garbled, it is possible that the mount point has become corrupted in the local cache. Use the <emphasis
+       role="bold">fs flushmount</emphasis> command as described in <link linkend="HDRWQ413">To flush one or more mount
+       points</link>. This forces the Cache Manager to refetch the mount point.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ212">
+       <title>To create a regular or read/write mount point</title>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>read/write or regular mount point</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>creating read/write or regular</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>regular</secondary>
+ 
+         <tertiary>creating</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>read/write</secondary>
+ 
+         <tertiary>creating</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs mkmount</secondary>
+ 
+         <tertiary>general instructions</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>mkmount</secondary>
+ 
+         <tertiary>general instructions</tertiary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">i</emphasis>( <emphasis role="bold">insert</emphasis>) and <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) permissions on the ACL of the directory where you
+           are placing the mount point. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully
+           described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to create the mount point. Include the <emphasis
+           role="bold">-rw</emphasis> flag if creating a read/write mount point. <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt; [<emphasis
+                 role="bold">-rw</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">mk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation for <emphasis role="bold">mkmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point to create. A file or directory with the same name cannot already exist. A partial
+                   pathname is interpreted relative to the current working directory.</para>
+ 
+                   <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to create
+                   a new mount point in a read-only volume. By convention, you indicate the read/write path by placing a period
+                   before the cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>).
+                   For further discussion of the concept of read/write and read-only paths through the filespace, see <link
+                   linkend="HDRWQ209">The Rules of Mount Point Traversal</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the volume's full name, including the <emphasis role="bold">.backup</emphasis> or <emphasis
+                   role="bold">.readonly</emphasis> extension for a backup or read-only volume, if appropriate.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-rw</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates a read/write mount point.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ213">
+       <title>To create a cellular mount point</title>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>cellular mount point</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>creating cellular</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>cellular</secondary>
+ 
+         <tertiary>creating</tertiary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">i</emphasis>( <emphasis role="bold">insert</emphasis>) and <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) permissions on the ACL of the directory where you
+           are placing the mount point. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully
+           described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ214" />If you are mounting one or more foreign cells' <emphasis role="bold">root.cell</emphasis>
+           volume at the second level in your filespace and your cell's <emphasis role="bold">root.afs</emphasis> volume is
+           replicated, you must create a temporary mount point for the <emphasis role="bold">root.afs</emphasis> volume's read/write
+           version in a directory on which the ACL grants you the <emphasis role="bold">i</emphasis> and <emphasis
+           role="bold">a</emphasis> permissions. The following command creates a mount point called <emphasis
+           role="bold">new_cells</emphasis> in your cell's <emphasis role="bold">/afs/.</emphasis><replaceable>cellname</replaceable>
+           directory (the entry point to the read/write path in your cell).</para>
+ 
+           <para>Substitute your cell's name for cellname.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable>
+    % <emphasis role="bold">fs mkmount new_cells root.afs</emphasis>
+    % <emphasis role="bold">cd new_cells</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command with the <emphasis role="bold">-cell</emphasis>
+           argument to create a cellular mount point. Repeat the command for each cellular mount point as required. <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt; <emphasis
+                 role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">mk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation for <emphasis role="bold">mkmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point to create. A file or directory with the same name cannot already exist. A partial
+                   pathname is interpreted relative to the current working directory. If you are mounting a foreign cell's <emphasis
+                   role="bold">root.cell</emphasis> volume, the standard value for this argument is the cell's complete Internet
+                   domain name.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the volume's full name, usually <emphasis role="bold">root.cell</emphasis> for a cellular mount
+                   point.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-cell</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete Internet domain name of the cell in which the volume resides.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you performed the instructions in Step <link linkend="LIWQ214">2</link>, issue the <emphasis role="bold">vos
+           release</emphasis> command to release the new version of the <emphasis role="bold">root.afs</emphasis> volume to its
+           read-only sites. (This command requires that you be listed in your cell's <emphasis
+           role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, verify by issuing the <emphasis role="bold">bos
+           listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the users in the UserList
+           file</link>.)</para>
+ 
+           <para>Also issue the <emphasis role="bold">fs checkvolumes</emphasis> command to force the local Cache Manager to access
+           the new replica of the <emphasis role="bold">root.afs</emphasis> volume. If desired, you can also remove the temporary
+           <emphasis role="bold">new_cells</emphasis> mount point from the <emphasis
+           role="bold">/afs/.</emphasis><replaceable>cellname</replaceable> directory.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">vos release root.afs</emphasis>
+    % <emphasis role="bold">fs checkvolumes</emphasis>
+    % <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable>
+    % <emphasis role="bold">fs rmmount new_cells</emphasis>
+ </programlisting>
+ 
+           <para>For your users to access a newly mounted foreign cell, you must also create an entry for it in each client machine's
+           local <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file and either reboot the machine or use the <emphasis
+           role="bold">fs newcell</emphasis> command to insert the entry directly into its kernel memory. See the instructions in
+           <link linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ215">
+       <title>To remove a mount point</title>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>mount point</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>unmounting</primary>
+ 
+         <secondary>volume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mount point</primary>
+ 
+         <secondary>removing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs rmmount</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>rmmount</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">d</emphasis>( <emphasis role="bold">delete</emphasis>) permission on
+           the ACL of the directory from which you are removing the mount point. If necessary, issue the <emphasis role="bold">fs
+           listacl</emphasis> command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs rmmount</emphasis> command to remove the mount point. The volume still exists,
+           but its contents are inaccessible if this is the only mount point for it. <programlisting>
+    % <emphasis role="bold">fs rmmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">rm</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">rmmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point to remove. A partial pathname is interpreted relative to the current working
+                   directory.</para>
+ 
+                   <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to delete
+                   a mount point from a read-only volume. By convention, you indicate the read/write path by placing a period before
+                   the cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For
+                   further discussion of the concept of read/write and read-only paths through the filespace, see <link
+                   linkend="HDRWQ209">The Rules of Mount Point Traversal</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ216">
+     <title>Displaying Information About Volumes</title>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>volume information</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>displaying information about</secondary>
+     </indexterm>
+ 
+     <para>This section explains how to display information about volumes. If you know a volume's name or volume ID number, there are
+     commands for displaying its VLDB entry, its volume header, or both. Other commands display the name or location of the volume
+     that contains a specified file or directory.</para>
+ 
+     <para>For instructions on displaying a volume's quota, see <link linkend="HDRWQ234">Setting and Displaying Volume Quota and
+     Current Size</link>.</para>
+ 
+     <sect2 id="HDRWQ217">
+       <title>Displaying VLDB Entries</title>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume's VLDB entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VLDB</primary>
+ 
+         <secondary>displaying volume entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume entry (VLDB)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>locked VLDB entry</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos listvldb</emphasis> command displays the VLDB entry for the volumes indicated by the
+       combination of arguments you provide. The possibilities are listed here from most to least inclusive: <itemizedlist>
+           <listitem>
+             <para>To display every entry in the VLDB, provide no arguments. It can take a long time to generate the output,
+             depending on the number of entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To display every VLDB entry that mentions a specific file server machine as the site of a volume, specify the
+             machine's name with the <emphasis role="bold">-server</emphasis> argument.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To display every VLDB entry that mentions a certain partition on any file server machine as the site of a volume,
+             specify the partition name with the <emphasis role="bold">-partition</emphasis> argument.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To display every VLDB entry that mentions a certain partition on a certain file server machine as the site of a
+             volume, combine the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis>
+             arguments.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To display a single VLDB entry, specify a volume name or ID number with the <emphasis role="bold">-name</emphasis>
+             argument.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To display the VLDB entry only for volumes with locked VLDB entries, use the <emphasis
+             role="bold">-locked</emphasis> flag with any of the site definitions mentioned previously.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos listvldb</secondary>
+ 
+         <tertiary>syntax</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>listvldb</secondary>
+ 
+         <tertiary>syntax</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ218">
+       <title>To display VLDB entries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos listvldb</emphasis> command. <programlisting>
+    % <emphasis role="bold">vos listvldb</emphasis> [<emphasis role="bold">-name</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;] [<emphasis
+                 role="bold">-server</emphasis> &lt;<replaceable>machine name</replaceable>&gt;] \
+         [<emphasis role="bold">-partition</emphasis> &lt;<replaceable>partition name</replaceable>&gt;] [<emphasis role="bold">-locked</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listvl</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listvldb</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies one volume either by its complete name or volume ID number. Do not combine this argument with the
+                   <emphasis role="bold">-server</emphasis> or <emphasis role="bold">-partition</emphasis> arguments.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a file server machine. Combine this argument with the <emphasis role="bold">-partition</emphasis>
+                   argument if desired, but not with the <emphasis role="bold">-name</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a partition. Combine this argument with the <emphasis role="bold">-server</emphasis> argument if
+                   desired, but not with the <emphasis role="bold">-name</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-locked</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays only locked VLDB entries. Combine this flag with any of the other options.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The VLDB entry for each volume includes the following information: <itemizedlist>
+           <listitem>
+             <para>The base (read/write) volume name. The read-only and backup versions have the same name with a <emphasis
+             role="bold">.readonly</emphasis> and <emphasis role="bold">.backup</emphasis> extension, respectively.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The volume ID numbers allocated to the versions of the volume that actually exist, in fields labeled
+             <computeroutput>RWrite</computeroutput> for the read/write, <computeroutput>ROnly</computeroutput> for the read-only,
+             <computeroutput>Backup</computeroutput> for the backup, and <computeroutput>RClone</computeroutput> for the
+             ReleaseClone. (If a field does not appear, the corresponding version of the volume does not exist.) The appearance of
+             the <computeroutput>RClone</computeroutput> field normally indicates that a release operation did not complete
+             successfully; the <computeroutput>Old release</computeroutput> and <computeroutput>New release</computeroutput> flags
+             often also appear on one or more of the site definition lines described just following.</para>
+ 
+             <indexterm>
+               <primary>site</primary>
+ 
+               <secondary>count in VLDB</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>VLDB</primary>
+ 
+               <secondary>site count for volume</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The number of sites that house a read/write or read-only copy of the volume, following the string
+             <computeroutput>number of sites -&gt;</computeroutput>.</para>
+ 
+             <indexterm>
+               <primary>type flag for volume</primary>
+ 
+               <secondary>VLDB entry</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>VLDB</primary>
+ 
+               <secondary>volume type flags</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>release</primary>
+ 
+               <secondary>status flags on site definitions in VLDB entry</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>VLDB</primary>
+ 
+               <secondary>release status flags in volume entry</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>status flag</primary>
+ 
+               <secondary>release, on site definitions in VLDB entry</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>A line for each site that houses a read/write or read-only copy of the volume, specifying the file server machine,
+             partition, and type of volume (<computeroutput>RW</computeroutput> for read/write or <computeroutput>RO</computeroutput>
+             for read-only). If a backup version exists, it is understood to share the read/write site. Several flags can appear with
+             a site definition: <variablelist>
+                 <indexterm>
+                   <primary>Not released</primary>
+ 
+                   <secondary>status flag on site definition in VLDB entry</secondary>
+                 </indexterm>
+ 
+                 <varlistentry>
+                   <term><computeroutput>Not released</computeroutput></term>
+ 
+                   <listitem>
+                     <para>Indicates that the <emphasis role="bold">vos release</emphasis> command has not been issued since the
+                     <emphasis role="bold">vos addsite</emphasis> command was used to define the read-only site.</para>
+ 
+                     <indexterm>
+                       <primary>Old release</primary>
+ 
+                       <secondary>status flag on site definition in VLDB entry</secondary>
+                     </indexterm>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>Old release</computeroutput></term>
+ 
+                   <listitem>
+                     <para>Indicates that a <emphasis role="bold">vos release</emphasis> command did not complete successfully,
+                     leaving the previous, obsolete version of the volume at this site.</para>
+ 
+                     <indexterm>
+                       <primary>New release</primary>
+ 
+                       <secondary>status flag on site definition in VLDB entry</secondary>
+                     </indexterm>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>New release</computeroutput></term>
+ 
+                   <listitem>
+                     <para>Indicates that a <emphasis role="bold">vos release</emphasis> command did not complete successfully, but
+                     that this site did receive the correct new version of the volume.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the VLDB entry is locked, the string <computeroutput>Volume is currently LOCKED</computeroutput>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>For further discussion of the <computeroutput>New release</computeroutput> and <computeroutput>Old
+       release</computeroutput> flags, see <link linkend="HDRWQ192">Replicating Volumes (Creating Read-only Volumes)</link>.</para>
+ 
+       <para>An example of this command and its output for a single volume:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">vos listvldb user.terry</emphasis>
+    user.terry
+        RWrite: 50489902    Backup: 50489904
+        number of sites -&gt; 1
+           server fs3.abc.com partition /vicepc RW Site
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ219">
+       <title>Displaying Volume Headers</title>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume header</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume header</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>only</tertiary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos listvol</emphasis> command displays the volume header for every volume on one or all
+       partitions on a file server machine. The <emphasis role="bold">vos</emphasis> command interpreter obtains the information from
+       the Volume Server on the specified machine. You can control the amount of information displayed by including one of the
+       <emphasis role="bold">-fast</emphasis>, the <emphasis role="bold">-long</emphasis>, or the <emphasis
+       role="bold">-extended</emphasis> flags described following the instructions in <link linkend="HDRWQ220">To display volume
+       headers</link>.</para>
+ 
+       <para>To display a single volume's volume header of one volume only, use the <emphasis role="bold">vos examine</emphasis>
+       command as described in <link linkend="HDRWQ221">Displaying One Volume's VLDB Entry and Volume Header</link>.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos listvol</secondary>
+ 
+         <tertiary>syntax</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>listvol</secondary>
+ 
+         <tertiary>syntax</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ220">
+       <title>To display volume headers</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos listvol</emphasis> command. <programlisting>
+    % <emphasis role="bold">vos listvol</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>partition name</replaceable>&gt;] [<emphasis
+                 role="bold">-fast</emphasis>] [<emphasis role="bold">-long</emphasis>] [<emphasis role="bold">-extended</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listvo</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listvol</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine for which to display volume headers. Provide this argument alone or with the
+                   partition name argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names one partition on the file server machine named by the machine name argument, which must be provided
+                   along with this one.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-fast</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays only the volume ID numbers of relevant volumes. Do not combine this flag with the <emphasis
+                   role="bold">-long</emphasis> or <emphasis role="bold">-extended</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-long</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays more detailed information about each volume. Do not combine this flag with the <emphasis
+                   role="bold">-fast</emphasis> or <emphasis role="bold">-extended</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-extended</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays all of the information displayed by the <emphasis role="bold">-long</emphasis> flag, plus tables of
+                   statistics about reads and writes to the files in the volume. Do not combine this flag with the <emphasis
+                   role="bold">-fast</emphasis> or <emphasis role="bold">-long</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output is ordered alphabetically by volume name and by default provides the following information on a single line
+       for each volume: <itemizedlist>
+           <listitem>
+             <para>Name</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Volume ID number</para>
+ 
+             <indexterm>
+               <primary>type flag for volume</primary>
+ 
+               <secondary>volume header</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Type (the flag is <computeroutput>RW</computeroutput> for read/write, <computeroutput>RO</computeroutput> for
+             read-only, <computeroutput>BK</computeroutput> for backup)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Size in kilobytes (<computeroutput>1024</computeroutput> equals a megabyte)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Number of files in the volume, if the <emphasis role="bold">-extended</emphasis> flag is provided</para>
+ 
+             <indexterm>
+               <primary>status flags in volume header</primary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Status on the file server machine, which is one of the following: <variablelist>
+                 <indexterm>
+                   <primary>On-line status flag in volume header</primary>
+                 </indexterm>
+ 
+                 <varlistentry>
+                   <term><computeroutput>On-line</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The volume is completely accessible to Cache Managers.</para>
+ 
+                     <indexterm>
+                       <primary>Off-line status flag in volume header</primary>
+                     </indexterm>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>Off-line</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The volume is not accessible to Cache Managers, but does not seem to be corrupted. This status appears
+                     while a volume is being dumped, for example.</para>
+ 
+                     <indexterm>
+                       <primary>needs salvage status flag in volume header</primary>
+                     </indexterm>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>Off-line**needs salvage**</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The volume is not accessible to Cache Managers, because it seems to be corrupted. Use the <emphasis
+                     role="bold">bos salvage</emphasis> or <emphasis role="bold">salvager</emphasis> command to repair the
+                     corruption.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If the following message appears instead of the previously listed information, it indicates that a volume is not
+       accessible to Cache Managers or the <emphasis role="bold">vos</emphasis> command interpreter, for example because a clone is
+       being created.</para>
+ 
+       <programlisting>
+    **** Volume volume_ID is busy ****
+ </programlisting>
+ 
+       <para>If the following message appears instead of the previously listed information, it indicates that the File Server is
+       unable to attach the volume, perhaps because it is seriously corrupted. The <emphasis role="bold">FileLog</emphasis> and
+       <emphasis role="bold">VolserLog</emphasis> log files in the <emphasis role="bold">/usr/afs/logs</emphasis> directory on the
+       file server machine possibly provide additional information; use the <emphasis role="bold">bos getlog</emphasis> command to
+       display them.</para>
+ 
+       <programlisting>
+    **** Could not attach volume volume_ID ****
+ </programlisting>
+ 
+       <para>(For instructions on salvaging a corrupted or unattached volume, see <link linkend="HDRWQ232">Salvaging
+       Volumes</link>.)</para>
+ 
+       <para>The information about individual volumes is bracketed by summary lines. The first line of output specifies the number of
+       volumes in the listing. The last line of output summarizes the number of volumes that are online, offline, and busy, as in the
+       following example:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">vos listvol  fs2.abc.com /vicepb</emphasis>
+    Total number of volumes on server fs2.abc.com \
+                                        partition /vicepb : 66
+    sys                  1969534847 RW       1582 K On-line
+    sys.backup           1969535105 BK       1582 K On-line
+          .                   .     .         .   .    .
+          .                   .     .         .   .    .
+    user.pat             1969534536 RW      17518 K On-line
+    user.pat.backup      1969534538 BK      17537 K On-line
+    Total volumes onLine 66 ; Total volumes offLine 0 ;  Total busy 0
+ </programlisting>
+ 
+       <para><emphasis role="bold">Output with the -fast Flag</emphasis></para>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>listvol</secondary>
+ 
+         <tertiary>output with -fast flag</tertiary>
+       </indexterm>
+ 
+       <para>If you include the <emphasis role="bold">-fast</emphasis> flag displays only the volume ID number of each volume,
+       arranged in increasing numerical order, as in the following example. The final line (which summarizes the number of on-line,
+       off-line, and busy volumes) is omitted.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">vos listvol fs3.abc.com /vicepa -f</emphasis>
+    Total number of volumes on server fs3.abc.com  \
+                                        partition /vicepa: 37
+    50489902
+    50489904
+       .
+       .
+    35970325
+    49732810
+ </programlisting>
+ 
+       <para><emphasis role="bold">Output with the -long Flag</emphasis></para>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>listvol</secondary>
+ 
+         <tertiary>output with -long flag</tertiary>
+       </indexterm>
+ 
+       <para>When you include the <emphasis role="bold">-long</emphasis> flag, , the output for each volume includes all of the
+       information in the default listing plus the following. Each item in this list corresponds to a separate line of output:
+       <itemizedlist>
+           <listitem>
+             <para>The file server machine and partition that house the volume, as determined by the command interpreter as the
+             command runs, rather than derived from the VLDB or the volume header.</para>
+ 
+             <indexterm>
+               <primary>read/write volume</primary>
+ 
+               <secondary>ID number in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>read-only volume</primary>
+ 
+               <secondary>ID number in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>backup volume</primary>
+ 
+               <secondary>ID number in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>ReleaseClone volume</primary>
+ 
+               <secondary>ID number in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>RWrite field in volume header</primary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>ROnly field in volume header</primary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>Backup field in volume header</primary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>RClone field in volume header</primary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The volume ID numbers associated with the various versions of the volume: read/write
+             (<computeroutput>RWrite</computeroutput>), read-only (<computeroutput>ROnly</computeroutput>), backup
+             (<computeroutput>Backup</computeroutput>), and ReleaseClone (<computeroutput>RClone</computeroutput>). One of them
+             matches the volume ID number that appears on the first line of the volume's output. If the value in the
+             <computeroutput>RWrite</computeroutput>, <computeroutput>ROnly</computeroutput>, or
+             <computeroutput>Backup</computeroutput> field is <computeroutput>0</computeroutput> (zero), there is no volume of that
+             type. If there is currently no ReleaseClone, the <computeroutput>RClone</computeroutput> field does not appear at
+             all.</para>
+ 
+             <indexterm>
+               <primary>volume quota</primary>
+ 
+               <secondary>recorded in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>MaxQuota field in volume header</primary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The maximum space quota allotted to the read/write copy of the volume, expressed in kilobyte blocks in the
+             <computeroutput>MaxQuota</computeroutput> field.</para>
+ 
+             <indexterm>
+               <primary>creation date</primary>
+ 
+               <secondary>recorded in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>Creation date in volume header</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The date and time the volume was created, in the <computeroutput>Creation</computeroutput> field. If the volume
+             has been restored with the <emphasis role="bold">backup diskrestore</emphasis>, <emphasis role="bold">backup
+             volrestore</emphasis>, or <emphasis role="bold">vos restore</emphasis> command, this is the restore time.</para>
+ 
+             <indexterm>
+               <primary>update date</primary>
+ 
+               <secondary>recorded in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>Last Update date in volume header</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The date and time when the contents of the volume last changed, in the <computeroutput>Last
+             Update</computeroutput> field. For read-only and backup volumes, it matches the timestamp in the
+             <computeroutput>Creation</computeroutput> field.</para>
+ 
+             <indexterm>
+               <primary>access</primary>
+ 
+               <secondary>count, in volume header</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>counter in header for number of accesses</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The number of times the volume has been accessed for a fetch or store operation since the later of the two
+             following times: <itemizedlist>
+                 <listitem>
+                   <para>12:00 a.m. on the day the command is issued</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The last time the volume changed location</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>An example of the output when the <emphasis role="bold">-long</emphasis> flag is included:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">vos listvol fs2.abc.com b -long</emphasis>
+    Total number of volumes on server fs2.abc.com
+                                        partition /vicepb: 66
+          .                   .      .         .   .    .
+          .                   .      .         .   .    .
+    user.pat             1969534536 RW      17518 K On-line
+         fs2.abc.com /vicepb
+         RWrite 1969534536 ROnly 0        Backup 1969534538
+         MaxQuota      20000 K
+         Creation    Mon Jun 12 09:02:25 1989
+         Last Update Thu Jan  4 17:39:34 1990
+         1573 accesses in the past day (i.e., vnode references)
+    user.pat.backup      1969534538 BK      17537 K On-line
+         fs2.abc.com /vicepb
+         RWrite 1969534536 ROnly 0        Backup 1969534538
+         MaxQuota      20000 K
+         Creation    Fri Jan  5 06:37:59 1990
+         Last Update Fri Jan  5 06:37:59 1990
+         0 accesses in the past day (i.e., vnode references)
+             .               .         .     .       .
+             .               .         .     .       .
+    Total volumes onLine 66 ; Total volumes offLine 0 ; Total busy 0
+ </programlisting>
+ 
+       <para><emphasis role="bold">Output with the -extended Flag</emphasis></para>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>listvol</secondary>
+ 
+         <tertiary>output with -extended flag</tertiary>
+       </indexterm>
+ 
+       <para>When you include the <emphasis role="bold">-extended</emphasis> flag, the output for each volume includes all of the
+       information reported with the <emphasis role="bold">-long</emphasis> flag, plus two tables of statistics: <itemizedlist>
+           <listitem>
+             <para>The table labeled <computeroutput>Raw Read/Write Stats</computeroutput> table summarizes the number of times the
+             volume has been accessed for reading or writing.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The table labeled <computeroutput>Writes Affecting Authorship</computeroutput> table contains information on
+             writes made to files and directories in the specified volume.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>An example of the output when the <emphasis role="bold">-extended</emphasis> flag is included:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">vos listvol fs3.abc.com a -extended</emphasis>
+    common.bboards   1969535592 RW    23149 K used 9401 files On-line
+        fs3.abc.com /vicepa
+        RWrite 1969535592 ROnly          0 Backup 1969535594
+        MaxQuota      30000 K
+        Creation    Mon Mar  8 14:26:05 1999
+        Last Update Mon Apr 26 09:20:43 1999
+        11533 accesses in the past day (i.e., vnode references)
+                          Raw Read/Write Stats
+              |-------------------------------------------|
+              |    Same Network     |    Diff Network     |
+              |----------|----------|----------|----------|
+              |  Total   |   Auth   |   Total  |   Auth   |
+              |----------|----------|----------|----------|
+    Reads     |      151 |      151 |     1092 |     1068 |
+    Writes    |        3 |        3 |      324 |      324 |
+              |-------------------------------------------|
+                       Writes Affecting Authorship
+              |-------------------------------------------|
+              |   File Authorship   | Directory Authorship|
+              |----------|----------|----------|----------|
+              |   Same   |   Diff   |    Same  |   Diff   |
+              |----------|----------|----------|----------|
+    0-60 sec  |       92 |        0 |      100 |        4 |
+    1-10 min  |        1 |        0 |       14 |        6 |
+    10min-1hr |        0 |        0 |       19 |        4 |
+    1hr-1day  |        1 |        0 |       13 |        0 |
+    1day-1wk  |        1 |        0 |        1 |        0 |
+    &gt; 1wk     |        0 |        0 |        0 |        0 |
+              |-------------------------------------------|
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ221">
+       <title>Displaying One Volume's VLDB Entry and Volume Header</title>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>VLDB entry</secondary>
+ 
+         <tertiary>with volume header</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>VLDB entry with volume header</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>VLDB</primary>
+ 
+         <secondary>displaying entry</secondary>
+ 
+         <tertiary>with volume header</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>entry in VLDB</primary>
+ 
+         <secondary>displaying, with volume header</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume header</secondary>
+ 
+         <tertiary>with VLDB entry</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume header with VLDB entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume header</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>with VLDB entry</tertiary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos examine</emphasis> command displays information from both the VLDB and the volume header
+       for a single volume. There is some redundancy in the information from the two sources, which allows you to compare the VLDB
+       and volume header.</para>
+ 
+       <para>Because the volume header for each version of a volume (read/write, read-only, and backup) is different, you can specify
+       which one to display. Include the <emphasis role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis>
+       extension on the volume name or ID argument as appropriate. The information from the VLDB is the same for all three
+       versions.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos examine</secondary>
+ 
+         <tertiary>basic instructions</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>examine</secondary>
+ 
+         <tertiary>basic instructions</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ222">
+       <title>To display one volume's VLDB entry and volume header</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos examine</emphasis> command. <programlisting>
+    % <emphasis role="bold">vos examine</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">e</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies one volume either by its complete name or volume ID number. It can be a read/write, read-only, or
+                   backup type. Use the <emphasis role="bold">.backup</emphasis> or <emphasis role="bold">.readonly</emphasis>
+                   extension if appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The top part of the output displays the same information from a volume header as the <emphasis role="bold">vos
+       listvol</emphasis> command with the <emphasis role="bold">-long</emphasis> flag, as described following the instructions in
+       <link linkend="HDRWQ220">To display volume headers</link>. If you specify the read-only version of the volume and it exists at
+       more than one site, the output includes all of them. The bottom part of the output lists the same information from the VLDB as
+       the <emphasis role="bold">vos listvldb</emphasis> command, as described following the instructions in <link
+       linkend="HDRWQ218">To display VLDB entries</link>.</para>
+ 
+       <para>Below is an example for a volume whose VLDB entry is currently locked.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">vos examine user.terry</emphasis>
+    user.terry                    536870981 RW   3459 K On-line
+        fs3.abc.com /vicepa
+        Write 5360870981   ROnly          0  Backup 536870983
+        MaxQuota      40000 K
+        Creation    Mon Jun 12 15:22:06 1989
+        Last Update Fri Jun 16 09:34:35 1989
+        5719 accesses in the past day (i.e., vnode references)
+        RWrite: 5360870981   Backup: 536870983
+        number of sites -&gt; 1
+           server fs3.abc.com partition /vicepa RW Site
+        Volume is currently LOCKED
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ223">
+       <title>Displaying the Name or Location of the Volume that Contains a File</title>
+ 
+       <para>This section explains how to learn the name, volume ID number, or location of the volume that contains a file or
+       directory.</para>
+ 
+       <para>You can also use one piece of information about a volume (for example, its name) to obtain other information about it
+       (for example, its location). The following list points you to the relevant instructions: <itemizedlist>
+           <indexterm>
+             <primary>translating</primary>
+ 
+             <secondary>volume name to ID number</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>learning</primary>
+ 
+             <secondary>volume ID</secondary>
+ 
+             <tertiary>given volume name</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume name</primary>
+ 
+             <secondary>translating</secondary>
+ 
+             <tertiary>to volume ID number</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume ID number</primary>
+ 
+             <secondary>learning</secondary>
+ 
+             <tertiary>from volume name</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>examine</secondary>
+ 
+             <tertiary>to learn volume ID</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>translating</primary>
+ 
+             <secondary>volume ID number to name</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>learning</primary>
+ 
+             <secondary>volume name</secondary>
+ 
+             <tertiary>given volume ID number</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume name</primary>
+ 
+             <secondary>learning</secondary>
+ 
+             <tertiary>from volume ID number</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume ID number</primary>
+ 
+             <secondary>translating</secondary>
+ 
+             <tertiary>to volume name</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>examine</secondary>
+ 
+             <tertiary>to learn volume name</tertiary>
+           </indexterm>
+ 
+           <listitem>
+             <para>To use a volume's name to learn the volume ID numbers of all its existing versions, use the <emphasis
+             role="bold">vos examine</emphasis> command as described in <link linkend="HDRWQ222">To display one volume's VLDB entry
+             and volume header</link>.</para>
+ 
+             <para>You can also use the command to learn a volume's name by providing its ID number.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To use a volume's name or ID number to learn its location, use the <emphasis role="bold">vos listvldb</emphasis>
+             command as described in <link linkend="HDRWQ218">To display VLDB entries</link>.</para>
+ 
+             <indexterm>
+               <primary>translating</primary>
+ 
+               <secondary>volume name/ID number to volume location</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>learning</primary>
+ 
+               <secondary>volume location</secondary>
+ 
+               <tertiary>given volume name/ID number</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume name</primary>
+ 
+               <secondary>translating</secondary>
+ 
+               <tertiary>to volume location</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume ID number</primary>
+ 
+               <secondary>translating</secondary>
+ 
+               <tertiary>to volume location</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>volume location</primary>
+ 
+               <secondary>learning from volume name/ID number</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>vos commands</primary>
+ 
+               <secondary>listvldb</secondary>
+ 
+               <tertiary>to learn volume location</tertiary>
+             </indexterm>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>translating</primary>
+ 
+         <secondary>directory/file name to volume name</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>learning</primary>
+ 
+         <secondary>volume name</secondary>
+ 
+         <tertiary>given directory/file name</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory/file name</primary>
+ 
+         <secondary>translating to volume name</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume name</primary>
+ 
+         <secondary>learning</secondary>
+ 
+         <tertiary>from directory/file name</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs listquota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>listquota</secondary>
+       </indexterm>
+ 
+       <sect3 id="HDRWQ224">
+         <title>To display the name of the volume that contains a file</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs listquota</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs listquota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+             <para>where <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold">lq</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is an acceptable alias for <emphasis role="bold">listquota</emphasis>(and <emphasis
+                     role="bold">listq</emphasis> the shortest acceptable abbreviation).</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                   <listitem>
+                     <para>Names a directory or file housed in the volume for which to display the name. Partial pathnames are
+                     interpreted relative to the current working directory, which is the default if this argument is omitted.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+         </orderedlist>
+ 
+         <para>The following is an example of the output:</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">fs listquota /afs/abc.com/usr/terry</emphasis>
+    Volume Name     Quota    Used    % Used   Partition
+    user.terry      15000    5071       34%         86%
+ </programlisting>
+ 
+         <indexterm>
+           <primary>translating</primary>
+ 
+           <secondary>directory/file name to volume ID number</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>learning</primary>
+ 
+           <secondary>volume ID</secondary>
+ 
+           <tertiary>given directory/file name</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>directory/file name</primary>
+ 
+           <secondary>translating to volume ID number</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>volume ID number</primary>
+ 
+           <secondary>learning from directory/file name</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>fs examine</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>examine</secondary>
+         </indexterm>
+       </sect3>
+ 
+       <sect3 id="HDRWQ225">
+         <title>To display the ID number of the volume that contains a file</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs examine</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs examine</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+             <para>where <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold">exa</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis>.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                   <listitem>
+                     <para>Names a directory or file housed in the volume for which to display the volume ID. Partial pathnames are
+                     interpreted relative to the current working directory, which is the default if this argument is omitted.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+         </orderedlist>
+ 
+         <para>The following example illustrates how the output reports the volume ID number in the
+         <computeroutput>vid</computeroutput> field.</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">fs examine /afs/abc.com/usr/terry</emphasis>
+    Volume status for vid = 50489902 named user.terry
+    Current maximum quota is 15000
+    Current blocks used are 5073
+    The partition has 46383 blocks available out of 333305
+ </programlisting>
+ 
+         <note>
+           <para>The partition-related statistics in this command's output do not always agree with the corresponding values in the
+           output of the standard UNIX <emphasis role="bold">df</emphasis> command. The statistics reported by this command can be up
+           to five minutes old, because the Cache Manager polls the File Server for partition information at that frequency. Also, on
+           some operating systems, the <emphasis role="bold">df</emphasis> command's report of partition size includes reserved space
+           not included in this command's calculation, and so is likely to be about 10% larger.</para>
+         </note>
+ 
+         <indexterm>
+           <primary>translating</primary>
+ 
+           <secondary>directory/file name to volume location</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>learning</primary>
+ 
+           <secondary>volume location</secondary>
+ 
+           <tertiary>given directory/file name</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>directory/file name</primary>
+ 
+           <secondary>translating to volume location</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>volume location</primary>
+ 
+           <secondary>learning from directory/file name</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>volume</primary>
+ 
+           <secondary>location</secondary>
+ 
+           <see>volume location</see>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>fs whereis</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>whereis</secondary>
+         </indexterm>
+       </sect3>
+ 
+       <sect3 id="Header_242">
+         <title>To display the location of the volume that contains a file</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs whereis</emphasis> command to display the name of the file server machine that
+             houses the volume containing a file or directory. <programlisting>
+    % <emphasis role="bold">fs whereis</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+             <para>where <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold">whe</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is the shortest acceptable abbreviation of <emphasis role="bold">whereis</emphasis>.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                   <listitem>
+                     <para>Names a directory or file for which to report the location. Partial pathnames are interpreted relative to
+                     the current working directory, which is the default if this argument is omitted.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+ 
+             <para>The output displays the file server machine that houses the volume containing the file, as in the following
+             example:</para>
+ 
+             <programlisting>
+    % <emphasis role="bold">fs whereis /afs/abc.com/user/terry</emphasis>
+    File /afs/abc.com/usr/terry is on host fs2.abc.com
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>If you also want to know which partition houses the volume, first issue the <emphasis role="bold">fs
+             listquota</emphasis> command to display the volume's name. For complete syntax, see <link linkend="HDRWQ224">To display
+             the name of the volume that contains a file</link>. <programlisting>
+    % <emphasis role="bold">fs listquota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+             <para>Then issue the <emphasis role="bold">vos listvldb</emphasis> command, providing the volume name as the volume name
+             or ID argument. For complete syntax and a description of the output, see <link linkend="HDRWQ218">To display VLDB
+             entries</link>.</para>
+ 
+             <programlisting>
+    % <emphasis role="bold">vos listvldb</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting>
+           </listitem>
+         </orderedlist>
+       </sect3>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ226">
+     <title>Moving Volumes</title>
+ 
+     <indexterm>
+       <primary>moving</primary>
+ 
+       <secondary>volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>moving</secondary>
+     </indexterm>
+ 
+     <para>There are three main reasons to move volumes: <itemizedlist>
+         <listitem>
+           <para>To place volumes on other partitions or machines temporarily while repairing or replacing a disk or file server
+           machine.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><indexterm>
+               <primary>disk partition</primary>
+ 
+               <secondary>moving volumes to reduce overcrowding</secondary>
+             </indexterm> <indexterm>
+               <primary>overcrowding of disk partition</primary>
+ 
+               <secondary>moving volumes to reduce</secondary>
+             </indexterm> <indexterm>
+               <primary>overcrowding of disk partition</primary>
+ 
+               <secondary>effect on users</secondary>
+             </indexterm> <indexterm>
+               <primary>failure</primary>
+ 
+               <secondary>of file storage due to full partition</secondary>
+             </indexterm> <indexterm>
+               <primary>file storage</primary>
+ 
+               <secondary>failed due to partition crowding</secondary>
+             </indexterm> To free space on a partition that is becoming overcrowded. One symptom of overcrowding is that users cannot
+           to save files even though the relevant volume is below its quota. The following error message confirms the problem:
+           <programlisting>
+    afs: failed to store file (partition full)
+ </programlisting></para>
+ 
+           <para>You can track available space on AFS server partitions by using the <emphasis role="bold">scout</emphasis> or
+           <emphasis role="bold">afsmonitor</emphasis> programs described in <link linkend="HDRWQ323">Monitoring and Auditing AFS
+           Performance</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A file server machine is becoming overloaded because it houses many more volumes than other machines of the same
+           size, or has volumes with more popular files in them.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>read/write volume</primary>
+ 
+       <secondary>moving</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup volume</primary>
+ 
+       <secondary>removed by read/write move</secondary>
+     </indexterm>
+ 
+     <para>To move a read/write volume, use the <emphasis role="bold">vos move</emphasis> command as described in the following
+     instructions. Before attempting to move the volume, the <emphasis role="bold">vos</emphasis> command interpreter verifies that
+     there is enough free space for it on the destination partition. If not, it does not attempt the move operation and prints the
+     following message.</para>
+ 
+     <programlisting>
+    vos: no space on target partition destination_part to move volume volume
+ </programlisting>
+ 
+     <para>To move a read-only volume, you actually remove the volume from the current site by issuing the <emphasis role="bold">vos
+     remove</emphasis> command as described in <link linkend="HDRWQ236">To remove a volume and unmount it</link>. Then define a new
+     site and release the volume to it by issuing the <emphasis role="bold">vos addsite</emphasis> and <emphasis role="bold">vos
+     release</emphasis> commands as described in <link linkend="HDRWQ194">To replicate a read/write volume (create a read-only
+     volume)</link>.</para>
+ 
+     <indexterm>
+       <primary>read-only volume</primary>
+ 
+       <secondary>moving</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup volume</primary>
+ 
+       <secondary>moving</secondary>
+     </indexterm>
+ 
+     <para>A backup volume always resides at the same site as its read/write source volume, so you cannot move a backup volume except
+     as part of moving the read/write source. The <emphasis role="bold">vos move</emphasis> command automatically deletes the backup
+     version when you move a read/write volume. To create a new backup volume at the new site as soon as the move operation
+     completes, issue the <emphasis role="bold">vos backup</emphasis> command as described in <link linkend="HDRWQ205">To create and
+     mount a backup volume</link>.</para>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>vos move</secondary>
+ 
+       <tertiary>basic instructions</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>move</secondary>
+ 
+       <tertiary>basic instructions</tertiary>
+     </indexterm>
+ 
+     <sect2 id="Header_244">
+       <title>To move a read/write volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos move</emphasis> command to move the volume. Type it on a single line; it appears
+           on multiple lines here only for legibility. <programlisting>
+    % <emphasis role="bold">vos move</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt; \ &lt;<replaceable>machine name on source</replaceable>&gt;
+           &lt;<replaceable>partition name on source </replaceable>&gt; \ &lt;<replaceable>machine name on destination</replaceable>&gt; &lt;partition name on
+           destination&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">m</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">move</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the name or volume ID number of the read/write volume to move.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name on source</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine currently housing the volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name on source</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the partition currently housing the volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name on destination</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine to which to move the volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name on destination</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the partition to which to move the volume.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <note>
+             <para>It is best not to halt a <emphasis role="bold">vos move</emphasis> operation before it completes, because parts of
+             the volume can be left on both the source and destination machines. For more information, see the command's reference
+             page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">vos listvldb</emphasis> command to
+           confirm the success of the move. Complete instructions appear in <link linkend="HDRWQ218">To display VLDB entries</link>.
+           <programlisting>
+    % <emphasis role="bold">vos listvldb</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a backup version existed at the read/write volume's previous site, create a new backup at the new site by issuing
+           the <emphasis role="bold">vos backup</emphasis> command, which is fully described in <link linkend="HDRWQ205">To create
+           and mount a backup volume</link>. <programlisting>
+    % <emphasis role="bold">vos backup</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ227">
+     <title>Synchronizing the VLDB and Volume Headers</title>
+ 
+     <indexterm>
+       <primary>VLDB</primary>
+ 
+       <secondary>synchronizing with volume headers</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume header</primary>
+ 
+       <secondary>synchronizing with VLDB</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>synchronizing VLDB and volume header</secondary>
+     </indexterm>
+ 
+     <para>AFS can provide transparent file access because the Volume Location Database (VLDB) constantly tracks volume locations.
+     When the Cache Manager needs a file, it contacts the Volume Location (VL) Server, which reads the VLDB for the current location
+     of the volume containing the file. Therefore, the VLDB must accurately reflect the state of volumes on the file server machines
+     at all times. The Volume Server and VL Server automatically update a volume's VLDB entry when its status changes during a
+     <emphasis role="bold">vos</emphasis> operation, by performing the following series of steps. <orderedlist>
+         <listitem>
+           <para><anchor id="LIWQ228" />The VL Server locks the VLDB entry. The lock advises other operations not to manipulate any
+           of the volume versions (read/write, read-only, or backup), which prevents the inconsistency that can result from multiple
+           simultaneous operations.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><indexterm>
+               <primary>intention flag in VLDB entry</primary>
+             </indexterm> <indexterm>
+               <primary>VLDB</primary>
+ 
+               <secondary>intention flag set by VL Server</secondary>
+             </indexterm> <anchor id="LIWQ229" />The VL Server sets an <emphasis>intention flag</emphasis> in the VLDB entry that
+           indicates the kind of operation to be performed. This flag never appears in VLDB listings because it is for internal use
+           only. In case the operation terminates prematurely, this flag tells the Salvager which operation was interrupted. (The
+           Salvager then determines the steps necessary either to complete the operation or return the volume to a previous
+           consistent state. For more information on salvaging, see <link linkend="HDRWQ232">Salvaging Volumes</link>.)</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ230" />The Volume Server manipulates the volume. It usually sets the
+           <computeroutput>Off-line</computeroutput> flag in the volume header, which makes the volume inaccessible to the File
+           Server and other Volume Server operations during the manipulation. When the operation completes, the volume is again
+           marked <computeroutput>On-line</computeroutput>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ231" />The VL Server records any changes resulting from the operation in the VLDB entry. Once the
+           operation is complete, it removes the intention flag set in Step <link linkend="LIWQ229">2</link>and releases the lock set
+           in Step <link linkend="LIWQ228">1</link>.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>If a <emphasis role="bold">vos</emphasis> operation fails while the Volume Server is manipulating the volume
+     (corresponding to Step <link linkend="LIWQ230">3</link>), the volume can be left in an intermediate state, which is termed
+     <emphasis>corruption</emphasis>. In this case, the <computeroutput>Off-line</computeroutput> or <computeroutput>Off-line**needs
+     salvage**</computeroutput> marker usually appears at the end of the first line of output from the <emphasis role="bold">vos
+     examine</emphasis> command. To repair the corruption, run the Salvager before attempting to resynchronize the VLDB and volume
+     headers. For salvaging instructions, see <link linkend="HDRWQ232">Salvaging Volumes</link>.</para>
+ 
+     <para>More commonly, an interruption while flags are being set or removed (corresponding to Step <link
+     linkend="LIWQ228">1</link>, Step <link linkend="LIWQ229">2</link>, or Step <link linkend="LIWQ231">4</link>) causes a
+     discrepancy between the VLDB and volume headers. To resynchronize the VLDB and volumes, use the <emphasis role="bold">vos
+     syncvldb</emphasis> and <emphasis role="bold">vos syncserv</emphasis> commands. To achieve complete VLDB consistency, it is best
+     to run the <emphasis role="bold">vos syncvldb</emphasis> command on all file server machines in the cell, and then run the
+     <emphasis role="bold">vos syncserv</emphasis> command on all file server machines in the cell.</para>
+ 
+     <indexterm>
+       <primary>symptoms</primary>
+ 
+       <secondary>of VLDB/volume header desynchronization</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>desynchronization of VLDB/volume headers</primary>
+ 
+       <secondary>symptoms of</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>synchrony of VLDB and volume headers</primary>
+ 
+       <secondary>symptoms of lack of</secondary>
+     </indexterm>
+ 
+     <para>There are several symptoms that indicate a volume operation failed: <itemizedlist>
+         <listitem>
+           <para>Error messages on the standard error stream or in server process log files indicate that an operation terminated
+           abnormally. Perhaps you had to halt the operation before it completed (for instance, by using a signal such as <emphasis
+           role="bold">Ctrl-c</emphasis>), or a file server machine or server process was not functioning when the operation ran. To
+           determine if a machine or process is still not functioning, issue the <emphasis role="bold">bos status</emphasis> command
+           as described in <link linkend="HDRWQ158">Displaying Process Status and Information from the BosConfig File</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A subsequent <emphasis role="bold">vos</emphasis> operation fails because a previous failure left a VLDB entry
+           locked. Sometimes an error message reports that a volume is locked. To display a list of locked volumes, use the <emphasis
+           role="bold">-locked</emphasis> flag on the <emphasis role="bold">vos listvldb</emphasis> command as described in <link
+           linkend="HDRWQ217">Displaying VLDB Entries</link>.</para>
+ 
+           <para>If the only problem with a volume is that its VLDB entry is locked, you probably do not need to synchronize the
+           entire VLDB. Instead use the <emphasis role="bold">vos unlock</emphasis> or <emphasis role="bold">vos
+           unlockvldb</emphasis> command to unlock the entry, as described in <link linkend="HDRWQ247">Unlocking and Locking VLDB
+           Entries</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A subsequent <emphasis role="bold">vos</emphasis> operation fails because a previous failure left a volume marked as
+           offline. To check a volume's current status, check the first line of output from the <emphasis role="bold">vos
+           examine</emphasis> command as described in <link linkend="HDRWQ221">Displaying One Volume's VLDB Entry and Volume
+           Header</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>synchrony of VLDB and volume headers</primary>
+ 
+       <secondary>restoring</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restoring</primary>
+ 
+       <secondary>synchrony of VLDB and volume headers</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>desynchronization of VLDB/volume headers</primary>
+ 
+       <secondary>fixing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Salvager</primary>
+ 
+       <secondary>running before VLDB/volume header resynchronization</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>syncvldb</secondary>
+ 
+       <tertiary>effect</tertiary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">vos syncvldb</emphasis> command corrects the information in the Volume Location Database (VLDB)
+     either about all volumes housed on a file server machine, about the volumes on just one partition, or about a single volume. If
+     checking about one or more partitions, the command contacts the Volume Server to obtain a list of the volumes that actually
+     reside on each partition. It then obtains the VLDB entry for each volume from the VL Server. It changes the VLDB entry as
+     necessary to reflect the state of the volume on the partition. For example, it creates or updates a VLDB entry when it finds a
+     volume for which the VLDB entry is missing or incomplete. However, if there is already a VLDB entry that defines a different
+     location for the volume, or there are irreconcilable conflicts with other VLDB entries, it instead writes a message about the
+     conflict to the standard error stream. The command never removes volumes from the file server machine.</para>
+ 
+     <para>When checking a single volume's VLDB entry, the command also automatically performs the operations invoked by the
+     <emphasis role="bold">vos syncserv</emphasis> command: it not only verifies that the VLDB entry is correct for the specified
+     volume type (read/write, backup, or read-only), but also checks that any related volume types mentioned in the VLDB entry
+     actually exist at the site listed in the entry.</para>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>syncserv</secondary>
+ 
+       <tertiary>effect</tertiary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">vos syncserv</emphasis> command verifies that each volume type (read/write, read-only, and
+     backup) mentioned in a VLDB entry actually exists at the site indicated in the entry. It checks all VLDB entries that mention a
+     site either on any of a file server machine's partitions or on one partition. Note that command can end up inspecting sites
+     other than on the specified machine or partition, if there are read-only versions of the volume at sites other than the
+     read/write site.</para>
+ 
+     <para>The command alters any incorrect information in the VLDB, unless there is an irreconcilable conflict with other VLDB
+     entries. In that case, it writes a message to the standard error stream instead. The command never removes volumes from their
+     sites.</para>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>vos syncvldb</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>syncvldb</secondary>
+ 
+       <tertiary>syntax</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>vos syncserv</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>syncserv</secondary>
+ 
+       <tertiary>syntax</tertiary>
+     </indexterm>
+ 
+     <sect2 id="Header_246">
+       <title>To synchronize the VLDB with volume headers</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIVOL-SYNCVL" />Issue the <emphasis role="bold">vos syncvldb</emphasis> command to make the VLDB reflect
+           the true state of all volumes on a machine or partition, or the state of one volume.</para>
+ 
+           <note>
+             <para>To synchronize the VLDB completely, issue the command repeatedly, substituting each file server machine in your
+             cell for the <emphasis role="bold">-server</emphasis> argument in turn and omitting the <emphasis
+             role="bold">-partition</emphasis> and <emphasis role="bold">-volume</emphasis> arguments, before proceeding to Step
+             <link linkend="LIVOL-SYNCSR">3</link>.</para>
+           </note>
+ 
+           <programlisting>
+    % <emphasis role="bold">vos syncvldb -server</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [<emphasis role="bold">-partition</emphasis> &lt;<replaceable>partition name</replaceable>&gt;] \
+         [<emphasis role="bold">-volume</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;] [<emphasis role="bold">-verbose &gt;&gt;</emphasis> file]
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">syncv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">syncvldb</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine housing the volumes for which to verify VLDB entries. If you are also
+                   providing the <emphasis role="bold">-volume</emphasis> argument, this argument must name the machine where the
+                   volume actually resides.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the partition (on the file server machine specified by the <emphasis
+                   role="bold">-server</emphasis> argument) housing the volumes for which to verify VLDB entries. In general, it is
+                   best to omit this argument so that either the VLDB entries for all volumes on a server machine are corrected (if
+                   you do not provide the <emphasis role="bold">-volume</emphasis> argument), or so that you do not need to guarantee
+                   that the partition actually houses the volume named by the <emphasis role="bold">-volume</emphasis>
+                   argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-volume</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the name or volume ID number of a single volume for which to verify the VLDB entry.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose &gt;&gt; file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Directs a detailed trace to the file called file, which can be either in AFS or on the local disk of the
+                   machine on which you are issuing the command. The command often writes a large amount of output to the standard
+                   output stream; writing it to a file enables you to examine the output more carefully.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIVOL-SYNCSR" />Issue the <emphasis role="bold">vos syncserv</emphasis> command to inspect each volume
+           for which the VLDB lists a version at the specified site.</para>
+ 
+           <note>
+             <para>To synchronize the VLDB completely, issue the command repeatedly, substituting each file server machine in your
+             cell for the machine name argument in turn and omitting the partition name argument.</para>
+           </note>
+ 
+           <programlisting>
+    % <emphasis role="bold">vos syncserv</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>partition name</replaceable>&gt;] [<emphasis
+               role="bold">-v &gt;&gt;</emphasis> file]
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">syncs</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">syncserv</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine mentioned in each VLDB entry to check.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the partition mentioned in each VLDB entry to check. If synchronizing the entire VLDB, omit this
+                   argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-v &gt;&gt; file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Directs a detailed trace to the file called file, which can be either in AFS or on the local disk of the
+                   machine on which you are issuing the command. The command often writes a large amount of output to the standard
+                   output stream; writing it to a file enables you to examine the output more carefully.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ232">
+     <title>Salvaging Volumes</title>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>salvaging</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>corruption</primary>
+ 
+       <secondary>symptoms and types</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>symptoms</primary>
+ 
+       <secondary>volume corruption</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>symptoms of corruption</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Salvager</primary>
+ 
+       <secondary>instructions for invoking</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file server machine</primary>
+ 
+       <secondary>salvaging volumes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>salvaging</primary>
+ 
+       <secondary>volumes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>partition</primary>
+ 
+       <secondary>salvaging all volumes</secondary>
+     </indexterm>
+ 
+     <para>An unexpected interruption while the Volume Server or File Server is manipulating the data in a volume can leave the
+     volume in an intermediate state (<emphasis>corrupted</emphasis>), rather than just creating a discrepancy between the
+     information in the VLDB and volume headers. For example, the failure of the operation that saves changes to a file (by
+     overwriting old data with new) can leave the old and new data mixed together on the disk.</para>
+ 
+     <para>If an operation halts because the Volume Server or File Server exits unexpectedly, the BOS Server automatically shuts down
+     all components of the <emphasis role="bold">fs</emphasis> process and invokes the Salvager. The Salvager checks for and repairs
+     any inconsistencies it can. Sometimes, however, there are symptoms of the following sort, which indicate corruption serious
+     enough to create problems but not serious enough to cause the File Server component to fail. In these cases you can invoke the
+     Salvager yourself by issuing the <emphasis role="bold">bos salvage</emphasis> command. <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">Symptom:</emphasis> A file appears in the output of the <emphasis role="bold">ls</emphasis>
+           command, but attempts to access the file fail with messages indicating that it does not exist.</para>
+ 
+           <para><emphasis role="bold">Possible cause:</emphasis> The Volume Server or File Server exited in the middle of a
+           file-creation operation, after changing the directory structure, but before actually storing data. (Other possible causes
+           are that the ACL on the directory does not grant the permissions you need to access the file, or there is a process,
+           machine, or network outage. Check for these causes before assuming the file is corrupted.)</para>
+ 
+           <para><emphasis role="bold">Salvager's solution:</emphasis> Remove the file's entry from the directory structure.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Symptom:</emphasis> A volume is marked <computeroutput>Off-line</computeroutput> in the output
+           from the <emphasis role="bold">vos examine</emphasis> and <emphasis role="bold">vos listvol</emphasis> commands, or
+           attempts to access the volume fail.</para>
+ 
+           <para><emphasis role="bold">Possible cause:</emphasis> Two files or versions of a file are sharing the same disk blocks
+           because of an interrupted operation. The File Server and Volume Server normally refuse to attach volumes that exhibit this
+           type of corruption, because it can be very dangerous. If the Volume Server or File Server do attach the volume but are
+           unsure of the status of the affected disk blocks, they sometimes try to write yet more data there. When they cannot
+           perform the write, the data is lost. This effect can cascade, causing loss of all data on a partition.</para>
+ 
+           <para><emphasis role="bold">Salvager's solution:</emphasis> Delete the data from the corrupted disk blocks in preference
+           to losing an entire partition.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Symptom:</emphasis> There is less space available on the partition than you expect based on
+           the size statistic reported for each volume by the <emphasis role="bold">vos listvol</emphasis> command.</para>
+ 
+           <para><emphasis role="bold">Possible cause:</emphasis> There are orphaned files and directories. An
+           <emphasis>orphaned</emphasis> element is completely inaccessible because it is not referenced by any directory that can
+           act as its parent (is higher in the file tree). An orphaned element is not counted in the calculation of a volume's size
+           (or against its quota), even though it occupies space on the server partition.</para>
+ 
+           <para><emphasis role="bold">Salvager's solution:</emphasis> By default, print a message to the <emphasis
+           role="bold">/usr/afs/logs/SalvageLog</emphasis> file reporting how many orphans were found and the approximate number of
+           kilobytes they are consuming. You can use the <emphasis role="bold">-orphans</emphasis> argument to remove or attach
+           orphaned elements instead. See <link linkend="HDRWQ233">To salvage volumes</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>When you notice symptoms such as these, use the <emphasis role="bold">bos salvage</emphasis> command to invoke the
+     Salvager before corruption spreads. (Even though it operates on volumes, the command belongs to the <emphasis
+     role="bold">bos</emphasis> suite because the BOS Server must coordinate the shutdown and restart of the Volume Server and File
+     Server with the Salvager. It shuts them down before the Salvager starts, and automatically restarts them when the salvage
+     operation finishes.)</para>
+ 
+     <para>All of the AFS data stored on a file server machine is inaccessible during the salvage of one or more partitions. If you
+     salvage just one volume, it alone is inaccessible.</para>
+ 
+     <para>When processing one or more partitions, the command restores consistency to corrupted read/write volumes where possible.
+     For read-only or backup volumes, it inspects only the volume header: <itemizedlist>
+         <listitem>
+           <para>If the volume header is corrupted, the Salvager removes the volume completely and records the removal in its log
+           file, <emphasis role="bold">/usr/afs/logs/SalvageLog</emphasis>. Issue the <emphasis role="bold">vos release</emphasis> or
+           <emphasis role="bold">vos backup</emphasis> command to create the read-only or backup volume again.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the volume header is intact, the Salvager skips the volume (does not check for corruption in the contents).
+           However, if the File Server notices corruption as it initializes, it sometimes refuses to attach the volume or bring it
+           online. In this case, it is simplest to remove the volume by issuing the <emphasis role="bold">vos remove</emphasis> or
+           <emphasis role="bold">vos zap</emphasis> command. Then issue the <emphasis role="bold">vos release</emphasis> or <emphasis
+           role="bold">vos backup</emphasis> command to create it again.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Combine the <emphasis role="bold">bos salvage</emphasis> command's arguments as indicated to salvage different numbers of
+     volumes: <itemizedlist>
+         <listitem>
+           <para>To salvage all volumes on a file server machine, combine the <emphasis role="bold">-server</emphasis> argument and
+           the <emphasis role="bold">-all</emphasis> flag.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To salvage all volumes on one partition, combine the <emphasis role="bold">-server</emphasis> and <emphasis
+           role="bold">-partition</emphasis> arguments.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To salvage only one read/write volume, combine the <emphasis role="bold">-server</emphasis>, <emphasis
+           role="bold">-partition</emphasis>, and <emphasis role="bold">-volume</emphasis> arguments. Only that volume is
+           inaccessible to Cache Managers, because the BOS Server does not shutdown the File Server and Volume Server processes
+           during the salvage of a single volume. Do not name a read-only or backup volume with the <emphasis
+           role="bold">-volume</emphasis> argument. Instead, remove the volume, using the <emphasis role="bold">vos remove</emphasis>
+           or <emphasis role="bold">vos zap</emphasis> command. Then create a new copy of the volume with the <emphasis
+           role="bold">vos release</emphasis> or <emphasis role="bold">vos backup</emphasis> command.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The Salvager always writes a trace to the <emphasis role="bold">/usr/afs/logs/SalvageLog</emphasis> file on the file
+     server machine where it runs. To record the trace in another file as well (either in AFS or on the local disk of the machine
+     where you issue the <emphasis role="bold">bos salvage</emphasis> command), name the file with the <emphasis
+     role="bold">-file</emphasis> argument. Or, to display the trace on the standard output stream as it is written to the <emphasis
+     role="bold">/usr/afs/logs/SalvageLog</emphasis> file, include the <emphasis role="bold">-showlog</emphasis> flag.</para>
+ 
+     <para>By default, multiple Salvager subprocesses run in parallel: one for each partition up to four, and four subprocesses for
+     four or more partitions. To increase or decrease the number of subprocesses running in parallel, provide a positive integer
+     value for the <emphasis role="bold">-parallel</emphasis> argument.</para>
+ 
+     <para>If there is more than one server partition on a physical disk, the Salvager by default salvages them serially to avoid the
+     inefficiency of constantly moving the disk head from one partition to another. However, this strategy is often not ideal if the
+     partitions are configured as logical volumes that span multiple disks. To force the Salvager to salvage logical volumes in
+     parallel, provide the string <emphasis role="bold">all</emphasis> as the value for the <emphasis
+     role="bold">-parallel</emphasis> argument. Provide a positive integer to specify the number of subprocesses to run in parallel
+     (for example, <emphasis role="bold">-parallel 5all</emphasis> for five subprocesses), or omit the integer to run up to four
+     subprocesses, depending on the number of logical volumes being salvaged.</para>
+ 
+     <para>The Salvager creates temporary files as it runs, by default writing them to the partition it is salvaging. The number of
+     files can be quite large, and if the partition is too full to accommodate them, the Salvager terminates without completing the
+     salvage operation (it always removes the temporary files before exiting). Other Salvager subprocesses running at the same time
+     continue until they finish salvaging all other partitions where there is enough disk space for temporary files. To complete the
+     interrupted salvage, reissue the command against the appropriate partitions, adding the <emphasis role="bold">-tmpdir</emphasis>
+     argument to redirect the temporary files to a local disk directory that has enough space.</para>
+ 
+     <para>The <emphasis role="bold">-orphans</emphasis> argument controls how the Salvager handles orphaned files and directories
+     that it finds on server partitions it is salvaging. An orphaned element is completely inaccessible because it is not referenced
+     by the vnode of any directory that can act as its parent (is higher in the filespace). Orphaned objects occupy space on the
+     server partition, but do not count against the volume's quota.</para>
+ 
+     <para>During the salvage, the output of the <emphasis role="bold">bos status</emphasis> command reports the following auxiliary
+     status for the <emphasis role="bold">fs</emphasis> process:</para>
+ 
+     <programlisting>
+    Salvaging file system
+ </programlisting>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>salvage</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>bos salvage</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ233">
+       <title>To salvage volumes</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos salvage</emphasis> command to salvage one or more volumes. <programlisting>
+    % <emphasis role="bold">bos salvage  -server</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  [<emphasis role="bold">-partition</emphasis> &lt;<replaceable>salvage partition</replaceable>&gt;]  \
+                   [<emphasis role="bold">-volume</emphasis> &lt;<replaceable>salvage volume number or volume name</replaceable>&gt;]  \
+                   [<emphasis role="bold">-file</emphasis> salvage log output file]  [<emphasis role="bold">-all</emphasis>]  [<emphasis
+                 role="bold">-showlog</emphasis>]  \
+                   [<emphasis role="bold">-parallel</emphasis> &lt;<replaceable># of max parallel partition salvaging</replaceable>&gt;]  \
+                   [<emphasis role="bold">-tmpdir</emphasis> &lt;<replaceable>directory to place tmp files</replaceable>&gt;]  \
+                   [<emphasis role="bold">-orphans</emphasis> &lt;<emphasis role="bold">ignore</emphasis> | <emphasis role="bold">remove</emphasis> | <emphasis
+                 role="bold">attach</emphasis> &gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine on which to salvage volumes. This argument can be combined either with the
+                   <emphasis role="bold">-all</emphasis> flag, the <emphasis role="bold">-partition</emphasis> argument, or both the
+                   <emphasis role="bold">-partition</emphasis> and <emphasis role="bold">-volume</emphasis> arguments.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a single partition on which to salvage all volumes. The <emphasis role="bold">-server</emphasis>
+                   argument must be provided along with this one.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-volume</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the name or volume ID number of one read/write volume to salvage. Combine this argument with the
+                   <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete pathname of a file into which to write a trace of the salvage operation, in addition
+                   to the <emphasis role="bold">/usr/afs/logs/SalvageLog</emphasis> file on the server machine. If the file pathname
+                   is local, the trace is written to the specified file on the local disk of the machine where the <emphasis
+                   role="bold">bos salvage</emphasis> command is issued. If the <emphasis role="bold">-volume</emphasis> argument is
+                   included, the file can be in AFS, though not in the volume being salvaged. Do not combine this argument with the
+                   <emphasis role="bold">-showlog</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-all</emphasis></term>
+ 
+                 <listitem>
+                   <para>Salvages all volumes on all of the partitions on the machine named by the <emphasis
+                   role="bold">-server</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-showlog</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the trace of the salvage operation on the standard output stream, as well as writing it to the
+                   <emphasis role="bold">/usr/afs/logs/SalvageLog</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-parallel</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the maximum number of Salvager subprocesses to run in parallel. Provide one of three values:
+                   <itemizedlist>
+                       <listitem>
+                         <para>An integer from the range <emphasis role="bold">1</emphasis> to <emphasis role="bold">32</emphasis>. A
+                         value of <emphasis role="bold">1</emphasis> means that a single Salvager process salvages the partitions
+                         sequentially.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>The string <emphasis role="bold">all</emphasis> to run up to four Salvager subprocesses in parallel on
+                         partitions formatted as logical volumes that span multiple physical disks. Use this value only with such
+                         logical volumes.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>The string <emphasis role="bold">all</emphasis> followed immediately (with no intervening space) by an
+                         integer from the range <emphasis role="bold">1</emphasis> to <emphasis role="bold">32</emphasis>, to run the
+                         specified number of Salvager subprocesses in parallel on partitions formatted as logical volumes. Use this
+                         value only with such logical volumes.</para>
+                       </listitem>
+                     </itemizedlist></para>
+ 
+                   <para>The BOS Server never starts more Salvager subprocesses than there are partitions, and always starts only one
+                   process to salvage a single volume. If this argument is omitted, up to four Salvager subprocesses run in
+                   parallel.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-tmpdir</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the full pathname of a local disk directory to which the Salvager process writes temporary files
+                   as it runs. By default, it writes them to the partition it is currently salvaging.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-orphans</emphasis></term>
+ 
+                 <listitem>
+                   <para>Controls how the Salvager handles orphaned files and directories. Choose one of the following three values:
+                   <variablelist>
+                       <varlistentry>
+                         <term><emphasis role="bold">ignore</emphasis></term>
+ 
+                         <listitem>
+                           <para>Leaves the orphaned objects on the disk, but prints a message to the <emphasis
+                           role="bold">/usr/afs/logs/SalvageLog</emphasis> file reporting how many orphans were found and the
+                           approximate number of kilobytes they are consuming. This is the default if you omit the <emphasis
+                           role="bold">-orphans</emphasis> argument.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">remove</emphasis></term>
+ 
+                         <listitem>
+                           <para>Removes the orphaned objects, and prints a message to the <emphasis
+                           role="bold">/usr/afs/logs/SalvageLog</emphasis> file reporting how many orphans were removed and the
+                           approximate number of kilobytes they were consuming.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">attach</emphasis></term>
+ 
+                         <listitem>
+                           <para>Attaches the orphaned objects by creating a reference to them in the vnode of the volume's root
+                           directory. Since each object's actual name is now lost, the Salvager assigns each one a name of the
+                           following form: <simplelist>
+                               <member><emphasis role="bold">_ _ORPHANFILE_ _.</emphasis> index for files</member>
+ 
+                               <member><emphasis role="bold">_ _ORPHANDIR_ _.</emphasis> index for directories</member>
+                             </simplelist></para>
+ 
+                           <para>where index is a two-digit number that uniquely identifies each object. The orphans are charged
+                           against the volume's quota and appear in the output of the <emphasis role="bold">ls</emphasis> command
+                           issued against the volume's root directory.</para>
+                         </listitem>
+                       </varlistentry>
+                     </variablelist></para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ234">
+     <title>Setting and Displaying Volume Quota and Current Size</title>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>quota</secondary>
+ 
+       <see>volume quota</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>default</primary>
+ 
+       <secondary>volume quota</secondary>
+     </indexterm>
+ 
+     <para>Every AFS volume has an associated quota which limits the volume's size. The default quota for a newly created volume is
+     5,000 kilobyte blocks (slightly less that 5 MB). When a volume reaches its quota, the File Server rejects attempts to create new
+     files or directories in it. If an application is writing data into an existing file in a full volume, the File Server allows a
+     defined overage (by default, 1 MB). (You can use the <emphasis role="bold">fileserver</emphasis> command's <emphasis
+     role="bold">-spare</emphasis> or <emphasis role="bold">-pctspare</emphasis> argument to change the default overage; see the
+     command's reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.)</para>
+ 
+     <para>To set a quota other than 5000 KB as you create a volume, include the <emphasis role="bold">-maxquota</emphasis> argument
+     to the <emphasis role="bold">vos create</emphasis> command, as described in <link linkend="HDRWQ185">Creating Read/write
+     Volumes</link>. To modify an existing volume's quota, issue either the <emphasis role="bold">fs setquota</emphasis> or the
+     <emphasis role="bold">fs setvol</emphasis> command as described in the following instructions. Do not set an existing volume's
+     quota lower than its current size.</para>
+ 
+     <para>In general, smaller volumes are easier to administer than larger ones. If you need to move volumes, say for load-balancing
+     purposes, it is easier to find enough free space on other partitions for small volumes. Move operations complete more quickly
+     for small volumes, reducing the potential for outages or other errors to interrupt the move. AFS supports a maximum volume size,
+     which can vary for different AFS releases; see the <emphasis> OpenAFS Release Notes</emphasis> for the version you are using.
+     Also, the size of a partition or logical places an absolute limit on volume size, because a volume cannot span multiple
+     partitions or logical volumes.</para>
+ 
+     <para>It is generally safe to overpack partitions by putting more volumes on them than can actually fit if all the volumes reach
+     their maximum quota. However, only experience determines to what degree overpacking works in your cell. It depends on what kind
+     of quota you assign to volumes (particularly user volumes, which are more likely than system volumes to grow unpredictably) and
+     how much information people generate and store in comparison to their quota.</para>
+ 
+     <para>There are several commands that display a volume's quota, as described in the following instructions. They differ in how
+     much related information they produce.</para>
+ 
+     <sect2 id="Header_250">
+       <title>To set quota for a single volume</title>
+ 
+       <indexterm>
+         <primary>maximum volume quota</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>volume quota</secondary>
+ 
+         <tertiary>on single volume</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume quota</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>on single volume</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setquota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setquota</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setquota</emphasis> command to set the volume's maximum quota. <programlisting>
+    % <emphasis role="bold">fs setquota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;] <emphasis role="bold">-max</emphasis> &lt;<replaceable>max quota in kbytes</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sq</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setquota</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a file or directory in the volume for which to set the indicated quota. Partial pathnames are
+                   interpreted relative to the current working directory, which is the default if you omit this argument.</para>
+ 
+                   <para>Specify the read/write path to the file or directory, to avoid the failure that results when you attempt to
+                   change a read-only volume. By convention, you indicate the read/write path by placing a period before the cell
+                   name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further
+                   discussion of the concept of read/write and read-only paths through the filespace, see <link
+                   linkend="HDRWQ209">The Rules of Mount Point Traversal</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">max quota in kbytes</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the volume's quota, expressed in kilobyte blocks ( <emphasis role="bold">1024</emphasis> equals a
+                   megabyte). A value of <emphasis role="bold">0</emphasis> grants an unlimited quota, but the size of the partition
+                   imposes an absolute limit. You must include the <emphasis role="bold">-max</emphasis> switch if omitting the
+                   dir/file path argument (to set the quota on the volume that houses the current working directory).</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_251">
+       <title>To set maximum quota on one or more volumes</title>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>volume quota</secondary>
+ 
+         <tertiary>on multiple volumes</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume quota</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>on multiple volumes</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setvol</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setvol</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setvol</emphasis> command to set the quota on one or more volumes.
+           <programlisting>
+    % <emphasis role="bold">fs setvol</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+] <emphasis role="bold">-max</emphasis> &lt;<replaceable>disk space quota in 1K units</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setvol</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names one file or directory that resides in each volume for which to set the indicated quota. Partial
+                   pathnames are interpreted relative to the current working directory, which is the default if you omit this
+                   argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">disk space quota in 1K units</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the maximum quota on each volume, expressed in kilobytes blocks ( <emphasis role="bold">1024</emphasis>
+                   equals a megabyte). A value of <emphasis role="bold">0</emphasis> grants an unlimited quota, but the size of the
+                   partition does impose an absolute limit.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs quota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>quota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume quota</secondary>
+ 
+         <tertiary>percent used</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume quota</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>percent used</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_252">
+       <title>To display percent quota used</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs quota</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs quota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">q</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">quota</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a directory or file in each volume for which to display percent quota used. Partial pathnames are
+                   interpreted relative to the current working directory, which is the default if you omit this argument.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example illustrates the output produced by this command:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs quota /afs/abc.com/usr/terry</emphasis>
+    34% of quota used.
+ </programlisting>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs listquota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>listquota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume quota</secondary>
+ 
+         <tertiary>with volume size</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume quota</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>with volume size</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume size</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>size, displaying</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_253">
+       <title>To display quota, current size, and other information</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs listquota</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs listquota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">lq</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an alias for <emphasis role="bold">listquota</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a directory or file in each volume for which to display quota along with volume name and current space
+                   usage. Partial pathnames are interpreted relative to the current working directory, which is the default if you
+                   omit this argument.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>As illustrated in the following example, the output reports the volume's name, its quota and current size (both in
+       kilobyte units), the percent quota used, and the percentage of space on the volume's host partition that is used.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listquota /afs/abc.com/usr/terry</emphasis>
+    Volume Name     Quota    Used    % Used   Partition
+    user.terry      15000    5071       34%         86%
+ </programlisting>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume quota</secondary>
+ 
+         <tertiary>with volume &amp; partition info</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>volume size</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume quota</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>with volume &amp;partition info</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>disk partition size</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>disk partition</primary>
+ 
+         <secondary>displaying size of single</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs examine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>examine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_254">
+       <title>To display quota, current size, and more partition information</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs examine</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs examine</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">exa</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a directory or file in each volume for which to display quota information and information about the
+                   host partition. Partial pathnames are interpreted relative to the current working directory, which is the default
+                   if you omit this argument.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>As illustrated in the following example, the output displays the volume's volume ID number and name, its quota and
+       current size (both in kilobyte units), and the free and total number of kilobyte blocks on the volume's host partition.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs examine /afs/abc.com/usr/terry</emphasis>
+    Volume status for vid = 50489902 named user.terry
+    Current maximum quota is 15000
+    Current blocks used are 5073
+    The partition has 46383 blocks available out of 333305
+ </programlisting>
+ 
+       <note>
+         <para>The partition-related statistics in this command's output do not always agree with the corresponding values in the
+         output of the standard UNIX <emphasis role="bold">df</emphasis> command. The statistics reported by this command can be up
+         to five minutes old, because the Cache Manager polls the File Server for partition information at that frequency. Also, on
+         some operating systems, the <emphasis role="bold">df</emphasis> command's report of partition size includes reserved space
+         not included in this command's calculation, and so is likely to be about 10% larger.</para>
+       </note>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ235">
+     <title>Removing Volumes and their Mount Points</title>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>removing</secondary>
+ 
+       <tertiary>basic instructions</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>mount point</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>unmounting</primary>
+ 
+       <secondary>volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mount point</primary>
+ 
+       <secondary>removing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>volume</secondary>
+     </indexterm>
+ 
+     <para>To remove a volume from its site and its record from the VLDB, use the <emphasis role="bold">vos remove</emphasis>
+     command. Use it to remove any of the three types of volumes; the effect depends on the type. <itemizedlist>
+         <listitem>
+           <para><indexterm>
+               <primary>read/write volume</primary>
+ 
+               <secondary>removing</secondary>
+ 
+               <tertiary>effect of</tertiary>
+             </indexterm> <indexterm>
+               <primary>backup volume</primary>
+ 
+               <secondary>removed by read/write removal</secondary>
+             </indexterm> If you indicate the read/write volume by specifying the volume's base name without a <emphasis
+           role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> extension, the command removes both the
+           read/write and associated backup volume from the partition that houses them. You do not need to provide the <emphasis
+           role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments, because there can be only one
+           read/write site. The site information is also removed from the VLDB entry, and the site count (reported by the <emphasis
+           role="bold">vos examine</emphasis> and <emphasis role="bold">vos listvldb</emphasis> commands as <computeroutput>number of
+           sites</computeroutput>) decrements by one. The read/write and backup volume ID numbers no longer appear in the output from
+           the <emphasis role="bold">vos examine</emphasis> and <emphasis role="bold">vos listvldb</emphasis> commands, but they are
+           preserved internally. Read-only sites, if any, are not affected, but cannot be changed unless a read/write site is again
+           defined. The entire VLDB entry is removed if there are no read-only sites.</para>
+ 
+           <para>If there are no read-only copies left, it is best to remove the volume's mount point to prevent attempts to access
+           the volume's contents. Do not remove the mount point if copies of the read-only volume remain.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you indicate a read-only volume by including the <emphasis role="bold">.readonly</emphasis> extension on its
+           name, it is removed from the partition that houses it, and the corresponding site information is removed from the VLDB
+           entry. The site count reported by the <emphasis role="bold">vos examine</emphasis> and <emphasis role="bold">vos
+           listvldb</emphasis> commands as <computeroutput>number of sites</computeroutput> decrements by one for each volume you
+           remove.</para>
+ 
+           <indexterm>
+             <primary>read-only volume</primary>
+ 
+             <secondary>removing</secondary>
+ 
+             <tertiary>effect of</tertiary>
+           </indexterm>
+ 
+           <para>If there is more than one read-only site, you must include the <emphasis role="bold">-server</emphasis> argument
+           (and optionally <emphasis role="bold">-partition</emphasis> argument) to specify the site from which to remove the volume.
+           If there is only one read-only site, the volume name is sufficient; if no read/write volume exists in this case, the
+           entire VLDB entry is removed.</para>
+ 
+           <para>It is not generally appropriate to remove the volume's mount point when removing a read-only volume, especially if
+           the read/write version of the volume still exists. If the read/write version no longer exists, remove the mount point as
+           described in Step <link linkend="LIWQ239">5</link>of <link linkend="HDRWQ236">To remove a volume and unmount
+           it</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you indicate a backup volume by including the <emphasis role="bold">.backup</emphasis> extension on its name, it
+           is removed from the partition that houses it and its site information is removed from the VLDB entry. You do not need to
+           provide the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments, because
+           there can be only one backup site. The backup volume ID number no longer appears in the output from the <emphasis
+           role="bold">vos examine</emphasis> or <emphasis role="bold">vos listvldb</emphasis> command, but is preserved
+           internally.</para>
+ 
+           <para>In the standard configuration, there is a separate mount point for the backup version of a user volume. Remember to
+           remove the mount point to prevent attempt to access the nonexistent volume's contents.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="Header_256">
+       <title>Other Removal Commands</title>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>removing</secondary>
+ 
+         <tertiary>alternate commands</tertiary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos remove</emphasis> command is almost always the appropriate way to remove a volume, because
+       it automatically removes a volume's VLDB entry and both the volume header and all data from the partition. If either the VLDB
+       entry or volume header does not exist, it is sometimes necessary to use other commands that remove only the remaining element.
+       Do not use these commands in the normal case when both the VLDB entry and the volume header exist, because by definition they
+       create discrepancies between them. For details on the commands' syntax, see their reference pages in the <emphasis> OpenAFS
+       Administration Reference</emphasis>.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos zap</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>zap</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos zap</emphasis> command removes a volume from its site by removing the volume header and
+       volume data for which a VLDB entry no longer exists. You can tell a VLDB entry is missing if the <emphasis role="bold">vos
+       listvol</emphasis> command displays the volume header but the <emphasis role="bold">vos examine</emphasis> or <emphasis
+       role="bold">vos listvldb</emphasis> command cannot locate the VLDB entry. You must run this command to correct the
+       discrepancy, because the <emphasis role="bold">vos syncvldb</emphasis> and <emphasis role="bold">vos syncserv</emphasis>
+       commands never remove volume headers.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos remsite</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>remsite</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos remsite</emphasis> command removes a read-only site definition from the VLDB without
+       affecting the volume on the file server machine. Use this command when you have mistakenly issued the <emphasis
+       role="bold">vos addsite</emphasis> command to define a read-only site, but have not yet issued the <emphasis role="bold">vos
+       release</emphasis> command to release the volume to the site. If you have actually released a volume to the site, use the
+       <emphasis role="bold">vos remove</emphasis> command instead.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos delentry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>delentry</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">vos delentry</emphasis> command removes the entire VLDB entry that mentions the volume you
+       specify. If versions of the volume actually exist on file server machines, they are not affected. This command is useful if
+       you know for certain that a volume removal was not recorded in the VLDB (perhaps you used the <emphasis role="bold">vos
+       zap</emphasis> command during an emergency), and do not want to take the time to resynchronize the entire VLDB with the
+       <emphasis role="bold">vos syncvldb</emphasis> and <emphasis role="bold">vos syncserv</emphasis> commands.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ236">
+       <title>To remove a volume and unmount it</title>
+ 
+       <indexterm>
+         <primary>read/write volume</primary>
+ 
+         <secondary>removing</secondary>
+ 
+         <tertiary>instructions</tertiary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If removing the volume's mount point, verify that you have the <emphasis role="bold">d</emphasis>( <emphasis
+           role="bold">delete</emphasis>) permission on its parent directory's ACL. If necessary, issue the <emphasis role="bold">fs
+           listacl</emphasis> command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+         </listitem>
+ 
+         <listitem>
+           <anchor id="LIWQ237" />
+ 
+           <para><emphasis role="bold">(Optional)</emphasis> Dump the volume to a file or to tape, in case you want to restore it
+           later. To copy the volume's contents to a file, use the <emphasis role="bold">vos dump</emphasis> command as instructed in
+           <link linkend="HDRWQ240">Dumping and Restoring Volumes</link>. You can then copy the file to tape using a third-party
+           backup utility or an archiving utility such as the UNIX <emphasis role="bold">tar</emphasis> command.</para>
+ 
+           <para>Alternatively, use the AFS Backup System to create a tape copy. In this case, it can be convenient to create a
+           temporary volume set that includes only the volume of interest. Temporary volume sets are not recorded in the Backup
+           Database, and so do not clutter database with records for volume sets that you use only once. For instructions, see <link
+           linkend="HDRWQ301">To create a dump</link>.</para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos remove</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>remove</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ238" />Issue the <emphasis role="bold">vos remove</emphasis> command to remove the volume. If
+           removing a read-only volume from multiple sites, repeat the command for each one. <programlisting>
+    % <emphasis role="bold">vos remove</emphasis> [<emphasis role="bold">-server</emphasis> machine name&gt;] [<emphasis role="bold">-partition</emphasis> &lt;<replaceable>partition name</replaceable>&gt;] \
+                <emphasis role="bold">-id</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">remo</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">remove</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine on which the volume resides. It is necessary only when the <emphasis
+                   role="bold">-id</emphasis> argument names a read-only volume that exists at multiple sites.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the partition on machine name where the volume resides. It is necessary only when the <emphasis
+                   role="bold">-id</emphasis> argument names a read-only volume that exists at multiple sites. Provide the <emphasis
+                   role="bold">-server</emphasis> argument along with this one.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-id</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the volume to remove, either by its complete name or volume ID number. If identifying a read-only
+                   or backup volume by name, include the appropriate extension ( <emphasis role="bold">.readonly</emphasis> or
+                   <emphasis role="bold">.backup</emphasis>).</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs rmmount</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>rmmount</secondary>
+ 
+             <tertiary>when removing volume</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ239" />If you are removing the last existing version of the volume, issue the <emphasis
+           role="bold">fs rmmount</emphasis> command remove the corresponding mount point. Complete instructions appear in <link
+           linkend="HDRWQ236">To remove a volume and unmount it</link>.</para>
+ 
+           <para>If you are removing a backup volume that is mounted in the conventional way (at a subdirectory of its read/write
+           volume's root directory), then removing the source volume's mount point in this step is sufficient to remove the backup
+           volume's mount point. If you mounted the backup at a completely separate directory, you need to repeat this step for the
+           backup volume's mount point.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">fs rmmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If you created a dump file in Step <link linkend="LIWQ237">3</link>,
+           transfer it to tape. The preferred method is to use the AFS Backup System, which is described in <link
+           linkend="HDRWQ248">Configuring the AFS Backup System</link>and <link linkend="HDRWQ283">Backing Up and Restoring AFS
+           Data</link>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ240">
+     <title>Dumping and Restoring Volumes</title>
+ 
+     <indexterm>
+       <primary>dumping</primary>
+ 
+       <secondary>volumes</secondary>
+ 
+       <tertiary>without using AFS Backup System</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>dumping without AFS Backup System</secondary>
+     </indexterm>
+ 
+     <para><emphasis>Dumping</emphasis> a volume with the <emphasis role="bold">vos dump</emphasis> command converts its contents
+     into ASCII format and writes them to the file you specify. The <emphasis role="bold">vos restore</emphasis> command places a
+     dump file's contents into a volume after converting them into the volume format appropriate for the indicated file server
+     machine.</para>
+ 
+     <sect2 id="Header_259">
+       <title>About Dumping Volumes</title>
+ 
+       <indexterm>
+         <primary>read/write volume</primary>
+ 
+         <secondary>dumping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>read-only volume</primary>
+ 
+         <secondary>dumping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup volume</primary>
+ 
+         <secondary>dumping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>availability of data</primary>
+ 
+         <secondary>interrupted by dumping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>data</primary>
+ 
+         <secondary>availability interrupted by dumping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dumping</primary>
+ 
+         <secondary>volumes</secondary>
+ 
+         <tertiary>reasons</tertiary>
+       </indexterm>
+ 
+       <para>Dumping a volume can be useful in several situations, including the following: <itemizedlist>
+           <listitem>
+             <para>You want to back it up to tape, perhaps by using a third-party backup utility. To facilitate this type of backup
+             operation, the <emphasis role="bold">vos dump</emphasis> command can write to a named pipe. To learn about using the AFS
+             Backup System instead, see <link linkend="HDRWQ248">Configuring the AFS Backup System</link>and <link
+             linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You are removing the volume from your cell (perhaps because its owner is leaving your cell). The <emphasis
+             role="bold">vos dump</emphasis> command enables you to create a copy for safekeeping without incurring the overhead of
+             the Backup System. For complete instructions on removing a volume, see <link linkend="HDRWQ235">Removing Volumes and
+             their Mount Points</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You want to create a copy of the volume for safekeeping on a non-AFS server partition, perhaps while you move the
+             actual volume to another machine or perform maintenance tasks on the partition that houses the volume.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You need to replace a corrupted read/write volume. If an uncorrupted read-only or backup version of the volume
+             exists, dump it and restore the data into the read/write volume, overwriting the corrupted contents.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You want to copy or transfer the contents of the volume to another cell. You cannot use the <emphasis
+             role="bold">vos move</emphasis> command, because AFS supports volume moves only between file server machines that belong
+             to the same cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You want to have another read/write copy of the volume's contents. The second volume must have a different name
+             than the original one. If you want the contents of the two volumes to remain identical, you must update them both
+             manually. AFS provides no facility for keeping read/write volumes synchronized in this way.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You want a copy of only the files and directories in the volume with modification time stamps after a certain
+             date. The <emphasis role="bold">vos dump</emphasis> command can create an incremental dump file as described in Step
+             <link linkend="LIWQ241">3</link>of the following instructions.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>full dump</primary>
+ 
+         <secondary>creating using vos command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>incremental dump</primary>
+ 
+         <secondary>creating using vos command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dumping</primary>
+ 
+         <secondary>volumes</secondary>
+ 
+         <tertiary>using vos command</tertiary>
+       </indexterm>
+ 
+       <para>You can use the <emphasis role="bold">vos dump</emphasis> command to create a <emphasis>full dump</emphasis>, which
+       contains the complete contents of the volume at the time you issue the command, or an <emphasis>incremental dump</emphasis>,
+       which contains only those files and directories with modification timestamps (as displayed by the <emphasis role="bold">ls
+       -l</emphasis> command) that are later than a date and time you specify. See Step <link linkend="LIWQ241">3</link>of the
+       following instructions.</para>
+ 
+       <para>Dumping a volume does not change its VLDB entry or permanently affect its status on the file server machine, but the
+       volume's contents are inaccessible during the dump operation. To avoid interrupting access to the volume, it is generally best
+       to dump the volume's backup version, just after using the <emphasis role="bold">vos backup</emphasis> or <emphasis
+       role="bold">vos backupsys</emphasis> command to create a new backup version.</para>
+ 
+       <para>If you do not provide a filename into which to write the dump, the <emphasis role="bold">vos dump</emphasis> command
+       directs the output to the standard output stream. You can pipe it directly to the <emphasis role="bold">vos restore</emphasis>
+       command if you wish.</para>
+ 
+       <para>Because a volume dump file is in ASCII format, you can read its contents using a text editor or a command such as the
+       <emphasis role="bold">cat</emphasis> command. However, dump files sometimes contain special characters that do not have
+       alphanumeric correlates, which can cause problems for some display programs.</para>
+ 
+       <para>By default, the <emphasis role="bold">vos</emphasis> command interpreter consults the Volume Location Database (VLDB) to
+       learn the volume's location, so the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis>
+       arguments are not required. If the <emphasis role="bold">-id</emphasis> argument identifies a read-only volume that resides at
+       multiple sites, then the command dumps the version from just one of them (normally, the one listed first in the volume's VLDB
+       entry as reported by the <emphasis role="bold">vos examine</emphasis> or <emphasis role="bold">vos listvldb</emphasis>
+       command). To dump the read-only volume from a particular site, use the <emphasis role="bold">-server</emphasis> and <emphasis
+       role="bold">-partition</emphasis> arguments to specify the site. To bypass the VLDB lookup entirely, provide a volume ID
+       number (rather than a volume name) as the value for the <emphasis role="bold">-id</emphasis> argument, along with the
+       <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments. This makes it possible to
+       dump a volume for which there is no VLDB entry.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos dump</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>dump</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_260">
+       <title>To dump a volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you have the permissions necessary to create the dump file. If placing it in AFS, you must have the
+           <emphasis role="bold">i</emphasis>( <emphasis role="bold">insert</emphasis>) permission on the ACL of the file's
+           directory. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully described in <link
+           linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ241" />Issue the <emphasis role="bold">vos dump</emphasis> command to dump the volume.
+           <programlisting>
+    % <emphasis role="bold">vos dump -id</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt; [<emphasis role="bold">-time</emphasis> &lt;<replaceable>dump from time</replaceable>&gt;] [<emphasis
+                 role="bold">-file</emphasis> &lt;<replaceable>arg</replaceable>&gt;] [<emphasis role="bold">-server</emphasis> &lt;<replaceable>server</replaceable>&gt;] [<emphasis
+                 role="bold">-partition</emphasis> &lt;<replaceable>partition</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-id</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the volume to be dumped by its complete name or volume ID number. If you want to dump the
+                   read-only or backup version, specify its volume ID number or add the appropriate extension ( <emphasis
+                   role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis>) to the name.</para>
+ 
+                   <para>To bypass the normal VLDB lookup of the volume's location, provide the volume ID number and combine this
+                   argument with the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis>
+                   arguments.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-time</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies whether the dump is full or incremental. Omit this argument to create a full dump, or provide one
+                   of three acceptable values: <itemizedlist>
+                       <listitem>
+                         <para>The value <emphasis role="bold">0</emphasis>(zero) to create a full dump.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>A date in the format mm <emphasis role="bold">/</emphasis> dd <emphasis role="bold">/</emphasis> yyyy
+                         (month, day and year) to create an incremental dump that includes only files and directories with
+                         modification timestamps later than midnight (12:00 a.m.) on the indicated date. Valid values for the year
+                         range from <emphasis role="bold">1970</emphasis> to <emphasis role="bold">2037</emphasis>; higher values are
+                         not valid because the latest possible date in the standard UNIX representation is in 2038. The command
+                         interpreter automatically reduces later dates to the maximum value. An example is <emphasis
+                         role="bold">01/13/1999</emphasis>.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>A date and time in the format <emphasis role="bold">"</emphasis> mm <emphasis role="bold">/</emphasis>
+                         dd <emphasis role="bold">/</emphasis> yyyy hh <emphasis role="bold">:</emphasis> MM <emphasis
+                         role="bold">"</emphasis> to create an incremental dump that includes only files and directories with
+                         modification timestamps later than the specified date and time. The date format is the same as for a date
+                         alone. Express the time as hours and minutes (hh:MM) in 24-hour format (for example, <emphasis
+                         role="bold">20:30</emphasis> is 8:30 p.m.). Surround the entire expression with double quotes (" ") because
+                         it contains a space. An example is <emphasis role="bold">"01/13/1999 22:30"</emphasis>.</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of the file to which to write the dump. The file can be in AFS, but not in the volume
+                   being dumped. A partial pathname is interpreted relative to the current working directory. Omit this argument to
+                   direct the dump to the standard output stream.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file server machine on which the volume resides. Provide the <emphasis
+                   role="bold">-partition</emphasis> argument along with this one.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the partition on which the volume resides. Provide the <emphasis role="bold">-server</emphasis>
+                   argument along with this one.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_261">
+       <title>About Restoring Volumes</title>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>restoring</secondary>
+ 
+         <tertiary>with vos restore command</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restoring</primary>
+ 
+         <secondary>volumes without using AFS Backup System</secondary>
+       </indexterm>
+ 
+       <para>Although you can dump any of the three types of volumes (read/write, read-only, or backup), you can restore a dump file
+       to the file system only as a read/write volume, using the <emphasis role="bold">vos restore</emphasis> command. The command
+       automatically translates the dump file's contents from ASCII back into the volume format appropriate for the file server
+       machine that stores the restored version. As with the <emphasis role="bold">vos dump</emphasis> command, you can restore a
+       dump file via a named pipe, which facilitates interoperation with third-party backup utilities.</para>
+ 
+       <para>You can restore the contents of a dump file in one of two basic ways. In either case, you must restore a full dump of
+       the volume before restoring any incremental dumps. Any incremental dumps that you then restore must have been created after
+       the full dump. If there is more than one incremental dump, you must restore them in the order they were created. <itemizedlist>
+           <listitem>
+             <para>You can restore volume data into a brand new volume with a new name and at a location that you specify. See <link
+             linkend="HDRWQ242">To restore a dump into a new volume and mount it</link>.</para>
+ 
+             <para>You can assign a volume ID number as you restore the volume, though it is best to have the Volume Server allocate
+             a volume number automatically. The most common reason for specifying the volume ID is that a volume's VLDB entry has
+             disappeared for some reason, but you know the former read/write volume ID number and want to reuse it.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can restore volume data into an existing volume (usually the one that was previously dumped), overwriting its
+             current contents. This is convenient if the current contents are corrupted or otherwise incorrect, because it allows you
+             to replace them with a coherent version from the past or from one of the volume's clones. See <link
+             linkend="HDRWQ244">To restore a dump file, overwriting an existing volume</link>.</para>
+ 
+             <para>Provide the <emphasis role="bold">-overwrite</emphasis> argument to preconfirm that you wish to overwrite the
+             volume's contents, and to specify whether you are restoring a full or incremental dump. If you omit the <emphasis
+             role="bold">-overwrite</emphasis> argument, the Volume Server generates the following prompt to confirm that you want to
+             overwrite the existing volume with either a full ( <emphasis role="bold">f</emphasis>) or incremental ( <emphasis
+             role="bold">i</emphasis>) dump:</para>
+ 
+             <programlisting>
+    Do you want to do a full/incremental restore or abort? [fia](a):
+ </programlisting>
+ 
+             <para>If you pipe in the dump file via the standard input stream instead of using the <emphasis
+             role="bold">-file</emphasis> argument to name it, you must include the <emphasis role="bold">-overwrite</emphasis>
+             argument because there is nowhere for the Volume Server to display the prompt in this case.</para>
+ 
+             <para>You can move the volume to a new site as you overwrite it with a full dump, by using the <emphasis
+             role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments to specify the new site. You
+             cannot move the volume when restoring an incremental dump.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The <emphasis role="bold">vos restore</emphasis> command sets the restored volume's creation date in the volume header
+       to the time of the restore operation, as reported in the <computeroutput>Creation</computeroutput> field in the output from
+       the <emphasis role="bold">vos examine</emphasis> and <emphasis role="bold">vos listvol</emphasis> commands.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos restore</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>restore</secondary>
+ 
+         <tertiary>to create new volume</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ242">
+       <title>To restore a dump into a new volume and mount it</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you have permissions needed to read the dump file and to mount the new volume. If the dump file resides
+           in AFS, you need the <emphasis role="bold">r</emphasis>( <emphasis role="bold">read</emphasis>) permission on the ACL of
+           its directory. You need the <emphasis role="bold">i</emphasis>( <emphasis role="bold">insert</emphasis>) and <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) permissions on the ACL of the directory where you
+           are mounting the new volume. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully
+           described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Select a site (disk partition on a file server machine) for the new volume. If your cell groups different types of
+           volumes onto different file server machines, that can guide your decision. It often makes sense to put the volume on the
+           emptiest partition that meets your other criteria. To display how much space is available on a file server machine's
+           partitions, use the <emphasis role="bold">vos partinfo</emphasis> command, which is described fully in <link
+           linkend="HDRWQ185">Creating Read/write Volumes</link>. <programlisting>
+    % <emphasis role="bold">vos partinfo</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [&lt;<replaceable>partition name</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ243" />Issue the <emphasis role="bold">vos restore</emphasis> command to create a new volume and
+           restore the dump file into it. Type it on a single line; it appears on multiple lines here only for legibility.
+           <programlisting>
+    % <emphasis role="bold">vos restore</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; \
+                    &lt;<replaceable>name of volume to be restored</replaceable>&gt; \
+                    [<emphasis role="bold">-file</emphasis> &lt;<replaceable>dump file</replaceable>&gt;] [<emphasis role="bold">-id</emphasis> &lt;<replaceable>volume ID</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restore</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine on which to create the new volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the partition on which to create the new volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of volume to be restored</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the new read/write volume, which must not already have a VLDB entry. It can be up to 22 characters in
+                   length.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the dump file to restore. Partial pathnames are interpreted with respect to the current working
+                   directory. Omit this argument if using a pipe to read in the dump file from the standard input stream.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-volume</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the new volume's ID number. It is appropriate only if you are restoring a volume that no longer
+                   exists and want to use the volume ID number it had previously.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs mkmount</secondary>
+ 
+             <tertiary>when restoring volume</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>mkmount</secondary>
+ 
+             <tertiary>when restoring volume</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount the new volume, making its contents
+           accessible. Complete instructions appear in <link linkend="HDRWQ212">To create a regular or read/write mount point</link>.
+           <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs lsmount</emphasis> command to verify
+           that the mount point refers to the correct volume. Complete instructions appear in <link linkend="HDRWQ211">To display a
+           mount point</link>. <programlisting>
+    % <emphasis role="bold">fs lsmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos restore</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>restore</secondary>
+ 
+         <tertiary>to overwrite volume</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ244">
+       <title>To restore a dump file, overwriting an existing volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you have permissions needed to read the dump file. If it resides in AFS, you need the <emphasis
+           role="bold">r</emphasis>( <emphasis role="bold">read</emphasis>) permission on the ACL of its directory. If necessary,
+           issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully described in <link
+           linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Restore the contents of the dump file into a read/write volume, overwriting the current contents. The volume retains
+           its current volume ID number. Type it on a single line; it appears on multiple lines here only for legibility.
+           <programlisting>
+    % <emphasis role="bold">vos restore</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt;  \
+                  &lt;<replaceable>name of volume to be restored</replaceable>&gt;   \
+                  [<emphasis role="bold">-file</emphasis> &lt;<replaceable>dump file</replaceable>&gt;] [<emphasis role="bold">-id</emphasis> &lt;<replaceable>volume ID</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restore</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine where the volume already exists, or the machine to which to move it. In the
+                   latter case, the value for the <emphasis role="bold">-overwrite</emphasis> argument must be <emphasis
+                   role="bold">full</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the partition where the volume already exists, or the partition to which to move it. In the latter
+                   case, the value for the <emphasis role="bold">-overwrite</emphasis> argument must be <emphasis
+                   role="bold">full</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of volume to be restored</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the read/write volume to overwrite with the contents of the dump file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the dump file to restore. Partial pathnames are interpreted with respect to the current working
+                   directory. Omit this argument if using a pipe to read in the dump file from the standard input stream; in this
+                   case, you must provide the <emphasis role="bold">-overwrite</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-overwrite</emphasis></term>
+ 
+                 <listitem>
+                   <para>Preconfirms that you want to overwrite the existing volume and specifies which type of dump file you are
+                   restoring. Provide one of the following values: <itemizedlist>
+                       <listitem>
+                         <para><emphasis role="bold">f</emphasis> or <emphasis role="bold">full</emphasis> if restoring a full dump
+                         file</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">i</emphasis> or <emphasis role="bold">incremental</emphasis> if restoring an
+                         incremental dump file. This value is not acceptable if you are moving the volume while restoring it.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">a</emphasis> to terminate the restore operation</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the volume is replicated, issue the <emphasis role="bold">vos release</emphasis> command to release the newly
+           restored contents to read-only sites. Complete instructions appear in <link linkend="HDRWQ192">Replicating Volumes
+           (Creating Read-only Volumes)</link>. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos backup</emphasis> command to create a new backup version of the volume. Complete
+           instructions appear in <link linkend="HDRWQ201">Creating Backup Volumes</link>. <programlisting>
+    % <emphasis role="bold">vos backup</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ245">
+     <title>Renaming Volumes</title>
+ 
+     <indexterm>
+       <primary>renaming</primary>
+ 
+       <secondary>volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>renaming</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>changing</primary>
+ 
+       <secondary>volume name</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume name</primary>
+ 
+       <secondary>changing</secondary>
+ 
+       <tertiary>basic instructions</tertiary>
+     </indexterm>
+ 
+     <para>You can use the <emphasis role="bold">vos rename</emphasis> command to rename a volume. For example, it is appropriate to
+     rename a user's home volume if you use the <emphasis role="bold">user.</emphasis> username convention for user volume names and
+     you change the username. (For complete instructions for changing usernames, see <link linkend="HDRWQ518">Changing
+     Usernames</link>.)</para>
+ 
+     <indexterm>
+       <primary>read/write volume</primary>
+ 
+       <secondary>changing name of</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>read-only volume</primary>
+ 
+       <secondary>changing name of</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup volume</primary>
+ 
+       <secondary>changing name of</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">vos rename</emphasis> command accepts only read/write volume names, but automatically changes
+     the names of the associated read-only and backup volumes. As directed in the following instructions, you need to replace the
+     volume's current mount point with a new one that reflects the name change.</para>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>vos rename</secondary>
+ 
+       <tertiary>basic instructions</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>rename</secondary>
+ 
+       <tertiary>basic instructions</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ246">
+       <title>To rename a volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>), <emphasis
+           role="bold">d</emphasis>( <emphasis role="bold">delete</emphasis>), and <emphasis role="bold">i</emphasis>( <emphasis
+           role="bold">insert</emphasis>) access permissions for the directory in which you are replacing the volume's mount point.
+           If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully described in <link
+           linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+           role="bold">a</emphasis>( <emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+           role="bold">l</emphasis>( <emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+           role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIVOL-REN" />Issue the <emphasis role="bold">vos rename</emphasis> command to rename the volume.
+           <programlisting>
+    % <emphasis role="bold">vos rename</emphasis> &lt;<replaceable>old volume name</replaceable>&gt; &lt;<replaceable>new volume name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">ren</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">rename</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">old volume name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the current name of a read/write volume.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">new volume name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the new name for the volume. It cannot be more than 22 characters in length.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <para>If there is no Volume Location Database (VLDB) entry for the specified current volume name, the command fails with
+           the following error message:</para>
+ 
+           <programlisting>
+    vos: Could not find entry for volume old_volume_name.
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs rmmount</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>rmmount</secondary>
+ 
+             <tertiary>when renaming volume</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs rmmount</emphasis> command to remove the mount point that refers to the volume's
+           old name. Complete instructions appear in <link linkend="HDRWQ215">To remove a mount point</link>. <programlisting>
+    % <emphasis role="bold">fs rmmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs mkmount</secondary>
+ 
+             <tertiary>when renaming volume</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>mkmount</secondary>
+ 
+             <tertiary>when renaming volume</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> to create a mount point that indicates the volume's new name.
+           Complete instructions appear in <link linkend="HDRWQ212">To create a regular or read/write mount point</link>.
+           <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt; [<emphasis
+                 role="bold">-rw</emphasis>]
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ247">
+     <title>Unlocking and Locking VLDB Entries</title>
+ 
+     <para>As detailed in <link linkend="HDRWQ227">Synchronizing the VLDB and Volume Headers</link>, The Volume Location (VL) Server
+     locks the Volume Location Database (VLDB) entry for a volume before the Volume Server executes any operation on it. No other
+     operation can affect a volume with a locked VLDB entry, so the lock prevents the inconsistency or corruption that can result
+     from multiple simultaneous operations on a volume.</para>
+ 
+     <indexterm>
+       <primary>locking</primary>
+ 
+       <secondary>VLDB entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>VLDB</primary>
+ 
+       <secondary>locking/unlocking entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>entry in VLDB</primary>
+ 
+       <secondary>locking/unlocking</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>unlocking</primary>
+ 
+       <secondary>VLDB entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>locked VLDB entry</primary>
+ 
+       <secondary>unlocking</secondary>
+     </indexterm>
+ 
+     <para>To verify that a VLDB entry is locked, issue the <emphasis role="bold">vos listvldb</emphasis> command as described in
+     <link linkend="HDRWQ218">To display VLDB entries</link>. The command has a <emphasis role="bold">-locked</emphasis> flag that
+     displays locked entries only. If the VLDB entry is locked, the string <computeroutput>Volume is currently
+     LOCKED</computeroutput> appears on the last line of the volume's output.</para>
+ 
+     <para>To lock a VLDB entry yourself, use the <emphasis role="bold">vos lock</emphasis> command. This is useful when you suspect
+     something is wrong with a volume and you want to prevent any changes to it while you are investigating the problem.</para>
+ 
+     <para>To unlock a locked VLDB entry, issue the <emphasis role="bold">vos unlock</emphasis> command, which unlocks a single VLDB
+     entry, or the <emphasis role="bold">vos unlockvldb</emphasis> command, which unlocks potentially many entries. This is useful
+     when a volume operation fails prematurely and leaves a VLDB entry locked, preventing you from acting to correct the problems
+     resulting from the failure.</para>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>vos lock</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>lock</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_267">
+       <title>To lock a VLDB entry</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos lock</emphasis> to lock the entry. <programlisting>
+    % <emphasis role="bold">vos lock</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">lo</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">lock</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the volume to be locked, either by its complete name or volume ID number. It can be any of the
+                   three versions of the volume.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos unlock</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>unlock</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_268">
+       <title>To unlock a single VLDB entry</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos unlock</emphasis> command to unlock the entry. <programlisting>
+    % <emphasis role="bold">vos unlock</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">unlock</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies the volume to be unlocked, either by its complete name or volume ID number. It can be any of the
+                   three versions of the volume.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>vos unlockvldb</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vos commands</primary>
+ 
+         <secondary>unlockvldb</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_269">
+       <title>To unlock multiple VLDB entries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue
+           the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To
+           display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos unlockvldb</emphasis> command to unlock the desired entries. <programlisting>
+    % <emphasis role="bold">vos unlockvldb</emphasis> [&lt;<replaceable>machine name</replaceable>&gt;] [&lt;<replaceable>partition name</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">unlockv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">unlockvldb</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a file server machine. Provide this argument alone to unlock all VLDB entries that mention the
+                   machine in a site definition. Omit both this argument and the partition name argument to unlock all VLDB
+                   entries.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a partition. Provide this argument alone to unlock all VLDB entries that mention the partition (on
+                   any machine) in a site definition. Omit both this argument and the machine name argument to unlock all VLDB
+                   entries.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/AdminGuide/auagd011.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd011.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd011.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,4302 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ248">
+   <title>Configuring the AFS Backup System</title>
+ 
+   <para>The AFS Backup System helps you to create backup copies of data from AFS volumes and to restore data to the file system if
+   it is lost or corrupted. This chapter explains how to configure the Backup System. For instructions on backing up and restoring
+   data and displaying dump records, see <link linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+ 
+   <sect1 id="HDRWQ249">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Determine tape capacity and filemark size</entry>
+ 
+             <entry><emphasis role="bold">fms</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Define Tape Coordinator entry in Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup addhost</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove Tape Coordinator entry from Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup delhost</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display Tape Coordinator entries from Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup listhosts</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create volume set</entry>
+ 
+             <entry><emphasis role="bold">backup addvolset</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Add volume entry to volume set</entry>
+ 
+             <entry><emphasis role="bold">backup addvolentry</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List volume sets and entries</entry>
+ 
+             <entry><emphasis role="bold">backup listvolsets</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete volume set from Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup delvolset</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete volume entry from volume set</entry>
+ 
+             <entry><emphasis role="bold">backup delvolentry</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Define dump level</entry>
+ 
+             <entry><emphasis role="bold">backup adddump</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change expiration date on existing dump level</entry>
+ 
+             <entry><emphasis role="bold">backup setexp</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete dump level from dump hierarchy</entry>
+ 
+             <entry><emphasis role="bold">backup deldump</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display dump hierarchy</entry>
+ 
+             <entry><emphasis role="bold">backup listdumps</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Label tape</entry>
+ 
+             <entry><emphasis role="bold">backup labeltape</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Read label on tape</entry>
+ 
+             <entry><emphasis role="bold">backup readlabel</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ251">
+     <title>Introduction to Backup System Features</title>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>introduction</secondary>
+     </indexterm>
+ 
+     <para>The AFS Backup System is highly flexible, enabling you to control most aspects of the backup process, including how often
+     backups are performed, which volumes are backed up, and whether to dump all of the data in a volume or just the data that has
+     changed since the last dump operation. You can also take advantage of several features that automate much of the backup
+     process.</para>
+ 
+     <para>To administer and use the Backup System most efficiently, it helps to be familiar with its basic features, which are
+     described in the following sections. For pointers to instructions for implementing the features as you configure the Backup
+     System in your cell, see <link linkend="HDRWQ257">Overview of Backup System Configuration</link>.</para>
+ 
+     <sect2 id="HDRWQ252">
+       <title>Volume Sets and Volume Entries</title>
+ 
+       <indexterm>
+         <primary>volume set (Backup System)</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume set (Backup System)</primary>
+ 
+         <secondary>volume entry</secondary>
+ 
+         <see>volume entry</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume entry (Backup System)</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>volume set</secondary>
+ 
+         <see>volume set</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>volume entry</secondary>
+ 
+         <see>volume entry</see>
+       </indexterm>
+ 
+       <para>When you back up AFS data, you specify which data to include in terms of complete volumes rather than individual files.
+       More precisely, you define groups of volumes called <emphasis>volume sets</emphasis>, each of which includes one or more
+       volumes that you want to back up in a single operation. You must include a volume in a volume set to back it up, because the
+       command that backs up data (the <emphasis role="bold">backup dump</emphasis> command) does not accept individual volume
+       names.</para>
+ 
+       <para>A volume set consists of one or more <emphasis>volume entries</emphasis>, each of which specifies which volumes to back
+       up based on their location (file server machine and partition) and volume name. You can use a wildcard notation to include all
+       volumes that share a location, a common character string in their names, or both.</para>
+ 
+       <para>For instructions on creating and removing volume sets and volume entries, see <link linkend="HDRWQ265">Defining and
+       Displaying Volume Sets and Volume Entries</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_274">
+       <title>Dumps and Dump Sets</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump</secondary>
+ 
+         <see>dump</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump set</secondary>
+ 
+         <see>dump set</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>appended, defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>parent, defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>full, defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>incremental, defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>initial, defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>set</secondary>
+ 
+         <see>dump set</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump set (Backup System)</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <para>A <emphasis>dump</emphasis> is the collection of data that results from backing up a volume set. A <emphasis>full
+       dump</emphasis> includes all of the data in every volume in the volume set, as it exists at the time of the dump operation. An
+       <emphasis>incremental dump</emphasis> includes only some of the data from the volumes in the volume set, namely those files
+       and directory structures that have changed since a specified previous dump operation was performed. The previous dump is
+       referred to as the incremental dump's <emphasis>parent dump</emphasis>, and it can be either a full dump or an incremental
+       dump itself.</para>
+ 
+       <para>A <emphasis>dump set</emphasis> is a collection of one or more dumps stored together on one or more tapes. The first
+       dump in the dump set is the <emphasis>initial dump</emphasis>, and any subsequent dump added onto the end of an existing dump
+       set is an <emphasis>appended dump</emphasis>. Appending dumps is always optional, but maximizes use of a tape's capacity. In
+       contrast, creating only initial dumps can result in many partially filled tapes, because an initial dump must always start on
+       a new tape, but does not necessarily extend to the end of the tape. Appended dumps do not have to be related to one another or
+       to the initial dump (they do not have to be dumps of the same or related volume sets), but well-planned appending can reduce
+       the number of times you have to change tapes during a restore operation. For example, it can make sense to append incremental
+       dumps of a volume set together in a single dump set.</para>
+ 
+       <para>All the records for a dump set are indexed together in the Backup Database based on the initial dump (for more on the
+       Backup Database, see <link linkend="HDRWQ256">The Backup Database and Backup Server Process</link>). To delete the database
+       record of an appended dump, you must delete the initial dump record, and doing so deletes the records for all dumps in the
+       dump set. Similarly, you cannot recycle just one tape in a dump set without deleting the database records of all tapes in the
+       dump set.</para>
+ 
+       <para>For instructions on creating an initial dump, see <link linkend="HDRWQ296">Backing Up Data</link>, and to learn how to
+       append dumps, see <link linkend="HDRWQ299">Appending Dumps to an Existing Dump Set</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_275">
+       <title>Dump Hierarchies, Dump Levels and Expiration Dates</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump hierarchy</secondary>
+ 
+         <see>dump hierarchy</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump level</secondary>
+ 
+         <see>dump hierarchy</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>described</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>dump level</secondary>
+ 
+         <tertiary>defined</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>expiration date on dump level</secondary>
+ 
+         <tertiary>described</tertiary>
+       </indexterm>
+ 
+       <para>A <emphasis>dump hierarchy</emphasis> is a logical structure that defines the relationship between full and incremental
+       dumps; that is, it defines which dump serves as the parent for an incremental dump. Each individual component of a hierarchy
+       is a <emphasis>dump level</emphasis>. When you create a dump by issuing the <emphasis role="bold">backup dump</emphasis>
+       command, you specify a volume set name and a dump level name. The Backup System uses the dump level to determine whether the
+       dump is full or incremental, and if incremental, which dump level to use as the parent.</para>
+ 
+       <para>You can associate an <emphasis>expiration date</emphasis> with a dump level, to define when a dump created at that level
+       expires. The Backup System refuses to overwrite a tape until all dumps in the dump set to which the tape belongs have expired,
+       so assigning expiration dates automatically determines how you recycle tapes. You can define an expiration date either in
+       absolute terms (for example, 13 January 2000) or relative terms (for example, 30 days from when the dump is created). You can
+       also change the expiration date associated with a dump level (but not with an actual dump that has already been created at
+       that level).</para>
+ 
+       <para>For instructions on creating dump hierarchies, assigning expiration dates, and establishing a tape recycling schedule,
+       see <link linkend="HDRWQ267">Defining and Displaying the Dump Hierarchy</link>.</para>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump name</secondary>
+ 
+         <see>dump</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>tape name</secondary>
+ 
+         <see>tapes</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump ID number</secondary>
+ 
+         <see>dump</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tapes (Backup System)</primary>
+ 
+         <secondary>names</secondary>
+ 
+         <tertiary>described</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>ID number, described</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>name, described</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ253">
+       <title>Dump Names and Tape Names</title>
+ 
+       <para>When you create a dump, the Backup System creates a Backup Database record for it, assigning a name comprising the
+       volume set name and the last element in the dump level pathname:</para>
+ 
+       <programlisting>
+    volume_set_name<emphasis role="bold">.</emphasis>dump_level_name
+ </programlisting>
+ 
+       <para>For example, a dump of the volume set <emphasis role="bold">user</emphasis> at the dump level <emphasis
+       role="bold">/sunday/friday</emphasis> is called <emphasis role="bold">user.friday</emphasis>. The Backup System also assigns a
+       unique <emphasis>dump ID</emphasis> number to the dump to distinguish it from other dumps with the same name that possibly
+       exist.</para>
+ 
+       <para>The Backup System assigns a similar <emphasis>AFS tape name</emphasis> to each tape that contains a dump set, reflecting
+       the volume set and dump level of the dump set's initial dump, plus a numerical index of the tape's position in the dump set,
+       and a unique dump ID number:</para>
+ 
+       <programlisting>
+    volume_set_name<emphasis role="bold">.</emphasis>dump_level_name<emphasis role="bold">.</emphasis>tape_index (dump ID)
+ </programlisting>
+ 
+       <para>For example, the second tape in a dump set whose initial dump is of the volume set <emphasis
+       role="bold">uservol</emphasis> at the dump level <emphasis role="bold">/sunday/friday</emphasis> has AFS tape name like
+       <emphasis role="bold">uservol.friday.2</emphasis> (<emphasis role="bold">914382400</emphasis>).</para>
+ 
+       <para>In addition to its AFS tape name, a tape can have an optional <emphasis>permanent name</emphasis> that you assign.
+       Unlike the AFS tape name, the permanent name does not have to indicate the volume set and dump level of the initial (or any
+       other) dump, and so does not change depending on the contents of the tape. The Backup System does not require a certain format
+       for permanent names, so you need to make sure that each tape's name is unique. If a tape has a permanent name, the Backup
+       System uses it rather than the AFS tape name when referring to the tape in prompts and the output from most <emphasis
+       role="bold">backup</emphasis> commands, but still tracks the AFS tape name internally.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ254">
+       <title>Tape Labels, Dump Labels, and EOF Markers</title>
+ 
+       <indexterm>
+         <primary>tapes (Backup System)</primary>
+ 
+         <secondary>label</secondary>
+ 
+         <tertiary>described</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>label, described</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>filemarks</secondary>
+ 
+         <see>Tape Coordinator</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>filemark</secondary>
+ 
+         <tertiary>described</tertiary>
+       </indexterm>
+ 
+       <para>Every tape used in the Backup System has a magnetic label at the beginning that records the tape's name, capacity, and
+       other information. You can use the <emphasis role="bold">backup labeltape</emphasis> command to write a label, or the
+       <emphasis role="bold">backup dump</emphasis> command creates one automatically if you use an unlabeled tape. The label records
+       the following information: <itemizedlist>
+           <listitem>
+             <para>The tape's permanent name, which you can assign by using the <emphasis role="bold">-pname</emphasis> argument to
+             the <emphasis role="bold">backup labeltape</emphasis> command. It can be any string of up to 32 characters. If you do
+             not assign a permanent name, the Backup System records the value <computeroutput>&lt;NULL&gt;</computeroutput> when you
+             use the <emphasis role="bold">backup labeltape</emphasis> command to assign an AFS tape name, or when you use the
+             <emphasis role="bold">backup dump</emphasis> command to write a dump to the tape.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The tape's AFS <emphasis>tape name</emphasis>, which can be one of three types of values: <itemizedlist>
+                 <listitem>
+                   <para>A name that reflects the volume set and dump level of the dump set's initial dump and the tape's place in
+                   the sequence of tapes for the dump set, as described in <link linkend="HDRWQ253">Dump Names and Tape Names</link>.
+                   If the tape does not have a permanent name, you can assign the AFS tape name by using the <emphasis
+                   role="bold">-name</emphasis> argument to the <emphasis role="bold">backup labeltape</emphasis> command.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The value <computeroutput>&lt;NULL&gt;</computeroutput>, which results when you assign a permanent name, or
+                   provide no value for the <emphasis role="bold">backup labeltape</emphasis> command's <emphasis
+                   role="bold">-name</emphasis> argument.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>No AFS tape name at all, indicating that you have never labeled the tape or written a dump to it.</para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>If a tape does not already have an actual AFS tape name when you write a dump to it, the Backup System constructs
+             and records the appropriate AFS tape name. If the tape does have an AFS tape name and you are writing an initial dump,
+             then the name must correctly reflect the dump's volume set and dump level.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The capacity, or <emphasis>size</emphasis>, of the tape, followed by a letter that indicates the unit of measure
+             (<computeroutput>k</computeroutput> or <computeroutput>K</computeroutput> for kilobytes,
+             <computeroutput>m</computeroutput> or <computeroutput>M</computeroutput> for megabytes,
+             <computeroutput>g</computeroutput> or <computeroutput>G</computeroutput> for gigabytes, or
+             <computeroutput>t</computeroutput> or <computeroutput>T</computeroutput> for terabytes). The tape's manufacturer
+             determines the tape's capacity. For further discussion of how the Backup System uses the value in the capacity field,
+             see <link linkend="HDRWQ258">Configuring the tapeconfig File</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>For information about labeling tapes, see <link linkend="HDRWQ272">Writing and Reading Tape Labels</link>.</para>
+ 
+       <para>In addition to the tape label, the Backup System writes a <emphasis>dump label</emphasis> on the tape for every appended
+       dump (the tape label and dump label are the same for the initial dump). A dump label records the following information:
+       <itemizedlist>
+           <listitem>
+             <para>The name of the tape containing the dump</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The date and time that the dump operation began</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The cell to which the volumes in the dump belong</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The dump's size in kilobytes</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The dump's dump level</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The dump's dump ID</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The Backup System writes a <emphasis>filemark</emphasis> (also called an End-of-File or EOF marker) between the data
+       from each volume in a dump. The tape device's manufacturer determines the filemark size, which is typically between 2 KB and 2
+       MB; in general, the larger the usual capacity of the tapes that the device uses, the larger the filemark size. If a dump
+       contains a small amount of data from each of a large number of volumes, as incremental dumps often do, then the filemark size
+       can significantly affect how much volume data fits on the tape. To enable the Backup System to factor in filemark size as it
+       writes a dump, you can record the filemark size in a configuration file; see <link linkend="HDRWQ258">Configuring the
+       tapeconfig File</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ255">
+       <title>Tape Coordinator Machines, Port Offsets, and Backup Data Files</title>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>described</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>Tape Coordinator</secondary>
+ 
+         <see>Tape Coordinator</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>port offsets</secondary>
+ 
+         <see>Tape Coordinator</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>port offset number</secondary>
+ 
+         <tertiary>defined</tertiary>
+       </indexterm>
+ 
+       <para>A <emphasis>Tape Coordinator machine</emphasis> is a machine that drives one or more attached tape devices used for
+       backup operations. It must run the AFS client software (the Cache Manager) but reside in a physically secure location to
+       prevent unauthorized access to its console. Before backup operations can run on a Tape Coordinator machine, each tape device
+       on the machine must be registered in the Backup Database, and certain files and directories must exist on the machine's local
+       disk; for instructions, see <link linkend="HDRWQ262">To configure a Tape Coordinator machine</link>.</para>
+ 
+       <para>Each tape device on a Tape Coordinator machine listens for backup requests on a different UNIX port. You pick the port
+       indirectly by assigning a <emphasis>port offset number</emphasis> to the tape device. The Backup System sets the device's
+       actual port by adding the port offset to a base port number that it determines internally. For instructions on assigning port
+       offset numbers, see <link linkend="HDRWQ258">Configuring the tapeconfig File</link>.</para>
+ 
+       <para>For a tape device to perform backup operations, a Backup Tape Coordinator (<emphasis role="bold">butc</emphasis>)
+       process dedicated to the device must be running actively on the Tape Coordinator machine. You then direct backup requests to
+       the device's Tape Coordinator by specifying its port offset number with the <emphasis role="bold">-portoffset</emphasis>
+       argument to the <emphasis role="bold">backup</emphasis> command.</para>
+ 
+       <para>In addition to writing backup data to tape, you can direct it to a <emphasis>backup data file</emphasis> on the local
+       disk of a Tape Coordinator machine. You can then to transfer the data to a data-archiving system, such as a hierarchical
+       storage management (HSM) system, that you use in conjunction with AFS and the Backup System. A backup data file has a port
+       offset like a tape device. For instructions on configuring backup data files, see <link linkend="HDRWQ282">Dumping Data to a
+       Backup Data File</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ256">
+       <title>The Backup Database and Backup Server Process</title>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>described</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>Backup Database</secondary>
+ 
+         <see>Backup Database</see>
+       </indexterm>
+ 
+       <para>The <emphasis>Backup Database</emphasis> is a replicated administrative database maintained by the Backup Server process
+       on the cell's database server machines. Like the other AFS database server processes, the <emphasis>Backup Server</emphasis>
+       uses the Ubik utility to keep the various copies of the database synchronized (for a discussion of Ubik, see <link
+       linkend="HDRWQ52">Replicating the OpenAFS Administrative Databases</link>).</para>
+ 
+       <para>The Backup Database records the following information: <itemizedlist>
+           <listitem>
+             <para>The Tape Coordinator machine's hostname and the port offset number for each tape device used for backup
+             operations</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The dump hierarchy, which consists of its component dump levels and their associated expiration dates</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The volume sets and their component volume entries</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A record for each dump, which includes the name of each tape it appears on, a list of the volumes from which data
+             is included, the dump level, the expiration date, and the dump ID of the initial dump with which the dump is
+             associated</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A record for each tape that houses dumped data</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_280">
+       <title>Interfaces to the Backup System</title>
+ 
+       <para>The <emphasis role="bold">backup</emphasis> suite of commands is the administrative interface to the Backup System. You
+       can issue the commands in a command shell (or invoke them in a shell script) on any AFS client or server machine from which
+       you can access the <emphasis role="bold">backup</emphasis> binary. In the conventional configuration, the binary resides on
+       the local disk.</para>
+ 
+       <para>The <emphasis role="bold">backup</emphasis> command suite provides an <emphasis>interactive mode</emphasis>, in which
+       you can issue multiple commands over a persistent connection to the Backup Server and the Volume Location (VL) Server.
+       Interactive mode has several convenient features, including the following: <itemizedlist>
+           <listitem>
+             <para>You need to type only the operation code, omitting the initial <emphasis role="bold">backup</emphasis>
+             string.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you assume another AFS identity or specify a foreign cell as you enter interactive mode, it applies to all
+             subsequent commands.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You do not need to enclose shell metacharacters in double quotes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can track current and pending operations with the <emphasis role="bold">(backup) jobs</emphasis> command,
+             which is available only in this mode.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can cancel current and pending operations with the <emphasis role="bold">(backup) kill</emphasis> command,
+             which is available only in this mode.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Before issuing a command that requires reading or writing a tape (or backup data file), you must also open a connection
+       to the Tape Coordinator machine that is attached to the relevant tape device (or that has the backup data file on its local
+       disk), and issue the <emphasis role="bold">butc</emphasis> command to initialize the Tape Coordinator process. The process
+       must continue to run and the connection remain open as long as you need to use the tape device or file for backup
+       operations.</para>
+ 
+       <para>For further discussion and instructions, see <link linkend="HDRWQ286">Using the Backup System's
+       Interfaces</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ257">
+     <title>Overview of Backup System Configuration</title>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>configuration overview</secondary>
+     </indexterm>
+ 
+     <para>Before you can use the Backup System to back up and restore data, you must configure several of its basic components. The
+     indicated sections of this chapter explain how to perform the following configuration tasks: <itemizedlist>
+         <listitem>
+           <para>Determining a tape's capacity and a tape device's filemark size, and recording them in the <emphasis
+           role="bold">/usr/afs/backup/tapeconfig</emphasis> file (see <link linkend="HDRWQ258">Configuring the tapeconfig
+           File</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Determining how to grant administrative privilege to backup operators (see <link linkend="HDRWQ260">Granting
+           Administrative Privilege to Backup Operators</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configuring Tape Coordinator machines, tape devices, and backup data files (see <link linkend="HDRWQ261">Configuring
+           Tape Coordinator Machines and Tape Devices</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Defining volume sets and volume entries (see <link linkend="HDRWQ265">Defining and Displaying Volume Sets and Volume
+           Entries</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Defining dump levels to create a dump hierarchy (see <link linkend="HDRWQ267">Defining and Displaying the Dump
+           Hierarchy</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Labeling tapes (see <link linkend="HDRWQ272">Writing and Reading Tape Labels</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Creating a device configuration file to automate the backup process (see <link linkend="HDRWQ275">Automating and
+           Increasing the Efficiency of the Backup Process</link>)</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>If you have already configured all of the components required for performing a backup dump or restore operation, you can
+     proceed to the instructions in <link linkend="HDRWQ296">Backing Up Data</link> and <link linkend="HDRWQ306">Restoring and
+     Recovering Data</link>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ258">
+     <title>Configuring the tapeconfig File</title>
+ 
+     <indexterm>
+       <primary>tapes (Backup System)</primary>
+ 
+       <secondary>capacity</secondary>
+ 
+       <tertiary>determining</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Tape Coordinator (Backup System)</primary>
+ 
+       <secondary>filemark</secondary>
+ 
+       <tertiary>determining size</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Tape Coordinator (Backup System)</primary>
+ 
+       <secondary>port offset number</secondary>
+ 
+       <tertiary>assigning</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>tapeconfig</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>tapeconfig file</primary>
+     </indexterm>
+ 
+     <para>Several factors interact to determine how much data the Tape Coordinator can fit on a tape: <itemizedlist>
+         <listitem>
+           <para>The tape's capacity (size), as set by the tape manufacturer.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The tape device's filemark size, as set by the tape device's manufacturer. Recall from <link linkend="HDRWQ254">Tape
+           Labels, Dump Labels, and EOF Markers</link> that the Tape Coordinator writes a filemark between the data from each volume
+           in a dump. If a dump contains a small amount of data from each of a large number of volumes, as incremental dumps often
+           do, then the filemark size can significantly affect how much volume data fits on the tape.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Whether or not you use the tape device's compression mode.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>(The amount of data that can fit in a backup data file is determined by amount of space available on the partition, and
+     the operating system's maximum file size. The Tape Coordinator does not write filemarks when writing to a backup data file. For
+     further information about configuring a Tape Coordinator to write to a backup data file, see <link linkend="HDRWQ282">Dumping
+     Data to a Backup Data File</link>.)</para>
+ 
+     <para>As the Tape Coordinator (<emphasis role="bold">butc</emphasis>) process initializes, it reads the <emphasis
+     role="bold">/usr/afs/backup/tapeconfig</emphasis> file on its local disk to learn the tape capacity and filemark size (for a
+     tape device) or the file size (for a backup data file) to use for dump operations. When you begin a dump operation, the Tape
+     Coordinator also reads the tape or backup data file's label to see if you have recorded a different tape capacity or file size.
+     If you have, the value on the label overrides the default value from the <emphasis role="bold">tapeconfig</emphasis>
+     file.</para>
+ 
+     <para>As the Tape Coordinator writes data to a tape during a dump operation, it uses the capacity and filemark information to
+     track how much tape it has used and how much remains before the physical end-of-tape (EOT). Shortly before reaching EOT, the
+     Tape Coordinator stops writing and requests a new tape. Similarly, it uses a backup data file's size to know when it is about to
+     exhaust the space in the file. If the Tape Coordinator reaches the EOT unexpectedly, it recovers by obtaining a new tape and
+     writing to it the entire contents of the volume it was writing when it reached EOT. The interrupted volume remains on the first
+     tape, but is never used.</para>
+ 
+     <para>Many tape devices use tapes that can accommodate multiple gigabytes, or even multiple terabytes, of backup data,
+     especially if you use the device's compression mode. When writing to such devices and tapes, allowing the Tape Coordinator to
+     hit the EOT unexpectedly is generally recommended. The devices write data so quickly that it usually does not take much extra
+     time to rewrite the interrupted volume on the new tape. Similarly, they compress data so well that the data abandoned on the
+     first tape from the interrupted volume does not constitute a waste of much tape.</para>
+ 
+     <para>When writing to tapes that accommodate a smaller amount of data (say, less than two GB), it is better to avoid having the
+     Tape Coordinator hit EOT unexpectedly. AFS supports volumes up to 2 GB in size, so an interrupted volume can in fact take up
+     most of the tape. For such tapes, recording accurate values for tape capacity and filemark size, if possible, helps to maximize
+     both use of tape and the efficiency of dump operations. The following discussion of the fields in the <emphasis
+     role="bold">tapeconfig</emphasis> file explains how to determine the appropriate values.</para>
+ 
+     <para>Use a text editor to create an entry in a Tape Coordinator's <emphasis role="bold">tapeconfig</emphasis> file for each
+     tape device or backup data file that it uses. Each device or file's entry is on its own line and has the following
+     format:</para>
+ 
+     <programlisting>
+    [capacity   filemark_size]    device_name    port_offset
+ </programlisting>
+ 
+     <para>where <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">capacity</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the capacity of the tapes used with a tape device, or the amount of data to write into a backup data
+             file. Specify an integer value followed by a letter that indicates units, with no intervening space. The letter
+             <emphasis role="bold">k</emphasis> or <emphasis role="bold">K</emphasis> indicates kilobytes, <emphasis
+             role="bold">m</emphasis> or <emphasis role="bold">M</emphasis> indicates megabytes, <emphasis role="bold">g</emphasis>
+             or <emphasis role="bold">G</emphasis> indicates gigabytes, and <emphasis role="bold">t</emphasis> or <emphasis
+             role="bold">T</emphasis> indicates terabytes. If the units letter is omitted, the default is kilobytes.</para>
+ 
+             <para>To determine the capacity of a tape under two GB in size that you are going to use in regular (noncompression)
+             mode, you can either use the value that the tape's manufacturer specifies on the tape's packaging or use the <emphasis
+             role="bold">fms</emphasis> command to calculate the capacity, as described later in this section. To avoid having the
+             Tape Coordinator reach the EOT unexpectedly, it is best to record in the <emphasis role="bold">tapeconfig</emphasis>
+             file or on the label a capacity that is about 10% smaller than the actual capacity of the tape. To calculate the
+             appropriate value for a small tape used in compression mode, one method is to multiply the tape capacity (as recorded by
+             the manufacturer) by the device's compression ratio.</para>
+ 
+             <para>For tapes that hold multiple gigabytes or terabytes of data, or if using a tape drive's compression mode, the
+             recommended configuration is to record a value quite a bit (for instance, two times) larger than the maximum amount you
+             believe can fit on the tape. It is not generally worthwhile to run the <emphasis role="bold">fms</emphasis> command on
+             large tapes, even in noncompression mode. The command definitely does not yield accurate results in compression mode.
+             The Tape Coordinator is likely to reach the EOT unexpectedly, but compression mode fits so much data on the tape that
+             the data abandoned from an interrupted volume does not represent much of the tape's capacity.</para>
+ 
+             <para>For a backup data file, record a value slightly smaller than the amount of space available on the partition, and
+             definitely smaller than the operating system's maximum file size. It is also best to limit the ability of other
+             processes to write to the partition, to prevent them from using up the space in the partition.</para>
+ 
+             <para>If this field is empty, the Tape Coordinator uses the maximum acceptable value (2048 GB or 2 TB). Either leave
+             both this field and the filemark_size field empty, or provide a value in both of them.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">filemark_size</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the tape device's filemark size, which usually falls between 2 KB and 2 MB. Use the same notation as for
+             the capacity field, but note that if you omit the units letter, the default unit is bytes rather than kilobytes.</para>
+ 
+             <para>For a tape device in regular (noncompression) mode, you can use the <emphasis role="bold">fms</emphasis> command
+             to determine filemark size, or use the value reported by the device's manufacturer. To help the Tape Coordinator avoid
+             reaching EOT unexpectedly, increase the value by about 10% when recording it in the <emphasis
+             role="bold">tapeconfig</emphasis> file.</para>
+ 
+             <para>The recommended value for a tape device in compression mode is <emphasis role="bold">0</emphasis> (zero). The
+             <emphasis role="bold">fms</emphasis> command does not yield accurate results in compression mode, so you cannot use it
+             to determine the filemark size.</para>
+ 
+             <para>The recommended value for a backup data file is also <emphasis role="bold">0</emphasis> (zero). The Tape
+             Coordinator does not use filemarks when writing to a file, but a value must appear in this field nevertheless if there
+             is also a value in the capacity field.</para>
+ 
+             <para>If this field is empty, the Tape Coordinator uses the value <emphasis role="bold">0</emphasis> (zero). Either
+             leave both this field and the capacity field empty, or provide a value in both of them.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">device_name</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the complete pathname of the tape device or backup data file. The format of tape device names depends on
+             the operating system, but on UNIX systems, device names generally begin with the string <emphasis
+             role="bold">/dev/</emphasis>. For a backup data file, this field defines the complete pathname, but for suggestions on
+             how to name a backup data file, see <link linkend="HDRWQ282">Dumping Data to a Backup Data File</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">port_offset</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the port offset number for a specific tape device or backup data file. Each tape device listens for
+             backup requests on a different UNIX port. You pick the port indirectly by recording a value in this field. The Backup
+             System sets the device's actual port by adding the port offset to a base port number that it determines
+             internally.</para>
+ 
+             <para>Legal values are the integers <emphasis role="bold">0</emphasis> through <emphasis role="bold">58510</emphasis>
+             (the Backup System can track a maximum of 58,511 port offset numbers). Each value must be unique among the cell's Tape
+             Coordinators, but you do not have to assign port offset numbers sequentially, and you can associate any number of them
+             with a single machine or even tape device. For example, if you plan to use a device in both compression and
+             noncompression mode, assign it two different port offsets with appropriate tape capacity and filemark values for the
+             different modes.</para>
+ 
+             <para>Assign port offset <emphasis role="bold">0</emphasis> (zero) to the Tape Coordinator for the tape device or backup
+             data file that you use most often for backup operations; doing so enables you to omit the <emphasis
+             role="bold">-portoffset</emphasis> argument from the largest possible number of <emphasis role="bold">backup</emphasis>
+             commands.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist></para>
+ 
+     <para>The following example <emphasis role="bold">tapeconfig</emphasis> file includes entries for two tape devices, <emphasis
+     role="bold">/dev/rmt0h</emphasis> and <emphasis role="bold">/dev/rmt1h</emphasis>. Each one uses tapes with a capacity of 2 GB
+     and has a filemark size of 1 MB. Their port offset numbers are <computeroutput>0</computeroutput> and
+     <computeroutput>1</computeroutput>.</para>
+ 
+     <programlisting>
+    2g 1m /dev/rmt0h 0
+    2G 1M /dev/rmt1h 1
+ </programlisting>
+ 
+     <para>The <emphasis role="bold">fms</emphasis> command reports the capacity of the tape you have inserted and the tape device's
+     filemark size, both on the standard output stream (stdout) and in its <emphasis role="bold">fms.log</emphasis> file, which it
+     writes in the current working directory. The command interpreter must write data to the entire tape, so running the command can
+     take from several hours to more than a day, depending on the size of the tape.</para>
+ 
+     <sect2 id="HDRWQ259">
+       <title>To run the fms command on a noncompressing tape device</title>
+ 
+       <indexterm>
+         <primary>fms.log file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>fms.log</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>log files</primary>
+ 
+         <secondary>fms.log</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fms</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fms command</primary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>If an <emphasis role="bold">fms.log</emphasis> file does not already exist in the current directory, verify that you
+           can insert and write to files in the current directory. If the log file already exists, you must be able to write to the
+           file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Insert a tape into the drive. Running the command completely overwrites the tape, so use a blank tape or one that
+           you want to recycle.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fms</emphasis> command. <programlisting>
+    % <emphasis role="bold">fms</emphasis> &lt;<replaceable>tape special file</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">fms</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">tape special file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the tape device's UNIX device name, such as <emphasis role="bold">/dev/rmt0h</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example output reports that the tape in the device with device name <emphasis
+       role="bold">/dev/rmt0h</emphasis> has a capacity of 2136604672 bytes (about 2 GB), and that the device's filemark size is
+       1910205 bytes (close to 2 MB).</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fms /dev/rmt0h</emphasis>
+    wrote block: 130408
+    Finished data capacity test - rewinding
+    wrote 1109 blocks, 1109 file marks
+    Finished file mark test
+    Tape capacity is 2136604672 bytes
+    File marks are 1910205 bytes
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ260">
+     <title>Granting Administrative Privilege to Backup Operators</title>
+ 
+     <para>Each person who issues the <emphasis role="bold">backup</emphasis> and <emphasis role="bold">butc</emphasis> commands in
+     your cell must be listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file on every database server machine
+     that stores the Backup Database and Volume Location Database (VLDB), and every machine that houses a volume included in a volume
+     set. By convention, the <emphasis role="bold">UserList</emphasis> file is the same on every server machine in the cell; the
+     instructions in this document assume that your cell is configured in this way. To edit the <emphasis
+     role="bold">UserList</emphasis> file, use the <emphasis role="bold">bos adduser</emphasis> and <emphasis role="bold">bos
+     removeuser</emphasis> commands as described in <link linkend="HDRWQ592">Administering the UserList File</link>.</para>
+ 
+     <para>In addition to being listed in the <emphasis role="bold">UserList</emphasis> file, backup operators who issue the
+     <emphasis role="bold">butc</emphasis> command must be able to write to the files stored in each Tape Coordinator machine's local
+     <emphasis role="bold">/usr/afs/backup</emphasis> directory, which are protected by UNIX mode bits. Before configuring your
+     cell's first Tape Coordinator machine, decide which local user and group to designate as the owner of the directory and the
+     files in it. Among the possible ownership options are the following: <itemizedlist>
+         <listitem>
+           <para>The local superuser <emphasis role="bold">root</emphasis>. With this option, the issuer of the <emphasis
+           role="bold">butc</emphasis> command must log onto the local file system as the local superuser <emphasis
+           role="bold">root</emphasis>. If the Tape Coordinator is also a server machine, the <emphasis
+           role="bold">-localauth</emphasis> flag is used on the <emphasis role="bold">butc</emphasis> command to construct a server
+           ticket from the local <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file. On non-server machine, the issuer must
+           issue the <emphasis role="bold">klog</emphasis> command to authenticate as an AFS administrator while logged in as
+           <emphasis role="bold">root</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A single AFS administrator. Logging in and authenticating are a single step if an AFS-modified login utility is
+           used. The administrator is the only user who can start the Tape Coordinator.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>An administrative account for which several operators know the password. This allows them all to start the Tape
+           Coordinator.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Another option is to define a group in the local group file (<emphasis role="bold">/etc/group</emphasis> or equivalent) to
+     which all backup operators belong. Then turn on the <emphasis role="bold">w</emphasis> mode bit (<emphasis
+     role="bold">write</emphasis> permission) in the group mode bits rather than the user mode bits of the <emphasis
+     role="bold">/usr/afs/backup</emphasis> directory and files in it. An advantage over the methods listed previously is that each
+     operator can retain an individual administrative account for finer granularity in auditing.</para>
+ 
+     <para>For instructions on implementing your choice of protection methods, see <link linkend="HDRWQ261">Configuring Tape
+     Coordinator Machines and Tape Devices</link>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ261">
+     <title>Configuring Tape Coordinator Machines and Tape Devices</title>
+ 
+     <indexterm>
+       <primary>Tape Coordinator (Backup System)</primary>
+ 
+       <secondary>configuring</secondary>
+ 
+       <tertiary>machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Tape Coordinator (Backup System)</primary>
+ 
+       <secondary>configuring</secondary>
+ 
+       <tertiary>tape device</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Tape Coordinator (Backup System)</primary>
+ 
+       <secondary>configuring</secondary>
+ 
+       <tertiary>AIX system</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AIX</primary>
+ 
+       <secondary>configuring tape device</secondary>
+     </indexterm>
+ 
+     <para>This section explains how to configure a machine as a Tape Coordinator machine, and how to configure or remove the Tape
+     Coordinator associated with a single tape device or backup data file.</para>
+ 
+     <note>
+       <para>When configuring a tape device attached to an AIX system, you must set the device's tape block size to <emphasis
+       role="bold">0</emphasis> (zero) to indicate variable block size. If you do not, it is possible that devices attached to
+       machines of other system types cannot read the tapes made on the AIX system. Use the AIX <emphasis role="bold">smit</emphasis>
+       program to verify or change the value of the tape block size for a tape device, as instructed in Sep <link
+       linkend="LIWQ263">3</link>.</para>
+     </note>
+ 
+     <sect2 id="HDRWQ262">
+       <title>To configure a Tape Coordinator machine</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ263" />Install one or more tape devices on the Tape Coordinator machine according to the
+           manufacturer's instructions. The Backup System can track a maximum of 58,511 tape devices or backup data files per
+           cell.</para>
+ 
+           <para>If the Tape Coordinator machine is an AIX system, issue the following command to change the tape device's tape block
+           size to <emphasis role="bold">0</emphasis> (zero), which indicates variable block size. Repeat for each tape
+           device.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">chdev -l '</emphasis>device_name<emphasis role="bold">' -a block_size='0'</emphasis>
+ </programlisting>
+ 
+           <para>where device_name is the tape device's device name (for example, <emphasis
+           role="bold">/dev/rmt0h</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that the binary files for the <emphasis role="bold">backup</emphasis>, <emphasis role="bold">butc</emphasis>,
+           and <emphasis role="bold">fms</emphasis> commands are available on the local disk. If the machine is an AFS client, the
+           conventional location is the <emphasis role="bold">/usr/afsws/etc</emphasis> directory. <programlisting>
+    # <emphasis role="bold">ls /usr/afsws/etc</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the <emphasis role="bold">/usr/afs</emphasis> directory. (If the Tape Coordinator machine is also configured
+           as a file server machine, this directory already exists.) Then create the <emphasis role="bold">/usr/afs/backup</emphasis>
+           directory. <programlisting>
+    # <emphasis role="bold">mkdir /usr/afs</emphasis>
+    # <emphasis role="bold">mkdir /usr/afs/backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Use a text editor to create the <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis> file. Include a single
+           line for each tape device or backup data file, specifying the following information in the indicated order. For syntax
+           details and suggestions on the values to use in each field, see <link linkend="HDRWQ258">Configuring the tapeconfig
+           File</link>. <itemizedlist>
+               <listitem>
+                 <para>The capacity of tapes to be used in the device, or the size of the backup data file</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The device's filemark size</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The device's device name, starting with the string <emphasis role="bold">/dev/</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The device's port offset number</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <indexterm>
+             <primary>Tape Coordinator (Backup System)</primary>
+ 
+             <secondary>assigning file ownership</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>usr/afs/backup directory</primary>
+ 
+             <secondary>ownership, assigning</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>tapeconfig file</primary>
+ 
+             <secondary>ownership, assigning</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>directories</primary>
+ 
+             <secondary>/usr/afs/backup</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide which user and group are to own the <emphasis role="bold">/usr/afs/backup</emphasis> directory and <emphasis
+           role="bold">/usr/afs/backup/tapeconfig</emphasis> file, based on the suggestions in <link linkend="HDRWQ260">Granting
+           Administrative Privilege to Backup Operators</link>. Correct the UNIX mode bits on the directory and file, if necessary.
+           <programlisting>
+    # <emphasis role="bold">chown</emphasis> admin_owner <emphasis role="bold">/usr/afs/backup</emphasis>
+    # <emphasis role="bold">chown</emphasis> admin_owner <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis>
+    # <emphasis role="bold">chgrp</emphasis> admin_group <emphasis role="bold">/usr/afs/backup</emphasis>
+    # <emphasis role="bold">chgrp</emphasis> admin_group <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis>
+    # <emphasis role="bold">chmod 774 /usr/afs/backup</emphasis>
+    # <emphasis role="bold">chmod 664 /usr/afs/backup/tapeconfig</emphasis>
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>backup addhost</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>backup commands</primary>
+ 
+             <secondary>addhost</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Tape Coordinator (Backup System)</primary>
+ 
+             <secondary>adding to Backup Database</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Backup Database</primary>
+ 
+             <secondary>Tape Coordinator</secondary>
+ 
+             <tertiary>adding entry</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LICONFTC-ADDHOST" />Issue the <emphasis role="bold">backup addhost</emphasis> command to create a Tape
+           Coordinator entry in the Backup Database. Repeat the command for each Tape Coordinator. <programlisting>
+    # <emphasis role="bold">backup addhost</emphasis> &lt;<replaceable>tape machine name</replaceable>&gt; [&lt;<replaceable>TC port offset</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addhost</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">tape machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the Tape Coordinator machine's fully qualified hostname.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the tape device's port offset number. Provide the same value as you specified for the device in
+                   the <emphasis role="bold">tapeconfig</emphasis> file. You must provide this argument unless the default value of 0
+                   (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_287">
+       <title>To configure an additional Tape Coordinator on an existing Tape Coordinator machine</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Install the tape device on the Tape Coordinator machine according to the manufacturer's instructions.</para>
+ 
+           <para>If the Tape Coordinator machine is an AIX system, issue the following command to change the tape device's tape block
+           size to <emphasis role="bold">0</emphasis> (zero), which indicates variable block size.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">chdev -l '</emphasis>device_name<emphasis role="bold">' -a block_size='0'</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Choose the port offset number to assign to the tape device. If necessary, use the <emphasis role="bold">backup
+           listhosts</emphasis> command to display the port offset numbers that are already used; for a discussion of the output, see
+           <link linkend="HDRWQ264">To display the list of configured Tape Coordinators</link>. <programlisting>
+    # <emphasis role="bold">backup listhosts</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">listh</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">listhosts</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Use a text editor to add one or more entries for the device to the <emphasis
+           role="bold">/usr/afs/backup/tapeconfig</emphasis> file. Specify the following information in the indicated order. For
+           syntax details and suggestions on the values to use in each field, see <link linkend="HDRWQ258">Configuring the tapeconfig
+           File</link>. <itemizedlist>
+               <listitem>
+                 <para>The capacity of tapes to be used in the device, or the size of the backup data file</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The device's filemark size</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The device's device name, starting with the string <emphasis role="bold">/dev/</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The device's port offset number</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup addhost</emphasis> command to create an entry in the Backup Database for the
+           Tape Coordinator. For complete syntax, see Step <link linkend="LICONFTC-ADDHOST">8</link> in <link linkend="HDRWQ262">To
+           configure a Tape Coordinator machine</link>. <programlisting>
+    # <emphasis role="bold">backup addhost</emphasis> &lt;<replaceable>tape machine name</replaceable>&gt; [&lt;<replaceable>TC port offset</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>delhost</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup delhost</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>removing from Backup Database</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>Tape Coordinator</secondary>
+ 
+         <tertiary>removing entry</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_288">
+       <title>To unconfigure a Tape Coordinator</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using a text editor, remove each of the Tape Coordinator's entries from the <emphasis
+           role="bold">/usr/afs/backup/tapeconfig</emphasis> file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup delhost</emphasis> command to delete the Tape Coordinator's Backup Database
+           entry. <programlisting>
+    % <emphasis role="bold">backup delhost</emphasis> &lt;<replaceable>tape machine name</replaceable>&gt; [&lt;<replaceable>TC port offset</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">delh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">delhost</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">tape machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the complete Internet host name of the Tape Coordinator machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the same port offset number removed from the <emphasis role="bold">tapeconfig</emphasis> file. You must
+                   provide this argument unless the default value of <emphasis role="bold">0</emphasis> (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>port offset number</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>port offset numbers</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>listhosts</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup listhosts</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ264">
+       <title>To display the list of configured Tape Coordinators</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup listhosts</emphasis> command to list the Tape Coordinators and port offset
+           numbers currently configured in the Backup Database. <programlisting>
+    % <emphasis role="bold">backup listhosts</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listhosts</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output lists each Tape Coordinator machine and the port offset numbers currently allocated to it in the Backup
+       Database. The appearance of a port offset number does not imply that the associated Tape Coordinator is actually running.
+       Machine names appear in the format in which they were specified with the <emphasis role="bold">backup addhost</emphasis>
+       command.</para>
+ 
+       <para>The following example output lists the Tape Coordinators currently defined in the Backup Database of the ABC Corporation
+       cell:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">backup listhosts</emphasis>
+    Tape hosts:
+        Host backup1.abc.com, port offset 0
+        Host backup1.abc.com, port offset 2
+        Host backup2.abc.com, port offset 1
+        Host backup2.abc.com, port offset 3
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ265">
+     <title>Defining and Displaying Volume Sets and Volume Entries</title>
+ 
+     <para>The Backup System handles data at the level of volumes rather than individual files. You must define groups of volumes
+     called <emphasis>volume sets</emphasis> before performing backup operations, by using the <emphasis role="bold">backup
+     addvolset</emphasis> command. A volume set name can be up to 31 characters long and can include any character other than the
+     period (<emphasis role="bold">.</emphasis>), but avoid using metacharacters that have special meanings to the shell.</para>
+ 
+     <para>After creating a volume set, use the <emphasis role="bold">backup addvolentry</emphasis> command to place one or more
+     <emphasis>volume entries</emphasis> in it. They define the volumes that belong to it in terms of their location (file server
+     machine and partition) and name. Use the command's required <emphasis role="bold">-server</emphasis> argument to designate the
+     file server machine that houses the volumes of interest and its required <emphasis role="bold">-partition</emphasis> argument to
+     designate the partition. Two types of values are acceptable: <itemizedlist>
+         <listitem>
+           <para>The fully qualified hostname of one machine or full name of one partition (such as <emphasis
+           role="bold">/vicepm</emphasis>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The regular expression <emphasis role="bold">.*</emphasis> (period and asterisk), which matches every machine name
+           or partition name in the VLDB</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>regular expression</primary>
+ 
+       <secondary>Backup System</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>regular expressions</secondary>
+     </indexterm>
+ 
+     <para>For the volume name (the required <emphasis role="bold">-volume</emphasis> argument), specify a combination of
+     alphanumeric characters and one or more metacharacters to specify part or all of the volume name with a wildcard. You can use
+     any of the following metacharacters in the volume name field: <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">.</emphasis></term>
+ 
+           <listitem>
+             <para>The period matches any single character.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">*</emphasis></term>
+ 
+           <listitem>
+             <para>The asterisk matches zero or more instances of the preceding character. Combine it with any other alphanumeric
+             character or metacharacter.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">[ ]</emphasis></term>
+ 
+           <listitem>
+             <para>Square brackets around a list of characters match a single instance of any of the characters, but no other
+             characters; for example, <emphasis role="bold">[abc]</emphasis> matches a single <emphasis role="bold">a</emphasis> or
+             <emphasis role="bold">b</emphasis> or <emphasis role="bold">c</emphasis>, but not <emphasis role="bold">d</emphasis> or
+             <emphasis role="bold">A</emphasis>. You can combine this expression with the asterisk.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">^</emphasis></term>
+ 
+           <listitem>
+             <para>The caret, when used as the first character in a square-bracketed set, designates a match with any single
+             character other than the characters that follow it; for example, <emphasis role="bold">[^a]</emphasis> matches any
+             single character except lowercase <emphasis role="bold">a</emphasis>. You can combine this expression with the
+             asterisk.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">\</emphasis></term>
+ 
+           <listitem>
+             <para>A backslash preceding any of the metacharacters in this list makes it match its literal value only. For example,
+             the expression <emphasis role="bold">\.</emphasis> (backslash and period) matches a single period, <emphasis
+             role="bold">\*</emphasis> matches a single asterisk, and <emphasis role="bold">\\</emphasis> matches a single backslash.
+             You can combine such expressions with the asterisk (for example, <emphasis role="bold">\.*</emphasis> matches any number
+             of periods).</para>
+           </listitem>
+         </varlistentry>
+       </variablelist></para>
+ 
+     <para>Perhaps the most common regular expression is the period followed by an asterisk (<emphasis role="bold">.*</emphasis>).
+     This expression matches any string of any length, because the period matches any character and the asterisk means any number of
+     that character. As mentioned, it is the only acceptable regular expression in the file server and partition fields of a volume
+     entry. In the volume name field, it can stand alone (in which case it matches every volume listed in the VLDB), or can combine
+     with alphanumeric characters. For example, the string <emphasis role="bold">user.*\.backup</emphasis> matches any volume name
+     that begins with the string <emphasis role="bold">user</emphasis> and ends with <emphasis role="bold">.backup</emphasis>.</para>
+ 
+     <para>Issuing the <emphasis role="bold">backup addvolentry</emphasis> command in interactive mode is simplest. If you issue it
+     at the shell prompt, you must surround any string that includes a regular expression with double quotes (<emphasis role="bold">"
+     "</emphasis>) so that the shell passes them uninterpreted to the <emphasis role="bold">backup</emphasis> command interpreter
+     rather than resolving them.</para>
+ 
+     <para>To define various combinations of volumes, provide the following types of values for the <emphasis role="bold">backup
+     addvolentry</emphasis> command's three arguments. The list uses the notation appropriate for interactive mode; if you issue the
+     command at the shell prompt instead, place double quotes around any string that includes a regular expression. To create a
+     volume entry that includes: <itemizedlist>
+         <listitem>
+           <para>All volumes listed in the VLDB, use the regular expression <emphasis role="bold">.*</emphasis> for all three
+           arguments (<emphasis role="bold">-server .* -partition .* -volume .*</emphasis>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Every volume on a specific file server machine, specify its fully qualified hostname as the <emphasis
+           role="bold">-server</emphasis> argument and use the regular expression <emphasis role="bold">.*</emphasis> for the
+           <emphasis role="bold">-partition</emphasis> and -<emphasis role="bold">volume</emphasis> arguments (for example: <emphasis
+           role="bold">-server fs1.abc.com -partition .* -volume .*</emphasis>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>All volumes that reside on a partition with the same name on various file server machines, specify the complete
+           partition name as the <emphasis role="bold">-partition</emphasis> argument and use the regular expression <emphasis
+           role="bold">.*</emphasis> for the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-volume</emphasis>
+           arguments (for example: <emphasis role="bold">-server .* -partition /vicepd -volume .*</emphasis>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Every volume with a common string in its name, use the regular expression <emphasis role="bold">.*</emphasis> for
+           the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments, and provide a
+           combination of alphanumeric characters and metacharacters as the <emphasis role="bold">-volume</emphasis> argument (for
+           example: <emphasis role="bold">-server .* -partition .* -volume .*\.backup</emphasis> includes all volumes whose names end
+           in the string <emphasis role="bold">.backup</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>All volumes on one partition, specify the machine's fully qualified hostname as the <emphasis
+           role="bold">-server</emphasis> argument and the full partition name as the <emphasis role="bold">-partition</emphasis>
+           argument, and use the regular expression <emphasis role="bold">.*</emphasis> for the <emphasis
+           role="bold">-volume</emphasis> argument (for example: <emphasis role="bold">-server fs2.abc.com -partition /vicepb -volume
+           .*</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A single volume, specify its complete name as the <emphasis role="bold">-volume</emphasis> argument. To bypass the
+           potentially time-consuming search through the VLDB for matching entries, you can specify an actual machine and partition
+           name for the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments
+           respectively. However, if it is possible that you need to move the volume in future, it is best to use the regular
+           expression <emphasis role="bold">.*</emphasis> for the machine and partition name.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>As you create volume sets, define groups of volumes you want to dump to the same tape at the same time (for example,
+     weekly or daily) and in the same manner (fully or incrementally). In general, a volume set that includes volumes with similar
+     contents (as indicated by similar names) is more useful than one that includes volumes that share a common location, especially
+     if you often move volumes for load-balancing or space reasons. Most often, then, it is appropriate to use the regular expression
+     <emphasis role="bold">.*</emphasis> (period followed by a backslash) for the <emphasis role="bold">-server</emphasis> and
+     <emphasis role="bold">-partition</emphasis> arguments to the <emphasis role="bold">backup addvolentry</emphasis> command.</para>
+ 
+     <para>It is generally more efficient to include a limited number of volumes in a volume entry. Dumps of a volume set that
+     includes a large number of volume can take a long time to complete, increasing the possibility that the operation fails due to a
+     service interruption or outage.</para>
+ 
+     <para>To remove a volume entry from a volume set, use the <emphasis role="bold">backup delvolentry</emphasis> command. To remove
+     a volume set and all of its component volume entries from the Backup Database, use the <emphasis role="bold">backup
+     delvolset</emphasis> command. To display the volume entries in a volume set, use the <emphasis role="bold">backup
+     listvolsets</emphasis> command.</para>
+ 
+     <para>By default, a Backup Database record is created for the new volume set. Sometimes it is convenient to create volume sets
+     without recording them permanently in the Backup Database, for example when using the <emphasis role="bold">backup
+     volsetrestore</emphasis> command to restore a group of volumes that were not necessarily backed up together (for further
+     discussion, see <link linkend="HDRWQ312">Using the backup volsetrestore Command</link>). To create a
+     <emphasis>temporary</emphasis> volume set, include the <emphasis role="bold">-temporary</emphasis> flag to the <emphasis
+     role="bold">backup addvolset</emphasis> command. A temporary volume set exists only during the lifetime of the current
+     interactive session, so the flag is effective only when used during an interactive session (opened by issuing the <emphasis
+     role="bold">backup (interactive)</emphasis> command). You can use the <emphasis role="bold">backup delvolset</emphasis> command
+     to delete a temporary volume set before the interactive session ends, if you wish, but as noted it is automatically deleted when
+     you end the session. One advantage of temporary volume sets is that the <emphasis role="bold">backup addvolset</emphasis>
+     command, and any <emphasis role="bold">backup addvolentry</emphasis> commands subsequently used to add volume entries to it,
+     complete more quickly than for regular volume sets, because you are not creating any Backup Database records.</para>
+ 
+     <indexterm>
+       <primary>Backup Database</primary>
+ 
+       <secondary>volume set</secondary>
+ 
+       <tertiary>creating</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume set (Backup System)</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>backup addvolset</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup commands</primary>
+ 
+       <secondary>addvolset</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_291">
+       <title>To create a volume set</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode. If you are going to define volume entries right away with the <emphasis role="bold">backup
+           addvolentry</emphasis> command, this eliminates the need to surround metacharacter expressions with double quotes. You
+           must enter interactive mode if creating a temporary volume set. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) addvolset</emphasis> command to create the volume set. You must then issue
+           the <emphasis role="bold">(backup) addvolentry</emphasis> command to define volume entries in it. <programlisting>
+    backup&gt;  <emphasis role="bold">addvolset</emphasis> &lt;<replaceable>volume set name</replaceable>&gt; [<emphasis role="bold">-temporary</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addvols</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addvolset</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume set. The name can include no more than 31 characters, cannot include periods, and must be
+                   unique within the Backup Database. (A temporary volume set can have the same name as an existing permanent volume
+                   set, but this is not recommended because of the confusion it can cause.)</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-temporary</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates a temporary volume set, which exists only during the current interactive session.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>volume entry (Backup System)</primary>
+ 
+         <secondary>creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume entry</secondary>
+ 
+         <tertiary>creating</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup addvolentry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>addvolentry</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_292">
+       <title>To add a volume entry to a volume set</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode if you have not already. This makes it simpler to use metacharacter expressions, because you do not need
+           to surround them with double quotes. If you are adding entries to a temporary volume set, you must already have entered
+           interactive mode before creating the volume set. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) addvolentry</emphasis> command to define volume entries in an existing
+           volume set. The Backup System assigns each volume entry an index within the volume set, starting with 1 (one).
+           <programlisting>
+    backup&gt; <emphasis role="bold">addvolentry  -name</emphasis> &lt;<replaceable>volume set name</replaceable>&gt;  \
+                         <emphasis role="bold">-server</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  \
+                         <emphasis role="bold">-partition</emphasis> &lt;<replaceable>partition name</replaceable>&gt;  \
+                         <emphasis role="bold">-volumes</emphasis> &lt;<replaceable>volume name (regular expression)</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addvole</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addvolentry</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume set to which to add the volume entry. It must already exist (use the <emphasis
+                   role="bold">backup addvolset</emphasis> command to create it).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Defines the set of one or more file server machines that house the volumes in the volume entry. Provide
+                   either one fully-qualified hostname (such as <emphasis role="bold">fs1.abc.com</emphasis>) or the metacharacter
+                   expression <emphasis role="bold">.*</emphasis> (period and asterisk), which matches all machine names in the
+                   VLDB.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Defines the set of one or more partitions that house the volumes in the volume entry. Provide either one
+                   complete partition name (such as <emphasis role="bold">/vicepa</emphasis>) or the metacharacter expression
+                   <emphasis role="bold">.*</emphasis> (period and asterisk), which matches all partition names.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-volumes</emphasis></term>
+ 
+                 <listitem>
+                   <para>Defines the set of one or more volumes included in the volume entry, identifying them by name. This argument
+                   can include a combination of alphanumeric characters and one or more of the metacharacter expressions discussed in
+                   the introductory material in this section.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume set</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume entry</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume set (Backup System)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume entry (Backup System)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>listvolsets</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup listvolsets</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ266">
+       <title>To display volume sets and volume entries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup listvolsets</emphasis> command to display the volume entries in a specific
+           volume set or all of them. If you are displaying a temporary volume set, you must still be in the interactive session in
+           which you created it. <programlisting>
+    % <emphasis role="bold">backup listvolsets</emphasis> [&lt;<replaceable>volume set name</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listvolsets</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume set to display. Omit this argument to display all defined volume sets.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <para>The output from the command uses the wildcard notation used when the volume entries were created. The string
+           <computeroutput>(temporary)</computeroutput> marks a temporary volume set. The following example displays all three of the
+           volume sets defined in a cell's Backup Database, plus a temporary volume set <emphasis role="bold">pat+jones</emphasis>
+           created during the current interactive session:</para>
+ 
+           <programlisting>
+    backup&gt; <emphasis role="bold">listv</emphasis>
+    Volume set pat+jones (temporary):
+      Entry 1: server fs1.abc.com, partition /vicepe, volumes: user.pat.backup
+      Entry 2: server fs5.abc.com, partition /viceph, volumes: user.jones.backup
+    Volume set user:
+      Entry 1: server .*, partition .*, volumes: user.*\.backup
+    Volume set sun:
+      Entry 1: server .*, partition .*, volumes: sun4x_55\..*
+      Entry 2: server .*, partition .*, volumes: sun4x_56\..*
+    Volume set rs:
+      Entry 1: server .*, partition .*, volumes: rs_aix42\..*
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume set</secondary>
+ 
+         <tertiary>deleting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume set (Backup System)</primary>
+ 
+         <secondary>deleting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup delvolset</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>delvolset</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_294">
+       <title>To delete a volume set</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup delvolset</emphasis> command to delete one or more volume sets and all of the
+           component volume entries in them. If you are deleting a temporary volume set, you must still be in the interactive session
+           in which you created it. <programlisting>
+    % <emphasis role="bold">backup delvolset</emphasis> &lt;<replaceable>volume set name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">delvols</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">delvolset</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each volume set to delete.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume entry</secondary>
+ 
+         <tertiary>deleting from volume set</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume set (Backup System)</primary>
+ 
+         <secondary>deleting volume entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume entry (Backup System)</primary>
+ 
+         <secondary>deleting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup delvolentry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>delvolentry</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_295">
+       <title>To delete a volume entry from a volume set</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the volume set includes more than one volume entry, issue the <emphasis role="bold">(backup)
+           listvolsets</emphasis> command to display the index number associated with each one (if there is only one volume entry,
+           its index is 1). For a more detailed description of the command's output, see <link linkend="HDRWQ266">To display volume
+           sets and volume entries</link>. <programlisting>
+    backup&gt; <emphasis role="bold">listvolsets</emphasis> &lt;<replaceable>volume set name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listvolsets</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume set for which to display volume entries.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) delvolentry</emphasis> command to delete the volume entry. <programlisting>
+    backup&gt; <emphasis role="bold">delvolentry</emphasis> &lt;<replaceable>volume set name</replaceable>&gt;  &lt;<replaceable>volume entry index</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">delvole</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">delvolentry</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume set from which to delete a volume entry.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume entry index</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the index number of the volume entry to delete.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ267">
+     <title>Defining and Displaying the Dump Hierarchy</title>
+ 
+     <indexterm>
+       <primary>dump hierarchy (Backup System)</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump hierarchy (Backup System)</primary>
+ 
+       <secondary>expiration dates</secondary>
+ 
+       <tertiary>assigning to dump levels</tertiary>
+     </indexterm>
+ 
+     <para>A dump hierarchy is a logical structure in the Backup Database that defines the relationship between full and incremental
+     dumps; that is, it defines which dump serves as the parent for an incremental dump. Each individual component of a hierarchy is
+     a dump level.</para>
+ 
+     <para>As you define dump levels with the <emphasis role="bold">backup adddump</emphasis> command, keep the following rules and
+     suggestions in mind: <itemizedlist>
+         <listitem>
+           <para>Each full dump level is the top level of a hierarchy. You can create as many hierarchies as you need to dump
+           different volume sets on different schedules.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The name of a full dump level consists of an initial slash (<emphasis role="bold">/</emphasis>), followed by a
+           string of up to 28 alphanumeric characters.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The name of an incremental dump level resembles a pathname, starting with the name of a full dump level, then the
+           first incremental level, and so on, down to the final incremental level. Precede each level name with a slash to separate
+           it from the preceding level. Like the full level, each component level in the name can have up to 28 alphanumeric
+           characters, not including the slash.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A hierarchy can have any have any number of levels, but the maximum length of a complete dump level name is 256
+           characters, including the slashes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Before defining a given incremental level, you must define all of the levels above it in the hierarchy.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Do not use the period (<emphasis role="bold">.</emphasis>) in dump level names. The Backup System uses the period as
+           the separator between a dump's volume set name and dump level name when it creates the dump name and AFS tape name. Any
+           other alphanumeric and punctuation characters are allowed, but it is best to avoid metacharacters. If you include a
+           metacharacter, you must precede it with a backslash (<emphasis role="bold">\</emphasis>) or surround the entire dump level
+           name with double quotes (<emphasis role="bold">" "</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Naming dump levels for days or other actual time points reminds you when to perform dumps, and makes it easier to
+           track the relationship between dumps performed at different levels. However, the names have no meaning to the Backup
+           System: it does not automatically create dumps according to the names, and does not prevent you from, for example, using
+           the <emphasis role="bold">/sunday</emphasis> level when creating a dump on a Tuesday.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It is best not to use the same name for more than one component level in a hierarchy, because it means the resulting
+           dump name no longer indicates which level was used. For example, if you name a dump level <emphasis
+           role="bold">/full/incr/incr</emphasis>, then the dump name and AFS tape name that result from dumping a volume set at the
+           first incremental level (<emphasis role="bold">/full/incr</emphasis>) look the same as the names that result from dumping
+           at the second incremental level (<emphasis role="bold">/full/incr/incr</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Individual levels in different hierarchies can have the same name, but the complete pathnames must be unique. For
+           example, <emphasis role="bold">/sunday1/monday</emphasis> and <emphasis role="bold">/sunday2/monday</emphasis> share the
+           same name at the final level, but are unique because they have different names at the full level (belong to different
+           hierarchies). However, using the same name in multiple hierarchies means that dump and AFS tape names do not unambiguously
+           indicate which hierarchy was used.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The following example shows three hierarchies. Each begins with a full dump at the top: <emphasis
+     role="bold">sunday1</emphasis> for the first hierarchy, <emphasis role="bold">sunday2</emphasis> for the second hierarchy, and
+     <emphasis role="bold">sunday_bin</emphasis> for the third hierarchy. In all three hierarchies, each of the other dump levels is
+     an incremental level.</para>
+ 
+     <programlisting>
+    /sunday1
+            /monday
+            /tuesday
+            /wednesday
+            /thursday
+            /friday
+    /sunday2
+            /monday
+                   /tuesday
+                           /wednesday
+                                     /thursday
+                                              /friday
+     /sunday_bin
+                /monday
+                       /wednesday
+                                 /friday
+ </programlisting>
+ 
+     <para>In the first hierarchy, each incremental dump level refers to the full level <emphasis role="bold">/sunday1</emphasis> as
+     its parent. When (for example) you dump a volume set at the <emphasis role="bold">/sunday1/wednesday</emphasis> level, it
+     includes data that has changed since the volume set was dumped at the <emphasis role="bold">/sunday1</emphasis> level.</para>
+ 
+     <para>In contrast, each incremental dump level in the second hierarchy refers to the immediately preceding dump level as its
+     parent. When you dump a volume set at the corresponding level in the second hierarchy (<emphasis
+     role="bold">/sunday2/monday/tuesday/wednesday</emphasis>), the dump includes only data that has changed since the volume set was
+     dumped at the <emphasis role="bold">/sunday2/monday/tuesday</emphasis> level (presumably the day before). Assuming you create
+     dumps on the indicated days, an incremental dump made using this hierarchy contains less data than an incremental dump made at
+     the corresponding level in the first hierarchy.</para>
+ 
+     <para>The third hierarchy is more appropriate for dumping volumes for which a daily backup is excessive because the data does
+     not change often (for example, system binaries).</para>
+ 
+     <sect2 id="HDRWQ268">
+       <title>Creating a Tape Recycling Schedule</title>
+ 
+       <indexterm>
+         <primary>expiration dates</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>expiration dates</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>expiration dates</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>expiration dates</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>expiration dates</primary>
+ 
+         <secondary>absolute</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>expiration dates</primary>
+ 
+         <secondary>relative</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>recycling schedule for tapes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tape recycling schedules</primary>
+       </indexterm>
+ 
+       <para>If your cell is like most cells, you have a limited amount of room for storing backup tapes and a limited budget for new
+       tapes. The easiest solution is to recycle tapes by overwriting them when you no longer need the backup data on them. The
+       Backup System helps you implement a recycling schedule by enabling you to associate an expiration date with each dump level.
+       The expiration date defines when a dump created at that level expires. Until that time the Backup System refuses to overwrite
+       a tape that contains the dump. Thus, assigning expiration dates automatically determines how you recycle tapes.</para>
+ 
+       <para>When designing a tape-recycling schedule, you must decide how far in the past and to what level of precision you want to
+       guarantee access to backed up data. For instance, if you decide to guarantee that you can restore a user's home volume to its
+       state on any given day in the last two weeks, you cannot recycle the tape that contains a given daily dump for at least two
+       weeks after you create it. Similarly, if you decide to guarantee that you can restore home volumes to their state at the
+       beginning of any given week in the last month, you cannot recycle the tapes in a dump set containing a weekly dump for at
+       least four weeks. The following example dump hierarchy implements this recycling schedule by setting the expiration date for
+       each daily incremental dump to 13 days and the expiration date of the weekly full dumps to 27 days.</para>
+ 
+       <para>The tapes used to store dumps created at the daily incremental levels in the <emphasis role="bold">/sunday1</emphasis>
+       hierarchy expire just in time to be recycled for daily dumps in the <emphasis role="bold">/sunday3</emphasis> hierarchy (and
+       vice versa), and there is a similar relationship between the <emphasis role="bold">/sunday2</emphasis> and <emphasis
+       role="bold">/sunday4</emphasis> hierarchies. Similarly, the tape that houses a full dump at the <emphasis
+       role="bold">/sunday1</emphasis> level expires just in time to be used for a full dump on the first Sunday of the following
+       month.</para>
+ 
+       <programlisting>
+    /sunday1   expires in 27d
+            /monday1  expires in 13d
+            /tuesday1  expires in 13d
+            /wednesday1  expires in 13d
+            /thursday1  expires in 13d
+            /friday1  expires in 13d
+    /sunday2   expires in 27d
+            /monday2  expires in 13d
+            /tuesday2  expires in 13d
+            /wednesday2  expires in 13d
+            /thursday2  expires in 13d
+            /friday2  expires in 13d
+    /sunday3   expires in 27d
+            /monday1  expires in 13d
+            /tuesday1  expires in 13d
+            /wednesday1  expires in 13d
+            /thursday1  expires in 13d
+            /friday1  expires in 13d
+    /sunday4   expires in 27d
+            /monday2  expires in 13d
+            /tuesday2  expires in 13d
+            /wednesday2  expires in 13d
+            /thursday2  expires in 13d
+            /friday2  expires in 13d
+ </programlisting>
+ 
+       <para>If you use appended dumps in your cell, keep in mind that all dumps in a dump set are subject to the latest (furthest
+       into the future) expiration date associated with any of the constituent dumps. You cannot recycle any of the tapes that
+       contain a dump set until all of the dumps have reached their expiration date. See also <link linkend="HDRWQ299">Appending
+       Dumps to an Existing Dump Set</link>.</para>
+ 
+       <para>Most tape manufacturers recommend that you write to a tape a limited number of times, and it is best not to exceed this
+       limit when recycling tapes. To help you track tape usage, the Backup System records a
+       <computeroutput>useCount</computeroutput> counter on the tape's label. It increments the counter each time the tape's label is
+       rewritten (each time you use the <emphasis role="bold">backup labeltape</emphasis> or <emphasis role="bold">backup
+       dump</emphasis> command). To display the <computeroutput>useCount</computeroutput> counter, use the <emphasis
+       role="bold">backup readlabel</emphasis> or <emphasis role="bold">backup scantape</emphasis> command or include the <emphasis
+       role="bold">-id</emphasis> and <emphasis role="bold">-verbose</emphasis> options when you issue the <emphasis
+       role="bold">backup dumpinfo</emphasis> command. For instructions see <link linkend="HDRWQ272">Writing and Reading Tape
+       Labels</link> or <link linkend="HDRWQ302">Displaying Backup Dump Records</link>.</para>
+ 
+       <indexterm>
+         <primary>useCount counter on tape label (Backup System)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>useCount counter on tape label</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>recycling</primary>
+ 
+         <secondary>useCounts of tapes (Backup System)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tape labels</primary>
+ 
+         <secondary>useCounts of tapes</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ269">
+       <title>Archiving Tapes</title>
+ 
+       <indexterm>
+         <primary>archiving</primary>
+ 
+         <secondary>tapes in Backup System</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tapes (Backup System)</primary>
+ 
+         <secondary>archiving</secondary>
+       </indexterm>
+ 
+       <para>Even if you make extensive use of tape recycling, there is probably some backup data that you need to archive for a long
+       (or even an indefinite) period of time. You can use the Backup System to archive data on a regular schedule, and you can also
+       choose to archive data on tapes that you previously expected to recycle.</para>
+ 
+       <para>If you want to archive data on a regular basis, you can create date-specific dump levels in the dump hierarchy. For
+       example, if you decide to archive a full dump of all data in your cell at the beginning of each quarter in the year 2000, you
+       can define the following levels in the dump hierarchy:</para>
+ 
+       <programlisting>
+    /1Q2000
+    /2Q2000
+    /3Q2000
+    /4Q2000
+ </programlisting>
+ 
+       <para>If you decide to archive data that is on tapes you previously planned to recycle, you must gather all of the tapes that
+       contain the relevant dumps, both full and incremental. To avoid accidental erasure, it is best to set the switch on the tapes
+       that makes them read-only, before placing them in your archive storage area. If the tapes also contain a large amount of
+       extraneous data that you do not want to archive, you can restore just the relevant data into a new temporary volume, and back
+       up that volume to the smallest number of tapes possible. One reason to keep a dump set small is to minimize the amount of
+       irrelevant data in a dump set you end up needing to archive.</para>
+ 
+       <para>If you do not expect to restore archived data to the file system, you can consider using the <emphasis
+       role="bold">backup deletedump</emphasis> command to remove the associated dump records from the Backup Database, which helps
+       keep it to an efficient size. If you ever need to restore the data, you can use the <emphasis role="bold">-dbadd</emphasis>
+       flag to the <emphasis role="bold">backup scantape</emphasis> command to reinsert the dump records into the database. For
+       instructions, see <link linkend="HDRWQ305">To scan the contents of a tape</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ270">
+       <title>Defining Expiration Dates</title>
+ 
+       <para>To associate an expiration date with a dump level as you create it, use the <emphasis role="bold">-expires</emphasis>
+       argument to the <emphasis role="bold">backup adddump</emphasis> command. To change an existing dump level's expiration date,
+       use the <emphasis role="bold">-expires</emphasis> argument to the <emphasis role="bold">backup setexp</emphasis> command.
+       (Note that it is not possible to change the expiration date of an actual dump that has already been created at that level).
+       With both commands, you can define an expiration date either in absolute terms (for example, 13 January 2000) or relative
+       terms (for example, 30 days from when the dump is created). <itemizedlist>
+           <listitem>
+             <para>To define an absolute expiration date, provide a value for the <emphasis role="bold">-expires</emphasis> argument
+             with the following format: <programlisting>
+    [<emphasis role="bold">at</emphasis>] mm<emphasis role="bold">/</emphasis>dd<emphasis role="bold">/</emphasis>yyyy [hh<emphasis
+                   role="bold">:</emphasis>MM]
+ </programlisting></para>
+ 
+             <para>where mm indicates the month, dd the day, and yyyy the year when the dump expires. Valid values for the year fall
+             in the range <emphasis role="bold">1970</emphasis> through <emphasis role="bold">2037</emphasis> (the latest possible
+             date that the UNIX time representation can express is in early 2038). If you provide a time, it must be in 24-hour
+             format with hh the hours and MM the minutes (for example, <emphasis role="bold">21:50</emphasis> is 9:50 p.m.). If you
+             omit the time, the default is 00:00 hours (12:00 midnight) on the indicated date.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To define a relative expiration date, provide a value for the <emphasis role="bold">-expires</emphasis> argument
+             with the following format: <programlisting>
+    [<emphasis role="bold">in</emphasis>] [years<emphasis role="bold">y</emphasis>] [months<emphasis role="bold">m</emphasis>] [days<emphasis
+                   role="bold">d</emphasis>]
+ </programlisting></para>
+ 
+             <para>where each of years, months, and days is an integer. Provide at least one of them together with the corresponding
+             units letter (<emphasis role="bold">y</emphasis>, <emphasis role="bold">m</emphasis>, or <emphasis
+             role="bold">d</emphasis> respectively), with no intervening space. If you provide more than one of the three, list them
+             in the indicated order.</para>
+ 
+             <para>The Backup System calculates a dump's actual expiration date by adding the indicated relative value to the start
+             time of the dump operation. For example, it assigns an expiration date 1 year, 6 months, and 2 days in the future to a
+             dump created at a dump level with associated expiration date <emphasis role="bold">in 1y 6m 2d</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To indicate that a dump backed up at the corresponding dump level never expires, provide the value <emphasis
+             role="bold">NEVER</emphasis> instead of a date and time. To recycle tapes that contain dumps created at such a level,
+             you must use the <emphasis role="bold">backup readlabel</emphasis> command to overwrite the tape's label.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If you omit the <emphasis role="bold">-expires</emphasis> argument to the <emphasis role="bold">backup
+       adddump</emphasis> command, then the expiration date is set to UNIX time zero (00:00 hours on 1 January 1970). The Backup
+       System considers dumps created at such a dump level to expire at their creation time. If no dumps in a dump set have an
+       expiration date, then the Backup System does not impose any restriction on recycling the tapes that contain the dump set. If
+       you need to prevent premature recycling of the tapes that contain the dump set, you must use a manual tracking system.</para>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>dump levels</secondary>
+ 
+         <tertiary>adding</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>in Backup Database</secondary>
+ 
+         <tertiary>adding</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>dump levels</secondary>
+ 
+         <tertiary>adding</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>expiration dates</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>expiration dates</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>expiration dates</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>expiration dates</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>adddump</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup adddump</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_300">
+       <title>To add a dump level to the dump hierarchy</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Optional</emphasis>. Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup adddump</emphasis> command to define one or more dump levels. If you are
+           defining an incremental level, then all of the parent levels that precede it in its pathname must either already exist or
+           precede it on the command line. <programlisting>
+    backup&gt; <emphasis role="bold">adddump -dump</emphasis> &lt;<replaceable>dump level name</replaceable>&gt;+ [<emphasis
+                 role="bold">-expires</emphasis> &lt;<replaceable>expiration date</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addd</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">adddump</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dump</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each dump level to added. If you specify more than one dump level name, you must include the <emphasis
+                   role="bold">-dump</emphasis> switch.</para>
+ 
+                   <para>Provide the entire pathname of the dump level, preceding each level in the pathname with a slash (<emphasis
+                   role="bold">/</emphasis>). Each component level can be up to 28 characters in length, and the pathname can include
+                   up to 256 characters including the slashes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-expires</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the expiration date associated with each dump level. Specify either a relative or absolute expiration
+                   date, as described in <link linkend="HDRWQ270">Defining Expiration Dates</link>, or omit this argument to assign
+                   no expiration date to the dump levels.</para>
+ 
+                   <note>
+                     <para>A plus sign follows this argument in the command's syntax statement because it accepts a multiword value
+                     which does not need to be enclosed in double quotes or other delimiters, not because it accepts multiple dates.
+                     Provide only one date (and optionally, time) definition to be associated with each dump level specified by the
+                     <emphasis role="bold">-dump</emphasis> argument.</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>expiration dates</primary>
+ 
+         <secondary>changing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>expiration dates</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>expiration dates</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>expiration dates</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>setexp</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup setexp</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_301">
+       <title>To change a dump level's expiration date</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Optional</emphasis>. Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) setexp</emphasis> command to change the expiration date associated with one
+           or more dump levels. <programlisting>
+    backup&gt; <emphasis role="bold">setexp -dump</emphasis> &lt;<replaceable>dump level name</replaceable>&gt;+ [<emphasis
+                 role="bold">-expires</emphasis> &lt;<replaceable>expiration date</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">se</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setexp</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dump</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each existing dump level for which to change the expiration date.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-expires</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the expiration date associated with each dump level. Specify either a relative or absolute expiration
+                   date, as described in <link linkend="HDRWQ270">Defining Expiration Dates</link>; omit this argument to remove the
+                   expiration date currently associated with each dump level.</para>
+ 
+                   <note>
+                     <para>A plus sign follows this argument in the command's syntax statement because it accepts a multiword value
+                     which does not need to be enclosed in double quotes or other delimiters, not because it accepts multiple dates.
+                     Provide only one date (and optionally, time) definition to be associated with each dump level specified by the
+                     <emphasis role="bold">-dump</emphasis> argument.</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>dump levels</secondary>
+ 
+         <tertiary>deleting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>in Backup Database</secondary>
+ 
+         <tertiary>deleting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>dump levels</secondary>
+ 
+         <tertiary>deleting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>deldump</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup deldump</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_302">
+       <title>To delete a dump level from the dump hierarchy</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Optional</emphasis>. Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) deldump</emphasis> command to delete the dump level. Note that the command
+           automatically removes all incremental dump levels for which the specified level serves as parent, either directly or
+           indirectly. <programlisting>
+    backup&gt; <emphasis role="bold">deldump</emphasis> &lt;<replaceable>dump level name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">deld</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">deldump</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dump level name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete pathname of the dump level to delete.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>dump hierarchy</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>dump levels</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump hierarchy (Backup System)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dump levels</primary>
+ 
+         <secondary>in Backup Database</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>listdumps</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup listdumps</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ271">
+       <title>To display the dump hierarchy</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup listdumps</emphasis> command to display the dump hierarchy. <programlisting>
+    % <emphasis role="bold">backup listdumps</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">listd</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">listdumps</emphasis>.</para>
+ 
+           <para>The output from this command displays the dump hierarchy, reporting the expiration date associated with each dump
+           level, as in the following example.</para>
+ 
+           <programlisting>
+     % <emphasis role="bold">backup listdumps</emphasis>
+    /week1  expires in  27d
+          /tuesday  expires in  13d
+                  /thursday  expires in  13d
+          /sunday  expires in  13d
+                 /tuesday expires in  13d
+                         /thursday expires in  13d
+    /week3  expires in  27d
+          /tuesday  expires in  13d
+                  /thursday  expires in  13d
+          /sunday  expires in  13d
+                 /tuesday  expires in  13d
+                         /thursday  expires in  13d
+    sunday1   expires in  27d
+           /monday1  expires in  13d
+           /tuesday1  expires in  13d 
+           /wednesday1  expires in  13d
+           /thursday1  expires in  13d
+           /friday1  expires in  13d
+    sunday2   expires in  27d
+           /monday2  expires in  13d
+           /tuesday2  expires in  13d
+           /wednesday2  expires in  13d
+           /thursday2  expires in  13d
+           /friday2  expires in  13d
+    sunday3   expires in  27d
+           /monday1  expires in  13d
+           /tuesday1  expires in  13d 
+           /wednesday1  expires in  13d
+           /thursday1  expires in  13d
+           /friday1  expires in  13d
+    sunday4   expires in  27d
+           /monday2  expires in  13d
+           /tuesday2  expires in  13d
+           /wednesday2  expires in  13d
+           /thursday2  expires in  13d
+           /friday2  expires in  13d
+ </programlisting>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ272">
+     <title>Writing and Reading Tape Labels</title>
+ 
+     <indexterm>
+       <primary>tapes (Backup System)</primary>
+ 
+       <secondary>label</secondary>
+ 
+       <tertiary>creating</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>tapes (Backup System)</primary>
+ 
+       <secondary>label</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>tapes (Backup System)</primary>
+ 
+       <secondary>capacity</secondary>
+ 
+       <tertiary>recording on label</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>tapes (Backup System)</primary>
+ 
+       <secondary>names</secondary>
+ 
+       <tertiary>assigning</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>tape label (Backup System)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>tape label (Backup System)</secondary>
+     </indexterm>
+ 
+     <para>As described in <link linkend="HDRWQ253">Dump Names and Tape Names</link> and <link linkend="HDRWQ254">Tape Labels, Dump
+     Labels, and EOF Markers</link>, you can assign either a permanent name or an AFS tape name to a tape that you use in the Backup
+     System. The names are recorded on the tape's magnetic label, along with an indication of the tape's capacity (size).</para>
+ 
+     <para>You can assign either a permanent name or an AFS tape name, but not both. In general, assigning permanent names rather
+     than AFS tape names simplifies the backup process, because the Backup System does not dictate the format of permanent names. If
+     a tape does not have a permanent name, then by default the Backup System accepts only three strictly defined values in the AFS
+     tape name field, and refuses to write a dump to a tape with an inappropriate AFS tape name. The acceptable values are a name
+     that matches the volume set and dump level of the initial dump, the value <computeroutput>&lt;NULL&gt;</computeroutput>, and no
+     value in the field at all.</para>
+ 
+     <para>If a tape has a permanent name, the Backup System does not check the AFS tape name, and as part of the dump operation
+     constructs the appropriate AFS tape name itself and records it on the label. This means that if you assign a permanent name, the
+     Backup System assigns an AFS tape name itself and the tape has both types of name. In contrast, if a tape has an AFS tape name
+     but not a permanent name, you cannot assign a permanent name without first erasing the AFS tape name.</para>
+ 
+     <para>(You can also suppress the Backup System's check of a tape's AFS tape name, even it does not have a permanent name, by
+     assigning the value <emphasis role="bold">NO</emphasis> to the <emphasis role="bold">NAME_CHECK</emphasis> instruction in the
+     <emphasis>device configuration file</emphasis>. See <link linkend="HDRWQ280">Eliminating the AFS Tape Name Check</link>.)</para>
+ 
+     <para>Because the Backup System accepts unlabeled tapes, you do not have to label a tape before using it for the first time.
+     After the first use, there are a couple of cases in which you must relabel a tape in order to write a dump to it: <itemizedlist>
+         <listitem>
+           <para>The tape does not have a permanent name, and the AFS tape name on it does not match the new initial dump set you
+           want to create (the volume set and dump level names are different, or the index is incorrect).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You want to recycle a tape before all of the dumps on it have expired. The Backup System does not overwrite a tape
+           with any unexpired dumps. Keep in mind, though, that if you relabel the tape to making recycling possible, you erase all
+           the dump records for the tape from the Backup Database, which makes it impossible to restore any data from the
+           tape.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <note>
+       <para>Labeling a tape that contains dump data makes it impossible to use that data in a restore operation, because the
+       labeling operation removes the dump's records from the Backup Database. If you want to record a permanent name on a tape
+       label, you must do it before dumping any data to the tape.</para>
+     </note>
+ 
+     <sect2 id="Header_305">
+       <title>Recording a Name on the Label</title>
+ 
+       <para>To write a permanent name on a tape's label, include the <emphasis role="bold">-pname</emphasis> argument to specify a
+       string of up to 32 characters. Check that no other tape used with the Backup System in your cell already has the permanent
+       name you are assigning, because the Backup System does not prevent you from assigning the same name to multiple tapes. The
+       Backup System overwrites the existing AFS tape name, if any, with the value <computeroutput>&lt;NULL&gt;</computeroutput>.
+       When a tape has a permanent name, the Backup System uses it instead of the AFS tape name in most prompts and when referring to
+       the tape in output from <emphasis role="bold">backup</emphasis> commands. The permanent name persists until you again include
+       the <emphasis role="bold">-pname</emphasis> argument to the <emphasis role="bold">backup labeltape</emphasis> command,
+       regardless of the tape's contents and of how often you recycle the tape or use the <emphasis role="bold">backup
+       labeltape</emphasis> command without the <emphasis role="bold">-pname</emphasis> argument.</para>
+ 
+       <para>To write an AFS tape name on the label, provide a value for the <emphasis role="bold">-name</emphasis> argument that
+       matches the volume set name and the final element in the dump level pathname of the initial dump that you plan to write to the
+       tape, and an index that indicates the tape's place in the sequence of tapes for the dump set. The format is as follows:</para>
+ 
+       <programlisting>
+    volume_set_name<emphasis role="bold">.</emphasis>dump_level_name<emphasis role="bold">.</emphasis>tape_index
+ </programlisting>
+ 
+       <para>If you omit the <emphasis role="bold">-name</emphasis> argument, the Backup System sets the AFS tape name to
+       <computeroutput>&lt;NULL&gt;</computeroutput>. The Backup System automatically constructs and records the appropriate name
+       when you later write an initial dump to the tape by using the <emphasis role="bold">backup dump</emphasis> or <emphasis
+       role="bold">backup savedb</emphasis> command.</para>
+ 
+       <para>You cannot use the <emphasis role="bold">-name</emphasis> argument if the tape already has a permanent name. To erase a
+       tape's permanent name, provide a null value to the <emphasis role="bold">-pname</emphasis> argument by issuing the following
+       command:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">backup labeltape -pname ""</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_306">
+       <title>Recording a Capacity on the Label</title>
+ 
+       <para>To record the tape's capacity on the label, specify a number of kilobytes as the <emphasis role="bold">-size</emphasis>
+       argument. If you omit this argument the first time you label a tape, the Backup System records the default tape capacity
+       associated with the specified port offset in the <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis> file on the Tape
+       Coordinator machine. If the tape's capacity is different (in particular, larger) than the capacity recorded in the <emphasis
+       role="bold">tapeconfig</emphasis> file, it is best to record a capacity on the label before using the tape. Once set, the
+       value in the label's capacity field persists until you again use the <emphasis role="bold">-size</emphasis> argument to the
+       <emphasis role="bold">backup labeltape</emphasis> command. For a discussion of the appropriate capacity to record for tapes,
+       see <link linkend="HDRWQ258">Configuring the tapeconfig File</link>.</para>
+ 
+       <para>To read a tape's label, use the <emphasis role="bold">backup readlabel</emphasis> command.</para>
+ 
+       <para>Most tapes also come with an adhesive label you can apply to the exterior casing. To help you easily identify a tape,
+       record at least the tape's permanent and AFS tape names on the adhesive label. Depending on the recycling scheme you use, it
+       can be useful to record other information, such as the dump ID, dump creation date, and expiration date of each dump you write
+       to the tape.</para>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>labeltape</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup labeltape</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ273">
+       <title>To label a tape</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+           connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+           <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<replaceable>port offset</replaceable>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Place the tape in the device.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Optional</emphasis>. Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode, if you want to label multiple tapes or issue additional commands after labeling the tape. The
+           interactive prompt appears in the following step. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) labeltape</emphasis> command to label the tape. <programlisting>
+    backup&gt; <emphasis role="bold">labeltape</emphasis> [<emphasis role="bold">-name</emphasis> &lt;<replaceable>tape name, defaults to NULL</replaceable>&gt;]  \
+       [<emphasis role="bold">-size</emphasis> &lt;<replaceable>tape size in Kbytes, defaults to size in tapeconfig</replaceable>&gt;]  \
+       [<emphasis role="bold">-portoffset</emphasis> &lt;<replaceable>TC port offset</replaceable>&gt;] [<emphasis role="bold">-pname</emphasis> &lt;<replaceable>permanent tape name</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">la</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">labeltape</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the AFS tape name to record on the label. Include this argument or the <emphasis
+                   role="bold">-pname</emphasis> argument, but not both. If you omit this argument, the AFS tape name is set to
+                   &lt;<replaceable>NULL</replaceable>&gt;. If you provide it, it must have the following format. <programlisting>
+ volume_set_name<emphasis role="bold">.</emphasis>dump_level_name<emphasis role="bold">.</emphasis>tape_index
+ </programlisting></para>
+ 
+                   <para>for the tape to be acceptable for use in a future <emphasis role="bold">backup dump</emphasis> operation.
+                   The volume_set_name must match the volume set name of the initial dump to be written to the tape, dump_level_name
+                   must match the last element of the dump level pathname at which the volume set is to be dumped, and tape_index
+                   must correctly indicate the tape's place in the sequence of tapes that house the dump set; indexing begins with
+                   the number 1 (one).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-size</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the tape capacity to record on the label. If you are labeling the tape for the first time, you
+                   need to include this argument only if the tape's capacity differs from the capacity associated with the specified
+                   port offset in the <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis> file on the Tape Coordinator
+                   machine.</para>
+ 
+                   <para>If you provide a value, it is an integer value followed by a letter that indicates units, with no
+                   intervening space. A unit value of <emphasis role="bold">k</emphasis> or <emphasis role="bold">K</emphasis>
+                   indicates kilobytes, <emphasis role="bold">m</emphasis> or <emphasis role="bold">M</emphasis> indicates megabytes,
+                   and <emphasis role="bold">g</emphasis> or <emphasis role="bold">G</emphasis> indicates gigabytes. If you omit the
+                   units letter, the default is kilobytes.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-portoffset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the port offset number of the Tape Coordinator handling the tape or backup data file for this
+                   operation. You must provide this argument unless the default value of <emphasis role="bold">0</emphasis> (zero) is
+                   appropriate.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-pname</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the permanent name to record on the label. It can be up to 32 characters in length, and include
+                   any alphanumeric characters. Avoid metacharacters that have a special meaning to the shell, to avoid having to
+                   mark them as literal in commands issued at the shell prompt.</para>
+ 
+                   <para>Include this argument or the <emphasis role="bold">-name</emphasis> argument, but not both. When you provide
+                   this argument, the AFS tape name is set to <computeroutput>&lt;NULL&gt;</computeroutput>. If you omit this
+                   argument, any existing permanent name is retained.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+           role="bold">butc</emphasis> command, or if the device's device configuration file includes the instruction <emphasis
+           role="bold">AUTOQUERY YES</emphasis>, then the Tape Coordinator prompts you to place the tape in the device's drive. You
+           have already done so, but you must now press <emphasis role="bold">&lt;Return&gt;</emphasis> to indicate that the tape is
+           ready for labeling.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>readlabel</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup readlabel</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ274">
+       <title>To read the label on a tape</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+           connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+           <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<replaceable>port offset</replaceable>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Place the tape in the device.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Optional</emphasis>. Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode, if you want to label multiple tapes or issue additional commands after labeling the tape. The
+           interactive prompt appears in the following step. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) readlabel</emphasis> command to read the label on the tape.
+           <programlisting>
+    backup&gt; <emphasis role="bold">readlabel</emphasis> [&lt;<replaceable>TC port offset</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">rea</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">readlabel</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the port offset number of Tape Coordinator handling the tape or backup data file for this
+                   operation. You must provide this argument unless the default value of <emphasis role="bold">0</emphasis> (zero) is
+                   appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+           role="bold">butc</emphasis> command, or the device's device configuration file includes the instruction <emphasis
+           role="bold">AUTOQUERY YES</emphasis> instruction, then the Tape Coordinator prompts you to place the tape in the device's
+           drive. You have already done so, but you must now press <emphasis role="bold">&lt;Return&gt;</emphasis> to indicate that
+           the tape is ready for reading.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>Information from the tape label appears both in the <emphasis role="bold">backup</emphasis> command window and in the
+       Tape Coordinator window. The output in the command window has the following format:</para>
+ 
+       <programlisting>
+    Tape read was labelled: tape_name (initial_dump_ID)
+         size: size KBytes
+ </programlisting>
+ 
+       <para>where tape_name is the tape's permanent name (if it has one) or AFS tape name, initial_dump_ID is the dump ID of the
+       initial dump on the tape, and size is the capacity recorded on the label, in kilobytes.</para>
+ 
+       <para>The information in the Tape Coordinator window is more extensive. The tape's permanent name appears in the
+       <computeroutput>tape name</computeroutput> field and its AFS tape name in the <computeroutput>AFS tape name</computeroutput>
+       field. If either name is undefined, a value of <computeroutput>&lt;NULL&gt;</computeroutput> appears in the field instead. The
+       capacity recorded on the label appears in the <computeroutput>size</computeroutput> field. Other fields in the output report
+       the creation time, dump level name, and dump ID of the initial dump on the tape
+       (<computeroutput>creationTime</computeroutput>, <computeroutput>dump path</computeroutput>, and <computeroutput>dump
+       id</computeroutput> respectively). The <computeroutput>cell</computeroutput> field reports the cell in which the dump
+       operation was performed, and the <computeroutput>useCount</computeroutput> field reports the number of times the tape has been
+       relabeled, either with the <emphasis role="bold">backup labeltape</emphasis> command or during a dump operation. For further
+       details, see the command's reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+       <para>If the tape has no label, or if the drive is empty, the following message appears at the command shell:</para>
+ 
+       <programlisting>
+    Failed to read tape label.
+ </programlisting>
+ 
+       <para>The following example illustrates the output in the command shell for a tape in the device with port offset 1:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">backup readlabel 1</emphasis>
+    Tape read was labelled: monthly_guest (917860000)
+         size: 2150000 KBytes
+ </programlisting>
+ 
+       <para>The following output appears in the Tape Coordinator window at the same time:</para>
+ 
+       <programlisting>
+    Tape label
+    ----------
+    tape name = monthly_guest
+    AFS tape name = guests.monthly.3
+    creationTime =  Mon Feb  1 04:06:40 1999
+    cell = abc.com
+    size = 2150000 Kbytes
+    dump path = /monthly
+    dump id = 917860000
+    useCount = 44
+    -- End of tape label --
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ275">
+     <title>Automating and Increasing the Efficiency of the Backup Process</title>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>automating operations</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>reducing operator intervention</secondary>
+     </indexterm>
+ 
+     <para>The Backup System includes several optional features to help you automate the backup process in your cell and make it more
+     efficient. By combining several of the features, you can dump volume data to tape with minimal human intervention in most cases.
+     To take advantage of many of the features, you create a device configuration file in the <emphasis
+     role="bold">/usr/afs/backup</emphasis> directory for each tape device that participates in automated operations. For general
+     instructions on creating the device configuration file, see <link linkend="HDRWQ276">Creating a Device Configuration
+     File</link>. The following list refers you to sections that describe each feature in greater detail. <itemizedlist>
+         <listitem>
+           <para>You can use tape stackers and jukeboxes to perform backup operations. These are tape drives with an attached unit
+           that stores several tapes and can physically insert and remove them from the tape reader (tape drive) without human
+           intervention, meaning that no operator has to be present even for backup operations that require several tapes. To use a
+           stacker or jukebox with the Backup System, include the <emphasis role="bold">MOUNT</emphasis> and <emphasis
+           role="bold">UNMOUNT</emphasis> instructions in its device configuration file. See <link linkend="HDRWQ277">Invoking a
+           Device's Tape Mounting and Unmounting Routines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can suppress the Tape Coordinator's default prompt for the initial tape that it needs for a backup operation,
+           again eliminating the need for a human operator to be present when a backup operation begins. (You must still insert the
+           correct tape in the drive at some point before the operation begins.) To suppress the initial prompt, include the
+           <emphasis role="bold">-noautoquery</emphasis> flag on the <emphasis role="bold">butc</emphasis> command, or assign the
+           value <emphasis role="bold">NO</emphasis> to the <emphasis role="bold">AUTOQUERY</emphasis> instruction in the device
+           configuration file. See <link linkend="HDRWQ278">Eliminating the Search or Prompt for the Initial Tape</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can suppress the prompts that the Tape Coordinator otherwise generates when it encounters several types of
+           errors. When you use this feature, the Tape Coordinator instead responds to the errors in a default manner, which
+           generally allows the operation to continue without human intervention. To suppress prompts about error conditions, assign
+           the value <emphasis role="bold">NO</emphasis> to the <emphasis role="bold">ASK</emphasis> instruction in the device
+           configuration file. See <link linkend="HDRWQ279">Enabling Default Responses to Error Conditions</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can suppress the Backup System's default verification that the AFS tape name on a tape that has no permanent
+           name matches the name derived from the volume set and dump level names of the initial dump the Backup System is writing to
+           the tape. This enables you to recycle a tape without first relabeling it, as long as all dumps on it are expired. To
+           suppress name checking, assign the value <emphasis role="bold">NO</emphasis> to the <emphasis
+           role="bold">NAME_CHECK</emphasis> instruction in the device configuration file. See <link linkend="HDRWQ280">Eliminating
+           the AFS Tape Name Check</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can promote tape streaming (the most efficient way for a tape device to operate) by setting the size of the
+           memory buffer the Tape Coordinator uses when transferring volume data between the file system and the device. To set the
+           buffer size, include the <emphasis role="bold">BUFFERSIZE</emphasis> instruction in the device configuration file. See
+           <link linkend="HDRWQ281">Setting the Memory Buffer Size to Promote Tape Streaming</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can write dumps to a <emphasis>backup data file</emphasis> on the local disk of the Tape Coordinator machine,
+           rather than to tape. You can then transfer the backup data file to a data-archiving system, such as a hierarchical storage
+           management (HSM) system, that you use in conjunction with AFS and the Backup System. Writing a dump to a file is usually
+           more efficient that issuing the equivalent <emphasis role="bold">vos dump</emphasis> commands individually. To write dumps
+           to a file, include the <emphasis role="bold">FILE</emphasis> instruction in the device configuration file. See <link
+           linkend="HDRWQ282">Dumping Data to a Backup Data File</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>There are two additional ways to increase backup automation and efficiency that do not involve the device configuration
+     file: <itemizedlist>
+         <listitem>
+           <para>You can schedule one or more <emphasis role="bold">backup dump</emphasis> commands to run at specified times. This
+           enables you to create backups at times of low system usage, without requiring a human operator to be present. You can
+           schedule a single dump operation for a future time, or multiple operations to run at various future times. See <link
+           linkend="HDRWQ300">Scheduling Dumps</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can append dumps to a tape that already has other dumps on it. This enables you to use as much of a tape's
+           capacity as possible. The appended dumps do not have be related in any way to one another or to the initial dump on the
+           tape, but grouping dumps appropriately can reduce the number of necessary tape changes during a restore operation. To
+           append a dump, include the <emphasis role="bold">-append</emphasis> argument to the <emphasis role="bold">backup
+           dump</emphasis> command. See <link linkend="HDRWQ299">Appending Dumps to an Existing Dump Set</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ276">
+       <title>Creating a Device Configuration File</title>
+ 
+       <indexterm>
+         <primary>CFG_<emphasis>device_name</emphasis> file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>CFG_&lt;device_name&gt;</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>device configuration file (CFG)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuration file</primary>
+ 
+         <secondary></secondary>
+ 
+         <see>CFG_&lt;device_name&gt; configuration file</see>
+       </indexterm>
+ 
+       <para>To use many of the features that automate backup operations, create a configuration file for each tape device in the
+       <emphasis role="bold">/usr/afs/backup</emphasis> directory on the local disk of the Tape Coordinator machine that drives the
+       device. The filename has the following form:</para>
+ 
+       <para><emphasis role="bold">CFG_</emphasis>device_name</para>
+ 
+       <para>where device_name represents the name of the tape device or backup data file (see <link linkend="HDRWQ282">Dumping Data
+       to a Backup Data File</link> to learn about writing dumps to a file rather than to tape).</para>
+ 
+       <para>For a tape device, construct the device_name portion of the name by stripping off the initial <emphasis
+       role="bold">/dev/</emphasis> string with which all UNIX device names conventionally begin, and replacing any other slashes in
+       the name with underscores. For example, <emphasis role="bold">CFG_rmt_4m</emphasis> is the appropriate filename for a device
+       called <emphasis role="bold">/dev/rmt/4m</emphasis>.</para>
+ 
+       <para>For a backup data file, construct the device_name portion by stripping off the initial slash (<emphasis
+       role="bold">/</emphasis>) and replacing any other slashes (<emphasis role="bold">/</emphasis>) in the name with underscores.
+       For example, <emphasis role="bold">CFG_var_tmp_FILE</emphasis> is the appropriate filename for a backup data file called
+       <emphasis role="bold">/var/tmp/FILE</emphasis>.</para>
+ 
+       <para>Creating a device configuration file is optional. If you do not want to take advantage of any of the features that the
+       file provides, you do not have to create it.</para>
+ 
+       <para>You can include one of each of the following instructions in any order in a device configuration file. All are optional.
+       Place each instruction on its own line, but do not include any newline (<emphasis role="bold">&lt;Return&gt;</emphasis>)
+       characters within an instruction. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">MOUNT and UNMOUNT</emphasis></term>
+ 
+             <listitem>
+               <para>Identify a script of routines for mounting and unmounting tapes in a tape stacker or jukebox's drive as needed.
+               See <link linkend="HDRWQ277">Invoking a Device's Tape Mounting and Unmounting Routines</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">AUTOQUERY</emphasis></term>
+ 
+             <listitem>
+               <para>Controls whether the Tape Coordinator prompts for the first tape it needs for a backup operation. See <link
+               linkend="HDRWQ278">Eliminating the Search or Prompt for the Initial Tape</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ASK</emphasis></term>
+ 
+             <listitem>
+               <para>Controls whether the Tape Coordinator asks you how to respond to certain error conditions. See <link
+               linkend="HDRWQ279">Enabling Default Responses to Error Conditions</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">NAME_CHECK</emphasis></term>
+ 
+             <listitem>
+               <para>Controls whether the Tape Coordinator verifies that an AFS tape name matches the initial dump you are writing to
+               the tape. See <link linkend="HDRWQ280">Eliminating the AFS Tape Name Check</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">BUFFERSIZE</emphasis></term>
+ 
+             <listitem>
+               <para>Sets the size of the memory buffer the Tape Coordinator uses when transferring data between a tape device and a
+               volume. See <link linkend="HDRWQ281">Setting the Memory Buffer Size to Promote Tape Streaming</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">FILE</emphasis></term>
+ 
+             <listitem>
+               <para>Controls whether the Tape Coordinator writes dumps to, and restores data from, a tape device or a backup data
+               file. See <link linkend="HDRWQ282">Dumping Data to a Backup Data File</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>UNMOUNT instruction in CFG_<emphasis>device_name</emphasis> file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>MOUNT instruction in CFG_<emphasis>device_name</emphasis> file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>automating tape mounting and unmounting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tape (Backup System)</primary>
+ 
+         <secondary>automating mounting and unmounting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>automating tape mounting and unmounting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>automating</primary>
+ 
+         <secondary>tape mounting and unmounting by Backup System</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ277">
+       <title>Invoking a Device's Tape Mounting and Unmounting Routines</title>
+ 
+       <para>A tape stacker or jukebox helps you automate backup operations because it can switch between multiple tapes during an
+       operation without human intervention. To take advantage of this feature, include the <emphasis role="bold">MOUNT</emphasis>
+       and optionally <emphasis role="bold">UNMOUNT</emphasis> instructions in the device configuration file that you write for the
+       stacker or jukebox. The instructions share the same syntax:</para>
+ 
+       <programlisting><emphasis role="bold">MOUNT</emphasis> filename
+    <emphasis role="bold">UNMOUNT</emphasis> filename
+ </programlisting>
+ 
+       <para>where filename is the pathname on the local disk of a script or program you have written that invokes the routines
+       defined by the device's manufacturer for mounting or unmounting a tape in the device's tape drive. (For convenience, the
+       following discussion uses the term <emphasis>script</emphasis> to refers to both scripts and programs.) The script usually
+       also contains additional logic that handles error conditions or modifies the script's behavior depending on which backup
+       operation is being performed.</para>
+ 
+       <para>You can refer to different scripts with the <emphasis role="bold">MOUNT</emphasis> or <emphasis
+       role="bold">UNMOUNT</emphasis> instructions, or to a single script that invokes both mounting and unmounting routines. The
+       scripts inherit the local identity and AFS tokens associated with to the issuer of the <emphasis role="bold">butc</emphasis>
+       command.</para>
+ 
+       <para>You need to include a <emphasis role="bold">MOUNT</emphasis> instruction in the device configuration file for all tape
+       devices, but the need for an <emphasis role="bold">UNMOUNT</emphasis> instruction depends on the tape-handling routines that
+       the device's manufacturer provides. Some devices, usually stackers, have only a single routine for mounting tapes, which also
+       automatically unmounts a tape whose presence prevents insertion of the required new tape. In this case, an <emphasis
+       role="bold">UNMOUNT</emphasis> instruction is not necessary. For devices that have separate mounting and unmounting routines,
+       you must include an <emphasis role="bold">UNMOUNT</emphasis> instruction to remove a tape when the Tape Coordinator is
+       finished with it; otherwise, subsequent attempts to run the <emphasis role="bold">MOUNT</emphasis> instruction fail with an
+       error.</para>
+ 
+       <para>When the device configuration file includes a <emphasis role="bold">MOUNT</emphasis> instruction, you must stock the
+       stacker or jukebox with the necessary tapes before running a backup operation. Many jukeboxes are able to search for the
+       required tape by reading external labels (such as barcodes) on the tapes, but many stackers can only switch between tapes in
+       sequence and sometimes only in one direction. In the latter case, you must also stock the tapes in the correct order.</para>
+ 
+       <para>To obtain a list of the tapes required for a restore operation so that you can prestock them in the tape device, include
+       the <emphasis role="bold">-n</emphasis> flag on the appropriate <emphasis role="bold">backup</emphasis> command (<emphasis
+       role="bold">backup diskrestore</emphasis>, <emphasis role="bold">backup volrestore</emphasis>, or <emphasis role="bold">backup
+       volsetrestore</emphasis>). For a dump operation, it is generally sufficient to stock the device with more tapes than the
+       operation is likely to require. You can prelabel the tapes with permanent names or AFS tape names, or not prelabel them at
+       all. If you prelabel the tapes for a dump operation with AFS tape names, then it is simplest to load them into the stacker in
+       sequential order by tape index. But it is probably simpler still to prelabel tapes with permanent tape names or use unlabeled
+       tapes, in which case the Backup System generates and applies the appropriately indexed AFS tape name itself during the dump
+       operation.</para>
+ 
+       <sect3 id="Header_312">
+         <title>How the Tape Coordinator Uses the MOUNT and UNMOUNT Instructions</title>
+ 
+         <para>When you issue the <emphasis role="bold">butc</emphasis> command to initialize the Tape Coordinator for a given tape
+         device, the Tape Coordinator looks for the device configuration file called <emphasis
+         role="bold">/usr/afs/backup/CFG_</emphasis>device_name on its local disk, where device_name has the format described in
+         <link linkend="HDRWQ276">Creating a Device Configuration File</link>. If the file exists and contains a <emphasis
+         role="bold">MOUNT</emphasis> instruction, then whenever the Tape Coordinator needs a tape, it executes the script named by
+         the instruction's filename argument.</para>
+ 
+         <para>If the device configuration file does not exist, or does not include a <emphasis role="bold">MOUNT</emphasis>
+         instruction, then whenever the Tape Coordinator needs a tape, it generates a prompt in its window instructing the operator
+         to insert the necessary tape. The operator must insert the tape and press <emphasis role="bold">&lt;Return&gt;</emphasis>
+         before the Tape Coordinator continues the backup operation.</para>
+ 
+         <para>Note, however, that you can modify the Tape Coordinator's behavior with respect to the first tape needed for an
+         operation, by setting the <emphasis role="bold">AUTOQUERY</emphasis> instruction in the device configuration file to
+         <emphasis role="bold">NO</emphasis>, or including the <emphasis role="bold">-noautoquery</emphasis> flag to the <emphasis
+         role="bold">butc</emphasis> command. In this case, the Tape Coordinator does not execute the <emphasis
+         role="bold">MOUNT</emphasis> instruction or prompt for a tape at the start of an operation, because it expects to find the
+         required first tape in the drive. See <link linkend="HDRWQ278">Eliminating the Search or Prompt for the Initial
+         Tape</link>.</para>
+ 
+         <para>If there is an <emphasis role="bold">UNMOUNT</emphasis> instruction in the device configuration file, then whenever
+         the Tape Coordinator closes the tape device, it executes the script named by the instruction's filename argument. It
+         executes the script only once, and regardless of whether the <emphasis role="bold">close</emphasis> operation on the device
+         succeeded or not. If the device configuration file does not include an <emphasis role="bold">UNMOUNT</emphasis> instruction,
+         then the Tape Coordinator takes no action.</para>
+       </sect3>
+ 
+       <sect3 id="Header_313">
+         <title>The Available Parameters and Required Exit Codes</title>
+ 
+         <para>When the Tape Coordinator executes the <emphasis role="bold">MOUNT</emphasis> script, it passes in five parameters,
+         ordered as follows. You can use the parameters in your script to refine its response to varying circumstances that can arise
+         during a backup operation. <orderedlist>
+             <listitem>
+               <para>The tape device or backup data file's pathname, as recorded in the <emphasis
+               role="bold">/usr/afs/backup/tapeconfig</emphasis> file.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The tape operation, which (except for the exceptions noted in the following list) matches the <emphasis
+               role="bold">backup</emphasis> command operation code used to initiate the operation: <itemizedlist>
+                   <listitem>
+                     <para><emphasis role="bold">appenddump</emphasis> (when a <emphasis role="bold">backup dump</emphasis> command
+                     includes the <emphasis role="bold">-append</emphasis> flag)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">dump</emphasis> (when a <emphasis role="bold">backup dump</emphasis> command does
+                     not include the <emphasis role="bold">-append</emphasis> flag)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">labeltape</emphasis></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">readlabel</emphasis></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">restore</emphasis> (for a <emphasis role="bold">backup diskrestore</emphasis>,
+                     <emphasis role="bold">backup volrestore</emphasis>, or <emphasis role="bold">backup volsetrestore</emphasis>
+                     command)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">restoredb</emphasis></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">savedb</emphasis></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><emphasis role="bold">scantape</emphasis></para>
+                   </listitem>
+                 </itemizedlist></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The number of times the Tape Coordinator has attempted to open the tape device or backup data file. If the open
+               attempt returns an error, the Tape Coordinator increments this value by one and again invokes the <emphasis
+               role="bold">MOUNT</emphasis> instruction.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The tape name. For some operations, the Tape Coordinator passes the string
+               <computeroutput>none</computeroutput>, because it does not know the tape name (when running the <emphasis
+               role="bold">backup scantape</emphasis> or <emphasis role="bold">backup readlabel</emphasis>, for example), or because
+               the tape does not necessarily have a name (when running the <emphasis role="bold">backup labeltape</emphasis> command,
+               for example).</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The tape ID recorded in the Backup Database. As with the tape name, the Backup System passes the string
+               <computeroutput>none</computeroutput> for operations where it does not know the tape ID or the tape does not
+               necessarily have an ID.</para>
+             </listitem>
+           </orderedlist></para>
+ 
+         <para>Your <emphasis role="bold">MOUNT</emphasis> script must return one of the following exit codes to tell the Tape
+         Coordinator whether or not it mounted the tape successfully: <itemizedlist>
+             <listitem>
+               <para>Code <emphasis role="bold">0</emphasis> (zero) indicates a successful mount, and the Tape Coordinator continues
+               the backup operation. If the script or program called by the <emphasis role="bold">MOUNT</emphasis> instruction does
+               not return this exit code, the Tape Coordinator never calls the <emphasis role="bold">UNMOUNT</emphasis>
+               instruction.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Code <emphasis role="bold">1</emphasis> indicates that mount attempt failed. The Tape Coordinator terminates the
+               backup operation.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Any other code indicates that the script was unable to access the correct tape. The Tape Coordinator prompts the
+               operator to insert it.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <para>When the Tape Coordinator executes the <emphasis role="bold">UNMOUNT</emphasis> script, it passes in two parameters in
+         the following order. <orderedlist>
+             <listitem>
+               <para>The tape device's pathname (as specified in the <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis>
+               file)</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The tape operation, which is always <emphasis role="bold">unmount</emphasis>.</para>
+             </listitem>
+           </orderedlist></para>
+ 
+         <para>The following example script uses two of the parameters passed to it by the Backup System:
+         <computeroutput>tries</computeroutput> and <computeroutput>operation</computeroutput>. It follows the recommended practice
+         of exiting if the value of the <computeroutput>tries</computeroutput> parameter exceeds one, because that implies that the
+         stacker is out of tapes.</para>
+ 
+         <para>For a <emphasis role="bold">backup dump</emphasis> or <emphasis role="bold">backup savedb</emphasis> operation, the
+         routine calls the example <emphasis role="bold">stackerCmd_NextTape</emphasis> function provided by the stacker's
+         manufacturer. Note that the final lines in the file return the exit code that prompts the operator to insert a tape; these
+         lines are invoked when either the stacker cannot load a tape or a the operation being performed is not one of those
+         explicitly mentioned in the file (is a restore operation, for example).</para>
+ 
+         <programlisting>
+    #! /bin/csh -f
+    set devicefile = $1
+    set operation = $2
+    set tries = $3
+    set tapename = $4
+    set tapeid = $5
+    set exit_continue = 0
+    set exit_abort = 1
+    set exit_interactive = 2
+    #--------------------------------------------
+    if (${tries} &gt; 1) then
+       echo "Too many tries"
+       exit ${exit_interactive}
+    endif
+    if (${operation} == "unmount") then
+       echo "UnMount: Will leave tape in drive"
+       exit ${exit_continue}
+    endif
+    if ((${operation} == "dump")     |\
+        (${operation} == "appenddump")     |\
+        (${operation} == "savedb"))  then
+        stackerCmd_NextTape ${devicefile}
+        if (${status} != 0)exit${exit_interactive}
+        echo "Will continue"
+        exit ${exit_continue}
+    endif
+    if ((${operation} == "labeltape")    |\
+        (${operation} == "readlabel")) then
+       echo "Will continue"
+       exit ${exit_continue}
+    endif
+    echo "Prompt for tape"
+    exit ${exit_interactive}
+ </programlisting>
+ 
+         <indexterm>
+           <primary>Backup System</primary>
+ 
+           <secondary>eliminating search/prompt for initial tape</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>Tape Coordinator (Backup System)</primary>
+ 
+           <secondary>eliminating search/prompt for initial tape</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>tapes (Backup System)</primary>
+ 
+           <secondary>eliminating search/prompt for initial</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>AUTOQUERY instruction in CFG_<emphasis>device_name</emphasis> file</primary>
+         </indexterm>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ278">
+       <title>Eliminating the Search or Prompt for the Initial Tape</title>
+ 
+       <para>By default, the Tape Coordinator obtains the first tape it needs for a backup operation by reading the device
+       configuration file for the appropriate tape device. If there is a <emphasis role="bold">MOUNT</emphasis> instruction in the
+       file, the Tape Coordinator executes the referenced script. If the device configuration file does not exist or does not have a
+       <emphasis role="bold">MOUNT</emphasis> instruction in it, the Tape Coordinator prompts you to insert the correct tape and
+       press <emphasis role="bold">&lt;Return&gt;</emphasis>.</para>
+ 
+       <para>If you know in advance that an operation requires a tape, you can increase efficiency by placing the required tape in
+       the drive before issuing the <emphasis role="bold">backup</emphasis> command and telling the Tape Coordinator's to skip its
+       initial tape-acquisition steps. This both enables the operation to begin more quickly and eliminates that need for you to be
+       present to insert a tape.</para>
+ 
+       <para>There are two ways to bypass the Tape Coordinator's initial tape-acquisition steps: <orderedlist>
+           <listitem>
+             <para>Include the instruction <emphasis role="bold">AUTOQUERY NO</emphasis> in the device configuration file</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Include the <emphasis role="bold">-noautoquery</emphasis> flag to the <emphasis role="bold">butc</emphasis>
+             command</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>To avoid any error conditions that require operator attention, be sure that the tape you are placing in the drive does
+       not contain any unexpired dumps and is not write protected. If there is no permanent name on the tape's label and you are
+       creating an initial dump, make sure that the AFS tape name either matches the volume set and dump set names or is
+       <computeroutput>&lt;NULL&gt;</computeroutput>. Alternatively, suppress the Tape Coordinator's name verification step by
+       assigning the value <emphasis role="bold">NO</emphasis> to the <emphasis role="bold">NAME_CHECK</emphasis> instruction in the
+       device configuration file, as described in <link linkend="HDRWQ280">Eliminating the AFS Tape Name Check</link>.</para>
+ 
+       <indexterm>
+         <primary>ASK instruction in CFG_<emphasis>device_name</emphasis> file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>using default responses to errors</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>using default responses to errors</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ279">
+       <title>Enabling Default Responses to Error Conditions</title>
+ 
+       <para>By default, the Tape Coordinator asks you how to respond when it encounters certain error conditions. To suppress the
+       prompts and cause the Tape Coordinator to handle the errors in a predetermined manner, include the instruction <emphasis
+       role="bold">ASK NO</emphasis> in the device configuration file. If you assign the value <emphasis role="bold">YES</emphasis>,
+       or omit the <emphasis role="bold">ASK</emphasis> instruction completely, the Tape Coordinator prompts you for direction when
+       it encounters one of the errors.</para>
+ 
+       <para>The following list describes the error conditions and the Tape Coordinator's response to them. <itemizedlist>
+           <listitem>
+             <para>The Backup System is unable to dump a volume while running the <emphasis role="bold">backup dump</emphasis>
+             command. When you assign the value <emphasis role="bold">NO</emphasis>, the Tape Coordinator omits the volume from the
+             dump and continues the operation. When you assign the value <emphasis role="bold">YES</emphasis>, it prompts to ask if
+             you want to try to dump the volume again immediately, to omit the volume from the dump but continue the operation, or to
+             terminate the operation.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Backup System is unable to restore a volume while running the <emphasis role="bold">backup
+             diskrestore</emphasis>, <emphasis role="bold">backup volrestore</emphasis>, or <emphasis role="bold">backup
+             volsetrestore</emphasis> command. When you assign the value <emphasis role="bold">NO</emphasis>, the Tape Coordinator
+             continues the operation, omitting the problematic volume but restoring the remaining ones. When you assign the value
+             <emphasis role="bold">YES</emphasis>, it prompts to ask if you want to omit the volume and continue the operation, or to
+             terminate the operation.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Backup System cannot determine if the dump set includes any more tapes while running the <emphasis
+             role="bold">backup scantape</emphasis> command (the command's reference page in the <emphasis>OpenAFS Administration
+             Reference</emphasis> discusses possible reasons for this problem). When you assign the value <emphasis
+             role="bold">NO</emphasis>, the Tape Coordinator proceeds as though there are more tapes and invokes the <emphasis
+             role="bold">MOUNT</emphasis> script named in the device configuration file, or prompts the operator to insert the next
+             tape. When you assign the value <emphasis role="bold">YES</emphasis>, it prompts to ask if there are more tapes to
+             scan.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Backup System determines that the tape contains an unexpired dump while running the <emphasis
+             role="bold">backup labeltape</emphasis> command. When you assign the value <emphasis role="bold">NO</emphasis>, it
+             terminates the operation without relabeling the tape. With a <emphasis role="bold">YES</emphasis> value, the Tape
+             Coordinator prompts to ask if you want to relabel the tape anyway.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>NAME_CHECK instruction in CFG_<emphasis>device_name</emphasis> file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>eliminating check for proper tape name</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tape (Backup System)</primary>
+ 
+         <secondary>eliminating check for proper name</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>eliminating check for proper tape name</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ280">
+       <title>Eliminating the AFS Tape Name Check</title>
+ 
+       <para>If a tape does not have a permanent name and you are writing an initial dump to it, then by default the Backup System
+       verifies that the tape's AFS tape name is acceptable. It accepts three types of values: <itemizedlist>
+           <listitem>
+             <para>A name that reflects the volume set and dump level of the initial dump and the tape's place in the sequence of
+             tapes for the dump set, as described in <link linkend="HDRWQ253">Dump Names and Tape Names</link>. If the tape does not
+             already have a permanent name, you can assign the AFS tape name by using the <emphasis role="bold">-name</emphasis>
+             argument to the <emphasis role="bold">backup labeltape</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A <computeroutput>&lt;NULL&gt;</computeroutput> value, which results when you assign a permanent name, or provide
+             no value for the <emphasis role="bold">backup labeltape</emphasis> command's <emphasis role="bold">-name</emphasis>
+             argument.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>No AFS tape name at all, indicating that you have never labeled the tape or written a dump to it.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>To bypass the name check, include the <emphasis role="bold">NAME_CHECK NO</emphasis> instruction in the device
+       configuration file. This enables you to recycle a tape without first relabeling it, as long as all dumps on it are expired.
+       (If a tape has unexpired dumps on it but you want to recycle it anyway, you must use the <emphasis role="bold">backup
+       labeltape</emphasis> command to relabel it first. For this to work, the <emphasis role="bold">ASK NO</emphasis> instruction
+       cannot appear in the device configuration file.)</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ281">
+       <title>Setting the Memory Buffer Size to Promote Tape Streaming</title>
+ 
+       <para>By default, the Tape Coordinator uses a 16-KB memory buffer during dump operations. As it receives volume data from the
+       Volume Server, the Tape Coordinator gathers 16 KB of data in the buffer before transferring the entire 16 KB to the tape
+       device. Similarly, during a restore operation the Tape Coordinator by default buffers 32 KB of data from the tape device
+       before transferring the entire 32 KB to the Volume Server for restoration into the file system. Buffering makes the volume of
+       data flowing to and from a tape device more even and so promotes tape streaming, which is the most efficient way for a tape
+       device to operate.</para>
+ 
+       <para>In a normal network configuration, the default buffer sizes are usually large enough to promote tape streaming. If the
+       network between the Tape Coordinator machine and file server machines is slow, it can help to increase the buffer size.</para>
+ 
+       <para>To determine if altering the buffer size is helpful for your configuration, observe the tape device in operation to see
+       if it is streaming, or consult the manufacturer. To set the buffer size, include the <emphasis
+       role="bold">BUFFERSIZE</emphasis> instruction in the device configuration file. It takes an integer value, and optionally
+       units, in the following format:</para>
+ 
+       <programlisting><emphasis role="bold">BUFFERSIZE</emphasis> size[{<emphasis role="bold">k</emphasis> | <emphasis role="bold">K</emphasis> | <emphasis
+           role="bold">m</emphasis> | <emphasis role="bold">M</emphasis> | <emphasis role="bold">g</emphasis> | <emphasis role="bold">G</emphasis>}]
+ </programlisting>
+ 
+       <para>where size specifies the amount of memory the Tape Coordinator allocates to use as a buffer during both dump and restore
+       operations. The default unit is bytes, but use <emphasis role="bold">k</emphasis> or <emphasis role="bold">K</emphasis> to
+       specify kilobytes, <emphasis role="bold">m</emphasis> or <emphasis role="bold">M</emphasis> for megabytes, and <emphasis
+       role="bold">g</emphasis> or <emphasis role="bold">G</emphasis> for gigabytes. There is no space between the size value and the
+       units letter.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ282">
+       <title>Dumping Data to a Backup Data File</title>
+ 
+       <para>You can write dumps to a <emphasis>backup data file</emphasis> rather than to tape. This is useful if, for example, you
+       want to transfer the data to a data-archiving system, such as a hierarchical storage management (HSM) system, that you use in
+       conjunction with AFS and the Backup System. You can restore data from a backup data file into the file system as well. Using a
+       backup data file is usually more efficient than issuing the equivalent <emphasis role="bold">vos dump</emphasis> and <emphasis
+       role="bold">vos restore</emphasis> commands individually for multiple volumes.</para>
+ 
+       <para>Writing to a backup data file is simplest if it is on the local disk of the Tape Coordinator machine, but you can also
+       write the file to an NFS-mounted partition that resides on a remote machine. It is even acceptable to write to a file in AFS,
+       provided that the access control list (ACL) on its parent directory grants the necessary permissions, but it is somewhat
+       circular to back up AFS data into AFS itself.</para>
+ 
+       <para>If the backup data file does not already exist when the Tape Coordinator attempts to write a dump to it, the Tape
+       Coordinator creates it. For a restore operation to succeed, the file must exist and contain volume data previously written to
+       it during a <emphasis role="bold">backup dump</emphasis> operation.</para>
+ 
+       <para>When writing to a backup data file, the Tape Coordinator writes data at 16 KB offsets. If a given block of data (such as
+       the marker that signals the beginning or end of a volume) does not fill the entire 16 KB, the Tape Coordinator still skips to
+       the next offset before writing the next block. In the output of a <emphasis role="bold">backup dumpinfo</emphasis> command
+       issued with the <emphasis role="bold">-id</emphasis> option, the value in the <computeroutput>Pos</computeroutput> column is
+       the ordinal of the 16-KB offset at which the volume data begins, and so is not generally only one higher than the position
+       number on the previous line, as it is for dumps to tape.</para>
+ 
+       <para>Before writing to a backup data file, you need to configure the file as though it were a tape device.</para>
+ 
+       <note>
+         <para>A file pathname, rather than a tape device name, must appear in the third field of the <emphasis
+         role="bold">/usr/afs/backup/tapeconfig</emphasis> file when the <emphasis role="bold">FILE YES</emphasis> instruction
+         appears in the device configuration file, and vice versa. If the <emphasis role="bold">tapeconfig</emphasis> file instead
+         refers to a tape device, dump operations appear to succeed but are inoperative. You cannot restore data that you accidently
+         dumped to a tape device while the <emphasis role="bold">FILE</emphasis> instruction was set to <emphasis
+         role="bold">YES</emphasis>. In the same way, if the <emphasis role="bold">FILE</emphasis> instruction is set to <emphasis
+         role="bold">NO</emphasis>, the <emphasis role="bold">tapeconfig</emphasis> entry must refer to an actual tape device.</para>
+       </note>
+     </sect2>
+ 
+     <sect2 id="Header_319">
+       <title>To configure a backup data file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">Optional</emphasis>. Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode. <programlisting>
+    # <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Choose the port offset number to assign to the file. If necessary, display previously assigned port offsets by
+           issuing the <emphasis role="bold">(backup) listhosts</emphasis> command, which is fully described in <link
+           linkend="HDRWQ264">To display the list of configured Tape Coordinators</link>. <programlisting>
+    backup&gt; <emphasis role="bold">listhosts</emphasis>
+ </programlisting></para>
+ 
+           <para>As for a tape device, acceptable values are the integers <emphasis role="bold">0</emphasis> (zero) through <emphasis
+           role="bold">58510</emphasis> (the Backup System can track a maximum of 58,511 port offset numbers). Each port offset must
+           be unique in the cell, but you can associate any number them with a single Tape Coordinator machine. You do not have to
+           assign port offset numbers sequentially.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) addhost</emphasis> command to register the backup data file's port offset
+           in the Backup Database. <programlisting>
+    backup&gt; <emphasis role="bold">addhost</emphasis> &lt;<replaceable>tape machine name</replaceable>&gt; [&lt;<replaceable>TC port offset</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addh</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addhost</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">tape machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully qualified hostname of the Tape Coordinator machine you invoke to write to the backup
+                   data file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the file's port offset number. You must provide this argument unless the default value of
+                   <emphasis role="bold">0</emphasis> (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LITAPECONFIG-FILE" />Using a text editor, create an entry for the backup data file in the local
+           <emphasis role="bold">/usr/afs/backup/tapeconfig</emphasis> file, using the standard syntax: <programlisting>
+    [capacity  filemark_size]  device_name   port_offset
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">capacity</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the amount of space on the partition that houses the backup data file that you want to make
+                   available for the file. To avoid the complications that arise from filling up the partition, it is best to provide
+                   a value somewhat smaller than the actual amount of space you expect to be available when the dump operation runs,
+                   and never larger than the maximum file size allowed by the operating system.</para>
+ 
+                   <para>Specify a numerical value followed by a letter that indicates units, with no intervening space. The letter
+                   <emphasis role="bold">k</emphasis> or <emphasis role="bold">K</emphasis> indicates kilobytes, <emphasis
+                   role="bold">m</emphasis> or <emphasis role="bold">M</emphasis> indicates megabytes, and <emphasis
+                   role="bold">g</emphasis> or <emphasis role="bold">G</emphasis> indicates gigabytes. If you omit the units letter,
+                   the default is kilobytes. If you leave this field empty, the Tape Coordinator uses the maximum acceptable value
+                   (2048 GB or 2 TB). Also leave the filemark_size field empty in that case.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">filemark_size</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specify the value <emphasis role="bold">0</emphasis> (zero) or leave both this field and the capacity field
+                   empty. In the latter case, the Tape Coordinator also uses the value zero.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">device_name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete pathname of the backup data file. Rather than specifying an actual file pathname,
+                   however, the recommended configuration is to create a symbolic link in the <emphasis role="bold">/dev</emphasis>
+                   directory that points to the actual file pathname, and record the symbolic link in this field. This configuration
+                   provides these advantages: <itemizedlist>
+                       <listitem>
+                         <para>It makes the device_name portion of the <emphasis role="bold">CFG_</emphasis>device_name, of the
+                         <emphasis role="bold">TE_</emphasis>device_name, and of the <emphasis role="bold">TL_</emphasis>device_name
+                         filenames as short as possible. Because the symbolic link is in the <emphasis role="bold">/dev</emphasis>
+                         directory as though it is a tape device, you strip off the entire <emphasis role="bold">/dev/</emphasis>
+                         prefix when forming the filename, instead of just the initial slash (<emphasis role="bold">/</emphasis>).
+                         If, for example, the symbolic link is called <emphasis role="bold">/dev/FILE</emphasis>, the device
+                         configuration file's name is <emphasis role="bold">CFG_FILE</emphasis>, whereas if the actual pathname
+                         /<emphasis role="bold">var/tmp/FILE</emphasis> appears in the <emphasis role="bold">tapeconfig</emphasis>
+                         file, the configuration file's name must be <emphasis role="bold">CFG_var_tmp_FILE</emphasis>.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>It provides for a more graceful, and potentially automated, recovery if the Tape Coordinator cannot
+                         write a complete dump into the backup data file (for example, because the partition housing the backup data
+                         file becomes full). The Tape Coordinator's reaction to this problem is to invoke the <emphasis
+                         role="bold">MOUNT</emphasis> script, or to prompt you if the <emphasis role="bold">MOUNT</emphasis>
+                         instruction does not appear in the configuration file. <itemizedlist>
+                             <listitem>
+                               <para>If there is a <emphasis role="bold">MOUNT</emphasis> script, you can prepare for this situation
+                               by adding a subroutine to the script that changes the symbolic link to point to another backup data
+                               file on a partition where there is space available.</para>
+                             </listitem>
+ 
+                             <listitem>
+                               <para>If there is no <emphasis role="bold">MOUNT</emphasis> instruction, the prompt enables you
+                               manually to change the symbolic link to point to another backup data file and then press &lt;<emphasis
+                               role="bold">Return</emphasis>&gt; to signal that the Tape Coordinator can continue the
+                               operation.</para>
+                             </listitem>
+                           </itemizedlist></para>
+ 
+                         <para>If this field names the actual file, there is no way to recover from exhausting the space on the
+                         partition. You cannot change the <emphasis role="bold">tapeconfig</emphasis> file in the middle of an
+                         operation.</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">port_offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the port offset number that you chose for the backup data file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the device configuration file <emphasis role="bold">CFG_</emphasis>device_name in the Tape Coordinator
+           machine's <emphasis role="bold">/usr/afs/backup</emphasis> directory. Include the <emphasis role="bold">FILE
+           YES</emphasis> instruction in the file.</para>
+ 
+           <para>Construct the device_name portion of the name based on the device name you recorded in the <emphasis
+           role="bold">tapeconfig</emphasis> file in Step <link linkend="LITAPECONFIG-FILE">6</link>. If, as recommended, you
+           recorded a symbolic link name, strip off the <emphasis role="bold">/dev/</emphasis> string and replace any other slashes
+           (<emphasis role="bold">/</emphasis>) in the name with underscores (<emphasis role="bold">_</emphasis>). For example,
+           <emphasis role="bold">CFG_FILE</emphasis> is the appropriate name if the symbolic link is <emphasis
+           role="bold">/dev/FILE</emphasis>. If you recorded the name of an actual file, then strip off the initial slash only and
+           replace any other slashes in the name with underscores. For a backup data file called <emphasis
+           role="bold">/var/tmp/FILE</emphasis>, the appropriate device configuration filename is <emphasis
+           role="bold">CFG_var_tmp_FILE</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you chose in Step <link linkend="LITAPECONFIG-FILE">6</link> to record a symbolic link name in the device_name
+           field of the <emphasis role="bold">tapeconfig</emphasis> entry, then you must do one of the following: <itemizedlist>
+               <listitem>
+                 <para>Use the <emphasis role="bold">ln -s</emphasis> command to create the appropriate symbolic link in the
+                 <emphasis role="bold">/dev</emphasis> directory</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Write a script that initializes the backup data file in this way, and include a <emphasis
+                 role="bold">MOUNT</emphasis> instruction in the device configuration file to invoke the script. An example script
+                 appears following these instructions.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>You do not need to create the backup data file itself, because the Tape Coordinator does so if the file does not exist
+       when the dump operation begins.</para>
+ 
+       <para>The following example script illustrates how you can automatically create a symbolic link to the backup data file during
+       the preparation phase for writing to the file. When the Tape Coordinator is executing a <emphasis role="bold">backup
+       dump</emphasis>, <emphasis role="bold">backup restore</emphasis>, <emphasis role="bold">backup savedb</emphasis>, or <emphasis
+       role="bold">backup restoredb</emphasis> operation, the routine invokes the UNIX <emphasis role="bold">ln -s</emphasis> command
+       to create a symbolic link from the backup data file named in the <emphasis role="bold">tapeconfig</emphasis> file to the
+       actual file to use (this is the recommended method). It uses the values of the <computeroutput>tapename</computeroutput> and
+       <computeroutput>tapeid</computeroutput> parameters passed to it by the Backup System when constructing the filename.</para>
+ 
+       <para>The routine makes use of two other parameters as well: <computeroutput>tries</computeroutput> and
+       <computeroutput>operation</computeroutput>. The <computeroutput>tries</computeroutput> parameter tracks how many times the
+       Tape Coordinator has attempted to access the file. A value greater than one indicates that the Tape Coordinator cannot access
+       it, and the routine returns exit code 2 (<computeroutput>exit_interactive</computeroutput>), which results in a prompt for the
+       operator to load a tape. The operator can use this opportunity to change the name of the backup data file specified in the
+       <emphasis role="bold">tapeconfig</emphasis> file.</para>
+ 
+       <programlisting>
+    #! /bin/csh -f
+    set devicefile = $1
+    set operation = $2
+    set tries = $3
+    set tapename = $4
+    set tapeid = $5
+    set exit_continue = 0
+    set exit_abort = 1
+    set exit_interactive = 2
+    #--------------------------------------------
+    if (${tries} &gt; 1) then
+       echo "Too many tries"
+       exit ${exit_interactive}
+    endif
+    if (${operation} == "labeltape") then
+       echo "Won't label a tape/file"
+       exit ${exit_abort}
+    endif
+    if ((${operation} == "dump")   |\
+        (${operation} == "appenddump")   |\
+        (${operation} == "restore")   |\
+        (${operation} == "savedb")    |\
+        (${operation} == "restoredb")) then
+       /bin/rm -f ${devicefile}
+       /bin/ln -s /hsm/${tapename}_${tapeid} ${devicefile}
+       if (${status} != 0) exit ${exit_abort}
+    endif
+    exit ${exit_continue}
+ </programlisting>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd012.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd012.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd012.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,4620 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ283">
+   <title>Backing Up and Restoring AFS Data</title>
+ 
+   <para>The instructions in this chapter explain how to back up and restore AFS data and to administer the Backup Database. They
+   assume that you have already configured all of the Backup System components by following the instructions in <link
+   linkend="HDRWQ248">Configuring the AFS Backup System</link>.</para>
+ 
+   <sect1 id="HDRWQ284">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Enter interactive mode</entry>
+ 
+             <entry><emphasis role="bold">backup (interactive)</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Leave interactive mode</entry>
+ 
+             <entry><emphasis role="bold">(backup) quit</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List operations in interactive mode</entry>
+ 
+             <entry><emphasis role="bold">(backup) jobs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Cancel operation in interactive mode</entry>
+ 
+             <entry><emphasis role="bold">(backup) kill</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Start Tape Coordinator</entry>
+ 
+             <entry><emphasis role="bold">butc</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Stop Tape Coordinator</entry>
+ 
+             <entry>&lt;<emphasis role="bold">Ctrl-c</emphasis>&gt;</entry>
+           </row>
+ 
+           <row>
+             <entry>Check status of Tape Coordinator</entry>
+ 
+             <entry><emphasis role="bold">backup status</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Back up data</entry>
+ 
+             <entry><emphasis role="bold">backup dump</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display dump records</entry>
+ 
+             <entry><emphasis role="bold">backup dumpinfo</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display volume's dump history</entry>
+ 
+             <entry><emphasis role="bold">backup volinfo</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Scan contents of tape</entry>
+ 
+             <entry><emphasis role="bold">backup scantape</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Restore volume</entry>
+ 
+             <entry><emphasis role="bold">backup volrestore</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Restore partition</entry>
+ 
+             <entry><emphasis role="bold">backup diskrestore</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Restore group of volumes</entry>
+ 
+             <entry><emphasis role="bold">backup volsetrestore</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Verify integrity of Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup dbverify</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Repair corruption in Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup savedb</emphasis> and <emphasis role="bold">backup restoredb</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete dump set from Backup Database</entry>
+ 
+             <entry><emphasis role="bold">backup deletedump</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ286">
+     <title>Using the Backup System's Interfaces</title>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>interfaces</secondary>
+     </indexterm>
+ 
+     <para>When performing backup operations, you interact with three Backup System components: <itemizedlist>
+         <listitem>
+           <para>You initiate backup operations by issuing commands from the <emphasis role="bold">backup</emphasis> suite. You can
+           issue the commands in a command shell (or invoke them in a shell script) on any AFS client or server machine from which
+           you can access the <emphasis role="bold">backup</emphasis> binary. In the conventional configuration, the binary resides
+           in the <emphasis role="bold">/usr/afs/bin</emphasis> directory on a server machine and the <emphasis
+           role="bold">/usr/afsws/etc</emphasis> directory on a client machine.</para>
+ 
+           <para>The suite provides an <emphasis>interactive mode</emphasis>, in which you can issue multiple commands over a
+           persistent connection to the Backup Server and the Volume Location (VL) Server. Interactive mode has several convenient
+           features. For a discussion and instructions, see <link linkend="HDRWQ288">Using Interactive and Regular Command
+           Mode</link>.</para>
+ 
+           <para>Note that some operating systems include a <emphasis role="bold">backup</emphasis> command of their own. You must
+           configure machines that run such an operating system to ensure that you are accessing the desired <emphasis
+           role="bold">backup</emphasis> binary.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Before you perform a backup operation that involves reading or writing to a tape device or backup data file, you
+           must open a dedicated connection to the appropriate Tape Coordinator machine and start the Tape Coordinator (<emphasis
+           role="bold">butc</emphasis>) process that handles the device or file. The <emphasis role="bold">butc</emphasis> process
+           must continue to run over the dedicated connection as long as it is executing an operation or is to be available to
+           execute one. For further discussion and instructions, see <link linkend="HDRWQ291">Starting and Stopping the Tape
+           Coordinator Process</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The Backup Server (<emphasis role="bold">buserver</emphasis>) process must be running on database server machines,
+           because most backup operations require accessing or changing information in the Backup Database. The <emphasis>OpenAFS
+           Quick Beginnings</emphasis> explains how to configure the Backup Server.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>For consistent Backup System performance, the AFS build level of all three binaries (<emphasis
+     role="bold">backup</emphasis>, <emphasis role="bold">butc</emphasis>, and <emphasis role="bold">buserver</emphasis>) must match.
+     For instructions on displaying the build level, see <link linkend="HDRWQ117">Displaying A Binary File's Build
+     Level</link>.</para>
+ 
+     <sect2 id="HDRWQ287">
+       <title>Performing Backup Operations as the Local Superuser Root or in a Foreign Cell</title>
+ 
+       <indexterm>
+         <primary>AFSCELL environment variable</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>variable</primary>
+ 
+         <secondary>AFSCELL</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>running in foreign cell</secondary>
+       </indexterm>
+ 
+       <para>By default, the volumes and Backup Database involved in a backup operation must reside on server machines that belong to
+       the cell named in the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> files on both the Tape Coordinator machine and
+       the machine where you issue the <emphasis role="bold">backup</emphasis> command. Also, to issue most <emphasis
+       role="bold">backup</emphasis> commands you must have AFS tokens for an identity listed in the local cell's <emphasis
+       role="bold">/usr/afs/etc/UserList</emphasis> file (which by convention is the same on every server machine in a cell). You
+       can, however, perform backup operations on volumes or the Backup Database from a foreign cell, or perform backup operations
+       while logged in as the local superuser <emphasis role="bold">root</emphasis> rather than as a privileged AFS identity.</para>
+ 
+       <para>To perform backup operations on volumes that reside in a foreign cell using machines from the local cell, you must
+       designate the foreign cell as the cell of execution for both the Tape Coordinator and the <emphasis
+       role="bold">backup</emphasis> command interpreter. Use one of the two following methods. For either method, you must also have
+       tokens as an administrator listed in the foreign cell's <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file.
+       <itemizedlist>
+           <listitem>
+             <para>Before issuing <emphasis role="bold">backup</emphasis> commands and the <emphasis role="bold">butc</emphasis>
+             command, set the AFSCELL environment variable to the foreign cell name in both command shells.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Include the <emphasis role="bold">-cell</emphasis> argument to the <emphasis role="bold">butc</emphasis> and all
+             <emphasis role="bold">backup</emphasis> commands. If you include the argument on the <emphasis role="bold">backup
+             (interactive)</emphasis> command, it applies to all commands issued during the interactive session.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>To perform backup operations without having administrative AFS tokens, you must log on as the local superuser <emphasis
+       role="bold">root</emphasis> on both the Tape Coordinator machine and the machine where you issue <emphasis
+       role="bold">backup</emphasis> commands. Both machines must be server machines, or at least have a <emphasis
+       role="bold">/usr/afs/etc/KeyFile</emphasis> file that matches the file on other server machines. Then include the <emphasis
+       role="bold">-localauth</emphasis> argument on both the <emphasis role="bold">butc</emphasis> command and all <emphasis
+       role="bold">backup</emphasis> commands (or the <emphasis role="bold">backup (interactive)</emphasis> command). The Tape
+       Coordinator and <emphasis role="bold">backup</emphasis> command interpreter construct a server ticket using the server
+       encryption key with the highest key version number in the local <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file,
+       and present it to the Backup Server, Volume Server, and VL Server that belong to the cell named in the local <emphasis
+       role="bold">/usr/afs/etc/ThisCell</emphasis> file. The ticket never expires.</para>
+ 
+       <para>You cannot combine the <emphasis role="bold">-cell</emphasis> and <emphasis role="bold">-localauth</emphasis> options on
+       the same command. Also, each one overrides the local cell setting defined by the AFSCELL environment variable or the <emphasis
+       role="bold">/usr/vice/etc/ThisCell</emphasis> file.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ288">
+       <title>Using Interactive and Regular Command Mode</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>interactive mode</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>interactive mode (Backup System)</primary>
+ 
+         <secondary>features</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">backup</emphasis> command suite provides an interactive mode, in which you can issue multiple
+       commands over a persistent connection to the Backup Server and the VL Server. Interactive mode provides the following
+       features: <itemizedlist>
+           <listitem>
+             <para>The <computeroutput>backup&gt;</computeroutput> prompt replaces the usual command shell prompt.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You omit the initial <emphasis role="bold">backup</emphasis> string from command names. Type only the operation
+             code and option names.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You cannot issue commands that do not belong to the <emphasis role="bold">backup</emphasis> suite.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you assume an administrative AFS identity or specify a foreign cell as you enter interactive mode, it applies
+             to all commands issued during the interactive session. See <link linkend="HDRWQ287">Performing Backup Operations as the
+             Local Superuser Root or in a Foreign Cell</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You do not need to enclose shell metacharacters in double quotes.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>job ID numbers (Backup System)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>job ID numbers</secondary>
+ 
+         <tertiary>about</tertiary>
+       </indexterm>
+ 
+       <para>When you initiate a backup operation in interactive mode, the Backup System assigns it a <emphasis>job ID
+       number</emphasis>. You can display the list of current and pending operations with the <emphasis role="bold">(backup)
+       jobs</emphasis> command, for which instructions appear in <link linkend="HDRWQ289">To display pending or running jobs in
+       interactive mode</link>. (In both regular and interactive modes, the Tape Coordinator also assigns a <emphasis>task ID
+       number</emphasis> to each operation you initiate with a <emphasis role="bold">backup</emphasis> command. You can track task ID
+       numbers with the <emphasis role="bold">backup status</emphasis> command. See <link linkend="HDRWQ291">Starting and Stopping
+       the Tape Coordinator Process</link>.)</para>
+ 
+       <para>You can cancel an operation in interactive mode with the <emphasis role="bold">(backup) kill</emphasis> command, for
+       which instructions appear in <link linkend="HDRWQ290">To cancel operations in interactive mode</link>. However, it is best not
+       to interrupt a dump operation because the resulting dump is incomplete, and interrupting a restore operation can leave volumes
+       in an inconsistent state, or even completely remove them from the server machine. For further discussion, see <link
+       linkend="HDRWQ296">Backing Up Data</link> and <link linkend="HDRWQ306">Restoring and Recovering Data</link>.</para>
+ 
+       <para>The <emphasis role="bold">(backup) jobs</emphasis> and <emphasis role="bold">(backup) kill</emphasis> commands are
+       available only in interactive mode and there is no equivalent functionality in regular command mode.</para>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>interactive mode</secondary>
+ 
+         <tertiary>entering</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup</secondary>
+ 
+         <tertiary>to enter interactive mode</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup interactive</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>interactive mode (Backup System)</primary>
+ 
+         <secondary>entering</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_325">
+       <title>To enter interactive mode</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. Entering interactive mode does not itself require privilege, but most other <emphasis role="bold">backup</emphasis>
+           commands do, and the AFS identity you assume when entering the mode applies to all commands you issue within it. If
+           necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup (interactive)</emphasis> command at the system prompt. The
+           <computeroutput>backup&gt;</computeroutput> prompt appears. You can include either, but not both, of the <emphasis
+           role="bold">-localauth</emphasis> and <emphasis role="bold">-cell</emphasis> options, as discussed in <link
+           linkend="HDRWQ287">Performing Backup Operations as the Local Superuser Root or in a Foreign Cell</link>. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+    backup&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>quit</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup quit</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>interactive mode (Backup System)</primary>
+ 
+         <secondary>exiting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>interactive mode</secondary>
+ 
+         <tertiary>exiting</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_326">
+       <title>To exit interactive mode</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">quit</emphasis> command at the <computeroutput>backup&gt;</computeroutput> prompt.
+           The command shell prompt reappears when the command succeeds, which it does only if there are no jobs pending or currently
+           running. To display and cancel pending or running jobs, follow the instructions in <link linkend="HDRWQ289">To display
+           pending or running jobs in interactive mode</link> and <link linkend="HDRWQ290">To cancel operations in interactive
+           mode</link>. <programlisting>
+    backup&gt; <emphasis role="bold">quit</emphasis>
+    %
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>interactive mode (Backup System)</primary>
+ 
+         <secondary>operations</secondary>
+ 
+         <tertiary>displaying pending/running</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>interactive mode</secondary>
+ 
+         <tertiary>displaying pending/running operations</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>job ID numbers</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>job ID numbers (Backup System)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>jobs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup jobs</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ289">
+       <title>To display pending or running jobs in interactive mode</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">jobs</emphasis> command at the <computeroutput>backup&gt;</computeroutput> prompt.
+           <programlisting>
+    backup&gt; <emphasis role="bold">jobs</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">j</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">jobs</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output always includes the expiration date and time of the tokens that the <emphasis role="bold">backup</emphasis>
+       command interpreter is using during the current interactive session, in the following format:</para>
+ 
+       <programlisting>
+    date   time: TOKEN EXPIRATION
+ </programlisting>
+ 
+       <para>If the execution date and time specified for a scheduled dump operation is later than <emphasis>date time</emphasis>,
+       then its individual line (as described in the following paragraphs) appears below this line to indicate that the current
+       tokens will not be available to it.</para>
+ 
+       <para>If the issuer of the <emphasis role="bold">backup</emphasis> command included the <emphasis
+       role="bold">-localauth</emphasis> flag when entering interactive mode, the line instead reads as follows:</para>
+ 
+       <programlisting>
+    :  TOKEN NEVER EXPIRES
+ </programlisting>
+ 
+       <para>The entry for a scheduled dump operation has the following format:</para>
+ 
+       <programlisting>
+    Job job_ID:  timestamp:  dump  volume_set  dump_level
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">job_ID</emphasis></term>
+ 
+             <listitem>
+               <para>Is a job identification number assigned by the Backup System.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">timestamp</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates the date and time the dump operation is to begin, in the format month/date/year hours:minutes (in
+               24-hour format)</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">volume_set</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates the volume set to dump.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">dump_level</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates the dump level at which to perform the dump operation.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>The line for a pending or running operation of any other type has the following format:</para>
+ 
+       <programlisting>
+    Job job_ID:  operation  status
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">job_ID</emphasis></term>
+ 
+             <listitem>
+               <para>Is a job identification number assigned by the Backup System.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">operation</emphasis></term>
+ 
+             <listitem>
+               <para>Identifies the operation the Tape Coordinator is performing, which is initiated by the indicated command:
+               <variablelist>
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>Dump</computeroutput> (dump name)</emphasis></term>
+ 
+                     <listitem>
+                       <para>Initiated by the <emphasis role="bold">backup dump</emphasis> command. The dump name has the following
+                       format:</para>
+ 
+                       <para>volume_set_name<emphasis role="bold">.</emphasis>dump_level_name</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>Restore</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>Initiated by the <emphasis role="bold">backup diskrestore</emphasis>, <emphasis role="bold">backup
+                       volrestore</emphasis>, or <emphasis role="bold">backup volsetrestore</emphasis> command.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>Labeltape</computeroutput> (tape_label)</emphasis></term>
+ 
+                     <listitem>
+                       <para>Initiated by the <emphasis role="bold">backup labeltape</emphasis> command. The tape_label is the name
+                       specified by the <emphasis role="bold">backup labeltape</emphasis> command's <emphasis
+                       role="bold">-name</emphasis> or <emphasis role="bold">-pname</emphasis> argument.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>Scantape</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>Initiated by the <emphasis role="bold">backup scantape</emphasis> command.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>SaveDb</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>Initiated by the <emphasis role="bold">backup savedb</emphasis> command.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>RestoreDb</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>Initiated by the <emphasis role="bold">backup restoredb</emphasis> command.</para>
+                     </listitem>
+                   </varlistentry>
+                 </variablelist></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">status</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates the job's current status in one of the following messages. If no message appears, the job is either
+               still pending or has finished. <variablelist>
+                   <varlistentry>
+                     <term><emphasis role="bold">number <computeroutput>Kbytes, volume volume_name</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>For a running dump operation, indicates the number of kilobytes copied to tape or a backup data file so
+                       far, and the volume currently being dumped.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">number <computeroutput>Kbytes, restore.volume</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>For a running restore operation, indicates the number of kilobytes copied into AFS from a tape or a
+                       backup data file so far.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[abort requested]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The <emphasis role="bold">(backup) kill</emphasis> command was issued, but the termination signal has
+                       yet to reach the Tape Coordinator.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[abort sent]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The operation is canceled by the <emphasis role="bold">(backup) kill</emphasis> command. Once the Backup
+                       System removes an operation from the queue or stops it from running, it no longer appears at all in the output
+                       from the command.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[butc contact lost]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The <emphasis role="bold">backup</emphasis> command interpreter cannot reach the Tape Coordinator. The
+                       message can mean either that the Tape Coordinator handling the operation was terminated or failed while the
+                       operation was running, or that the connection to the Tape Coordinator timed out.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[done]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The Tape Coordinator has finished the operation.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[drive wait]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The operation is waiting for the specified tape drive to become free.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[operator wait]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The Tape Coordinator is waiting for the backup operator to insert a tape in the drive.</para>
+                     </listitem>
+                   </varlistentry>
+                 </variablelist></para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>interactive mode (Backup System)</primary>
+ 
+         <secondary>operations</secondary>
+ 
+         <tertiary>canceling pending/running</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>interactive mode</secondary>
+ 
+         <tertiary>canceling operations</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>job ID numbers (Backup System)</primary>
+ 
+         <secondary>operations</secondary>
+ 
+         <tertiary>canceling</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>kill</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup kill</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ290">
+       <title>To cancel operations in interactive mode</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">jobs</emphasis> command at the <computeroutput>backup&gt;</computeroutput> prompt,
+           to learn the job ID number of the operation you want to cancel. For details, see <link linkend="HDRWQ289">To display
+           pending or running jobs in interactive mode</link>. <programlisting>
+    backup&gt; <emphasis role="bold">jobs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) kill</emphasis> command to cancel the operation. <programlisting>
+    backup&gt; <emphasis role="bold">kill</emphasis> &lt;<emphasis>job ID or dump set name</emphasis>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">k</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">kill</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">job ID or dump set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies either the job ID number of the operation to cancel, as reported by the <emphasis
+                   role="bold">jobs</emphasis> command, or for a dump operation only, the dump name in the format
+                   volume_set_name.dump_level_name.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ291">
+       <title>Starting and Stopping the Tape Coordinator Process</title>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>process</secondary>
+ 
+         <tertiary>starting</tertiary>
+       </indexterm>
+ 
+       <para>Before performing a backup operation that reads from or writes to a tape device or backup data file, you must start the
+       Tape Coordinator (<emphasis role="bold">butc</emphasis>) process that handles the drive or file. This section explains how to
+       start, stop, and check the status of a Tape Coordinator process. To use these instructions, you must have already configured
+       the Tape Coordinator machine and created a Tape Coordinator entry in the Backup Database, as instructed in <link
+       linkend="HDRWQ261">Configuring Tape Coordinator Machines and Tape Devices</link>.</para>
+ 
+       <indexterm>
+         <primary>task ID numbers (Backup System)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>task ID numbers</secondary>
+       </indexterm>
+ 
+       <para>The Tape Coordinator assigns a <emphasis>task ID number</emphasis> to each operation it performs. The number is distinct
+       from the job ID number assigned by the <emphasis role="bold">backup</emphasis> command interpreter in interactive mode (which
+       is discussed in <link linkend="HDRWQ288">Using Interactive and Regular Command Mode</link>). The Tape Coordinator reports the
+       task ID number in its onscreen trace and in the messages that it writes to its log and error files. To view the task ID
+       numbers of a Tape Coordinator's running or pending operations, issue the <emphasis role="bold">backup status</emphasis>
+       command.</para>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>starting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>butc command</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>butc</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ292">
+       <title>To start a Tape Coordinator process</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file of the cell in which the Tape Coordinator is to access volume data and the Backup Database. If necessary, issue the
+           <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display
+           the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+ 
+           <para>Alternately, you can log into a file server machine as the local superuser <emphasis role="bold">root</emphasis> in
+           Step <link linkend="LIWQ293">3</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that you can write to the Tape Coordinator's log and error files in the local <emphasis
+           role="bold">/usr/afs/backup</emphasis> directory (the <emphasis role="bold">TE_</emphasis>device_name and <emphasis
+           role="bold">TL_</emphasis>device_name files). If the log and error files do not already exist, you must be able to insert
+           and write to files in the <emphasis role="bold">/usr/afs/backup</emphasis> directory.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ293" />Open a connection (using a command such as <emphasis role="bold">telnet</emphasis> or
+           <emphasis role="bold">rlogin</emphasis>) to the Tape Coordinator machine that drives the tape device, or whose local disk
+           houses the backup data file. The Tape Coordinator uses a devoted connection or window that must remain open for the Tape
+           Coordinator to accept requests and while it is executing them.</para>
+ 
+           <para>If you plan to include the <emphasis role="bold">-localauth</emphasis> flag to the <emphasis
+           role="bold">butc</emphasis> command in the next step, log in as the local superuser <emphasis
+           role="bold">root</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ294" />Issue the <emphasis role="bold">butc</emphasis> command to start the Tape Coordinator. You
+           can include either, but not both, of the <emphasis role="bold">-localauth</emphasis> and <emphasis
+           role="bold">-cell</emphasis> options, as discussed in <link linkend="HDRWQ287">Performing Backup Operations as the Local
+           Superuser Root or in a Foreign Cell</link>. <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;]  [<emphasis role="bold">-debuglevel</emphasis> &lt;<emphasis>trace level</emphasis>&gt;]  \
+           [<emphasis role="bold">-cell</emphasis> &lt;<emphasis>cellname</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>] [<emphasis
+                 role="bold">-localauth</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">butc</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the Tape Coordinator's port offset number. You must provide this argument unless the default value
+                   of <emphasis role="bold">0</emphasis> (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-debuglevel</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the type of trace messages that the Tape Coordinator writes to the standard output stream
+                   (stdout). Provide one of the following three values, or omit this argument to display the default type of messages
+                   (equivalent to setting a value of <emphasis role="bold">0</emphasis> [zero]): <itemizedlist>
+                       <listitem>
+                         <para><emphasis role="bold">0</emphasis>: The Tape Coordinator generates only the minimum number of messages
+                         necessary to communicate with the backup operator, including prompts for insertion of additional tapes and
+                         messages that indicate errors or the beginning or completion of operations.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">1</emphasis>: In addition to the messages displayed at level <emphasis
+                         role="bold">0</emphasis>, the Tape Coordinator displays the name of each volume being dumped or
+                         restored.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">2</emphasis>: In addition to the messages displayed at levels <emphasis
+                         role="bold">0</emphasis> and <emphasis role="bold">1</emphasis>, the Tape Coordinator displays all of the
+                         messages it is also writing to its log file (<emphasis
+                         role="bold">/usr/afs/backup/TL_</emphasis>device_name).</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">cellname</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the cell in which to perform the backup operations (the cell where the relevant volumes reside and the
+                   Backup Server process is running). If you omit this argument, the Tape Coordinator uses its home cell, as defined
+                   in the local <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file. Do not combine this argument with the
+                   <emphasis role="bold">-localauth</emphasis> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-noautoquery</emphasis></term>
+ 
+                 <listitem>
+                   <para>Disables the Tape Coordinator's prompt for the first tape it needs for each operation. For a description of
+                   the advantages and consequences of including this flag, see <link linkend="HDRWQ278">Eliminating the Search or
+                   Prompt for the Initial Tape</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-localauth</emphasis></term>
+ 
+                 <listitem>
+                   <para>Constructs a server ticket using a key from the local <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis>
+                   file. The <emphasis role="bold">butc</emphasis> process presents it to the Backup Server, Volume Server, and VL
+                   Server during mutual authentication. You must be logged into a file server machine as the local superuser
+                   <emphasis role="bold">root</emphasis> to include this flag, and cannot combine it with the <emphasis
+                   role="bold">-cell</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>stopping</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_331">
+       <title>To stop a Tape Coordinator process</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Enter an interrupt signal such as &lt;<emphasis role="bold">Ctrl-c</emphasis>&gt; over the dedicated connection to
+           the Tape Coordinator.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Tape Coordinator (Backup System)</primary>
+ 
+         <secondary>status</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>status</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup status</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ295">
+       <title>To check the status of a Tape Coordinator process</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup status</emphasis> command. <programlisting>
+    % <emphasis role="bold">backup status</emphasis> [&lt;<emphasis>TC port offset</emphasis>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">st</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">status</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the Tape Coordinator's port offset number. You must provide this argument unless the default value
+                   of <emphasis role="bold">0</emphasis> (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following message indicates that the Tape Coordinator is not currently performing an operation:</para>
+ 
+       <programlisting>
+    Tape coordinator is idle
+ </programlisting>
+ 
+       <para>Otherwise, the output includes a message of the following format for each running or pending operation:</para>
+ 
+       <programlisting>
+    Task task_ID:  operation:   status
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">task_ID</emphasis></term>
+ 
+             <listitem>
+               <para>Is a task identification number assigned by the Tape Coordinator. It begins with the Tape Coordinator's port
+               offset number.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">operation</emphasis></term>
+ 
+             <listitem>
+               <para>Identifies the operation the Tape Coordinator is performing, which is initiated by the indicated command:
+               <itemizedlist>
+                   <listitem>
+                     <para><computeroutput>Dump</computeroutput> (the <emphasis role="bold">backup dump</emphasis> command)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><computeroutput>Restore</computeroutput> (the <emphasis role="bold">backup diskrestore</emphasis>,
+                     <emphasis role="bold">backup volrestore</emphasis>, or <emphasis role="bold">backup volsetrestore</emphasis>
+                     commands)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><computeroutput>Labeltape</computeroutput> (the <emphasis role="bold">backup labeltape</emphasis>
+                     command)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><computeroutput>Scantape</computeroutput> (the <emphasis role="bold">backup scantape</emphasis>
+                     command)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><computeroutput>SaveDb</computeroutput> (the <emphasis role="bold">backup savedb</emphasis>
+                     command)</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para><computeroutput>RestoreDb</computeroutput> (the <emphasis role="bold">backup restoredb</emphasis>
+                     command)</para>
+                   </listitem>
+                 </itemizedlist></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">status</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates the job's current status in one of the following messages. <variablelist>
+                   <varlistentry>
+                     <term><emphasis role="bold">number <computeroutput>Kbytes transferred, volume</computeroutput>
+                     volume_name</emphasis></term>
+ 
+                     <listitem>
+                       <para>For a running dump operation, indicates the number of kilobytes copied to tape or a backup data file so
+                       far, and the volume currently being dumped.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">number <computeroutput>Kbytes, restore.volume</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>For a running restore operation, indicates the number of kilobytes copied into AFS from a tape or a
+                       backup data file so far.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[abort requested]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The <emphasis role="bold">(backup) kill</emphasis> command was issued, but the termination signal has
+                       yet to reach the Tape Coordinator.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[abort sent]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The operation is canceled by the <emphasis role="bold">(backup) kill</emphasis> command. Once the Backup
+                       System removes an operation from the queue or stops it from running, it no longer appears at all in the output
+                       from the command.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[butc contact lost]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The <emphasis role="bold">backup</emphasis> command interpreter cannot reach the Tape Coordinator. The
+                       message can mean either that the Tape Coordinator handling the operation was terminated or failed while the
+                       operation was running, or that the connection to the Tape Coordinator timed out.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[done]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The Tape Coordinator has finished the operation.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[drive wait]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The operation is waiting for the specified tape drive to become free.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold"><computeroutput>[operator wait]</computeroutput></emphasis></term>
+ 
+                     <listitem>
+                       <para>The Tape Coordinator is waiting for the backup operator to insert a tape in the drive.</para>
+                     </listitem>
+                   </varlistentry>
+                 </variablelist></para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>If the Tape Coordinator is communicating with an XBSA server (a third-party backup utility that implements the Open
+       Group's Backup Service API [XBSA]), the following message appears last in the output:</para>
+ 
+       <programlisting>
+    XBSA_program Tape coordinator
+ </programlisting>
+ 
+       <para>where XBSA_program is the name of the XBSA-compliant program.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ296">
+     <title>Backing Up Data</title>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>backing up using Backup System</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>data</secondary>
+ 
+       <tertiary>backing up/dumping</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump set (Backup System)</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>dumps, full and incremental defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump set (Backup System)</primary>
+ 
+       <secondary>full dumps</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump set (Backup System)</primary>
+ 
+       <secondary>incremental dumps</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>full dump</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>incremental dump</primary>
+ 
+       <secondary>creating with Backup System</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backing up</primary>
+ 
+       <secondary>data from AFS volumes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dumping</primary>
+ 
+       <secondary>data</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dumping</primary>
+ 
+       <secondary>full dumps</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dumping</primary>
+ 
+       <secondary>incremental dumps</secondary>
+     </indexterm>
+ 
+     <para>This section explains how to use the <emphasis role="bold">backup dump</emphasis> command to back up AFS data to tape or
+     to a backup data file. The instructions assume that you understand Backup System concepts and have already configured the Backup
+     System according to the instructions in <link linkend="HDRWQ248">Configuring the AFS Backup System</link>. Specifically, you
+     must already have: <itemizedlist>
+         <listitem>
+           <para>Decided whether to dump data to tape or to a backup data file, and configured the Tape Coordinator machine and Tape
+           Coordinator process appropriately. See <link linkend="HDRWQ261">Configuring Tape Coordinator Machines and Tape
+           Devices</link> and <link linkend="HDRWQ282">Dumping Data to a Backup Data File</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Defined a volume set that includes the volumes you want to dump together. See <link linkend="HDRWQ265">Defining and
+           Displaying Volume Sets and Volume Entries</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Defined the dump level in the dump hierarchy at which you want to dump the volume set. If it is an incremental dump
+           level, you must have previously created a dump at its parent level. See <link linkend="HDRWQ267">Defining and Displaying
+           the Dump Hierarchy</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Created a device configuration file. Such a file is required for each tape stacker, jukebox device, or backup data
+           file. You can also use it to configure the Backup System's automation features. See <link linkend="HDRWQ275">Automating
+           and Increasing the Efficiency of the Backup Process</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The most basic way to perform a dump operation is to create an initial dump of a single volume set as soon as the
+     appropriate Tape Coordinator is available, by providing only the required arguments to the <emphasis role="bold">backup
+     dump</emphasis> command. Instructions appear in <link linkend="HDRWQ301">To create a dump</link>. The command has several
+     optional arguments that you can use to increase the efficiency and flexibility of your backup procedures: <itemizedlist>
+         <listitem>
+           <para>To append a dump to the end of a set of tapes that already contains other dumps, include the <emphasis
+           role="bold">-append</emphasis> argument. Otherwise, the Backup System creates an initial dump. Appending dumps enables you
+           to use a tape's full capacity and has other potentially useful features. For a discussion, see <link
+           linkend="HDRWQ299">Appending Dumps to an Existing Dump Set</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To schedule one or more dump operations to run at a future time, include the <emphasis role="bold">-at</emphasis>
+           argument. For a discussion and instructions, see <link linkend="HDRWQ300">Scheduling Dumps</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To initiate a number of dump operations with a single <emphasis role="bold">backup dump</emphasis> command, include
+           the <emphasis role="bold">-file</emphasis> argument to name a file in which you have listed the commands. For a discussion
+           and instructions, see <link linkend="HDRWQ299">Appending Dumps to an Existing Dump Set</link> and <link
+           linkend="HDRWQ300">Scheduling Dumps</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To generate a list of the volumes to be included in a dump, without actually dumping them, combine the <emphasis
+           role="bold">-n</emphasis> flag with the other arguments to be used on the actual command.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ297">
+       <title>Making Backup Operations More Efficient</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>suggestions for improving efficiency</secondary>
+       </indexterm>
+ 
+       <para>There are several ways to make dump operations more efficient, less prone to error, and less disruptive to your users.
+       Several of them also simplify the process of restoring data if that becomes necessary. <itemizedlist>
+           <listitem>
+             <para>It is best not to dump the read/write or read-only version of a volume, because no other users or processes can
+             access a volume while it is being dumped. Instead, shortly before the dump operation begins, create a backup version of
+             each volume to be dumped, and dump the backup version. Creating a Backup version usually makes the source volume
+             unavailable for just a few moments (during which access attempts by other processes are blocked but do not fail). To
+             automate the creation of backup volumes, you can create a <emphasis role="bold">cron</emphasis> process in the <emphasis
+             role="bold">/usr/afs/local/BosConfig</emphasis> file on one or more server machines, setting its start time at a
+             sufficient interval before the dump operation is to begin. Include the <emphasis role="bold">-localauth</emphasis>
+             argument to the <emphasis role="bold">vos backup</emphasis> or <emphasis role="bold">vos backupsys</emphasis> command to
+             enable it to run without administrative tokens. For instructions, see <link linkend="HDRWQ162">To create and start a new
+             process</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The volume set, dump level, and Tape Coordinator port offset you specify on the <emphasis role="bold">backup
+             dump</emphasis> command line must be properly defined in the Backup Database. The Backup System checks the database
+             before beginning a dump operation and halts the command immediately if any of the required entities are missing. If
+             necessary, use the indicated commands: <itemizedlist>
+                 <listitem>
+                   <para>To display volume sets, use the <emphasis role="bold">backup listvolsets</emphasis> command as described in
+                   <link linkend="HDRWQ266">To display volume sets and volume entries</link>.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>To display dump levels, use the <emphasis role="bold">backup listdumps</emphasis> command as described in
+                   <link linkend="HDRWQ271">To display the dump hierarchy</link>.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>To display port offsets, use the <emphasis role="bold">backup listhosts</emphasis> command as described in
+                   <link linkend="HDRWQ264">To display the list of configured Tape Coordinators</link>.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Ensure that a valid token corresponding to a privileged administrative identity is available to the Backup System
+             processes both when the <emphasis role="bold">backup dump</emphasis> command is issued and when the dump operation
+             actually runs (for a complete description or the necessary privileges, see <link linkend="HDRWQ260">Granting
+             Administrative Privilege to Backup Operators</link>). This is a special concern for scheduled dumps. One alternative is
+             to run <emphasis role="bold">backup</emphasis> commands (or the script that invokes them) and the <emphasis
+             role="bold">butc</emphasis> command on server machines, and to include the <emphasis role="bold">-localauth</emphasis>
+             argument on the command. In this case, the processes use the key with the highest key version number in the local
+             <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file to construct a token that never expires. Otherwise, you must
+             use a method to renew tokens before they expire, or grant tokens with long lifetimes. In either case, you must protect
+             against improper access to the tokens by securing the machines both physically and against unauthorized network access.
+             The protection possibly needs to be even stronger than when a human operator is present during the operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Record tape capacity and filemark size values that are as accurate as possible in the Tape Coordinator's <emphasis
+             role="bold">/usr/afs/backup/tapeconfig</emphasis> file and on the tape's label. For suggested values and a description
+             of what can happen when they are inaccurate, see <link linkend="HDRWQ258">Configuring the tapeconfig File</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If an unattended dump requires multiple tapes, arrange to provide them by properly configuring a tape stacker or
+             jukebox and writing a tape-mounting script to be invoked in the device's <emphasis
+             role="bold">CFG_</emphasis>device_name file. For instructions, see <link linkend="HDRWQ277">Invoking a Device's Tape
+             Mounting and Unmounting Routines</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can configure any tape device or backup data file's <emphasis role="bold">CFG_</emphasis>device_name file to
+             take advantage of the Backup System's automation features. See <link linkend="HDRWQ275">Automating and Increasing the
+             Efficiency of the Backup Process</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When you issue a <emphasis role="bold">backup</emphasis> command in regular (noninteractive) mode, the command
+             shell prompt does not return until the operation completes. To avoid having to open additional connections, issue the
+             <emphasis role="bold">backup dump</emphasis> command in interactive mode, especially when including the <emphasis
+             role="bold">-at</emphasis> argument to schedule dump operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>An incremental dump proceeds most smoothly if there is a dump created at the dump level immediately above the
+             level you are using. If the Backup System does not find a Backup Database record for a dump created at the immediate
+             parent level, it looks for a dump created at one level higher in the hierarchy, continuing up to the full dump level if
+             necessary. It creates an incremental dump at the level one below the lowest valid parent dump that it finds, or even
+             creates a full dump if that is necessary. This algorithm guarantees that the dump captures all data that has changed
+             since the last dump, but has a couple of disadvantages. First, the Backup System's search through the database for a
+             valid parent dump takes extra time. Second, the subsequent pattern of dumps can be confusing to a human operator who
+             needs to restore data from them, because they were not performed at the expected dump levels.</para>
+ 
+             <para>The easiest way to guarantee that a dump exists at the immediate parent level is always to perform dump operations
+             on the predetermined schedule. To check that the parent dump exists, you can issue the <emphasis role="bold">backup
+             dumpinfo</emphasis> command (as described in <link linkend="HDRWQ303">To display dump records</link>) and search for it
+             in the output. Alternatively, issue the <emphasis role="bold">backup volinfo</emphasis> command (as described in <link
+             linkend="HDRWQ304">To display a volume's dump history</link>) for a volume that you believe is in the parent
+             dump.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Always use dump levels from the same hierarchy (levels that are descendants of the same full level) when dumping a
+             given volume set. The result of alternating between levels from different hierarchies can be confusing when you need to
+             restore data or read dump records. It also increases the chance that changed data is not captured in any dump, or is
+             backed up redundantly into more than one dump.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Use permanent tape names rather than AFS tape names. You can make permanent names more descriptive than is allowed
+             by an AFS tape name's strict format, and also bypass the name-checking step that the Backup System performs by default
+             when a tape has an AFS tape name only. You can also configure the Tape Coordinator always to skip the check, however;
+             for instructions and a description of the acceptable format for AFS tape names, see <link linkend="HDRWQ280">Eliminating
+             the AFS Tape Name Check</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you write dumps to tape, restore operations are simplest if all of your tape devices are compatible (can read
+             the same type of tape, at the same compression ratios, and so on). If you must use incompatible devices, then at least
+             use compatible devices for all dumps performed at dump levels that are at the same depth in their respective hierarchies
+             (compatible devices for all dumps performed at a full dump level, compatible devices for all dumps performed at a level
+             1 incremental dump level, and so on). The <emphasis role="bold">-portoffset</emphasis> argument to the <emphasis
+             role="bold">backup diskrestore</emphasis> and <emphasis role="bold">backup volsetrestore</emphasis> commands accepts
+             multiple port offset numbers, but uses the first listed port offset when restoring all full dumps, the second port
+             offset when restoring all level 1 dumps, and so on. If you did not use compatible tape devices when creating dumps at
+             the same depth in a hierarchy, you must restore one volume at a time with the <emphasis role="bold">backup
+             volrestore</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In some cases, it makes sense to use a <emphasis>temporary</emphasis> volume set, which exists only within the
+             context of the interactive session in which it is created and for which no record is created in the Backup Database. One
+             suitable situation is when dumping a volume to tape in preparation for removing it permanently (perhaps because its
+             owner is leaving the cell). In this case, you can define a volume entry that includes only the volume of interest
+             without cluttering up the Backup Database with a volume set record that you are using only once.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Do not perform a dump operation when you know that there are network, machine, or server process problems that can
+             prevent the Backup System from accessing volumes or the Volume Location Database (VLDB). Although the Backup System
+             automatically makes a number of repeated attempts to get to an inaccessible volume, the dump operation takes extra time
+             and in some cases stops completely to prompt you for instructions on how to continue. Furthermore, if the Backup
+             System's last access attempt fails and the volume is omitted from the dump, you must take extra steps to have it backed
+             up (namely, the steps described just following for a halted dump operation). For a more complete description of how the
+             Backup System makes repeated access attempts, see <link linkend="HDRWQ298">How Your Configuration Choices Influence the
+             Dump Process</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Review the logs created by the Backup System as soon as possible after a dump operation completes, particularly if
+             it ran unattended. They name any volumes that were not successfully backed up, among other problems. The Backup Server
+             writes to the <emphasis role="bold">/usr/afs/logs/BackupLog</emphasis> file on the local disk of the database server
+             machine, and you can use the <emphasis role="bold">bos getlog</emphasis> command to read it remotely if you wish; for
+             instructions, see <link linkend="HDRWQ173">Displaying Server Process Log Files</link>. The Tape Coordinator writes to
+             two files in the local <emphasis role="bold">/usr/afs/backup</emphasis> directory on the machine where it is running:
+             the <emphasis role="bold">TE_</emphasis>device_name file records errors, and the <emphasis
+             role="bold">TL_</emphasis>device_name file records both trace and error messages.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Avoid halting a dump operation (for instance, by issuing the <emphasis role="bold">(backup) kill</emphasis>
+             command in interactive mode), both because it introduces the potential for confusion and because recovering from the
+             interruption requires extra effort. When a dump operation is interrupted, the volumes that were backed up before the
+             halt signal is received are complete on the tape or in the backup data file, and are usable in restore operations. The
+             records in the Backup Database about the volumes' dump history accurately show when and at which dump level they were
+             backed up; to display the records, use the <emphasis role="bold">backup volinfo</emphasis> command as described in <link
+             linkend="HDRWQ304">To display a volume's dump history</link>.</para>
+ 
+             <para>However, there is no indication in the dump's Backup Database record that volumes were omitted; to display the
+             record, use the <emphasis role="bold">backup dumpinfo</emphasis> command as described in <link linkend="HDRWQ303">To
+             display dump records</link>. You must choose one of the following methods for dealing with the volumes that were not
+             backed up before the dump operation halted. (Actually, you must make the same decision if the dump operation halts for
+             reasons outside your control.) <itemizedlist>
+                 <listitem>
+                   <para>You can take no action, waiting until the next regularly scheduled dump operation to back them up. At that
+                   time, the Backup System automatically dumps them at the appropriate level to guarantee that the dump captures all
+                   of the data that changed since the volume was last dumped. However, you are gambling that restoring the volume is
+                   not necessary before the next dump operation. If restoration is necessary, you can restore the volume only to its
+                   state at the time it was last included in a dump--you have lost all changes made to the volume since that
+                   time.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>You can discard the entire dump and run the dump operation again. To discard the dump, use the <emphasis
+                   role="bold">backup labeltape</emphasis> command to relabel the tapes or backup data file, which automatically
+                   removes all associated records from the Backup Database. For instructions, see <link linkend="HDRWQ272">Writing
+                   and Reading Tape Labels</link>. If a long time has passed since the backup version of the volumes was created,
+                   some of the source volumes have possibly changed. If that seems likely, reissue the <emphasis role="bold">vos
+                   backup</emphasis> or <emphasis role="bold">vos backupsys</emphasis> command on them before redoing the dump
+                   operation.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>You can create a new volume set that includes the missed volumes and dump it at a full dump level (even if
+                   you specify an incremental dump level, the Backup System uses the full dump level at the top of your specified
+                   level's hierarchy, because it has never before backed up these volumes as part of the new volume set). The next
+                   time you dump the original volume set, the Backup System automatically dumps the missed volumes at the level one
+                   below the level it used the last time it dumped the volumes as part of the original volume set.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ298">
+       <title>How Your Configuration Choices Influence the Dump Process</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump operation, overview</secondary>
+       </indexterm>
+ 
+       <para>This section provides an overview of the backup process, describing what happens at each stage both by default and as a
+       result of your configuration choices, including the configuration instructions you include in the device-specific <emphasis
+       role="bold">CFG_</emphasis>device_name file. For the sake of clarity, it tracks the progress of a single <emphasis
+       role="bold">backup dump</emphasis> command that creates an initial dump. For a discussion of the slight differences in the
+       procedure when you append or schedule dumps, see <link linkend="HDRWQ299">Appending Dumps to an Existing Dump Set</link> or
+       <link linkend="HDRWQ300">Scheduling Dumps</link>.</para>
+ 
+       <para>As a concrete example, the following description traces a dump of the volume set <emphasis role="bold">user</emphasis>
+       at the <emphasis role="bold">/weekly/mon/tues/wed</emphasis> dump level. The <emphasis role="bold">user</emphasis> volume set
+       has one volume entry that matches the backup version of all user volumes:</para>
+ 
+       <programlisting>
+         <emphasis role="bold">.*    .*    user.*\.backup</emphasis>
+       </programlisting>
+ 
+       <para>The dump level belongs to the following dump hierarchy.</para>
+ 
+       <programlisting>
+    /weekly
+           /mon
+               /tues
+                    /wed
+                        /thurs
+                              /fri
+ </programlisting>
+ 
+       <orderedlist>
+         <listitem>
+           <para><anchor id="LIBKOV-BUTC" />You issue the <emphasis role="bold">butc</emphasis> command to start a Tape Coordinator
+           to handle the dump operation. The Tape Coordinator does not have to be running when you issue the <emphasis
+           role="bold">backup dump</emphasis> command, but must be active in time to accept the list of volumes to be included in the
+           dump, when Step <link linkend="LIBKOV-VOLMATCHES">3</link> is completed. To avoid coordination problems, it is best to
+           start the Tape Coordinator before issuing the <emphasis role="bold">backup dump</emphasis> command.</para>
+ 
+           <para>As the Tape Coordinator initializes, it reads the entry in its local <emphasis
+           role="bold">/usr/afs/backup/tapeconfig</emphasis> file for the port offset you specify on the <emphasis
+           role="bold">butc</emphasis> command line. The entry specifies the name of the device to use, and the Tape Coordinator
+           verifies that it can access it. It also reads the device's configuration file, <emphasis
+           role="bold">/usr/afs/backup/CFG_</emphasis>device_name, if it exists. See Step <link linkend="LIBKOV-READCFG">6</link> for
+           a description of how the instructions in the file influence the dump operation.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You issue the <emphasis role="bold">backup dump</emphasis> command, specifying a volume set, dump level, and the
+           same port offset number you specified on the <emphasis role="bold">butc</emphasis> command in Step <link
+           linkend="LIBKOV-BUTC">1</link>. The Backup System verifies that they have correct Backup Database records and halts the
+           operation with an error message if they do not.</para>
+ 
+           <para>If you issue the command in interactive mode, the Backup System assigns the operation a job ID number, which you can
+           use to check the operation's status or halt it by using the <emphasis role="bold">(backup) jobs</emphasis> or <emphasis
+           role="bold">(backup) kill</emphasis> command, respectively. For instructions, see <link linkend="HDRWQ289">To display
+           pending or running jobs in interactive mode</link> and <link linkend="HDRWQ290">To cancel operations in interactive
+           mode</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKOV-VOLMATCHES" />The Backup System works with the VL Server to generate a list of the volumes in the
+           VLDB that match the name and location criteria defined in the volume set's volume entries. If a volume matches more than
+           one volume entry, the Backup System ignores the duplicates so that the dump includes only one copy of data from the
+           volume.</para>
+ 
+           <para>To reduce the number of times you need to switch tapes during a restore operation, the Backup System sorts the
+           volumes by server machine and partition, and during the dump operation writes the data from all volumes stored on a
+           specific partition before moving to the next partition.</para>
+ 
+           <para>As previously mentioned, it is best to back up backup volumes rather than read/write volumes, to avoid blocking
+           users' access to data during the dump. To achieve this, you must explicitly include the <emphasis
+           role="bold">.backup</emphasis> suffix on the volume names in volume entry definitions. For instructions, and to learn how
+           to define volume entries that match multiple volumes, see <link linkend="HDRWQ265">Defining and Displaying Volume Sets and
+           Volume Entries</link>.</para>
+ 
+           <para>In the example, suppose that 50 volumes match the <emphasis role="bold">user</emphasis> volume set criteria,
+           including three called <emphasis role="bold">user.pat.backup</emphasis>, <emphasis
+           role="bold">user.terry.backup</emphasis>, and <emphasis role="bold">user.smith.backup</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKOV-CLONEDATE" />The Backup System next scans the dump hierarchy for the dump level you have
+           specified on the <emphasis role="bold">backup dump</emphasis> command line. If it is a full level, then in the current
+           operation the Backup System backs up all of the data in all of the volumes in the list obtained in Step <link
+           linkend="LIBKOV-VOLMATCHES">3</link>.</para>
+ 
+           <para>If the dump level is incremental, the Backup System reads each volume's dump history in the Backup Database to learn
+           which of the parent levels in its pathname was used when the volume was most recently backed up as part of this volume
+           set. In the usual case, it is the current dump level's immediate parent level.</para>
+ 
+           <para>An incremental dump of a volume includes only the data that changed since the volume was included in the parent
+           dump. To determine which data are eligible, the Backup System uses the concept of a volume's <emphasis>clone
+           date</emphasis>. A read/write volume's clone date is when the Backup System locks the volume before copying its contents
+           into a dump. A backup volume's clone date is the completion time of the operation that created it by cloning its
+           read/write source volume (the operation initiated by a <emphasis role="bold">vos backup</emphasis> or <emphasis
+           role="bold">vos backupsys</emphasis> command). A read-only volume's clone date is the time of the release operation
+           (initiated by the <emphasis role="bold">vos release</emphasis> command) that completed most recently before the dump
+           operation.</para>
+ 
+           <para>More precisely then, an incremental dump includes only data that have a modification timestamp between the clone
+           date of the volume included in the parent dump (the <emphasis>parent clone date</emphasis>) and the clone date of the
+           volume to be included in the current dump (the <emphasis>current clone date</emphasis>).</para>
+ 
+           <para>There are some common exceptions to the general rule that a volume's parent dump is the dump created at the
+           immediate parent level: <itemizedlist>
+               <listitem>
+                 <para>The volume did not exist at all at the time of the last dump. In this case, the Backup System automatically
+                 does a full dump of it.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The volume did not match the volume set's name and location criteria at the time of the last dump. In this
+                 case, the Backup System automatically does a full dump of it, even if it was backed up recently (fully or
+                 incrementally) as part of another volume set. This redundancy is an argument for defining volume entries in terms of
+                 names rather than locations, particularly if you move volumes frequently.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The volume was not included in the dump at the immediate parent level for some reason (perhaps a process,
+                 machine, or network access prevented the Backup System from accessing it). In this case, the Backup System sets the
+                 clone date to the time of the last dump operation that included the volume. If the volume was not included in a dump
+                 performed at any of the levels in the current level's pathname, the Backup System does a full dump of it.</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>In the example, the current dump level is <emphasis role="bold">/weekly/mon/tues/wed</emphasis>. The <emphasis
+           role="bold">user.pat.backup</emphasis> and <emphasis role="bold">user.terry.backup</emphasis> volumes were included in the
+           dump performed yesterday, Tuesday, at the <emphasis role="bold">/weekly/mon/tues</emphasis> level. The Backup System uses
+           as their parent clone date 3:00 a.m. on Tuesday, which is when backup versions of them were created just before Tuesday's
+           dump operation. However, Tuesday's dump did not include the <emphasis role="bold">user.smith.backup</emphasis> volume for
+           some reason. The last time it was included in a dump was Monday, at the <emphasis role="bold">/weekly/mon</emphasis>
+           level. The Backup System uses a parent clone date of Monday at 2:47 a.m., which is when a backup version of the volume was
+           created just before the dump operation on Monday.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If performing an incremental dump, the Backup System works with the Volume Server to prepare a list of all of the
+           files in each volume that have changed (have modification timestamps) between the parent clone date and the current clone
+           date. The dump includes the complete contents of every such file. If a file has not changed, the dump includes only a
+           placeholder stub for it. The dump also includes a copy of the complete directory structure in the volume, whether or not
+           it has changed since the previous dump.</para>
+ 
+           <para>If none of the data in the volume has changed since the last dump, the Backup System omits the volume completely. It
+           generates the following message in the Tape Coordinator window and log files:</para>
+ 
+           <programlisting>
+    Volume volume_name (volume_ID) not dumped - has not been modified 
+       since last dump.
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKOV-READCFG" />The Tape Coordinator prepares to back up the data. If there is a <emphasis
+           role="bold">CFG_</emphasis>device_name file, the Tape Coordinator already read it in Step <link
+           linkend="LIBKOV-BUTC">1</link>. The following list describes how the instructions in the file guide the Tape Coordinator's
+           behavior at this point: <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">FILE</emphasis></term>
+ 
+                 <listitem>
+                   <para>If this instruction is set to <emphasis role="bold">YES</emphasis>, the Tape Coordinator writes data to a
+                   backup data file. The device_name field in the <emphasis role="bold">tapeconfig</emphasis> file must also specify
+                   a filename for the dump to work properly. For further discussion and instructions on configuring a backup data
+                   file, see <link linkend="HDRWQ282">Dumping Data to a Backup Data File</link>.</para>
+ 
+                   <para>If it is set to <emphasis role="bold">NO</emphasis> or does not appear in the file, the Tape Coordinator
+                   writes to a tape device.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">MOUNT and UNMOUNT</emphasis></term>
+ 
+                 <listitem>
+                   <para>If there is a <emphasis role="bold">MOUNT</emphasis> instruction in the file, each time the Tape Coordinator
+                   needs a new tape, it invokes the indicated script or program to mount a tape in the device's tape drive. There
+                   must be a <emphasis role="bold">MOUNT</emphasis> instruction if you want to utilize a tape stacker or jukebox's
+                   ability to switch between tapes automatically. If there is no <emphasis role="bold">MOUNT</emphasis> instruction,
+                   the Tape Coordinator prompts the human operator whenever it needs a tape.</para>
+ 
+                   <para>The <emphasis role="bold">AUTOQUERY</emphasis> instruction, which is described just following, modifies the
+                   Tape Coordinator's tape acquisition procedure for the first tape it needs in a dump operation.</para>
+ 
+                   <para>If there is an <emphasis role="bold">UNMOUNT</emphasis> instruction, then the Tape Coordinator invokes the
+                   indicated script or program whenever it closes the tape device. Not all tape devices have a separate tape
+                   unmounting routine, in which case the <emphasis role="bold">UNMOUNT</emphasis> instruction is not necessary. For
+                   more details on both instructions, see <link linkend="HDRWQ277">Invoking a Device's Tape Mounting and Unmounting
+                   Routines</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">AUTOQUERY</emphasis></term>
+ 
+                 <listitem>
+                   <para>If this instruction is set to <emphasis role="bold">NO</emphasis>, the Tape Coordinator assumes that the
+                   first tape needed for the dump operation is already in the tape drive. It does not use its usual tape acquisition
+                   procedure as described in the preceding discussion of the <emphasis role="bold">MOUNT</emphasis> instruction. You
+                   can achieve the same effect by including the <emphasis role="bold">-noautoquery</emphasis> flag to the <emphasis
+                   role="bold">butc</emphasis> command.</para>
+ 
+                   <para>If this instruction is absent or set to <emphasis role="bold">YES</emphasis>, the Tape Coordinator uses its
+                   usual tape acquisition procedure even for the first tape. For more details, see <link
+                   linkend="HDRWQ278">Eliminating the Search or Prompt for the Initial Tape</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">BUFFERSIZE</emphasis></term>
+ 
+                 <listitem>
+                   <para>If this instruction appears in the file, the Tape Coordinator sets its buffer size to the specified value
+                   rather than using the default buffer size of 16 KB. For further discussion, see <link linkend="HDRWQ281">Setting
+                   the Memory Buffer Size to Promote Tape Streaming</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <para>If there is no <emphasis role="bold">CFG_</emphasis>device_name file, the Tape Coordinator writes data to a tape
+           device and prompts the human operator each time it needs a tape (the only exception being the first tape if you include
+           the <emphasis role="bold">-noautoquery</emphasis> flag to the <emphasis role="bold">butc</emphasis> command).</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKOV-NAMECHECK" />The Tape Coordinator opens either a tape drive or backup data file at this point, as
+           directed by the instructions in the <emphasis role="bold">CFG_</emphasis>device_name file (described in Step <link
+           linkend="LIBKOV-READCFG">6</link>). The instructions also determine whether it invokes a mount script or prompts the
+           operator. In Step <link linkend="LIBKOV-BUTC">1</link> the Tape Coordinator read in the device's capacity and filemark
+           size from the <emphasis role="bold">tapeconfig</emphasis> file. It now reads the same values from the tape or backup data
+           file's magnetic label, and overwrites the <emphasis role="bold">tapeconfig</emphasis> values if there is a
+           difference.</para>
+ 
+           <para>If creating an initial dump (as in the current example) and there is no permanent name on the label, the Tape
+           Coordinator next checks that the AFS tape name has one of the three acceptable formats. If not, it rejects the tape and
+           you must use the <emphasis role="bold">backup labeltape</emphasis> command to write an acceptable name. You can bypass
+           this name-checking step by including the <emphasis role="bold">NAME_CHECK NO</emphasis> instruction in the <emphasis
+           role="bold">CFG_</emphasis>device_name file. For discussion and a list of the acceptable AFS tape name values, see <link
+           linkend="HDRWQ280">Eliminating the AFS Tape Name Check</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKOV-EXPDATE" />For an initial dump, the Tape Coordinator starts writing at the beginning of the tape
+           or backup dump file, overwriting any existing data. To prevent inappropriate overwriting, the Backup System first checks
+           the Backup Database for any dump records associated with the name (permanent or AFS tape name) on the tape or backup dump
+           file's label. It refuses to write to a backup data file that has unexpired dumps in it, or to a tape that belongs to a
+           dump set with any unexpired dumps. To recycle a file or tape before all dumps have expired, you must use the <emphasis
+           role="bold">backup labeltape</emphasis> command to relabel it. Doing so removes the Backup Database records of all dumps
+           in the file or on all tapes in the dump set, which makes it impossible to restore data from any of the tapes. For more
+           information on expiration dates, see <link linkend="HDRWQ270">Defining Expiration Dates</link>.</para>
+ 
+           <para>The Tape Coordinator also checks for two other types of inappropriate tape reuse. The tape cannot already have data
+           on it that belongs to the dump currently being performed, because that implies that the previous tape is still in the
+           drive, or you have mistakenly reinserted it. The Tape Coordinator generates the following message and attempts to obtain
+           another tape:</para>
+ 
+           <programlisting>
+    Can't overwrite tape containing the dump in progress
+ </programlisting>
+ 
+           <para>The tape cannot contain data from a parent dump of the current (incremental) dump, because overwriting a parent dump
+           makes it impossible to restore data from the current dump. The Tape Coordinator generates the following message and
+           attempts to obtain another tape:</para>
+ 
+           <programlisting>
+    Can't overwrite the parent dump parent_name (parent_dump_ID)
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKOV-WRITE" />The Tape Coordinator now writes data to the tape or backup data file. It uses the
+           capacity and filemark size it obtained in Step <link linkend="LIBKOV-NAMECHECK">7</link> as it tracks how much more space
+           is available, automatically using its tape acquisition procedure if the dump is not finished when it reaches the end of
+           the tape. For a more detailed description, and a discussion of what happens if the Tape Coordinator reaches the physical
+           end-of-tape unexpectedly, see <link linkend="HDRWQ258">Configuring the tapeconfig File</link>. Similarly, for instructions
+           on configuring a backup data file to optimize recovery from unexpectedly running out of space, see Step <link
+           linkend="LITAPECONFIG-FILE">6</link> in the instructions in <link linkend="HDRWQ282">Dumping Data to a Backup Data
+           File</link>.</para>
+ 
+           <para>If the Tape Coordinator cannot access a volume during the dump (perhaps because of a server process, machine, or
+           network outage), it skips the volume and continues dumping all volumes that it can access. It generates an error message
+           in the Tape Coordinator window and log file about the omitted volume. It generates a similar message if it discovers that
+           a backup volume has not been recloned since the previous dump operation (that is, that the volume's current clone date is
+           the same as its parent clone date):</para>
+ 
+           <programlisting>
+    Volume volume_name (volume_ID) not dumped - has not been re-cloned 
+        since last dump.
+ </programlisting>
+ 
+           <para>After completing a first pass through all of the volumes, it attempts to dump each omitted volume again. It first
+           checks to see if the reason that the volume was inaccessible during the first pass is that it has been moved since the VL
+           Server generated the list of volumes to dump in Step <link linkend="LIBKOV-VOLMATCHES">3</link>. If so, it dumps the
+           volume from its new site. If the second attempt to access a volume also fails, the Tape Coordinator it generates the
+           following message, prompting you for instruction on how to proceed:</para>
+ 
+           <programlisting>
+    Dump of volume volume_name (volume_ID) failed
+    Please select action to be taken for this volume.
+       r - retry, try dumping this volume again
+       o - omit, this volume from this dump
+       a - abort, the entire dump
+ </programlisting>
+ 
+           <para>To increase the automation of the dump process, you can include the <emphasis role="bold">ASK NO</emphasis>
+           instruction in the <emphasis role="bold">CFG_</emphasis>device_name file to suppress this prompt and have the Tape
+           Coordinator automatically omit the volume from the dump.</para>
+ 
+           <para>If you are tracking the dump as it happens, the prompt enables you to take corrective action. If the volume has not
+           been recloned, you can issue the <emphasis role="bold">vos backup</emphasis> command. If the volume is inaccessible, you
+           can investigate and attempt to resolve the cause.</para>
+ 
+           <indexterm>
+             <primary>dump ID numbers (Backup System)</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>dumping</primary>
+ 
+             <secondary>dump ID numbers</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Backup System</primary>
+ 
+             <secondary>dump ID number</secondary>
+ 
+             <tertiary>assigning as part of dump operation</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Backup Database</primary>
+ 
+             <secondary>dump records</secondary>
+ 
+             <tertiary>creating as part of dump operation</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>dump (Backup System)</primary>
+ 
+             <secondary>creating Backup Database record</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>If the tape or backup data file does not already have an AFS tape name, the Backup System constructs the appropriate
+           one and records it on the label and in the Backup Database. It also assigns a dump name and ID number to the dump and
+           records them in dump record that it creates in the Backup Database. For details on tape and dump names, see <link
+           linkend="HDRWQ253">Dump Names and Tape Names</link>. For instructions on displaying dump records or a volume's dump
+           history, or scanning the contents of a tape, see <link linkend="HDRWQ302">Displaying Backup Dump Records</link>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ299">
+       <title>Appending Dumps to an Existing Dump Set</title>
+ 
+       <indexterm>
+         <primary>dump (Backup System)</primary>
+ 
+         <secondary>appended</secondary>
+ 
+         <tertiary>creating</tertiary>
+       </indexterm>
+ 
+       <para>The AFS Backup System enables you to append dumps to the end of the final tape in a dump set by including the <emphasis
+       role="bold">-append</emphasis> flag to the <emphasis role="bold">backup dump</emphasis> command. Appending dumps improves
+       Backup System automation and efficiency in several ways: <itemizedlist>
+           <listitem>
+             <para>It maximizes use of a tape's capacity. An initial dump must always start on a new tape, but does not necessarily
+             extend to the end of the final tape in the dump set. You can fill up the unused tape by appending one or more
+             dumps.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>It can reduce the number of tapes and tape changes needed to complete a dump operation. Rather than performing a
+             series of initial dumps first, instead begin with an initial dump and follow it immediately with several appended dumps.
+             In this way you can write all dumps in the series to the same tape (assuming the tape is large enough to accommodate
+             them all). If, in contrast, you perform all of the initial dumps first, each must begin on a new tape and you must
+             switch tapes again if you then want to append dumps.</para>
+ 
+             <para>You can either issue the appropriate series of <emphasis role="bold">backup dump</emphasis> commands at the
+             interactive <computeroutput>backup&gt;</computeroutput> prompt, or record them in a file that you then name with the
+             <emphasis role="bold">-file</emphasis> argument to the <emphasis role="bold">backup dump</emphasis> command. Appending
+             dumps in this way enables you to run multiple unattended backup operations even without a tape stacker or jukebox, if
+             all of the dumps fit on one tape.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>It can reduce the number of tape changes during a restore operation. For example, if you append all of the
+             incremental dumps of a volume set to tapes in one dump set, then restoring a volume from the volume set requires a
+             minimum number of tape changes. It is best not to append incremental dumps to a tape that contains the parent full dump,
+             however: if the tape is lost or damaged, you lose all of the data from the volume.</para>
+ 
+             <para>Although it can be efficient to group together appended dumps that are related, the Backup System does not require
+             any relationship between the appended dumps on a tape or in a dump set.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>When writing an appended dump, the Backup System performs most of the steps described in <link linkend="HDRWQ298">How
+       Your Configuration Choices Influence the Dump Process</link>. Appended dumps do not have to be related to one another or the
+       initial dump, so it skips Step <link linkend="LIBKOV-NAMECHECK">7</link>: there is no need to check that the AFS tape name
+       reflects the volume set and dump level names in this case. It also skips Step <link linkend="LIBKOV-EXPDATE">8</link>. Because
+       it is not overwriting any existing data on the tape, it does not need to check the expiration dates of existing dumps on the
+       tape or in the file. Then in Step <link linkend="LIBKOV-WRITE">9</link> the Tape Coordinator scans to the end of the last dump
+       on the tape or in the backup data file before it begins writing data.</para>
+ 
+       <para>The Backup System imposes the following conditions on appended dumps: <itemizedlist>
+           <listitem>
+             <para>If writing to tape, the Tape Coordinator checks that it is the final one in a dump set for which there are
+             complete and valid tape and dump records in the Backup Database. If not, it rejects the tape and requests an acceptable
+             one. If you believe the tape has valid data on it, you can reconstruct the Backup Database dump records for it by using
+             the <emphasis role="bold">-dbadd</emphasis> argument to the <emphasis role="bold">backup scantape</emphasis> command as
+             instructed in <link linkend="HDRWQ305">To scan the contents of a tape</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The most recent dump on the tape or in the backup data file must have completed successfully.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The dump set to which the tape or file belongs must begin with an initial dump that is recorded in the Backup
+             Database. If there are no dumps on the current tape, then the Backup System treats the dump operation as an initial dump
+             and imposes the relevant requirements (for example, checks the AFS tape name if appropriate).</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>As you append dumps, keep in mind that all of a dump set's dump and tape records in the Backup Database are indexed to
+       the initial dump. If you want to delete an appended dump's record, you must delete the initial dump record, and doing so
+       erases the records of all dumps in the dump set. Without those records, you cannot restore any of the data in the dump
+       set.</para>
+ 
+       <para>Similarly, all of the dumps in a dump set must expire before you can recycle (write a new initial dump to) any of the
+       tapes in a dump set. Do not append a dump if its expiration date is later than the date on which you want to recycle any of
+       the tapes in its dump set. To recycle a tape before the last expiration date, you must delete the initial dump's record from
+       the Backup Database. Either use the <emphasis role="bold">backup labeltape</emphasis> command to relabel the tape as
+       instructed in <link linkend="HDRWQ273">To label a tape</link>, or use the <emphasis role="bold">backup deletedump</emphasis>
+       command to delete the record directly as instructed in <link linkend="HDRWQ322">To delete dump records from the Backup
+       Database</link>.</para>
+ 
+       <para>Although in theory you can append as many dumps as you wish, it generally makes sense to limit the number of tapes in a
+       dump set (for example, to five), for these reasons: <itemizedlist>
+           <listitem>
+             <para>If an unreadable spot develops on one of the tapes in a dump set, it can prevent the Tape Coordinator from
+             scanning the tape as part of a <emphasis role="bold">backup scantape</emphasis> operation you use to reconstruct Backup
+             Database records. The Tape Coordinator can almost always scan the tape successfully up to the point of damage and can
+             usually skip past minor damage. A scanning operation can start on any tape in a dump set, so damage on one tape does not
+             prevent scanning of the others in the dump set. However, you can scan only the tapes that precede the damaged one in the
+             dump set or the ones that follow the damaged one, but not both. (For more information on using tapes to reconstruct the
+             information in the Backup Database, see <link linkend="HDRWQ305">To scan the contents of a tape</link>.)</para>
+ 
+             <para>An unreadable bad spot can also prevent you from restoring a volume completely, because restore operations must
+             begin with the full dump and continue with each incremental dump in order. If you cannot restore a specific dump, you
+             cannot restore any data from later incremental dumps.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you decide in the future to archive one or more dumps, then you must archive the entire set of tapes that
+             constitute the dump set, rather than just the ones that contain the data of interest. This wastes both tape and archive
+             storage space. For more information on archiving, see <link linkend="HDRWQ269">Archiving Tapes</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ300">
+       <title>Scheduling Dumps</title>
+ 
+       <para>By default, the Backup System starts executing a dump operation as soon as you enter the <emphasis role="bold">backup
+       dump</emphasis> command, and the Tape Coordinator begins writing data as soon as it is not busy and the list of files to write
+       is available. You can, however, schedule a dump operation to begin at a specific later time: <itemizedlist>
+           <listitem>
+             <para>To schedule a single dump operation, include the <emphasis role="bold">-at</emphasis> argument to specify its
+             start time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To schedule multiple dump operations, list the operations in a file named by the <emphasis
+             role="bold">-file</emphasis> argument and use the <emphasis role="bold">-at</emphasis> argument to specify when the
+             <emphasis role="bold">backup</emphasis> command interpreter reads the file. If you omit the <emphasis
+             role="bold">-at</emphasis> argument, the command interpreter reads the file immediately, which does not count as
+             scheduling, but does allow you to initiate multiple dump operations in a single command. Do not combine the <emphasis
+             role="bold">-file</emphasis> argument with the <emphasis role="bold">-volumeset</emphasis>, <emphasis
+             role="bold">-dump</emphasis>, <emphasis role="bold">-portoffset</emphasis>, <emphasis role="bold">-append</emphasis>, or
+             <emphasis role="bold">-n</emphasis> options.</para>
+ 
+             <para>For file-formatting instructions, see the description of the <emphasis role="bold">-file</emphasis> argument in
+             Step <link linkend="LIBKDUMP-SYNTAX">7</link> of <link linkend="HDRWQ301">To create a dump</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The Backup System performs initial and appended dumps in the same manner whether they are scheduled or begin running as
+       soon as you issue the <emphasis role="bold">backup dump</emphasis> command. The only difference is that the requirements for
+       successful execution hold both at the time you issue the command and when the Backup System actually begins running it. All
+       required Backup Database entries for volume sets, dump levels, and port offsets, and all dump and tape records must exist at
+       both times. Perhaps more importantly, the required administrative tokens must be available at both times. See <link
+       linkend="HDRWQ297">Making Backup Operations More Efficient</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ301">
+       <title>To create a dump</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+           connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+           <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If using a tape device, insert the tape.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide which volume set and dump level to use. If necessary, issue the <emphasis role="bold">backup
+           listvolsets</emphasis> and <emphasis role="bold">backup listdumps</emphasis> commands to display the existing volume sets
+           and dump levels. For complete instructions and a description of the output, see <link linkend="HDRWQ266">To display volume
+           sets and volume entries</link> and <link linkend="HDRWQ271">To display the dump hierarchy</link>. <programlisting>
+    backup&gt; <emphasis role="bold">listvolsets</emphasis>  [&lt;<emphasis>volume set name</emphasis>&gt;]
+    backup&gt; <emphasis role="bold">listdumps</emphasis>
+ </programlisting></para>
+ 
+           <para>If you want to use a temporary volume set, you must create it during the current interactive session. This can be
+           useful if you are dumping a volume to tape in preparation for removing it permanently (perhaps because its owner is
+           leaving the cell). In this case, you can define a volume entry that includes only the volume of interest without
+           cluttering up the Backup Database with a volume set record that you are using only once. Complete instructions appear in
+           <link linkend="HDRWQ265">Defining and Displaying Volume Sets and Volume Entries</link>.</para>
+ 
+           <programlisting>
+    backup&gt;  <emphasis role="bold">addvolset</emphasis> &lt;<emphasis>volume set name</emphasis>&gt; <emphasis role="bold">-temporary</emphasis>
+    backup&gt; <emphasis role="bold">addvolentry  -name</emphasis> &lt;<emphasis>volume set name</emphasis>&gt;  \
+                         <emphasis role="bold">-server</emphasis> &lt;<emphasis>machine name</emphasis>&gt;  \
+                         <emphasis role="bold">-partition</emphasis> &lt;<emphasis>partition name</emphasis>&gt;  \
+                         <emphasis role="bold">-volumes</emphasis> &lt;<emphasis>volume name (regular expression)</emphasis>&gt;
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>If you are creating an initial dump and writing to a tape or backup data file that does not have a permanent name,
+           its AFS tape name must satisfy the Backup System's format requirements as described in <link
+           linkend="HDRWQ280">Eliminating the AFS Tape Name Check</link>. If necessary, use the <emphasis role="bold">backup
+           readlabel</emphasis> command to display the label and the <emphasis role="bold">backup labeltape</emphasis> command to
+           change the names, as instructed in <link linkend="HDRWQ272">Writing and Reading Tape Labels</link>. You must also relabel
+           a tape if you want to overwrite it and it is part of a dump set that includes any unexpired dumps, though this is not
+           recommended. For a discussion of the appropriate way to recycle tapes, see <link linkend="HDRWQ268">Creating a Tape
+           Recycling Schedule</link>.</para>
+ 
+           <indexterm>
+             <primary>backup commands</primary>
+ 
+             <secondary>dump</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>backup dump</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIBKDUMP-SYNTAX" />Issue the <emphasis role="bold">backup dump</emphasis> command to dump the volume
+           set. <itemizedlist>
+               <listitem>
+                 <para>To create one initial dump, provide only the volume set name, dump level name, and port offset (if not
+                 zero).</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To create one appended dump, add the <emphasis role="bold">-append</emphasis> flag.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To schedule a single initial or appended dump, add the <emphasis role="bold">-at</emphasis> argument.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To initiate multiple dump operations, record the appropriate commands in a file and name it with the <emphasis
+                 role="bold">-file</emphasis> argument. Do not combine this argument with options other than the <emphasis
+                 role="bold">-at</emphasis> argument.</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <programlisting>
+    backup&gt; <emphasis role="bold">dump</emphasis> &lt;<emphasis>volume set name</emphasis>&gt; &lt;<emphasis>dump level name</emphasis>&gt; [&lt;<emphasis>TC port offset</emphasis>&gt;]   \
+                 [<emphasis role="bold">-at</emphasis> &lt;<emphasis>Date/time to start dump</emphasis>&gt;+]  \
+                 [<emphasis role="bold">-append</emphasis>]  [<emphasis role="bold">-n</emphasis>] [<emphasis role="bold">-file</emphasis> &lt;<emphasis>load file</emphasis>&gt;]
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">dump</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume set name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume set to dump.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dump level name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete pathname of the dump level at which to dump the volume set.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the port offset number of the Tape Coordinator process that is handling the operation. You must
+                   provide this argument unless the default value of 0 (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-at</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the date and time in the future at which to run the command, or to read the file named by the
+                   <emphasis role="bold">-file</emphasis> argument. Provide a value in the format mm/dd/yyyy [hh:MM], where the month
+                   (mm), day (dd), and year (yyyy) are required. Valid values for the year range from <emphasis
+                   role="bold">1970</emphasis> to <emphasis role="bold">2037</emphasis>; higher values are not valid because the
+                   latest possible date in the standard UNIX representation is in February 2038. The Backup System automatically
+                   reduces any later date to the maximum value in 2038.</para>
+ 
+                   <para>The hour and minutes (hh:MM) are optional, but if provided must be in 24-hour format (for example, the value
+                   <emphasis role="bold">14:36</emphasis> represents 2:36 p.m.). If you omit them, the time defaults to midnight
+                   (00:00 hours).</para>
+ 
+                   <para>As an example, the value <emphasis role="bold">04/23/1999 20:20</emphasis> schedules the command for 8:20
+                   p.m. on 23 April 1999.</para>
+ 
+                   <note>
+                     <para>A plus sign follows this argument in the command's syntax statement because it accepts a multiword value
+                     which does not need to be enclosed in double quotes or other delimiters, not because it accepts multiple dates.
+                     Provide only one date (and optionally, time) definition.</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-append</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates an appended dump by scanning to the end of the data from one or more previous dump operations that
+                   it finds on the tape or in the backup data file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-n</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the names of all volumes to be included in the indicated dump, without actually writing data to
+                   tape or the backup data file. Combine this flag with the arguments you plan to use on the actual command, but not
+                   with the <emphasis role="bold">-file</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the local disk or AFS pathname of a file containing <emphasis role="bold">backup</emphasis>
+                   commands. The Backup System reads the file immediately, or at the time specified by the <emphasis
+                   role="bold">-at</emphasis> argument if it is provided. A partial pathname is interpreted relative to the current
+                   working directory.</para>
+ 
+                   <para>Place each <emphasis role="bold">backup dump</emphasis> command on its own line in the indicated file, using
+                   the same syntax as for the command line, but without the word <emphasis role="bold">backup</emphasis> at the start
+                   of the line. Each command must include the volume set name and dump level name arguments plus the TC port offset
+                   argument if the default value of zero is not appropriate. Commands in the file can also include any of the
+                   <emphasis role="bold">backup dump</emphasis> command's optional arguments, including the <emphasis
+                   role="bold">-at</emphasis> argument (which must specify a date and time later than the date and time at which the
+                   Backup System reads the file).</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+           role="bold">butc</emphasis> command, or if the device's <emphasis role="bold">CFG_</emphasis>device_name configuration
+           file includes the instruction <emphasis role="bold">AUTOQUERY YES</emphasis>, then the Tape Coordinator prompts you to
+           place the tape in the device's drive. You have already done so, but you must now press &lt;<emphasis
+           role="bold">Return</emphasis>&gt; to indicate that the tape is ready for labeling.</para>
+ 
+           <para>If more than one tape is required, you must either include the <emphasis role="bold">MOUNT</emphasis> instruction in
+           the <emphasis role="bold">CFG_</emphasis>device_name file and stock the corresponding stacker or jukebox with tapes, or
+           remain at the console to respond to the Tape Coordinator's prompts for subsequent tapes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>After the dump operation completes, review the Backup System's log files to check for errors. Use the <emphasis
+           role="bold">bos getlog</emphasis> command as instructed in <link linkend="HDRWQ173">Displaying Server Process Log
+           Files</link> to read the <emphasis role="bold">/usr/afs/logs/BackupLog</emphasis> file, and a text editor on the Tape
+           Coordinator machine to read the <emphasis role="bold">TE_</emphasis>device_name and <emphasis
+           role="bold">TL_</emphasis>device_name files in the local <emphasis role="bold">/usr/afs/backup</emphasis>
+           directory.</para>
+ 
+           <para>It is also a good idea to record the tape name and dump ID number on the exterior label of each tape.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ302">
+     <title>Displaying Backup Dump Records</title>
+ 
+     <para>The <emphasis role="bold">backup</emphasis> command suite includes three commands for displaying information about data
+     you have backed up: <itemizedlist>
+         <listitem>
+           <para>To display information about one or more dump operations, such as the date it was performed and the number of
+           volumes included, use the <emphasis role="bold">backup dumpinfo</emphasis> command as described in <link
+           linkend="HDRWQ303">To display dump records</link>. You can display a detailed record of a single dump or more condensed
+           records for a certain number of dumps, starting with the most recent and going back in time. You can specify the number of
+           dumps or accept the default of 10.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To display a volume's dump history, use the <emphasis role="bold">backup volinfo</emphasis> command as described in
+           <link linkend="HDRWQ304">To display a volume's dump history</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To display information extracted from a tape or backup data file about the volumes it includes, use the <emphasis
+           role="bold">backup scantape</emphasis> command. To create new dump and tape records in the Backup Database derived from
+           the tape and dump labels, add the <emphasis role="bold">-dbadd</emphasis> flag. For instructions, see <link
+           linkend="HDRWQ305">To scan the contents of a tape</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>Backup Database</primary>
+ 
+       <secondary>dump records</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump (Backup System)</primary>
+ 
+       <secondary>displaying Backup Database record</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump (Backup System)</primary>
+ 
+       <secondary>ID number, displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup commands</primary>
+ 
+       <secondary>dumpinfo</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>backup dumpinfo</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup Database</primary>
+ 
+       <secondary>dump ID numbers, displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dump ID number (Backup System)</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ303">
+       <title>To display dump records</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup dumpinfo</emphasis> command to list information about dumps recorded in the
+           Backup Database. <programlisting>
+    % <emphasis role="bold">backup dumpinfo</emphasis> [<emphasis role="bold">-ndumps</emphasis> &lt;<emphasis>no. of dumps</emphasis>&gt;]  [<emphasis
+                 role="bold">-id</emphasis> &lt;<emphasis>dump id</emphasis>&gt;]  [<emphasis role="bold">-verbose</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">dump</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">dumpinfo</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-ndumps</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the Backup Database record for each of the specified number of dumps, starting with the most recent
+                   and going back in time. If the database contains fewer dumps than are requested, the output includes the records
+                   for all existing dumps. Do not combine this argument with the <emphasis role="bold">-id</emphasis> argument or
+                   <emphasis role="bold">-verbose</emphasis> flag; omit all three options to display the records for the last 10
+                   dumps.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-id</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the dump ID number of a single dump for which to display the Backup Database record. You must
+                   include the <emphasis role="bold">-id</emphasis> switch. Do not combine this option with the <emphasis
+                   role="bold">-ndumps</emphasis> or <emphasis role="bold">-verbose</emphasis> arguments; omit all three arguments to
+                   display the records for the last 10 dumps.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose</emphasis></term>
+ 
+                 <listitem>
+                   <para>Provides more detailed information about the dump specified with the <emphasis role="bold">-id</emphasis>
+                   argument, which must be provided along with it. Do not combine this flag with the <emphasis
+                   role="bold">-ndumps</emphasis> option.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>If the <emphasis role="bold">-ndumps</emphasis> argument is provided, the output presents the following information in
+       table form, with a separate line for each dump: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>dumpid</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The dump ID number.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>parentid</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The dump ID number of the dump's parent dump. A value of <computeroutput>0</computeroutput> (zero) identifies a
+               full dump.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>lv</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The depth in the dump hierarchy of the dump level used to create the dump. A value of
+               <computeroutput>0</computeroutput> (zero) identifies a full dump, in which case the value in the
+               <computeroutput>parentid</computeroutput> field is also <computeroutput>0</computeroutput>. A value of
+               <computeroutput>1</computeroutput> or greater indicates an incremental dump made at the corresponding level in the
+               dump hierarchy.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>created</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The date and time at which the Backup System started the dump operation that created the dump.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>nt</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The number of tapes that contain the data in the dump. A value of <computeroutput>0</computeroutput> (zero)
+               indicates that the dump operation was terminated or failed. Use the <emphasis role="bold">backup deletedump</emphasis>
+               command to remove such entries.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>nvols</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The number of volumes from which the dump includes data. If a volume spans tapes, it is counted twice. A value
+               of <computeroutput>0</computeroutput> (zero) indicates that the dump operation was terminated or failed; the value in
+               the <computeroutput>nt</computeroutput> field is also <computeroutput>0</computeroutput> (zero) in this case.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>dump name</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The dump name in the form <programlisting>
+    volume_set_name.dump_level_name (initial_dump_ID)
+ </programlisting></para>
+ 
+               <para>where volume_set_name is the name of the volume set, and dump_level_name is the last element in the dump level
+               pathname at which the volume set was dumped.</para>
+ 
+               <para>The initial_dump_ID, if displayed, is the dump ID of the initial dump in the dump set to which this dump
+               belongs. If there is no value in parentheses, the dump is the initial dump in a dump set that has no appended
+               dumps.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>If the <emphasis role="bold">-id</emphasis> argument is provided alone, the first line of output begins with the string
+       <computeroutput>Dump</computeroutput> and reports information for the entire dump in the following fields: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>id</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The dump ID number.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>level</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The depth in the dump hierarchy of the dump level used to create the dump. A value of
+               <computeroutput>0</computeroutput> (zero) identifies a full dump. A value of <computeroutput>1</computeroutput> (one)
+               or greater indicates an incremental dump made at the specified level in the dump hierarchy.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>volumes</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The number of volumes for which the dump includes data.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>created</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The date and time at which the dump operation began.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>If an XBSA server was the backup medium for the dump (rather than a tape device or backup data file), the following line
+       appears next:</para>
+ 
+       <programlisting>
+    Backup Service: XBSA_program: Server: hostname
+ </programlisting>
+ 
+       <para>where XBSA_program is the name of the XBSA-compliant program and hostname is the name of the machine on which the
+       program runs.</para>
+ 
+       <para>Next the output includes an entry for each tape that houses volume data from the dump. Following the string
+       <computeroutput>Tape</computeroutput>, the first two lines of each entry report information about that tape in the following
+       fields: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>name</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The tape's permanent name if it has one, or its AFS tape name otherwise, and its tape ID number in
+               parentheses.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>nVolumes</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The number of volumes for which this tape includes dump data.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>created</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The date and time at which the Tape Coordinator began writing data to this tape.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>Following another blank line, the tape-specific information concludes with a table that includes a line for each volume
+       dump on the tape. The information appears in columns with the following headings: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Pos</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The relative position of each volume in this tape or file. On a tape, the counter begins at position 2 (the tape
+               label occupies position 1), and increments by one for each volume. For volumes in a backup data file, the position
+               numbers start with 1 and do not usually increment only by one, because each is the ordinal of the 16 KB offset in the
+               file at which the volume's data begins. The difference between the position numbers therefore indicates how many 16 KB
+               blocks each volume's data occupies. For example, if the second volume is at position 5 and the third volume in the
+               list is at position 9, that means that the dump of the second volume occupies 64 KB (four 16-KB blocks) of space in
+               the file.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Clone time</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>For a backup or read-only volume, the time at which it was cloned from its read/write source. For a Read/Write
+               volume, it is the same as the dump creation date reported on the first line of the output.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Nbytes</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The number of bytes of data in the dump of the volume.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Volume</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>The volume name, complete with <computeroutput>.backup</computeroutput> or
+               <computeroutput>.readonly</computeroutput> extension if appropriate.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>If both the <emphasis role="bold">-id</emphasis> and <emphasis role="bold">-verbose</emphasis> options are provided, the
+       output is divided into several sections: <itemizedlist>
+           <listitem>
+             <para>The first section, headed by the underlined string <computeroutput>Dump</computeroutput>, includes information
+             about the entire dump. The fields labeled <computeroutput>id</computeroutput>, <computeroutput>level</computeroutput>,
+             <computeroutput>created</computeroutput>, and <computeroutput>nVolumes</computeroutput> report the same values (though
+             in a different order) as appear on the first line of output when the <emphasis role="bold">-id</emphasis> argument is
+             provided by itself. Other fields of potential interest to the backup operator are: <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold"><computeroutput>Group id</computeroutput></emphasis></term>
+ 
+                   <listitem>
+                     <para>The dump's <emphasis>group ID number</emphasis>, which is recorded in the dump's Backup Database record if
+                     the <emphasis role="bold">GROUPID</emphasis> instruction appears in the Tape Coordinator's <emphasis
+                     role="bold">/usr/afs/backup/CFG_</emphasis>tcid file when the dump is created.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold"><computeroutput>maxTapes</computeroutput></emphasis></term>
+ 
+                   <listitem>
+                     <para>The number of tapes that contain the dump set to which this dump belongs.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold"><computeroutput>Start Tape Seq</computeroutput></emphasis></term>
+ 
+                   <listitem>
+                     <para>The ordinal of the tape on which this dump begins in the set of tapes that contain the dump set.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>For each tape that contains data from this dump, there follows a section headed by the underlined string
+             <computeroutput>Tape</computeroutput>. The fields labeled <computeroutput>name</computeroutput>,
+             <computeroutput>written</computeroutput>, and <computeroutput>nVolumes</computeroutput> report the same values (though
+             in a different order) as appear on the second and third lines of output when the <emphasis role="bold">-id</emphasis>
+             argument is provided by itself. Other fields of potential interest to the backup operator are: <variablelist>
+                 <varlistentry>
+                   <term><computeroutput>expires</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The date and time when this tape can be recycled, because all dumps it contains have expired.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>nMBytes Data</computeroutput> and <computeroutput>nBytes Data</computeroutput></term>
+ 
+                   <listitem>
+                     <para>Summed together, these fields represent the total amount of dumped data actually from volumes (as opposed
+                     to labels, filemarks, and other markers).</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>KBytes Tape Used</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The number of kilobytes of tape (or disk space, for a backup data file) used to store the dump data. It is
+                     generally larger than the sum of the values in the <computeroutput>nMBytes Data</computeroutput> and
+                     <computeroutput>nBytes Data</computeroutput> fields, because it includes the space required for the label, file
+                     marks and other markers, and because the Backup System writes data at 16 KB offsets, even if the data in a given
+                     block doesn't fill the entire 16 KB.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>For each volume on a given tape, there follows a section headed by the underlined string
+             <computeroutput>Volume</computeroutput>. The fields labeled <computeroutput>name</computeroutput>,
+             <computeroutput>position</computeroutput>, <computeroutput>clone</computeroutput>, and
+             <computeroutput>nBytes</computeroutput> report the same values (though in a different order) as appear in the table that
+             lists the volumes in each tape when the <emphasis role="bold">-id</emphasis> argument is provided by itself. Other
+             fields of potential interest to the backup operator are: <variablelist>
+                 <varlistentry>
+                   <term><computeroutput>id</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The volume ID.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><computeroutput>tape</computeroutput></term>
+ 
+                   <listitem>
+                     <para>The name of the tape containing this volume data.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The following example command displays the Backup Database records for the five most recent dump operations.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">backup dump 5</emphasis>
+       dumpid   parentid lv created          nt nvols dump name
+    924424000          0 0  04/18/1999 04:26  1    22 usr.sun (924424000)
+    924685000  924424000 1  04/21/1999 04:56  1    62 usr.wed (924424000)
+    924773000  924424000 1  04/22/1999 05:23  1    46 usr.thu (924424000)
+    924860000  924424000 1  04/23/1999 05:33  1    58 usr.fri (924424000)
+    925033000          0 0  04/25/1999 05:36  2    73 sys.week
+ </programlisting>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume dump history</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>Backup System dump history, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>volinfo</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup volinfo</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ304">
+       <title>To display a volume's dump history</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup volinfo</emphasis> command to display a volume's dump history.
+           <programlisting>
+    % <emphasis role="bold">backup volinfo</emphasis> &lt;<emphasis>volume name</emphasis>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">voli</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">volinfo</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">volume name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the volume for which to display the dump history. If you dumped the backup or read-only version of the
+                   volume, include the <emphasis role="bold">.backup</emphasis> or <emphasis role="bold">.readonly</emphasis>
+                   extension.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output includes a line for each Backup Database dump record that mentions the specified volume, order from most to
+       least recent. The output for each record appears in a table with six columns: <variablelist>
+           <varlistentry>
+             <term><computeroutput>dumpID</computeroutput></term>
+ 
+             <listitem>
+               <para>The dump ID of the dump that includes the volume.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>lvl</computeroutput></term>
+ 
+             <listitem>
+               <para>The depth in the dump hierarchy of the dump level at which the volume was dumped. A value of
+               <computeroutput>0</computeroutput> indicates a full dump. A value of <computeroutput>1</computeroutput> or greater
+               indicates an incremental dump made at the specified depth in the dump hierarchy.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>parentid</computeroutput></term>
+ 
+             <listitem>
+               <para>The dump ID of the dump's parent dump. A value of <computeroutput>0</computeroutput> indicates a full dump,
+               which has no parent; in this case, the value in the <computeroutput>lvl</computeroutput> column is also
+               <computeroutput>0</computeroutput>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>creation date</computeroutput></term>
+ 
+             <listitem>
+               <para>The date and time at which the Backup System started the dump operation that created the dump.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>clone date</computeroutput></term>
+ 
+             <listitem>
+               <para>For a backup or read-only volume, the time at which it was cloned from its read/write source. For a read/write
+               volume, the same as the value in the <computeroutput>creation date</computeroutput> field.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>tape name</computeroutput></term>
+ 
+             <listitem>
+               <para>The name of the tape containing the dump: either the permanent tape name, or an AFS tape name in the format
+               <emphasis>volume_set_name</emphasis>.<emphasis>dump_level_name</emphasis>.<emphasis>tape_index</emphasis> where
+               <emphasis>volume_set_name</emphasis> is the name of the volume set associated with the initial dump in the dump set of
+               which this tape is a part; <emphasis>dump_level_name</emphasis> is the name of the dump level at which the initial
+               dump was backed up; <emphasis>tape_index</emphasis> is the ordinal of the tape in the dump set. Either type of name
+               can be followed by a dump ID in parentheses; if it appears, it is the dump ID of the initial dump in the dump set to
+               which this appended dump belongs.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>The following example shows part of the dump history of the backup volume <emphasis
+       role="bold">user.smith.backup</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">backup volinfo user.smith.backup</emphasis>
+    DumpID    lvl parentID  creation   date  clone date       tape name
+    924600000 1   924427600 04/20/1999 05:20 04/20/1999 05:01 user_incr_2 (924514392)
+    924514392 1   924427600 04/19/1999 05:33 04/19/1999 05:08 user_incr_2 
+    924427600 0           0 04/18/1999 05:26 04/18/1999 04:58 user_full_6 
+        .     .      .         .       .       .      .         .
+        .     .      .         .       .       .      .         .
+ </programlisting>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>scanning tapes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>tape (Backup System)</primary>
+ 
+         <secondary>scanning</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump history</secondary>
+ 
+         <tertiary>recovering from tapes</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>volume dump history</secondary>
+ 
+         <tertiary>recovering from tapes</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>volume dump history</secondary>
+ 
+         <tertiary>recovering from tapes</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ305">
+       <title>To scan the contents of a tape</title>
+ 
+       <note>
+         <para>The ability to scan a tape that is corrupted or damaged depends on the extent of the damage and what type of data is
+         corrupted. The Backup System can almost always scan the tape successfully up to the point of damage. If the damage is minor,
+         the Backup System can usually skip over it and scan the rest of the tape, but more major damage can prevent further
+         scanning. A scanning operation does not have to begin with the first tape in a dump set, but the Backup System can process
+         tapes only in sequential order after the initial tape provided. Therefore, damage on one tape does not prevent scanning of
+         the others in the dump set, but it is possible to scan either the tapes that precede the damaged one or the ones that follow
+         it, not both.</para>
+       </note>
+ 
+       <para>If you use the <emphasis role="bold">-dbadd</emphasis> flag to scan information into the Backup Database and the first
+       tape you provide is not the first tape in the dump set, the following restrictions apply: <itemizedlist>
+           <listitem>
+             <para>If the first data on the tape is a continuation of a volume that begins on the previous (unscanned) tape in the
+             dump set, the Backup System does not add a record for that volume to the Backup Database.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Backup System must read the marker that indicates the start of an appended dump to add database records for
+             the volumes in it. If the first volume on the tape belongs to an appended dump, but is not immediately preceded by the
+             appended-dump marker, the Backup System does not create a Backup Database record for it or any subsequent volumes that
+             belong to that appended dump.</para>
+           </listitem>
+         </itemizedlist> <orderedlist>
+           <listitem>
+             <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+             file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+             linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+             connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+             which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+             <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If scanning a tape, place it in the drive.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">backup</emphasis> command to enter
+             interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+ 
+             <indexterm>
+               <primary>backup commands</primary>
+ 
+               <secondary>scantape</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>backup scantape</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">backup scantape</emphasis> command to read the contents of the tape.
+             <programlisting>
+    backup&gt; <emphasis role="bold">scantape</emphasis> [<emphasis role="bold">-dbadd</emphasis>] [<emphasis role="bold">-portoffset</emphasis> &lt;<emphasis>TC port offset</emphasis>&gt;]
+ </programlisting></para>
+ 
+             <para>where <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold">sc</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is the shortest acceptable abbreviation of <emphasis role="bold">scantape</emphasis>.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-dbadd</emphasis></term>
+ 
+                   <listitem>
+                     <para>Constructs dump and tape records from the tape and dump labels in the dump and writes them into the Backup
+                     Database.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">TC port offset</emphasis></term>
+ 
+                   <listitem>
+                     <para>Specifies the port offset number of the Tape Coordinator process that is handling the operation. You must
+                     provide this argument unless the default value of 0 (zero) is appropriate.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+             role="bold">butc</emphasis> command, or the device's <emphasis role="bold">CFG_</emphasis>device_name configuration file
+             includes the instruction <emphasis role="bold">AUTOQUERY YES</emphasis> instruction, then the Tape Coordinator prompts
+             you to place the tape in the device's drive. You have already done so, but you must now press &lt;<emphasis
+             role="bold">Return</emphasis>&gt; to indicate that the tape is ready for reading.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>To terminate a tape scanning operation, use a termination signal such as &lt;<emphasis
+       role="bold">Ctrl-c</emphasis>&gt;, or issue the <emphasis role="bold">(backup) kill</emphasis> command in interactive mode. It
+       is best not to interrupt the scan if you included the <emphasis role="bold">-dbadd</emphasis> argument. If the Backup System
+       has already written new records into the Backup Database, then you must remove them before rerunning the scanning operation.
+       If during the repeated scan operation the Backup System finds that a record it needs to create already exists, it halts the
+       operation.</para>
+ 
+       <para>For each dump on the tape, the output in the Tape Coordinator window displays the dump label followed by an entry for
+       each volume. There is no output in the command window. The dump label has the same fields as the tape label displayed by the
+       <emphasis role="bold">backup readlabel</emphasis> command, as described in <link linkend="HDRWQ272">Writing and Reading Tape
+       Labels</link>. Or see the <emphasis>OpenAFS Administration Reference</emphasis> for a detailed description of the fields in
+       the output.</para>
+ 
+       <para>The following example shows the dump label and first volume entry on the tape in the device that has port offset
+       2:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">backup scantape 2</emphasis>
+    -- Dump label --
+    tape name = monthly_guest
+    AFS tape name = guests.monthly.3
+    creationTime =  Mon Feb  1 04:06:40 1999
+    cell = abc.com
+    size = 2150000 Kbytes
+    dump path = /monthly
+    dump id = 917860000
+    useCount = 44
+    -- End of dump label --
+    -- volume --
+    volume name: user.guest10.backup
+    volume ID 1937573829
+    dumpSetName: guests.monthly
+    dumpID 917860000
+    level 0
+    parentID 0
+    endTime 0
+    clonedate Mon Feb  1 03:03:23 1999
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ306">
+     <title>Restoring and Recovering Data</title>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>restoring</secondary>
+ 
+       <tertiary>using Backup System</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>partition</primary>
+ 
+       <secondary>restoring contents using Backup System</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file server machine</primary>
+ 
+       <secondary>restoring partitions using Backup System</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>restoring</secondary>
+ 
+       <tertiary>data</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>data</secondary>
+ 
+       <tertiary>restoring</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>data</secondary>
+ 
+       <tertiary>recovering</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>restores</secondary>
+ 
+       <tertiary>full</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>restores</secondary>
+ 
+       <tertiary>date-specific</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>full restores</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>date-specific restores</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restoring</primary>
+ 
+       <secondary>data using Backup System</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup System</primary>
+ 
+       <secondary>restoring</secondary>
+ 
+       <tertiary>backed up data</tertiary>
+     </indexterm>
+ 
+     <para>The purpose of making backups is to enable you to recover when data becomes corrupted or is removed accidentally,
+     returning the data to a coherent past state. The AFS Backup System provides three commands that restore varying numbers of
+     volumes: <itemizedlist>
+         <listitem>
+           <para>To restore one or more volumes to a single site (partition on an AFS file server machine), use the <emphasis
+           role="bold">backup volrestore</emphasis> command.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To restore one or more volumes that are defined as a volume set, each to a specified site, use the <emphasis
+           role="bold">backup volsetrestore</emphasis> command.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To restore an entire partition (that is, all of the volumes that the VLDB lists as resident on it), use the
+           <emphasis role="bold">backup diskrestore</emphasis> command.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The commands are suited to different purposes because they vary in the combinations of features they offer and in the
+     requirements they impose. To decide which is appropriate for a specific restore operation, see the subsequent sections of this
+     introduction: <link linkend="HDRWQ308">Using the backup volrestore Command</link>, <link linkend="HDRWQ310">Using the backup
+     diskrestore Command</link>, and <link linkend="HDRWQ312">Using the backup volsetrestore Command</link>.</para>
+ 
+     <sect2 id="HDRWQ307">
+       <title>Making Restore Operations More Efficient</title>
+ 
+       <para>The following comments apply to all types of restore operation: <itemizedlist>
+           <listitem>
+             <para>The Backup System begins by restoring the most recent full dump of a volume. As it restores subsequent incremental
+             dumps, it alters the data in the full dump appropriately, essentially repeating the volume's change history. The
+             <emphasis role="bold">backup diskrestore</emphasis> and <emphasis role="bold">backup volsetrestore</emphasis> commands
+             always restore all incremental dumps, bringing a volume to its state at the time of the most recent incremental dump.
+             You can use the <emphasis role="bold">backup volrestore</emphasis> command to return a volume to its state at a
+             specified time in the past, by not restoring the data from incremental dumps performed after that time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The Backup System sets a restored volume's creation date to the date and time of the restore operation. The
+             creation date appears in the <computeroutput>Creation</computeroutput> field of the output from the <emphasis
+             role="bold">vos examine</emphasis> and <emphasis role="bold">vos listvol</emphasis> commands.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When identifying the volumes to restore, it is best to specify the base (read/write) name. In this case, the
+             Backup System searches the Backup Database for the most recent dump set that includes data from either the read/write or
+             backup version of the volume, and restores dumps of that volume starting with the most recent full dump. If you include
+             the <emphasis role="bold">.backup</emphasis> or <emphasis role="bold">.readonly</emphasis> extension on the volume name,
+             the Backup System restores dumps of that version only. If it cannot find data dumped from that version, it does not
+             perform the restoration even if another version was dumped.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>All three restoration commands accept the <emphasis role="bold">-n</emphasis> option, which generates a list of
+             the volumes to be restored and the tapes or backup data files that contain the necessary dumps, without actually
+             restoring data to AFS server partitions. This enables you to gather together the tapes before beginning the restore
+             operation, even preloading them into a stacker or jukebox if you are using one.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you back up AFS data to tape, restoration is simplest if all of your tape devices are compatible, meaning that
+             they can read the same type of tape, at the same compression ratios, and so on. (This suggestion also appears in <link
+             linkend="HDRWQ297">Making Backup Operations More Efficient</link>, because by the time you need to restore data it is
+             too late to implement it.) You can still restore multiple volumes with a single command even if data was backed up using
+             incompatible devices, because the <emphasis role="bold">-portoffset</emphasis> argument to all three restoration
+             commands accepts multiple values. However, the Backup System uses the first port offset listed when restoring the full
+             dump of each volume, the next port offset when restoring the level 1 incremental dump of each volume, and so on. If you
+             did not use a compatible tape device when creating the full dump of every volume (and at each incremental level too),
+             you cannot restore multiple volumes with a single command. You must use the <emphasis role="bold">backup
+             volrestore</emphasis> command to restore one volume at a time, or use the <emphasis role="bold">backup
+             volsetrestore</emphasis> command after defining volume sets that group volumes according to the tape device used to dump
+             them.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>During a restore operation, the Backup System uses instructions in the relevant <emphasis
+             role="bold">CFG_</emphasis>device_name configuration file in much the same way as during a dump operation, as described
+             in <link linkend="HDRWQ298">How Your Configuration Choices Influence the Dump Process</link>. It uses the <emphasis
+             role="bold">MOUNT</emphasis>, <emphasis role="bold">UNMOUNT</emphasis>, <emphasis role="bold">AUTOQUERY</emphasis>,
+             <emphasis role="bold">BUFFERSIZE</emphasis>, and <emphasis role="bold">FILE</emphasis> instructions just as for a dump
+             operation. A difference for the <emphasis role="bold">BUFFERSIZE</emphasis> instruction is that the default buffer size
+             overridden by the instruction is 32 KB for restore operations rather than the 16 KB used for dump operations. The Backup
+             System does not use the <emphasis role="bold">NAME_CHECK</emphasis> instruction at all during restore operations. The
+             <emphasis role="bold">ASK</emphasis> instruction controls whether the Backup System prompts you if it cannot restore a
+             volume for any reason. If the setting is <emphasis role="bold">NO</emphasis>, it skips the problematic volume and
+             restores as many of the other volumes as possible.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Do not perform a restore operation when you know that there are network, machine, or server process problems that
+             can prevent the Backup System from accessing volumes or the VLDB. Although the Backup System automatically makes a
+             number of repeated attempts to restore a volume, the restore operation takes extra time and in some cases stops
+             completely to prompt you for instructions on how to continue.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Avoid halting a restore operation (for instance by issuing the <emphasis role="bold">(backup) kill</emphasis>
+             command in interactive mode). If a restore operation is interrupted for any reason, including causes outside your
+             control, reissue the same restoration command as soon as is practical; if an outage or other problem caused the
+             operation to halt, do not continue until the system returns to normal.</para>
+ 
+             <para>Any volume that is completely restored when the operation halts is online and usable, but very few volumes are
+             likely to be in this state. When restoring multiple volumes at once, the Backup System restores the full dump of every
+             volume before beginning the level 1 incremental restore for any of them, and so on, completing the restore of every
+             volume at a specific incremental level before beginning to restore data from the next incremental level. Unless a volume
+             was dumped at fewer incremental levels than others being restored as part of the same operation, it is unlikely to be
+             complete.</para>
+ 
+             <para>It is even more dangerous to interrupt a restore operation if you are overwriting the current contents of the
+             volume. Depending on how far the restore operation has progressed, it is possible that the volume is in such an
+             inconsistent state that the Backup System removes it entirely. The data being restored is still available on tape or in
+             the backup data file, but you must take extra steps to re-create the volume.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ308">
+       <title>Using the backup volrestore Command</title>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>restoring</secondary>
+ 
+         <tertiary>backup data</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restoring</primary>
+ 
+         <secondary>existing data</secondary>
+ 
+         <tertiary>overwriting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>overwriting contents during Backup System restore</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restoring</primary>
+ 
+         <secondary>existing data</secondary>
+ 
+         <tertiary>preserving</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>preserving contents during Backup System restore</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>restoring</primary>
+ 
+         <secondary>data</secondary>
+ 
+         <tertiary>that no longer exists</tertiary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">backup volrestore</emphasis> command is most appropriate when you need to restore a few
+       volumes to a single site (partition on a file server machine). By default, it restores the volumes to their state at the time
+       of the most recent dump operation (this is termed a <emphasis>full restore</emphasis>). You can also use the command to
+       perform a <emphasis>date-specific restore</emphasis>, which restores only the dumps (full and incremental) performed before a
+       specified date and time, leaving the volume in the state it was in at the time of the final relevant incremental dump. The
+       <emphasis role="bold">backup diskrestore</emphasis> and <emphasis role="bold">backup volsetrestore</emphasis> commands can
+       only perform full restores.</para>
+ 
+       <para>You can restore data into a new copy of each volume rather than overwriting the current version, by including the
+       <emphasis role="bold">-extension</emphasis> argument. After mounting the new volume in the filespace, you can compare the
+       contents of the two and decide which to keep permanently.</para>
+ 
+       <para>The following list summarizes how to combine the <emphasis role="bold">backup volrestore</emphasis> command's arguments
+       to restore a volume in different ways: <itemizedlist>
+           <listitem>
+             <para>To perform a date-specific restore as described just previously, use the <emphasis role="bold">-date</emphasis>
+             argument to specify the date and optionally time. The Backup System restores the most recent full dump and each
+             subsequent incremental dump for which the clone date of the volume included in the dump is before the indicated date and
+             time (for a definition of the clone date, see Step <link linkend="LIBKOV-CLONEDATE">4</link> in <link
+             linkend="HDRWQ298">How Your Configuration Choices Influence the Dump Process</link>). You can combine this argument with
+             the <emphasis role="bold">-extension</emphasis> argument to place the date-specific restore in a new volume.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To move a volume to a new site as you overwrite its contents with the restored data, use the <emphasis
+             role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments, singly or in combination, to
+             specify the new site rather than the current site. The Backup System creates a new volume at that site, removes the
+             existing volume, and updates the site information in the volume's VLDB entry. The volume's backup version is not removed
+             automatically from the original site, if it exists. Use the <emphasis role="bold">vos remove</emphasis> command to
+             remove it and the <emphasis role="bold">vos backup</emphasis> command to create a backup version at the new site.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To create a new volume to house the restored data, rather than overwriting an existing volume, use the <emphasis
+             role="bold">-extension</emphasis> argument. The Backup System creates the new volume on the server and partition named
+             by the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments, derives its
+             name by adding the extension to the name specified with the <emphasis role="bold">-volume</emphasis> argument, and
+             creates a new VLDB entry for it. The command does not affect the existing volume in any way. However, if a volume with
+             the specified extension also already exists, the command overwrites it. To make the contents of the new volume
+             accessible, use the <emphasis role="bold">fs mkmount</emphasis> command to mount it. You can then compare its contents
+             to those of the existing volume, to see which to retain permanently.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To restore a volume that no longer exists on an AFS server partition, but for which you have backed up data,
+             specify the name of the new volume with the <emphasis role="bold">-volume</emphasis> argument and use the <emphasis
+             role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments to place it at the desired
+             site. The Backup System creates a new volume and new VLDB entry.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>volrestore</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup volrestore</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ309">
+       <title>To restore volumes with the backup volrestore command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+           connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+           <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+ 
+           <para>Repeat the command for each Tape Coordinator if you are using more than one tape device.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If using a tape device, insert the tape.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup volrestore</emphasis> command with the desired arguments. <programlisting>
+    backup&gt; <emphasis role="bold">volrestore</emphasis> &lt;<emphasis>destination machine</emphasis>&gt; &lt;<emphasis>destination partition</emphasis>&gt;  \ 
+                       <emphasis role="bold">-volume</emphasis> &lt;<emphasis>volume(s) to restore</emphasis>&gt;+  \
+                       [<emphasis role="bold">-extension</emphasis> &lt;<emphasis>new volume name extension</emphasis>&gt;]  \
+                       [<emphasis role="bold">-date</emphasis> &lt;<emphasis>date from which to restore</emphasis>&gt;]  \
+                       [<emphasis role="bold">-portoffset</emphasis> &lt;<emphasis>TC port offsets</emphasis>&gt;+] [<emphasis
+                 role="bold">-n</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">volr</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">volrestore</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">destination machine</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine on which to restore each volume. It does not have to be a volume's current
+                   site.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">destination partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the partition on which to restore each volume. It does not have to be a volume's current site.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-volume</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each volume to restore. It is best to provide the base (read/write) name, for the reasons discussed in
+                   <link linkend="HDRWQ307">Making Restore Operations More Efficient</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-extension</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates a new volume to house the restored data, with a name derived by appending the specified string to
+                   each volume named by the <emphasis role="bold">-volume</emphasis> extension. The Backup System preserves the
+                   contents of the existing volume if it still exists. Do not use either of the <emphasis
+                   role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> extensions, which are reserved. The
+                   combination of base volume name and extension cannot exceed 22 characters in length. If you want a period to
+                   separate the extension from the name, specify it as the first character of the string (as in <emphasis
+                   role="bold">.rst</emphasis>, for example).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-date</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a date and optionally time; the restored volume includes data from dumps performed before the date
+                   only. Provide a value in the format mm/dd/yyyy [hh:MM], where the required mm/dd/yyyy portion indicates the month
+                   (mm), day (dd), and year (yyyy), and the optional hh:MM portion indicates the hour and minutes in 24-hour format
+                   (for example, the value <emphasis role="bold">14:36</emphasis> represents 2:36 p.m.). If omitted, the time
+                   defaults to 59 seconds after midnight (00:00:59 hours).</para>
+ 
+                   <para>Valid values for the year range from <emphasis role="bold">1970</emphasis> to <emphasis
+                   role="bold">2037</emphasis>; higher values are not valid because the latest possible date in the standard UNIX
+                   representation is in February 2038. The command interpreter automatically reduces any later date to the maximum
+                   value.</para>
+ 
+                   <note>
+                     <para>A plus sign follows this argument in the command's syntax statement because it accepts a multiword value
+                     which does not need to be enclosed in double quotes or other delimiters, not because it accepts multiple dates.
+                     Provide only one date (and optionally, time) definition.</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-portoffset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more port offset numbers, each corresponding to a Tape Coordinator to use in the operation.
+                   If there is more than one value, the Backup System uses the first one when restoring the full dump of each volume,
+                   the second one when restoring the level 1 incremental dump of each volume, and so on. It uses the final value in
+                   the list when restoring dumps at the corresponding depth in the dump hierarchy and all dumps at lower
+                   levels.</para>
+ 
+                   <para>Provide this argument unless the default value of 0 (zero) is appropriate for all dumps. If 0 is just one of
+                   the values in the list, provide it explicitly in the appropriate order.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-n</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the list of tapes that contain the dumps required by the restore operation, without actually
+                   performing the operation.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+           role="bold">butc</emphasis> command, or the device's <emphasis role="bold">CFG_</emphasis>device_name configuration file
+           includes the instruction <emphasis role="bold">AUTOQUERY YES</emphasis>, then the Tape Coordinator prompts you to place
+           the tape in the device's drive. You have already done so, but you must now press &lt;<emphasis
+           role="bold">Return</emphasis>&gt; to indicate that the tape is ready for labeling.</para>
+ 
+           <para>If more than one tape is required, you must either include the <emphasis role="bold">MOUNT</emphasis> instruction in
+           the <emphasis role="bold">CFG_</emphasis>device_name file and stock the corresponding stacker or jukebox with tapes, or
+           remain at the console to respond to the Tape Coordinator's prompts for subsequent tapes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>After the restore operation completes, review the Backup System's log files to check for errors. Use the <emphasis
+           role="bold">bos getlog</emphasis> command as instructed in <link linkend="HDRWQ173">Displaying Server Process Log
+           Files</link> to read the <emphasis role="bold">/usr/afs/logs/BackupLog</emphasis> file, and a text editor on the Tape
+           Coordinator machine to read the <emphasis role="bold">TE_</emphasis>device_name and <emphasis
+           role="bold">TL_</emphasis>device_name files in the local <emphasis role="bold">/usr/afs/backup</emphasis>
+           directory.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ310">
+       <title>Using the backup diskrestore Command</title>
+ 
+       <indexterm>
+         <primary>partition</primary>
+ 
+         <secondary>restoring using Backup System</secondary>
+ 
+         <tertiary>to the same location</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>partition</primary>
+ 
+         <secondary>restoring using Backup System</secondary>
+ 
+         <tertiary>to a new location</tertiary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">backup diskrestore</emphasis> command is most appropriate when you need to restore all of the
+       volumes on an AFS server partition, perhaps because a hardware failure has corrupted or destroyed all of the data. The command
+       performs a full restore of all of the read/write volumes for which the VLDB lists the specified partition as the current site,
+       using the dumps of either the read/write or backup version of each volume depending on which type was dumped more recently.
+       (You can restore any backup or read-only volumes that resided on the partition by using the <emphasis role="bold">vos
+       backup</emphasis> and <emphasis role="bold">vos release</emphasis> commands after the <emphasis role="bold">backup
+       diskrestore</emphasis> operation is complete.)</para>
+ 
+       <para>By default, the Backup System restores the volumes to the site they previously occupied. To move the partition contents
+       to a different site, use the <emphasis role="bold">-newserver</emphasis> and <emphasis role="bold">-newpartition</emphasis>
+       arguments, singly or in combination.</para>
+ 
+       <para>By default, the Backup System overwrites the contents of existing volumes with the restored data. To create a new volume
+       to house the restored data instead, use the <emphasis role="bold">-extension</emphasis> argument. The Backup System creates
+       the new volume at the site designated by the <emphasis role="bold">-newserver</emphasis> and <emphasis
+       role="bold">-newpartition</emphasis> arguments if they are used or the <emphasis role="bold">-server</emphasis> and <emphasis
+       role="bold">-partition</emphasis> arguments otherwise. It derives the volume name by adding the extension to the read/write
+       base name listed in the VLDB, and creates a new VLDB entry. The command does not affect the existing volume in any way.
+       However, if a volume with the specified extension also already exists, the command overwrites it.</para>
+ 
+       <para>If a partition seems damaged, be sure not to run the <emphasis role="bold">vos syncserv</emphasis> command before the
+       <emphasis role="bold">backup diskrestore</emphasis> command. As noted, the Backup System restores volumes according to VLDB
+       site definitions. The <emphasis role="bold">vos syncserv</emphasis> command sometimes removes a volume's VLDB entry when the
+       corruption on the partition is so severe that the Volume Server cannot confirm the volume's presence.</para>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>diskrestore</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup diskrestore</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ311">
+       <title>To restore a partition with the backup diskrestore command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+           connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+           <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+ 
+           <para>Repeat the command for each Tape Coordinator if you are using more than one tape device.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If using a tape device, insert the tape.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup diskrestore</emphasis> command with the desired arguments. <programlisting>
+    backup&gt; <emphasis role="bold">diskrestore</emphasis> &lt;<emphasis>machine to restore</emphasis>&gt; &lt;<emphasis>partition to restore</emphasis>&gt;  \
+                        [<emphasis role="bold">-portoffset</emphasis> &lt;<emphasis>TC port offset</emphasis>&gt;+]  \
+                        [<emphasis role="bold">-newserver</emphasis> &lt;<emphasis>destination machine</emphasis>&gt;]  \
+                        [<emphasis role="bold">-newpartition</emphasis> &lt;<emphasis>destination partition</emphasis>&gt;]  \
+                        [<emphasis role="bold">-extension</emphasis> &lt;<emphasis>new volume name extension</emphasis>&gt;] [<emphasis
+                 role="bold">-n</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">di</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">diskrestore</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine to restore</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine that the VLDB lists as the site of the volumes that need to be
+                   restored.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">partition to restore</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the partition that the VLDB lists as the site of the volumes that need to be restored.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-portoffset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more port offset numbers, each corresponding to a Tape Coordinator to use in the operation.
+                   If there is more than one value, the Backup System uses the first one when restoring the full dump of each volume,
+                   the second one when restoring the level 1 incremental dump of each volume, and so on. It uses the final value in
+                   the list when restoring dumps at the corresponding depth in the dump hierarchy and all dumps at lower
+                   levels.</para>
+ 
+                   <para>Provide this argument unless the default value of 0 (zero) is appropriate for all dumps. If 0 is just one of
+                   the values in the list, provide it explicitly in the appropriate order.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-newserver</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an alternate file server machine to which to restore the volumes. If you omit this argument, the
+                   volumes are restored to the file server machine named by the <emphasis role="bold">-server</emphasis>
+                   argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-newpartition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an alternate partition to which to restore the data. If you omit this argument, the volumes are
+                   restored to the partition named by the <emphasis role="bold">-partition</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-extension</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates a new volume for each volume being restored, to house the restored data, appending the specified
+                   string to the volume's read/write base name as listed in the VLDB. Any string other than <emphasis
+                   role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> is acceptable, but the combination of
+                   the base name and extension cannot exceed 22 characters in length. To use a period to separate the extension from
+                   the name, specify it as the first character of the string (as in <emphasis role="bold">.rst</emphasis>, for
+                   example).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-n</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays a list of the tapes necessary to perform the requested restore, without actually performing the
+                   operation.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+           role="bold">butc</emphasis> command, or the device's <emphasis role="bold">CFG_</emphasis>device_name configuration file
+           includes the instruction <emphasis role="bold">AUTOQUERY YES</emphasis>, then the Tape Coordinator prompts you to place
+           the tape in the device's drive. You have already done so, but you must now press &lt;<emphasis
+           role="bold">Return</emphasis>&gt; to indicate that the tape is ready for labeling.</para>
+ 
+           <para>If more than one tape is required, you must either include the <emphasis role="bold">MOUNT</emphasis> instruction in
+           the <emphasis role="bold">CFG_</emphasis>device_name file and stock the corresponding stacker or jukebox with tapes, or
+           remain at the console to respond to the Tape Coordinator's prompts for subsequent tapes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>After the restore operation completes, review the Backup System's log files to check for errors. Use the <emphasis
+           role="bold">bos getlog</emphasis> command as instructed in <link linkend="HDRWQ173">Displaying Server Process Log
+           Files</link> to read the <emphasis role="bold">/usr/afs/logs/BackupLog</emphasis> file, and a text editor on the Tape
+           Coordinator machine to read the <emphasis role="bold">TE_</emphasis>device_name and <emphasis
+           role="bold">TL_</emphasis>device_name files in the local <emphasis role="bold">/usr/afs/backup</emphasis>
+           directory.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ312">
+       <title>Using the backup volsetrestore Command</title>
+ 
+       <para>The <emphasis role="bold">backup volsetrestore</emphasis> command is most appropriate when you need to perform a full
+       restore of several read/write volumes, placing each at a specified site. You specify the volumes to restore either by naming a
+       volume set with the <emphasis role="bold">-name</emphasis> argument or by listing each volume's name and restoration site in a
+       file named by the <emphasis role="bold">-file</emphasis> argument, as described in the following sections.</para>
+ 
+       <para>Because the <emphasis role="bold">backup volsetrestore</emphasis> command enables you to restore a large number of
+       volumes with a single command, the restore operation can potentially take hours to complete. One way to reduce the time is to
+       run multiple instances of the command simultaneously. Either use the <emphasis role="bold">-name</emphasis> argument to
+       specify disjoint volume sets for each command, or the <emphasis role="bold">-file</emphasis> argument to name files that list
+       different volumes. You must have several Tape Coordinators available to read the required tapes. Depending on how the volumes
+       to be restored were dumped to tape, specifying disjoint volume sets can also reduce the number of tape changes
+       required.</para>
+ 
+       <sect3 id="HDRWQ313">
+         <title>Restoring a Volume Set with the -name Argument</title>
+ 
+         <para>Use the <emphasis role="bold">-name</emphasis> argument to restore a group of volumes defined in a volume set. The
+         Backup System creates a list of the volumes in the VLDB that match the server, partition, and volume name criteria defined
+         in the volume set's volume entries, and for which dumps are available. The volumes do not have to exist on the server
+         partition as long as the VLDB still lists them (this can happen when, for instance, a hardware problem destroys the contents
+         of an entire disk).</para>
+ 
+         <para>By default, the Backup System restores, as a read/write volume, each volume that matches the volume set criteria to
+         the site listed in the VLDB. If a volume of the matching name exists at that site, its current contents are overwritten. You
+         can instead create a new volume to house the restored data by including the <emphasis role="bold">-extension</emphasis>
+         argument. The Backup System creates the new volume at the existing volume's site, derives its name by adding the extension
+         to the existing volume's read/write base name, and creates a new VLDB entry for it. The command does not affect the existing
+         volume in any way. However, if a volume with the specified extension also already exists, the command overwrites it. To make
+         the contents of the new volume accessible, use the <emphasis role="bold">fs mkmount</emphasis> command to mount it. You can
+         then compare its contents to those of the existing volume, to see which to retain permanently.</para>
+ 
+         <para>It is not required that the volume set was previously used to back up volumes (was used as the <emphasis
+         role="bold">-volumeset</emphasis> option to the <emphasis role="bold">backup dump</emphasis> command). It can be defined
+         especially to match the volumes that need to be restored with this command, and that is usually the better choice. Indeed, a
+         <emphasis>temporary</emphasis> volume set, created by including the <emphasis role="bold">-temporary</emphasis> flag to the
+         <emphasis role="bold">backup addvolset</emphasis> command, can be especially useful in this context (instructions appear in
+         <link linkend="HDRWQ265">Defining and Displaying Volume Sets and Volume Entries</link>). A temporary volume set is not added
+         to the Backup Database and exists only during the current interactive backup session, which is suitable if the volume set is
+         needed only to complete the single restore operation initialized by this command.</para>
+ 
+         <para>The reason that a specially defined volume set is probably better is that volume sets previously defined for use in
+         dump operations usually match the backup version of volumes, whereas for a restore operation it is best to define volume
+         entries that match the base (read/write) name. In this case, the Backup System searches the Backup Database for the newest
+         dump set that includes a dump of either the read/write or the backup version of the volume. If, in contrast, a volume entry
+         explicitly matches the volume's backup or read-only version, the Backup System uses dumps of that volume version only,
+         restoring them to a read/write volume by stripping off the <emphasis role="bold">.backup</emphasis> or <emphasis
+         role="bold">.readonly</emphasis> extension.</para>
+ 
+         <para>If there are VLDB entries that match the volume set criteria, but for which there are no dumps recorded in the Backup
+         Database, the Backup System cannot restore them. It generates an error message on the standard error stream for each
+         one.</para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ314">
+         <title>Restoring Volumes Listed in a File with the -file Argument</title>
+ 
+         <para>Use the <emphasis role="bold">-file</emphasis> argument to specify the name and site of each read/write volume to
+         restore. Each volume's entry must appear on its own (unbroken) line in the file, and comply with the following
+         format:</para>
+ 
+         <programlisting>
+    machine    partition   volume    [comments...]
+ </programlisting>
+ 
+         <para>where <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">machine</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the file server machine to which to restore the volume. You can move the volume as you restore it by
+                 naming a machine other than the current site.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">partition</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the partition to which to restore the volume. You can move the volume as you restore it by naming a
+                 partition other than the current site.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the volume to restore. Specify the base (read/write) name to have the Backup System search the Backup
+                 Database for the newest dump set that includes a dump of either the read/write or the backup version of the volume.
+                 It restores the dumps of that version of the volume, starting with the most recent full dump. If, in contrast, you
+                 include the <computeroutput>.backup</computeroutput> or <computeroutput>.readonly</computeroutput> extension, the
+                 Backup System restores dumps of that volume version only, but into a read/write volume without the extension. The
+                 base name must match the name used in Backup Database dump records rather than in the VLDB, if they differ, because
+                 the Backup System does not consult the VLDB when you use the <emphasis role="bold">-file</emphasis> argument.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">comments...</emphasis></term>
+ 
+               <listitem>
+                 <para>Is any other text. The Backup System ignores any text on each line that appears after the volume name, so you
+                 can use this field for helpful notes.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+ 
+         <para>Do not use wildcards (for example, <emphasis role="bold">.*</emphasis>) in the machine, partition, or volume fields.
+         It is acceptable for multiple lines in the file to name the same volume, but the Backup System processes only the first of
+         them.</para>
+ 
+         <para>By default, the Backup System replaces the existing version of each volume with the restored data, placing the volume
+         at the site specified in the machine and partition fields. You can instead create a new volume to house the restored
+         contents by including the <emphasis role="bold">-extension</emphasis> argument. The Backup System creates a new volume at
+         the site named in the machine and partition fields, derives its name by adding the specified extension to the read/write
+         version of the name in the volume field, and creates a new VLDB entry for it. The command does not affect the existing
+         volume in any way. However, if a volume with the specified extension also already exists, the command overwrites it. To make
+         the contents of the new volume accessible, use the <emphasis role="bold">fs mkmount</emphasis> command to mount it. You can
+         then compare its contents to those of the existing volume, to see which to retain permanently.</para>
+ 
+         <para>If the file includes entries for volumes that have no dumps recorded in the Backup Database, the Backup System cannot
+         restore them. It generates an error message on the standard error stream for each one.</para>
+ 
+         <para>One way to generate a file to use as input to the <emphasis role="bold">-file</emphasis> argument is to issue the
+         command with the <emphasis role="bold">-name</emphasis> and <emphasis role="bold">-n</emphasis> options and direct the
+         output to a file. The output includes a line like the following for each volume (shown here on two lines only for legibility
+         reasons); the value comes from the source indicated in the following list:</para>
+ 
+         <programlisting>
+    machine   partition   volume_dumped  # as   volume_restored;    \
+          tape_name   (tape_ID);   pos   position_number;   date
+ </programlisting>
+ 
+         <para>where <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">machine</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the file server machine that currently houses the volume, as listed in the VLDB.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">partition</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the partition that currently houses the volume, as listed in the VLDB.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume_dumped</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the version (read/write or backup) of the volume that was dumped, as listed in the Backup
+                 Database.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume_restored</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name under which the Backup System restores the volume when the <emphasis
+                 role="bold">-n</emphasis> flag is not included. If you include the <emphasis role="bold">-extension</emphasis>
+                 argument with the <emphasis role="bold">-name</emphasis> and <emphasis role="bold">-n</emphasis> options, then the
+                 extension appears on the name in this field (as in <computeroutput>user.pat.rst</computeroutput>, for
+                 example).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">tape_name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the tape containing the dump of the volume, from the Backup Database. If the tape has a permanent name,
+                 it appears here; otherwise, it is the AFS tape name.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">tape_ID</emphasis></term>
+ 
+               <listitem>
+                 <para>The tape ID of the tape containing the dump of the volume, from the Backup Database.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">position_number</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the dump's position on the tape (for example, <computeroutput>31</computeroutput> indicates that 30
+                 volume dumps precede the current one on the tape). If the dump was written to a backup data file, this number is the
+                 ordinal of the 16 KB-offset at which the volume's data begins.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">date</emphasis></term>
+ 
+               <listitem>
+                 <para>The date and time when the volume was dumped.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+ 
+         <para>To make the entries suitable for use with the <emphasis role="bold">-file</emphasis> argument, edit them as indicated:
+         <itemizedlist>
+             <listitem>
+               <para>The Backup System uses only the first three fields on each line of the input file, and so ignores all the fields
+               after the number sign (<computeroutput>#</computeroutput>). You can remove them if it makes it easier for you to read
+               the file, but that is not necessary.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The volume_dumped (third) field of each line in the output file becomes the volume field in the input file. The
+               Backup System restores data to read/write volumes only, so remove the <computeroutput>.backup</computeroutput> or
+               <computeroutput>.readonly</computeroutput> extension if it appears on the name in the volume_dumped field.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The output file includes a line for every dump operation in which a specific volume was included (the full dump
+               and any incremental dumps), but the Backup System only processes the first line in the input file that mentions a
+               specific volume. You can remove the repeated lines if it makes the file easier for you to read.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis>machine</emphasis> and <emphasis>partition</emphasis> fields on an output line designate the
+               volume's current site. To move the volume to another location as you restore it, change the values.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <indexterm>
+           <primary>backup commands</primary>
+ 
+           <secondary>volsetrestore</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>backup volsetrestore</secondary>
+         </indexterm>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ315">
+       <title>To restore a group of volumes with the backup volsetrestore command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the Tape Coordinator for the tape device that is to perform the operation is not already running, open a
+           connection to the appropriate Tape Coordinator machine and issue the <emphasis role="bold">butc</emphasis> command, for
+           which complete instructions appear in <link linkend="HDRWQ292">To start a Tape Coordinator process</link>.
+           <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+ 
+           <para>Repeat the command for each Tape Coordinator if you are using more than one tape device.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If using a tape device, insert the tape.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If appropriate, issue the <emphasis role="bold">(backup)
+           addvolset</emphasis> command to create a new volume set expressly for this restore operation. Include the <emphasis
+           role="bold">-temporary</emphasis> flag if you do not need to add the volume set to the Backup Database. Then issue one or
+           more <emphasis role="bold">(backup) addvolentry</emphasis> commands to create volume entries that include only the volumes
+           to be restored. Complete instructions appear in <link linkend="HDRWQ265">Defining and Displaying Volume Sets and Volume
+           Entries</link>. <programlisting>
+    backup&gt; <emphasis role="bold">addvolset</emphasis> &lt;<emphasis>volume set name</emphasis>&gt;  [<emphasis role="bold">-temporary</emphasis>]
+    backup&gt; <emphasis role="bold">addvolentry  -name</emphasis> &lt;<emphasis>volume set name</emphasis>&gt;  \
+                         <emphasis role="bold">-server</emphasis> &lt;<emphasis>machine name</emphasis>&gt;  \
+                         <emphasis role="bold">-partition</emphasis> &lt;<emphasis>partition name</emphasis>&gt;  \
+                         <emphasis role="bold">-volumes</emphasis> &lt;<emphasis>volume name (regular expression)</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup volsetrestore</emphasis> command with the desired arguments. <programlisting>
+    backup&gt; <emphasis role="bold">volsetrestore</emphasis> [<emphasis role="bold">-name</emphasis> &lt;<emphasis>volume set name</emphasis>&gt;]  \
+                  [<emphasis role="bold">-file</emphasis> &lt;<emphasis>file name</emphasis>&gt;]  \
+                  [<emphasis role="bold">-portoffset</emphasis> &lt;<emphasis>TC port offset</emphasis>&gt;+]  \
+                  [<emphasis role="bold">-extension</emphasis> &lt;<emphasis>new volume name extension</emphasis>&gt;] [<emphasis
+                 role="bold">-n</emphasis>] 
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a volume set to restore. The Backup System restores all of the volumes listed in the VLDB that match
+                   the volume set's volume entries, as described in <link linkend="HDRWQ313">Restoring a Volume Set with the -name
+                   Argument</link>. Provide this argument or the <emphasis role="bold">-file</emphasis> argument, but not
+                   both.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the full pathname of a file that lists one or more volumes and the site (file server machine and
+                   partition) to which to restore each. The input file has the format described in <link linkend="HDRWQ314">Restoring
+                   Volumes Listed in a File with the -file Argument</link>. Use either this argument or the <emphasis
+                   role="bold">-name</emphasis> argument, but not both.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-portoffset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more port offset numbers, each corresponding to a Tape Coordinator to use in the operation.
+                   If there is more than one value, the Backup System uses the first one when restoring the full dump of each volume,
+                   the second one when restoring the level 1 incremental dump of each volume, and so on. It uses the final value in
+                   the list when restoring dumps at the corresponding depth in the dump hierarchy and all dumps at lower
+                   levels.</para>
+ 
+                   <para>Provide this argument unless the default value of 0 (zero) is appropriate for all dumps. If 0 is just one of
+                   the values in the list, provide it explicitly in the appropriate order.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-extension</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates a new volume for each volume being restored, to house the restored data, appending the specified
+                   string to the volume's read/write base name as listed in the VLDB. Any string other than <emphasis
+                   role="bold">.readonly</emphasis> or <emphasis role="bold">.backup</emphasis> is acceptable, but the combination of
+                   the base name and extension cannot exceed 22 characters in length. To use a period to separate the extension from
+                   the name, specify it as the first character of the string (as in <emphasis role="bold">.rst</emphasis>, for
+                   example).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-n</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays a list of the volumes to be restored when the flag is not included, without actually restoring
+                   them. The <emphasis role="bold">Output</emphasis> section of this reference page details the format of the output.
+                   When combined with the <emphasis role="bold">-name</emphasis> argument, its output is easily edited for use as
+                   input to the <emphasis role="bold">-file</emphasis> argument on a subsequent <emphasis role="bold">backup
+                   volsetrestore</emphasis> command.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you did not include the <emphasis role="bold">-noautoquery</emphasis> flag when you issued the <emphasis
+           role="bold">butc</emphasis> command, or the device's <emphasis role="bold">CFG_</emphasis>device_name configuration file
+           includes the instruction <emphasis role="bold">AUTOQUERY YES</emphasis>, then the Tape Coordinator prompts you to place
+           the tape in the device's drive. You have already done so, but you must now press &lt;<emphasis
+           role="bold">Return</emphasis>&gt; to indicate that the tape is ready for labeling.</para>
+ 
+           <para>If more than one tape is required, you must either include the <emphasis role="bold">MOUNT</emphasis> instruction in
+           the <emphasis role="bold">CFG_</emphasis>device_name file and stock the corresponding stacker or jukebox with tapes, or
+           remain at the console to respond to the Tape Coordinator's prompts for subsequent tapes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>After the restore operation completes, review the Backup System's log files to check for errors. Use the <emphasis
+           role="bold">bos getlog</emphasis> command as instructed in <link linkend="HDRWQ173">Displaying Server Process Log
+           Files</link> to read the <emphasis role="bold">/usr/afs/logs/BackupLog</emphasis> file, and a text editor on the Tape
+           Coordinator machine to read the <emphasis role="bold">TE_</emphasis>device_name and <emphasis
+           role="bold">TL_</emphasis>device_name files in the local <emphasis role="bold">/usr/afs/backup</emphasis>
+           directory.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>administering</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ316">
+     <title>Maintaining the Backup Database</title>
+ 
+     <para>The Backup Database stores all of the configuration and tracking information that the Backup System uses when dumping and
+     restoring data. If a hardware failure or other problem on a database server machine corrupts or damages the database, it is
+     relatively easy to recreate the configuration information (the dump hierarchy and lists of volume sets and Tape Coordinator port
+     offset numbers). However, restoring the dump tracking information (dump records) is more complicated and time-consuming. To
+     protect yourself against loss of data, back up the Backup Database itself to tape on a regular schedule.</para>
+ 
+     <para>Another potential concern is that the Backup Database can grow large rather quickly, because the Backup System keeps very
+     detailed and cross-referenced records of dump operations. Backup operations become less efficient if the Backup Server has to
+     navigate through a large number of obsolete records to find the data it needs. To keep the database to a manageable size, use
+     the <emphasis role="bold">backup deletedump</emphasis> command to delete obsolete records, as described in <link
+     linkend="HDRWQ321">Removing Obsolete Records from the Backup Database</link>. If you later find that you have removed records
+     that you still need, you can use the <emphasis role="bold">backup scantape</emphasis> command to read the information from the
+     dump and tape labels on the corresponding tapes back into the database, as instructed in <link linkend="HDRWQ305">To scan the
+     contents of a tape</link>.</para>
+ 
+     <indexterm>
+       <primary>Backup Database</primary>
+ 
+       <secondary>restoring</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup Database</primary>
+ 
+       <secondary>backing up</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>dumping</primary>
+ 
+       <secondary>Backup Database to tape</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backing up</primary>
+ 
+       <secondary>Backup Database to tape</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>restoring</primary>
+ 
+       <secondary>Backup Database from tape</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ317">
+       <title>Backing Up and Restoring the Backup Database</title>
+ 
+       <para>Because of the importance of the information in the Backup Database, it is best to back it up to tape or other permanent
+       media on a regular basis. As for the other AFS, administrative databases, the recommended method is to use a utility designed
+       to back up a machine's local disk, such as the UNIX <emphasis role="bold">tar</emphasis> command. For instructions, see <link
+       linkend="HDRWQ107">Backing Up and Restoring the Administrative Databases</link>.</para>
+ 
+       <para>In the rare event that the Backup Database seems damaged or corrupted, you can use the <emphasis role="bold">backup
+       dbverify</emphasis> command to check its status. If it is corrupted, use the <emphasis role="bold">backup savedb</emphasis>
+       command to repair some types of damage. Then use the <emphasis role="bold">backup restoredb</emphasis> to return the corrected
+       database to the local disks of the database server machines. For instructions, see <link linkend="HDRWQ318">Checking for and
+       Repairing Corruption in the Backup Database</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ318">
+       <title>Checking for and Repairing Corruption in the Backup Database</title>
+ 
+       <para>In rare cases, the Backup Database can become damaged or corrupted, perhaps because of disk or other hardware errors.
+       Use the <emphasis role="bold">backup dbverify</emphasis> command to check the integrity of the database. If it is corrupted,
+       the most efficient way to repair it is to use the <emphasis role="bold">backup savedb</emphasis> command to copy the database
+       to tape. The command automatically repairs several types of corruption, and you can then use the <emphasis role="bold">backup
+       restoredb</emphasis> command to transfer the repaired copy of the database back to the local disks of the database server
+       machines.</para>
+ 
+       <para>The <emphasis role="bold">backup savedb</emphasis> command also removes <emphasis>orphan blocks</emphasis>, which are
+       ranges of memory that the Backup Server preallocated in the database but cannot use. Orphan blocks do not interfere with
+       database access, but do waste disk space. The <emphasis role="bold">backup dbverify</emphasis> command reports the existence
+       of orphan blocks if you include the <emphasis role="bold">-detail</emphasis> flag.</para>
+ 
+       <indexterm>
+         <primary>Backup Database</primary>
+ 
+         <secondary>verifying integrity</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>dbverify</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup dbverify</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ319">
+       <title>To verify the integrity of the Backup Database</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup dbverify</emphasis> command to check the integrity of the Backup Database.
+           <programlisting>
+    % <emphasis role="bold">backup dbverify</emphasis> [<emphasis role="bold">-detail</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">db</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">dbverify</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-detail</emphasis></term>
+ 
+                 <listitem>
+                   <para>Reports the existence of orphan blocks and other information about the database, as described on the
+                   <emphasis role="bold">backup dbverify</emphasis> reference page in the <emphasis>OpenAFS Administration
+                   Reference</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <para>The output reports one of the following messages: <itemizedlist>
+               <listitem>
+                 <para><computeroutput>Database OK</computeroutput> indicates that the Backup Database is undamaged.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><computeroutput>Database not OK</computeroutput> indicates that the Backup Database is damaged. To recover
+                 from the problem, use the instructions in <link linkend="HDRWQ320">To repair corruption in the Backup
+                 Database</link>.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup savedb</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>savedb</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ320">
+       <title>To repair corruption in the Backup Database</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Log in as the local superuser <emphasis role="bold">root</emphasis> on each database server machine in the
+           cell.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LISAVEDB-STARTTC" />If the Tape Coordinator for the tape device that is to perform the operation is not
+           already running, open a connection to the appropriate Tape Coordinator machine and issue the <emphasis
+           role="bold">butc</emphasis> command, for which complete instructions appear in <link linkend="HDRWQ292">To start a Tape
+           Coordinator process</link>. <programlisting>
+    % <emphasis role="bold">butc</emphasis> [&lt;<emphasis>port offset</emphasis>&gt;] [<emphasis role="bold">-noautoquery</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If writing to tape, place a tape in the appropriate device.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Working on one of the machines, issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode.
+           <programlisting>
+    # <emphasis role="bold">backup -localauth</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">-localauth</emphasis> constructs a server ticket from the local <emphasis
+           role="bold">/usr/afs/etc/KeyFile</emphasis> file. This flag enables you to issue a privileged command while logged in as
+           the local superuser <emphasis role="bold">root</emphasis> but without AFS administrative tokens.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that no backup operations are actively running. If necessary, issue the <emphasis role="bold">(backup)
+           status</emphasis> command as described in <link linkend="HDRWQ295">To check the status of a Tape Coordinator
+           process</link>. Repeat for each Tape Coordinator port offset in turn. <programlisting>
+    backup&gt; <emphasis role="bold">status -portoffset</emphasis> &lt;<emphasis>TC port offset</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LISAVEDB-CMD" />Issue the <emphasis role="bold">(backup) savedb</emphasis> command to repair corruption
+           in the database as it is written to tape or a file. <programlisting>
+    backup&gt; <emphasis role="bold">savedb</emphasis> [<emphasis role="bold">-portoffset</emphasis> &lt;<emphasis>TC port offset</emphasis>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sa</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">savedb</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-portoffset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the port offset number of the Tape Coordinator handling the tape or backup data file for this
+                   operation. You must provide this argument unless the default value of 0 (zero) is appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Exit interactive mode. <programlisting>
+    backup&gt;  <emphasis role="bold">quit</emphasis>  
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On each machine in turn, issue the <emphasis role="bold">bos shutdown</emphasis> command to shut down the Backup
+           Server process. Include the <emphasis role="bold">-localauth</emphasis> flag because you are logged in as the local
+           superuser root, but do not necessarily have administrative tokens. For complete command syntax, see <link
+           linkend="HDRWQ168">To stop processes temporarily</link>. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/bos shutdown</emphasis> &lt;<emphasis>machine name</emphasis>&gt; <emphasis role="bold">buserver  -localauth  -wait</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On each machine in turn, issue the following commands to remove the Backup Database. <programlisting>
+    # <emphasis role="bold">cd /usr/afs/db</emphasis>
+    # <emphasis role="bold">rm bdb.DB0</emphasis>
+    # <emphasis role="bold">rm bdb.DBSYS1</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On each machine in turn, starting with the machine with the lowest IP address, issue the <emphasis role="bold">bos
+           start</emphasis> command to restart the Backup Server process, which creates a zero-length copy of the Backup Database as
+           it starts. For complete command syntax, see <link linkend="HDRWQ166">To start processes by changing their status flags to
+           Run</link>. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/bos start</emphasis> &lt;<emphasis>machine name</emphasis>&gt; <emphasis role="bold">buserver  -localauth</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Working on one of the machines, issue the <emphasis role="bold">backup</emphasis> command to enter interactive mode.
+           <programlisting>
+    # <emphasis role="bold">backup -localauth</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">-localauth</emphasis> constructs a server ticket from the local <emphasis
+           role="bold">/usr/afs/etc/KeyFile</emphasis> file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) addhost</emphasis> command to create an entry in the new, empty database
+           for the Tape Coordinator process handling the tape or file from which you are reading the repaired copy of the database
+           (presumably the process you started in Step <link linkend="LISAVEDB-STARTTC">2</link> and which performed the <emphasis
+           role="bold">backup savedb</emphasis> operation in Step <link linkend="LISAVEDB-CMD">6</link>). For complete syntax, see
+           Step <link linkend="LICONFTC-ADDHOST">8</link> in <link linkend="HDRWQ262">To configure a Tape Coordinator machine</link>.
+           <programlisting>
+    backup&gt;  <emphasis role="bold">addhost</emphasis> &lt;<emphasis>tape machine name</emphasis>&gt; [&lt;<emphasis>TC port offset</emphasis>&gt;]
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>backup restoredb</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>backup commands</primary>
+ 
+             <secondary>restoredb</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(backup) restoredb</emphasis> command to copy the repaired database to the database
+           server machines. <programlisting>
+    backup&gt; <emphasis role="bold">restoredb</emphasis>  [<emphasis role="bold">-portoffset</emphasis> &lt;<emphasis>TC port offset</emphasis>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restoredb</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-portoffset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the port offset number of the Tape Coordinator handling the tape or backup data file for this
+                   operation. You must provide this argument unless the default value of <emphasis role="bold">0</emphasis> (zero) is
+                   appropriate.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Exit interactive mode if you do not plan to issue any additional
+           <emphasis role="bold">backup</emphasis> commands. <programlisting>
+    backup&gt; <emphasis role="bold">quit</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If desired, enter <emphasis role="bold">Ctrl-d</emphasis> or another
+           interrupt signal to exit the <emphasis role="bold">root</emphasis> shell on each database server machine. You can also
+           issue the <emphasis role="bold">Ctrl-c</emphasis> signal on the Tape Coordinator machine to stop the process.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>dump set (Backup System)</primary>
+ 
+         <secondary>deleting from Backup Database</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Backup System</primary>
+ 
+         <secondary>dump records</secondary>
+ 
+         <tertiary>deleting</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ321">
+       <title>Removing Obsolete Records from the Backup Database</title>
+ 
+       <para>Whenever you recycle or relabel a tape using the <emphasis role="bold">backup dump</emphasis> or <emphasis
+       role="bold">backup labeltape</emphasis> command, the Backup System automatically removes all of the dump records for the dumps
+       contained on the tape and all other tapes in the dump set. However, obsolete records can still accumulate in the Backup
+       Database over time. For example, when you discard a backup tape after using it the maximum number of times recommended by the
+       manufacturer, the records for dumps on it remain in the database. Similarly, the Backup System does not automatically remove a
+       dump's record when the dump reaches its expiration date, but only if you then recycle or relabel the tape that contains the
+       dump. Finally, if a backup operation halts in the middle, the records for any volumes successfully written to tape before the
+       halt remain in the database.</para>
+ 
+       <para>A very large Backup Database can make backup operations less efficient because the Backup Server has to navigate through
+       a large number of records to find the ones it needs. To remove obsolete records, use the <emphasis role="bold">backup
+       deletedump</emphasis> command. Either identify individual dumps by dump ID number, or specify the removal of all dumps created
+       during a certain time period. Keep in mind that you cannot remove the record of an appended dump except by removing the record
+       of its initial dump, which removes the records of all associated appended dumps. Removing records of a dump makes it
+       impossible to restore data from the corresponding tapes or from any dump that refers to the deleted dump as its parent,
+       directly or indirectly. That is, restore operations must begin with the full dump and continue with each incremental dump in
+       order. If you have removed the records for a specific dump, you cannot restore any data from later incremental dumps.</para>
+ 
+       <para>Another way to truncate the Backup Database is to include the <emphasis role="bold">-archive</emphasis> argument to the
+       <emphasis role="bold">backup savedb</emphasis> command. After a copy of the database is written to tape or to a backup data
+       file, the Backup Server deletes the dump records for all dump operations with timestamps prior to the date and time you
+       specify. However, issuing the <emphasis role="bold">backup deletedump</emphasis> command with only the <emphasis
+       role="bold">-to</emphasis> argument is equivalent in effect and is simpler because it does not require starting a Tape
+       Coordinator process as the <emphasis role="bold">backup savedb</emphasis> command does. For further information on the
+       <emphasis role="bold">-archive</emphasis> argument to the <emphasis role="bold">backup savedb</emphasis> command, see the
+       command's reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+       <para>If you later need to access deleted dump records, and the corresponding tapes still exist, you can use the <emphasis
+       role="bold">-dbadd</emphasis> argument to the <emphasis role="bold">backup scantape</emphasis> command to scan their contents
+       into the database, as instructed in <link linkend="HDRWQ305">To scan the contents of a tape</link>.</para>
+ 
+       <indexterm>
+         <primary>backup commands</primary>
+ 
+         <secondary>deletedump</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>backup deletedump</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ322">
+       <title>To delete dump records from the Backup Database</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<emphasis>machine name</emphasis>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">backup</emphasis> command to enter
+           interactive mode, if you want to delete multiple records or issue additional commands. The interactive prompt appears in
+           the following step. <programlisting>
+    % <emphasis role="bold">backup</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">backup dumpinfo</emphasis> command to
+           list information from the Backup Database that can help you decide which records to delete. For detailed instructions, see
+           <link linkend="HDRWQ303">To display dump records</link>. <programlisting>
+    backup&gt; <emphasis role="bold">dumpinfo</emphasis> [&lt;<emphasis>no. of dumps</emphasis>&gt;]  [<emphasis role="bold">-id</emphasis> &lt;<emphasis>dump id</emphasis>&gt;]  [<emphasis
+                 role="bold">-verbose</emphasis>]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">backup deletedump</emphasis> command to delete one or more dump sets.
+           <programlisting>
+    backup&gt; <emphasis role="bold">deletedump</emphasis> [<emphasis role="bold">-dumpid</emphasis> &lt;<emphasis>dumpid</emphasis>&gt;+] [<emphasis
+                 role="bold">-from</emphasis> &lt;<emphasis>date time</emphasis>&gt;]  \
+                       [<emphasis role="bold">-to</emphasis> &lt;<emphasis>date time</emphasis>&gt;] 
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">dele</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">deletedump</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dumpid</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the dump ID of each initial dump to delete from the Backup Database. The records for all
+                   associated appended dumps are also deleted. Provide either this argument or the <emphasis
+                   role="bold">-to</emphasis> (and optionally, <emphasis role="bold">-from</emphasis>) argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-from</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the beginning of a range of dates; the record for any dump created during the indicated period of
+                   time is deleted.</para>
+ 
+                   <para>To omit all records before the time indicated with the <emphasis role="bold">-to</emphasis> argument, omit
+                   this argument. Otherwise provide a value in the following format</para>
+ 
+                   <para>mm/dd/yyyy [hh:MM]</para>
+ 
+                   <para>where the month (mm), day (dd), and year (yyyy) are required. You can omit the hour and minutes (hh:MM) to
+                   indicate the default of midnight (00:00 hours). If you provide them, use 24-hour format (for example, the value
+                   <emphasis role="bold">14:36</emphasis> represents 2:36 p.m.).</para>
+ 
+                   <para>You must provide the <emphasis role="bold">-to</emphasis> argument along with this one.</para>
+ 
+                   <note>
+                     <para>A plus sign follows this argument in the command's syntax statement because it accepts a multiword value
+                     which does not need to be enclosed in double quotes or other delimiters, not because it accepts multiple dates.
+                     Provide only one date (and optionally, time) definition.</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-to</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the end of a range of dates; the record of any dump created during the range is deleted from the
+                   Backup Database.</para>
+ 
+                   <para>To delete all records created after the date you specify with the <emphasis role="bold">-from</emphasis>
+                   argument, specify the value <emphasis role="bold">NOW</emphasis>. To delete every dump record in the Backup
+                   Database, provide the value <emphasis role="bold">NOW</emphasis> and omit the <emphasis
+                   role="bold">-from</emphasis> argument. Otherwise, provide a date value in the same format as described for the
+                   <emphasis role="bold">-from</emphasis> argument. Valid values for the year (yyyy) range from <emphasis
+                   role="bold">1970</emphasis> to <emphasis role="bold">2037</emphasis>; higher values are not valid because the
+                   latest possible date in the standard UNIX representation is in early 2038. The command interpreter automatically
+                   reduces any later date to the maximum value in 2038.</para>
+ 
+                   <para>If you omit the time portion (hh:MM), it defaults to 59 seconds after midnight (00:00:59 hours). Similarly,
+                   the <emphasis role="bold">backup</emphasis> command interpreter automatically adds 59 seconds to any time value
+                   you provide. In both cases, adding 59 seconds compensates for how the Backup Database and <emphasis
+                   role="bold">backup dumpinfo</emphasis> command represent dump creation times in hours and minutes only. For
+                   example, the Database records a creation timestamp of <computeroutput>20:55</computeroutput> for any dump
+                   operation that begins between 20:55:00 and 20:55:59. Automatically adding 59 seconds to a time thus includes the
+                   records for all dumps created during that minute.</para>
+ 
+                   <para>Provide either this argument, or the <emphasis role="bold">-dumpid</emphasis> argument. This argument is
+                   required if the <emphasis role="bold">-from</emphasis> argument is provided.</para>
+ 
+                   <note>
+                     <para>A plus sign follows this argument in the command's syntax statement because it accepts a multiword value
+                     which does not need to be enclosed in double quotes or other delimiters, not because it accepts multiple dates.
+                     Provide only one date (and optionally, time) definition.</para>
+                   </note>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd013.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd013.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd013.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,3380 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ323">
+   <title>Monitoring and Auditing AFS Performance</title>
+ 
+   <indexterm>
+     <primary>scout program</primary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>monitoring</primary>
+ 
+     <secondary>file server processes with scout</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>monitoring</primary>
+ 
+     <secondary>file server processes with afsmonitor</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>monitoring</primary>
+ 
+     <secondary>Cache Manager processes with afsmonitor</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>monitoring</primary>
+ 
+     <secondary>Cache Manager performance</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>Cache Manager</primary>
+ 
+     <secondary>monitoring performance</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>client machine</primary>
+ 
+     <secondary>monitoring performance</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>file system</primary>
+ 
+     <secondary>monitoring activity</secondary>
+   </indexterm>
+ 
+   <para>AFS comes with three main monitoring tools: <itemizedlist>
+       <listitem>
+         <para>The <emphasis role="bold">scout</emphasis> program, which monitors and gathers statistics on File Server
+         performance.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The <emphasis role="bold">fstrace</emphasis> command suite, which traces Cache Manager operations in detail.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The <emphasis role="bold">afsmonitor</emphasis> program, which monitors and gathers statistics on both the File Server
+         and the Cache Manager.</para>
+       </listitem>
+     </itemizedlist></para>
+ 
+   <para>AFS also provides a tool for auditing AFS events on file server machines running AIX.</para>
+ 
+   <sect1 id="HDRWQ324">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Initialize the <emphasis role="bold">scout</emphasis> program</entry>
+ 
+             <entry><emphasis role="bold">scout</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display information about a trace log</entry>
+ 
+             <entry><emphasis role="bold">fstrace lslog</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display information about an event set</entry>
+ 
+             <entry><emphasis role="bold">fstrace lsset</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change the size of a trace log</entry>
+ 
+             <entry><emphasis role="bold">fstrace setlog</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set the state of an event set</entry>
+ 
+             <entry><emphasis role="bold">fstrace setset</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Dump contents of a trace log</entry>
+ 
+             <entry><emphasis role="bold">fstrace dump</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Clear a trace log</entry>
+ 
+             <entry><emphasis role="bold">fstrace clear</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Initialize the <emphasis role="bold">afsmonitor</emphasis> program</entry>
+ 
+             <entry><emphasis role="bold">afsmonitor</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ326">
+     <title>Using the scout Program</title>
+ 
+     <indexterm>
+       <primary>scout program</primary>
+ 
+       <secondary>features summarized</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">scout</emphasis> program monitors the status of the File Server process running on file server
+     machines. It periodically collects statistics from a specified set of File Server processes, displays them in a graphical
+     format, and alerts you if any of the statistics exceed a configurable threshold.</para>
+ 
+     <para>More specifically, the <emphasis role="bold">scout</emphasis> program includes the following features. <itemizedlist>
+         <listitem>
+           <para>You can monitor, from a single location, the File Server process on any number of server machines from the local and
+           foreign cells. The number is limited only by the size of the display window, which must be large enough to display the
+           statistics.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can set a threshold for many of the statistics. When the value of a statistic exceeds the threshold, the
+           <emphasis role="bold">scout</emphasis> program highlights it (displays it in reverse video) to draw your attention to it.
+           If the value goes back under the threshold, the highlighting is deactivated. You control the thresholds, so highlighting
+           reflects what you consider to be a noteworthy situation. See <link linkend="HDRWQ332">Highlighting Significant
+           Statistics</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">scout</emphasis> program alerts you to File Server process, machine, and network outages
+           by highlighting the name of each machine that does not respond to its probe, enabling you to respond more quickly.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can set how often the <emphasis role="bold">scout</emphasis> program collects statistics from the File Server
+           processes.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ327">
+       <title>System Requirements</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>requirements</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>requirements</primary>
+ 
+         <secondary>scout program</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>curses graphics utility</primary>
+ 
+         <secondary>scout program requirements</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>setting terminal type</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>terminal type for scout</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>terminal type</primary>
+ 
+         <secondary>setting for scout program</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dumb terminal</primary>
+ 
+         <secondary>use in scout program</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">scout</emphasis> program runs on any AFS client machine that has access to the <emphasis
+       role="bold">curses</emphasis> graphics package, which most UNIX distributions include as a standard utility. It can run on
+       both dumb terminals and under windowing systems that emulate terminals, but the output looks best on machines that support
+       reverse video and cursor addressing. For best results, set the TERM environment variable to the correct terminal type, or one
+       with characteristics similar to the actual ones. For machines running AIX, the recommended TERM setting is <emphasis
+       role="bold">vt100</emphasis>, assuming the terminal is similar to that. For other operating systems, the wider range of
+       acceptable values includes <emphasis role="bold">xterm</emphasis>, <emphasis role="bold">xterms</emphasis>, <emphasis
+       role="bold">vt100</emphasis>, <emphasis role="bold">vt200</emphasis>, and <emphasis role="bold">wyse85</emphasis>.</para>
+ 
+       <indexterm>
+         <primary>privilege</primary>
+ 
+         <secondary>required for scout program</secondary>
+       </indexterm>
+ 
+       <para>No privilege is required to run the <emphasis role="bold">scout</emphasis> program, so any user who can access the
+       directory where its binary resides (the <emphasis role="bold">/usr/afsws/bin</emphasis> directory in the conventional
+       configuration) can use it. The program's probes for collecting statistics do not impose a significant burden on the File
+       Server process, but you can restrict its use by placing the binary file in a directory with a more restrictive access control
+       list (ACL).</para>
+ 
+       <para>Multiple instances of the <emphasis role="bold">scout</emphasis> program can run on a single client machine, each over
+       its own dedicated connection (in its own window). It must run in the foreground, so the window in which it runs does not
+       accept further input except for an interrupt signal.</para>
+ 
+       <para>You can also run the <emphasis role="bold">scout</emphasis> program on several machines and view its output on a single
+       machine, by opening telnet connections to the other machines from the central one and initializing the program in each remote
+       window. In this case, you can include the <emphasis role="bold">-host</emphasis> flag to the <emphasis
+       role="bold">scout</emphasis> command to make the name of each remote machine appear in the <emphasis>banner line</emphasis> at
+       the top of the window displaying its output. See <link linkend="HDRWQ330">The Banner Line</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ328">
+       <title>Using the -basename argument to Specify a Domain Name</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>basename</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>basenames in scout program</primary>
+       </indexterm>
+ 
+       <para>As previously mentioned, the <emphasis role="bold">scout</emphasis> program can monitor the File Server process on any
+       number of file server machines. If all of the machines belong to the same cell, then their hostnames probably all have the
+       same domain name suffix, such as <emphasis role="bold">abc.com</emphasis> in the ABC Corporation cell. In this case, you can
+       use the <emphasis role="bold">-basename</emphasis> argument to the <emphasis role="bold">scout</emphasis> command, which has
+       several advantages: <itemizedlist>
+           <listitem>
+             <para>You can omit the domain name suffix as you enter each file server machine's name on the command line. The
+             <emphasis role="bold">scout</emphasis> program automatically appends the domain name to each machine's name, resulting
+             in a fully-qualified hostname. You can omit the domain name suffix even when you don't include the <emphasis
+             role="bold">-basename</emphasis> argument, but in that case correct resolution of the name depends on the state of your
+             cell's naming service at the time of connection.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The machine names are more likely to fit in the appropriate column of the display without having to be truncated
+             (for more on truncating names in the display column, see <link linkend="HDRWQ331">The Statistics Display
+             Region</link>).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The domain name appears in the banner line at the top of the display window to indicate the name of the cell you
+             are monitoring.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ329">
+       <title>The Layout of the scout Display</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>display layout</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>display layout in scout program window</primary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">scout</emphasis> program can display statistics either in a dedicated window or on a plain
+       screen if a windowing environment is not available. For best results, use a window or screen that can print in reverse video
+       and do cursor addressing.</para>
+ 
+       <para>The <emphasis role="bold">scout</emphasis> program screen has three main regions: the <emphasis>banner line</emphasis>,
+       the <emphasis>statistics display region</emphasis> and the <emphasis>probe/message</emphasis> line. This section describes
+       their contents, and graphic examples appear in <link linkend="HDRWQ336">Example Commands and Displays</link>.</para>
+ 
+       <sect3 id="HDRWQ330">
+         <title>The Banner Line</title>
+ 
+         <indexterm>
+           <primary>scout program</primary>
+ 
+           <secondary>banner line</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>banner line on the scout program screen</primary>
+         </indexterm>
+ 
+         <para>By default, the string <computeroutput>scout</computeroutput> appears in the banner line at the top of the window or
+         screen, to indicate that the <emphasis role="bold">scout</emphasis> program is running. You can display two additional types
+         of information by include the appropriate option on the command line: <itemizedlist>
+             <listitem>
+               <para>Include the <emphasis role="bold">-host</emphasis> flag to display the local machine's name in the banner line.
+               This is particularly useful when you are running the <emphasis role="bold">scout</emphasis> program on several
+               machines but displaying the results on a single machine.</para>
+ 
+               <para>For example, the following banner line appears when you run the <emphasis role="bold">scout</emphasis> program
+               on the machine <emphasis role="bold">client1.abc.com</emphasis> and use the<emphasis role="bold">-host</emphasis>
+               flag:</para>
+ 
+               <programlisting>
+    [client1.abc.com] scout
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Include the <emphasis role="bold">-basename</emphasis> argument to display the specified cell domain name in the
+               banner line. For further discussion, see <link linkend="HDRWQ328">Using the -basename argument to Specify a Domain
+               Name</link>.</para>
+ 
+               <para>For example, if you specify a value of <emphasis role="bold">abc.com</emphasis> for the <emphasis
+               role="bold">-basename</emphasis> argument, the banner line reads:</para>
+ 
+               <programlisting>
+    scout for abc.com
+ </programlisting>
+             </listitem>
+           </itemizedlist></para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ331">
+         <title>The Statistics Display Region</title>
+ 
+         <indexterm>
+           <primary>scout program</primary>
+ 
+           <secondary>statistics displayed</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>statistics display by scout program</primary>
+         </indexterm>
+ 
+         <para>The statistics display region occupies most of the window and is divided into six columns. The following list
+         describes them as they appear from left to right in the window. <variablelist>
+             <varlistentry>
+               <term><computeroutput>Conn</computeroutput></term>
+ 
+               <listitem>
+                 <indexterm>
+                   <primary>Conn statistic from scout program</primary>
+                 </indexterm>
+ 
+                 <para>Displays the number of RPC connections open between the File Server process and client machines. This number
+                 normally equals or exceeds the number in the fourth <computeroutput>Ws</computeroutput> column. It can exceed the
+                 number in that column because each user on the machine can have more than one connection open at once, and one
+                 client machine can handle several users.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><computeroutput>Fetch</computeroutput></term>
+ 
+               <listitem>
+                 <indexterm>
+                   <primary>Fetch statistic from scout program</primary>
+                 </indexterm>
+ 
+                 <para>Displays the number of fetch-type RPCs (fetch data, fetch access list, and fetch status) that the File Server
+                 process has received from client machines since it started. It resets to zero when the File Server process
+                 restarts.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><computeroutput>Store</computeroutput></term>
+ 
+               <listitem>
+                 <indexterm>
+                   <primary>Store statistic from scout program</primary>
+                 </indexterm>
+ 
+                 <para>Displays the number of store-type RPCs (store data, store access list, and store status) that the File Server
+                 process has received from client machines since it started. It resets to zero when the File Server process
+                 restarts.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><computeroutput>Ws</computeroutput></term>
+ 
+               <listitem>
+                 <indexterm>
+                   <primary>active</primary>
+ 
+                   <secondary>clients statistic from scout program</secondary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>client machines statistic from scout program</primary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>Ws statistic from scout program</primary>
+                 </indexterm>
+ 
+                 <para>Displays the number of client machines (workstations) that have communicated with the File Server process
+                 within the last 15 minutes (such machines are termed <emphasis>active</emphasis>). This number is likely to be
+                 smaller than the number in the <computeroutput>Conn</computeroutput>) column because a single client machine can
+                 have several connections open to one File Server process.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">[Unlabeled column]</emphasis></term>
+ 
+               <listitem>
+                 <para>Displays the name of the file server machine on which the File Server process is running. It is 12 characters
+                 wide. Longer names are truncated and an asterisk (<computeroutput>*</computeroutput>) appears as the last character
+                 in the name. If all machines have the same domain name suffix, you can use the <emphasis
+                 role="bold">-basename</emphasis> argument to decrease the need for truncation; see <link linkend="HDRWQ328">Using
+                 the -basename argument to Specify a Domain Name</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><computeroutput>Disk attn</computeroutput></term>
+ 
+               <listitem>
+                 <indexterm>
+                   <primary>disk partition</primary>
+ 
+                   <secondary>monitoring usage of</secondary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>monitoring</primary>
+ 
+                   <secondary>disk usage with scout program</secondary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>scout program</primary>
+ 
+                   <secondary>monitoring disk usage</secondary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>Disk attn statistic from scout program</primary>
+                 </indexterm>
+ 
+                 <para>Displays the number of kilobyte blocks available on up to 26 of the file server machine's AFS server
+                 (<emphasis role="bold">/vicep</emphasis>) partitions. The display for each partition has the following format:
+                 <programlisting>
+    partition_letter:free_blocks
+ </programlisting></para>
+ 
+                 <para>For example, <computeroutput>a:8949</computeroutput> indicates that partition <emphasis
+                 role="bold">/vicepa</emphasis> has 8,949 KB free. If the window is not wide enough for all partition entries to
+                 appear on a single line, the <emphasis role="bold">scout</emphasis> program automatically stacks the partition
+                 entries into subcolumns within the sixth column.</para>
+ 
+                 <para>The label on the <computeroutput>Disk attn</computeroutput> column indicates the threshold value at which
+                 entries in the column become highlighted. By default, the <emphasis role="bold">scout</emphasis> program highlights
+                 a partition that is over 95% full, in which case the label is as follows:</para>
+ 
+                 <programlisting>
+    Disk attn: &gt; 95% used
+ </programlisting>
+ 
+                 <para>For more on this threshold and its effect on highlighting, see <link linkend="HDRWQ332">Highlighting
+                 Significant Statistics</link>.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+ 
+         <para>For all columns except the fifth (file server machine name), you can use the <emphasis
+         role="bold">-attention</emphasis> argument to set a threshold value above which the <emphasis role="bold">scout</emphasis>
+         program highlights the statistic. By default, only values in the fifth and sixth columns ever become highlighted. For
+         instructions on using the <emphasis role="bold">-attention</emphasis> argument, see <link linkend="HDRWQ332">Highlighting
+         Significant Statistics</link>.</para>
+       </sect3>
+ 
+       <sect3 id="Header_368">
+         <title>The Probe Reporting Line</title>
+ 
+         <indexterm>
+           <primary>scout program</primary>
+ 
+           <secondary>probe reporting line</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>message line in scout program display</primary>
+         </indexterm>
+ 
+         <para>The bottom line of the display indicates how many times the <emphasis role="bold">scout</emphasis> program has probed
+         the File Server processes for statistics. The statistics gathered in the latest probe appear in the statistics display
+         region. By default, the <emphasis role="bold">scout</emphasis> program probes the File Servers every 60 seconds, but you can
+         use the <emphasis role="bold">-frequency</emphasis> argument to specify a different probe frequency.</para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ332">
+       <title>Highlighting Significant Statistics</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>highlighting in</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>highlighting statistics in scout display</primary>
+ 
+         <secondary>use of reverse video</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>reverse video</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>reverse video</primary>
+ 
+         <secondary>use in scout program display</secondary>
+       </indexterm>
+ 
+       <para>To draw your attention to a statistic that currently exceed a threshold value, the <emphasis
+       role="bold">scout</emphasis> program displays it in reverse video (highlights it). You can set the threshold value for most
+       statistics, and so determine which values are worthy of special attention and which are normal.</para>
+ 
+       <sect3 id="HDRWQ333">
+         <title>Highlighting Server Outages</title>
+ 
+         <indexterm>
+           <primary>outages</primary>
+ 
+           <secondary>monitoring with scout program</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>scout program</primary>
+ 
+           <secondary>outages, monitoring</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>monitoring</primary>
+ 
+           <secondary>outages with scout program</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>File Server</primary>
+ 
+           <secondary>monitoring with scout program</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>file server machine</primary>
+ 
+           <secondary>monitoring outages of</secondary>
+         </indexterm>
+ 
+         <para>The only column in which you cannot control highlighting is the fifth, which identifies the file server machine for
+         which statistics are displayed in the other columns. The <emphasis role="bold">scout</emphasis> program uses highlighting in
+         this column to indicate that the File Server process on a machine fails to respond to its probe, and automatically blanks
+         out the other columns. Failure to respond to the probe can indicate a File Server process, file server machine, or network
+         outage, so the highlighting draws your attention to a situation that is probably interrupting service to users.</para>
+ 
+         <para>When the File Server process once again responds to the probes, its name appears normally and statistics reappear in
+         the other columns. If all machine names become highlighted at once, a possible network outage has disrupted the connection
+         between the file server machines and the client machine running the <emphasis role="bold">scout</emphasis> program.</para>
+       </sect3>
+ 
+       <sect3 id="Header_371">
+         <title>Highlighting for Extreme Statistic Values</title>
+ 
+         <para>To set the threshold value for one or more of the five statistics-displaying columns, use the <emphasis
+         role="bold">-attention</emphasis> argument. The threshold value applies to all File Server processes you are monitoring (you
+         cannot set different thresholds for different machines). For details, see the syntax description in <link
+         linkend="HDRWQ335">To start the scout program</link>.</para>
+ 
+         <para>It is not possible to change the threshold values for a running <emphasis role="bold">scout</emphasis> program. Stop
+         the current program and start a new one. Also, the <emphasis role="bold">scout</emphasis> program does not retain threshold
+         values across restarts, so you must specify all thresholds every time you start the program.</para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ334">
+       <title>Resizing the scout Display</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>display, resizing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>window</primary>
+ 
+         <secondary>resizing scout display</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>resizing</primary>
+ 
+         <secondary>scout display</secondary>
+       </indexterm>
+ 
+       <para>Do not resize the display window while the <emphasis role="bold">scout</emphasis> program is running. Increasing the
+       size does no harm, but the <emphasis role="bold">scout</emphasis> program does not necessarily adjust to the new dimensions.
+       Decreasing the display's width can disturb column alignment, making the display harder to read. With any type of resizing, the
+       <emphasis role="bold">scout</emphasis> program does not adjust the display in any way until it displays the results of the
+       next probe.</para>
+ 
+       <para>To resize the display effectively, stop the <emphasis role="bold">scout</emphasis> program, resize the window and then
+       restart the program. Even in this case, the <emphasis role="bold">scout</emphasis> program's response depends on the accuracy
+       of the information it receives from the display environment. Testing during development has shown that the display environment
+       does not reliably provide information about window resizing. If you use the X windowing system, issuing the following sequence
+       of commands before starting the <emphasis role="bold">scout</emphasis> program (or placing them in the shell initialization
+       file) sometimes makes it adjust properly to resizing.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">set noglob</emphasis>
+    % <emphasis role="bold">eval '/usr/bin/X11/resize'</emphasis> 
+    % <emphasis role="bold">unset noglob</emphasis>
+ </programlisting>
+ 
+       <indexterm>
+         <primary>starting</primary>
+ 
+         <secondary>scout program</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>starting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>initializing</primary>
+ 
+         <secondary>scout program</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>command syntax</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>scout</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ335">
+       <title>To start the scout program</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Open a dedicated command shell. If necessary, adjust it to the appropriate size.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">scout</emphasis> command to start the program. <programlisting>
+    % <emphasis role="bold">scout</emphasis>  [<emphasis role="bold">initcmd</emphasis>]  <emphasis role="bold">-server</emphasis> &lt;<replaceable>FileServer name(s) to monitor</replaceable>&gt;+  \
+             [<emphasis role="bold">-basename</emphasis> &lt;<replaceable>base server name</replaceable>&gt;]  \
+             [<emphasis role="bold">-frequency</emphasis> &lt;<replaceable>poll frequency, in seconds</replaceable>&gt;] [<emphasis
+                 role="bold">-host</emphasis>]  \
+             [<emphasis role="bold">-attention</emphasis> &lt;<replaceable>specify attention (highlighting) level</replaceable>&gt;+]  \
+             [<emphasis role="bold">-debug</emphasis> &lt;<replaceable>turn debugging output on to the named file</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">initcmd</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an optional string that accommodates the command's use of the AFS command parser. It can be omitted and
+                   ignored.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Identifies each File Server process to monitor, by naming the file server machine it is running on. Provide
+                   fully-qualified hostnames unless the <emphasis role="bold">-basename</emphasis> argument is used. In that case,
+                   specify only the initial part of each machine name, omitting the domain name suffix common to all the machine
+                   names.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-basename</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the domain name suffix common to all of the file server machines named by the <emphasis
+                   role="bold">-server</emphasis> argument. For discussion of this argument's effects, see <link
+                   linkend="HDRWQ328">Using the -basename argument to Specify a Domain Name</link>.</para>
+ 
+                   <para>Do not include the period that separates the domain suffix from the initial part of the machine name, but do
+                   include any periods that occur within the suffix itself. (For example, in the ABC Corporation cell, the proper
+                   value is <emphasis role="bold">abc.com</emphasis>, not <emphasis role="bold">.abc.com</emphasis>.)</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-frequency</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the frequency, in seconds, of the <emphasis role="bold">scout</emphasis> program's probes to File
+                   Server processes. Specify an integer greater than 0 (zero). The default is 60 seconds.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-host</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the name of the machine that is running the <emphasis role="bold">scout</emphasis> program in the
+                   display window's banner line. By default, no machine name is displayed.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-attention</emphasis></term>
+ 
+                 <listitem>
+                   <para>Defines the threshold value at which to highlight one or more statistics. You can provide the pairs of
+                   statistic and threshold in any order, separating each pair and the parts of each pair with one or more spaces. The
+                   following list defines the syntax for each statistic.<variablelist>
+                       <indexterm>
+                         <primary>scout program</primary>
+ 
+                         <secondary>attention levels, setting</secondary>
+                       </indexterm>
+ 
+                       <indexterm>
+                         <primary>highlighting statistics in scout display</primary>
+ 
+                         <secondary>setting thresholds</secondary>
+                       </indexterm>
+ 
+                       <indexterm>
+                         <primary>thresholds for statistics in scout display</primary>
+ 
+                         <secondary>setting</secondary>
+                       </indexterm>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">conn connections</emphasis></term>
+ 
+                         <listitem>
+                           <para>Highlights the value in the <computeroutput>Conn</computeroutput> (first) column when the number of
+                           connections that the File Server has open to client machines exceeds the connections value. The
+                           highlighting deactivates when the value goes back below the threshold. There is no default
+                           threshold.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">fetch fetch_RPCs</emphasis></term>
+ 
+                         <listitem>
+                           <para>Highlights the value in the <computeroutput>Fetch</computeroutput> (second) column when the number
+                           of fetch RPCs that clients have made to the File Server process exceeds the fetch_RPCs value. The
+                           highlighting deactivates only when the File Server process restarts, at which time the value returns to
+                           zero. There is no default threshold.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">store store_RPCs</emphasis></term>
+ 
+                         <listitem>
+                           <para>Highlights the value in the <computeroutput>Store</computeroutput> (third) column when the number of
+                           store RPCs that clients have made to the File Server process exceeds the store_RPCs value. The
+                           highlighting deactivates only when the File Server process restarts, at which time the value returns to
+                           zero. There is no default threshold.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">ws active_clients</emphasis></term>
+ 
+                         <listitem>
+                           <para>Highlights the value in the <computeroutput>Ws</computeroutput> (fourth) column when the number of
+                           active client machines (those that have contacted the File Server in the last 15 minutes) exceeds the
+                           active_clients value. The highlighting deactivates when the value goes back below the threshold. There is
+                           no default threshold.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">disk percent_full % or disk min_blocks</emphasis></term>
+ 
+                         <listitem>
+                           <para>Highlights the value for a partition in the <computeroutput>Disk attn</computeroutput> (sixth)
+                           column when either the amount of disk space used exceeds the percentage indicated by thepercent_full
+                           value, or the number of free KB blocks is less than the min_blocks value. The highlighting deactivates
+                           when the value goes back below the percent_full threshold or above the min_blocks threshold.</para>
+ 
+                           <para>The value you specify appears in the header of the sixth column following the string
+                           <computeroutput>Disk attn</computeroutput>. The default threshold is 95% full.</para>
+ 
+                           <para>Acceptable values for percent_full are the integers from the range <emphasis
+                           role="bold">0</emphasis> (zero) to <emphasis role="bold">99</emphasis>, and you must include the percent
+                           sign to distinguish this statistic from a min_blocks value..</para>
+                         </listitem>
+                       </varlistentry>
+                     </variablelist></para>
+ 
+                   <para>The following example sets the threshold for the <computeroutput>Conn</computeroutput> column to 100, for
+                   the <computeroutput>Ws</computeroutput> column to 50, and for the <computeroutput>Disk attn</computeroutput>
+                   column to 75%. There is no threshold for the <computeroutput>Fetch</computeroutput> and
+                   <computeroutput>Store</computeroutput> columns.</para>
+ 
+                   <para><emphasis role="bold">-attention conn 100 ws 50 disk 75%</emphasis></para>
+ 
+                   <para>The following example has the same affect as the previous one except that it sets the threshold for the Disk
+                   attn column to 5000 free KB blocks:</para>
+ 
+                   <para><emphasis role="bold">-attention disk 5000 ws 50 conn 100</emphasis></para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-debug</emphasis></term>
+ 
+                 <listitem>
+                   <para>Enables debugging output and directs it into the specified file. Partial pathnames are interpreted relative
+                   to the current working directory. By default, no debugging output is produced.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_374">
+       <title>To stop the scout program</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>stopping</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Enter <emphasis role="bold">Ctrl-c</emphasis> in the display window. This is the proper interrupt signal even if the
+           general interrupt signal in your environment is different.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ336">
+       <title>Example Commands and Displays</title>
+ 
+       <indexterm>
+         <primary>scout program</primary>
+ 
+         <secondary>examples (command and display)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>scout program display</secondary>
+       </indexterm>
+ 
+       <para>This section presents examples of the <emphasis role="bold">scout</emphasis> program, combining different arguments and
+       illustrating the screen displays that result.</para>
+ 
+       <para>In the first example, an administrator in the ABC Corporation issues the <emphasis role="bold">scout</emphasis> command
+       without providing any optional arguments or flags. She includes the <emphasis role="bold">-server</emphasis> argument because
+       she is providing multiple machine names. She chooses to specify on the initial part of each machine's name even though she has
+       not used the <emphasis role="bold">-basename</emphasis> argument, relying on the cell's name service to obtain the
+       fully-qualified name that the <emphasis role="bold">scout</emphasis> program requires for establishing a connection.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">scout -server fs1 fs2</emphasis> 
+ </programlisting>
+ 
+       <para><link linkend="FIGWQ337">Figure 2</link> depicts the resulting display. Notice first that the machine names in the fifth
+       (unlabeled) column appear in the format the administrator used on the command line. Now consider the second line in the
+       display region, where the machine name <computeroutput>fs2</computeroutput> appears in the fifth column. The
+       <computeroutput>Conn</computeroutput> and <computeroutput>Ws</computeroutput> columns together show that machine <emphasis
+       role="bold">fs2</emphasis> has 144 RPC connections open to 44 client machines, demonstrating that multiple connections per
+       client machine are possible. The <computeroutput>Fetch</computeroutput> column shows that client machines have made 2,734,278
+       fetch RPCs to machine <emphasis role="bold">fs2</emphasis> since the File Server process last started and the
+       <computeroutput>Store</computeroutput> column shows that they have made 34,066 store RPCs.</para>
+ 
+       <para>Six partition entries appear in the <computeroutput>Disk attn</computeroutput> column, marked
+       <computeroutput>a</computeroutput> through <computeroutput>f</computeroutput> (for <emphasis role="bold">/vicepa</emphasis>
+       through <emphasis role="bold">/vicepf</emphasis>). They appear on three lines in two subcolumns because of the width of the
+       window; if the window is wider, there are more subcolumns. Four of the partition entries (<computeroutput>a</computeroutput>,
+       <computeroutput>c</computeroutput>, <computeroutput>d</computeroutput>, and <computeroutput>e</computeroutput>) appear in
+       reverse video to indicate that they are more than 95% full (the threshold value that appears in the <computeroutput>Disk
+       attn</computeroutput> header).</para>
+ 
+       <figure id="FIGWQ337" label="2">
+         <title>First example scout display</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="scout1.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+ 
+       <para>In the second example, the administrator uses more of the <emphasis role="bold">scout</emphasis> program's optional
+       arguments. <itemizedlist>
+           <listitem>
+             <para>She provides the machine names in the same form as in Example 1, but this time she also uses the <emphasis
+             role="bold">-basename</emphasis> argument to specify their domain name suffix, <emphasis role="bold">abc.com</emphasis>.
+             This implies that the <emphasis role="bold">scout</emphasis> program does not need the name service to expand the names
+             to fully-qualified hostnames, but the name service still converts the hostnames to IP addresses.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>She uses the <emphasis role="bold">-host</emphasis> flag to display in the banner line the name of the client
+             machine where the <emphasis role="bold">scout</emphasis> program is running.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>She uses the <emphasis role="bold">-frequency</emphasis> argument to changes the probing frequency from its
+             default of once per minute to once every five seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>She uses the <emphasis role="bold">-attention</emphasis> argument to changes the highlighting threshold for
+             partitions to a 5000 KB minimum rather than the default of 95% full.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <programlisting>
+    % <emphasis role="bold">scout -server fs1 fs2 -basename abc.com -host -frequency 5 -attention disk 5000</emphasis> 
+ </programlisting>
+ 
+       <para>The use of optional arguments results in several differences between <link linkend="FIGWQ338">Figure 3</link> and <link
+       linkend="FIGWQ337">Figure 2</link>. First, because the <emphasis role="bold">-host</emphasis> flag is included, the banner
+       line displays the name of the machine running the <emphasis role="bold">scout</emphasis> process as
+       <computeroutput>[client52]</computeroutput> along with the basename <computeroutput>abc.com</computeroutput> specified with
+       the <emphasis role="bold">-basename</emphasis> argument.</para>
+ 
+       <para>Another difference is that two rather than four of machine <emphasis role="bold">fs2</emphasis>'s partitions appear in
+       reverse video, even though their values are almost the same as in <link linkend="FIGWQ337">Figure 2</link>. This is because
+       the administrator changed the highlight threshold to a 5000 block minimum, as also reflected in the <computeroutput>Disk
+       attn</computeroutput> column's header. And while machine <emphasis role="bold">fs2</emphasis>'s partitions <emphasis
+       role="bold">/vicepa</emphasis> and <emphasis role="bold">/vicepd</emphasis> are still 95% full, they have more than 5000 free
+       blocks left; partitions <emphasis role="bold">/vicepc</emphasis> and <emphasis role="bold">/vicepe</emphasis> are highlighted
+       because they have fewer than 5000 blocks free.</para>
+ 
+       <para>Note also the result of changing the probe frequency, reflected in the probe reporting line at the bottom left corner of
+       the display. Both this example and the previous one represent a time lapse of one minute after the administrator issues the
+       <emphasis role="bold">scout</emphasis> command. In this example, however, the <emphasis role="bold">scout</emphasis> program
+       has probed the File Server processes 12 times as opposed to once</para>
+ 
+       <figure id="FIGWQ338" label="3">
+         <title>Second example scout display</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="scout2.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+ 
+       <para>In <link linkend="FIGWQ339">Figure 4</link>, an administrator in the State University cell monitors three of that cell's
+       file server machines. He uses the <emphasis role="bold">-basename</emphasis> argument to specify the <emphasis
+       role="bold">stateu.edu</emphasis> domain name.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">scout -server server2 server3 server4 -basename stateu.edu</emphasis> 
+ </programlisting>
+ 
+       <figure id="FIGWQ339" label="4">
+         <title>Third example scout display</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="scout3.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+ 
+       <para><link linkend="FIGWQ340">Figure 5</link> illustrates three of the <emphasis role="bold">scout</emphasis> program's
+       features. First, you can monitor file server machines from different cells in a single display: <emphasis
+       role="bold">fs1.abc.com</emphasis>, <emphasis role="bold">server3.stateu.edu</emphasis>, and <emphasis
+       role="bold">sv7.def.com</emphasis>. Because the machines belong to different cells, it is not possible to provide the
+       <emphasis role="bold">-basename</emphasis> argument.</para>
+ 
+       <para>Second, it illustrates how the display must truncate machine names that do not fit in the fifth column, using an
+       asterisk at the end of the name to show that it is shortened.</para>
+ 
+       <para>Third, it illustrates what happens when the <emphasis role="bold">scout</emphasis> process cannot reach a File Server
+       process, in this case the one on the machine <emphasis role="bold">sv7.def.com</emphasis>: it highlights the machine name and
+       blanks out the values in the other columns.</para>
+ 
+       <figure id="FIGWQ340" label="5">
+         <title>Fourth example scout display</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="scout4.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ341">
+     <title>Using the fstrace Command Suite</title>
+ 
+     <para>This section describes the <emphasis role="bold">fstrace</emphasis> commands that system administrators employ to trace
+     Cache Manager activity for debugging purposes. It assumes the reader is familiar with the Cache Manager concepts described in
+     <link linkend="HDRWQ387">Administering Client Machines and the Cache Manager</link>.</para>
+ 
+     <para>The <emphasis role="bold">fstrace</emphasis> command suite monitors the internal activity of the Cache Manager and enables
+     you to record, or trace, its operations in detail. The operations, which are termed <emphasis>events</emphasis>, comprise the
+     <emphasis role="bold">cm</emphasis> <emphasis>event set</emphasis>. Examples of <emphasis role="bold">cm</emphasis> events are
+     fetching files and looking up information for a listing of files and subdirectories using the UNIX <emphasis
+     role="bold">ls</emphasis> command.</para>
+ 
+     <para>Following are the <emphasis role="bold">fstrace</emphasis> commands and their respective functions: <itemizedlist>
+         <listitem>
+           <para>The <emphasis role="bold">fstrace apropos</emphasis> command provides a short description of commands.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace clear</emphasis> command clears the trace log.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace dump</emphasis> command dumps the contents of the trace log.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace help</emphasis> command provides a description and syntax for commands.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace lslog</emphasis> command lists information about the trace log.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace lsset</emphasis> command lists information about the event set.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace setlog</emphasis> command changes the size of the trace log.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fstrace setset</emphasis> command sets the state of the event set.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ342">
+       <title>About the fstrace Command Suite</title>
+ 
+       <para>The <emphasis role="bold">fstrace</emphasis> command suite replaces and greatly expands the functionality formerly
+       provided by the <emphasis role="bold">fs debug</emphasis> command. Its intended use is to aid in diagnosis of specific Cache
+       Manager problems, such as client machine hangs, cache consistency problems, clock synchronization errors, and failures to
+       access a volume or AFS file. Therefore, it is best not to keep <emphasis role="bold">fstrace</emphasis> logging enabled at all
+       times, unlike the logging for AFS server processes.</para>
+ 
+       <para>Most of the messages in the trace log correspond to low-level Cache Manager operations. It is likely that only personnel
+       familiar with the AFS source code can interpret them. If you have an AFS source license, you can attempt to interpret the
+       trace yourself, or work with the AFS Product Support group to resolve the underlying problems. If you do not have an AFS
+       source license, it is probably more efficient to contact the AFS Product Support group immediately in case of problems. They
+       can instruct you to activate <emphasis role="bold">fstrace</emphasis> tracing if appropriate.</para>
+ 
+       <para>The log can grow in size very quickly; this can use valuable disk space if you are writing to a file in the local file
+       space. Additionally, if the size of the log becomes too large, it can become difficult to parse the results for pertinent
+       information.</para>
+ 
+       <indexterm>
+         <primary>cmfx trace log (fstrace)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>trace log from (fstrace)</primary>
+ 
+         <secondary>cmfx</secondary>
+       </indexterm>
+ 
+       <para>When AFS tracing is enabled, each time a <emphasis role="bold">cm</emphasis> event occurs, a message is written to the
+       trace log, <emphasis role="bold">cmfx</emphasis>. To diagnose a problem, read the output of the trace log and analyze the
+       operations executed by the Cache Manager. The default size of the trace log is 60 KB, but you can increase or decrease
+       it.</para>
+ 
+       <indexterm>
+         <primary>cm event set (fstrace)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>event set (fstrace)</primary>
+ 
+         <secondary>cm</secondary>
+       </indexterm>
+ 
+       <para>To use the <emphasis role="bold">fstrace</emphasis> command suite, you must first enable tracing and reserve, or
+       allocate, space for the trace log with the <emphasis role="bold">fstrace setset</emphasis> command. With this command, you can
+       set the <emphasis role="bold">cm</emphasis> event set to one of three states to enable or disable tracing for the event set
+       and to allocate or deallocate space for the trace log in the kernel: <variablelist>
+           <indexterm>
+             <primary>active</primary>
+ 
+             <secondary>state of fstrace event set</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>inactive (state of fstrace event set)</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>dormant (state of fstrace event set)</primary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><computeroutput>active</computeroutput></term>
+ 
+             <listitem>
+               <para>Enables tracing for the event set and allocates space for the trace log.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>inactive</computeroutput></term>
+ 
+             <listitem>
+               <para>Temporarily disables tracing for the event set; however, the event set continues to allocate space occupied by
+               the log to which it sends data.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>dormant</computeroutput></term>
+ 
+             <listitem>
+               <para>Disables tracing for the event set; furthermore, the event set releases the space occupied by the log to which
+               it sends data. When the <emphasis role="bold">cm</emphasis> event set that sends data to the <emphasis
+               role="bold">cmfx</emphasis> trace log is in this state, the space allocated for that log is freed or
+               deallocated.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>persistent fstrace event set or trace log</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>trace log (fstrace)</primary>
+ 
+         <secondary>persistence</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>event set (fstrace)</primary>
+ 
+         <secondary>persistence</secondary>
+       </indexterm>
+ 
+       <para>Both event sets and trace logs can be designated as <emphasis>persistent</emphasis>, which prevents accidental resetting
+       of an event set's state or clearing of a trace log. The designation is made as the kernel is compiled and cannot be
+       changed.</para>
+ 
+       <para>If an event set such as <emphasis role="bold">cm</emphasis> is persistent, you can change its state only by including
+       the <emphasis role="bold">-set</emphasis> argument to the <emphasis role="bold">fstrace setset</emphasis> command. (That is,
+       you cannot change its state along with the state of all other event sets by issuing the <emphasis role="bold">fstrace
+       setset</emphasis> command with no arguments.) Similarly, if a trace log such as <emphasis role="bold">cmfx</emphasis> is
+       persistent, you can clear it only by including either the <emphasis role="bold">-set</emphasis> or <emphasis
+       role="bold">-log</emphasis> argument to the <emphasis role="bold">fstrace clear</emphasis> command (you cannot clear it along
+       with all other trace logs by issuing the <emphasis role="bold">fstrace clear</emphasis> command with no arguments.)</para>
+ 
+       <para>When a problem occurs, set the <emphasis role="bold">cm</emphasis> event set to active using the <emphasis
+       role="bold">fstrace setset</emphasis> command. When tracing is enabled on a busy AFS client, the volume of events being
+       recorded is significant; therefore, when you are diagnosing problems, restrict AFS activity as much as possible to minimize
+       the amount of extraneous tracing in the log. Because tracing can have a negative impact on system performance, leave <emphasis
+       role="bold">cm</emphasis> tracing in the dormant state when you are not diagnosing problems.</para>
+ 
+       <para>If a problem is reproducible, clear the <emphasis role="bold">cmfx</emphasis> trace log with the <emphasis
+       role="bold">fstrace clear</emphasis> command and reproduce the problem. If the problem is not easily reproduced, keep the
+       state of the event set active until the problem recurs.</para>
+ 
+       <para>To view the contents of the trace log and analyze the <emphasis role="bold">cm</emphasis> events, use the <emphasis
+       role="bold">fstrace dump</emphasis> command to copy the content lines of the trace log to standard output (stdout) or to a
+       file.</para>
+ 
+       <note>
+         <para>If a particular command or process is causing problems, determine its process id (PID). Search the output of the
+         <emphasis role="bold">fstrace dump</emphasis> command for the PID to find only those lines associated with the
+         problem.</para>
+       </note>
+     </sect2>
+ 
+     <sect2 id="HDRWQ343">
+       <title>Requirements for Using the fstrace Command Suite</title>
+ 
+       <indexterm>
+         <primary>privilege</primary>
+ 
+         <secondary>required for fstrace commands</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>privilege requirements</secondary>
+       </indexterm>
+ 
+       <para>Except for the <emphasis role="bold">fstrace help</emphasis> and <emphasis role="bold">fstrace apropos</emphasis>
+       commands, which require no privilege, issuing the <emphasis role="bold">fstrace</emphasis> commands requires that the issuer
+       be logged in as the local superuser <emphasis role="bold">root</emphasis> on the local client machine. Before issuing an
+       <emphasis role="bold">fstrace</emphasis> command, verify that you have the necessary privilege.</para>
+ 
+       <para>The Cache Manager catalog must be in place so that logging can occur. The <emphasis role="bold">fstrace</emphasis>
+       command suite uses the standard UNIX catalog utilities. The default location is <emphasis
+       role="bold">/usr/vice/etc/C/afszcm.cat</emphasis>. It can be placed in another directory by placing the file elsewhere and
+       using the proper NLSPATH and LANG environment variables.</para>
+     </sect2>
+ 
+     <sect2 id="Header_379">
+       <title>Using fstrace Commands Effectively</title>
+ 
+       <para>To use <emphasis role="bold">fstrace</emphasis> commands most effectively, configure them as indicated: <itemizedlist>
+           <listitem>
+             <para>Store the <emphasis role="bold">fstrace</emphasis> binary in a local disk directory.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When you dump the <emphasis role="bold">fstrace</emphasis> log to a file, direct it to one on the local
+             disk.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The trace can grow large in just a few minutes. Before attempting to dump the log to a local file, verify that you
+             have enough room. Be particularly careful if you are using disk quotas on partitions in the local file system.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Attempt to limit Cache Manager activity on the AFS client machine other than the problem operation. This reduces
+             the amount of extraneous data in the trace.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Activate the <emphasis role="bold">fstrace</emphasis> log for the shortest possibly period of time. If possible
+             activate the trace immediately before performing the problem operation, deactivate it as soon as the operation
+             completes, and dump the trace log to a file immediately.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If possible, obtain UNIX process ID (PID) of the command or program that initiates the problematic operation. This
+             enables the person analyzing the trace log to search it for messages associated with the PID.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ344">
+       <title>Activating the Trace Log</title>
+ 
+       <para>To start Cache Manager tracing on an AFS client machine, you must first configure <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">cmfx</emphasis> kernel trace log using the <emphasis role="bold">fstrace
+             setlog</emphasis> command</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">cm</emphasis> event set using the <emphasis role="bold">fstrace setset</emphasis>
+             command</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The <emphasis role="bold">fstrace setlog</emphasis> command sets the size of the <emphasis role="bold">cmfx</emphasis>
+       kernel trace log in kilobytes. The trace log occupies 60 kilobytes of kernel by default. If the trace log already exists, it
+       is cleared when this command is issued and a new log of the given size is created. Otherwise, a new log of the desired size is
+       created.</para>
+ 
+       <para>The <emphasis role="bold">fstrace setset</emphasis> command sets the state of the <emphasis role="bold">cm</emphasis>
+       kernel event set. The state of the <emphasis role="bold">cm</emphasis> event set determines whether information on the events
+       in that event set is logged.</para>
+ 
+       <para>After establishing kernel tracing on the AFS client machine, you can check the state of the event set and the size of
+       the kernel buffer allocated for the trace log. To display information about the state of the <emphasis
+       role="bold">cm</emphasis> event set, issue the <emphasis role="bold">fstrace lsset</emphasis> command. To display information
+       about the <emphasis role="bold">cmfx</emphasis> trace log, use the <emphasis role="bold">fstrace lslog</emphasis> command. See
+       the instructions in <link linkend="HDRWQ346">Displaying the State of a Trace Log or Event Set</link>.</para>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>setlog</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fstrace setlog</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>trace log (fstrace)</primary>
+ 
+         <secondary>configuring</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>trace log (fstrace)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_381">
+       <title>To configure the trace log</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fstrace setlog</emphasis> command to set the size of the <emphasis
+           role="bold">cmfx</emphasis> kernel trace log. <programlisting>
+    # <emphasis role="bold">fstrace setlog</emphasis>  [<emphasis role="bold">-log</emphasis> &lt;<replaceable>log_name</replaceable>&gt;+]  <emphasis
+                 role="bold">-buffersize</emphasis> &lt;<replaceable>1-kilobyte_units</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example sets the size of the <emphasis role="bold">cmfx</emphasis> trace log to 80 KB.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace setlog cmfx 80</emphasis> 
+ </programlisting>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>setset</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fstrace setset</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>event set (fstrace)</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>event set (fstrace)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ345">
+       <title>To set the event set</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fstrace setset</emphasis> command to set the state of event sets. <programlisting>
+    % <emphasis role="bold">fstrace setset</emphasis> [<emphasis role="bold">-set</emphasis> &lt;<replaceable>set_name</replaceable>&gt;+] [<emphasis
+                 role="bold">-active</emphasis>] [<emphasis role="bold">-inactive</emphasis>]  \
+                     [<emphasis role="bold">-dormant</emphasis>] 
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example activates the <emphasis role="bold">cm</emphasis> event set.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace setset cm -active</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ346">
+       <title>Displaying the State of a Trace Log or Event Set</title>
+ 
+       <para>An event set must be in the <emphasis>active state</emphasis> to be included in the trace log. To display an event set's
+       state, use the <emphasis role="bold">fstrace lsset</emphasis> command. To set its state, issue the <emphasis
+       role="bold">fstrace setset</emphasis> command as described in <link linkend="HDRWQ345">To set the event set</link>.</para>
+ 
+       <para>To display size and allocation information for the trace log, issue the <emphasis role="bold">fstrace
+       lslog</emphasis>command with the <emphasis role="bold">-long</emphasis> argument.</para>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>lsset</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fstrace lsset</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>event set (fstrace)</primary>
+ 
+         <secondary>displaying state</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>state of event set (fstrace)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_384">
+       <title>To display the state of an event set</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fstrace lsset</emphasis> command to display the available event set and its state.
+           <programlisting>
+    # <emphasis role="bold">fstrace lsset</emphasis>  [<emphasis role="bold">-set</emphasis> &lt;<replaceable>set_name</replaceable>&gt;+]
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example displays the event set and its state on the local machine.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace lsset cm</emphasis>
+    Available sets:
+    cm active
+ </programlisting>
+ 
+       <para>The output from this command lists the event set and its states. The three event states for the <emphasis
+       role="bold">cm</emphasis> event set are: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">active</emphasis></term>
+ 
+             <listitem>
+               <para>Tracing is enabled.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">inactive</emphasis></term>
+ 
+             <listitem>
+               <para>Tracing is disabled, but space is still allocated for the corresponding trace log (<emphasis
+               role="bold">cmfx</emphasis>).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">dormant</emphasis></term>
+ 
+             <listitem>
+               <para>Tracing is disabled, and space is no longer allocated for the corresponding trace log (<emphasis
+               role="bold">cmfx</emphasis>).Disables tracing for the event set.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>lslog</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fstrace lslog</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>trace log (fstrace)</primary>
+ 
+         <secondary>displaying state</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>state of trace log (fstrace)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_385">
+       <title>To display the log size</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fstrace lslog</emphasis> command to display information about the kernel trace log.
+           <programlisting>
+    # <emphasis role="bold">fstrace lslog</emphasis>  [<emphasis role="bold">-set</emphasis> &lt;<replaceable>set_name</replaceable>&gt;+]  [<emphasis
+                 role="bold">-log</emphasis> &lt;<replaceable>log_name</replaceable>&gt;]  [<emphasis role="bold">-long</emphasis>] 
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example uses the <emphasis role="bold">-long</emphasis> flag to display additional information about the
+       <emphasis role="bold">cmfx</emphasis> trace log.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace lslog cmfx -long</emphasis>
+    Available logs:
+    cmfx : 60 kbytes (allocated)
+ </programlisting>
+ 
+       <para>The output from this command lists information on the trace log. When issued without the <emphasis
+       role="bold">-long</emphasis> flag, the <emphasis role="bold">fstrace lslog</emphasis> command lists only the name of the log.
+       When issued with the <emphasis role="bold">-long</emphasis> flag, the <emphasis role="bold">fstrace lslog</emphasis> command
+       lists the log, the size of the log in kilobytes, and the allocation state of the log.</para>
+ 
+       <para>There are two allocation states for the kernel trace log: <variablelist>
+           <varlistentry>
+             <term><computeroutput>allocated</computeroutput></term>
+ 
+             <listitem>
+               <para>Space is reserved for the log in the kernel. This indicates that the event set that writes to this log is either
+               <emphasis>active</emphasis> (tracing is enabled for the event set) or <emphasis>inactive</emphasis> (tracing is
+               temporarily disabled for the event set); however, the event set continues to reserve space occupied by the log to
+               which it sends data.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>unallocated</computeroutput></term>
+ 
+             <listitem>
+               <para>Space is not reserved for the log in the kernel. This indicates that the event set that writes to this log is
+               <emphasis>dormant</emphasis> (tracing is disabled for the event set); furthermore, the event set releases the space
+               occupied by the log to which it sends data.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ347">
+       <title>Dumping and Clearing the Trace Log</title>
+ 
+       <para>After the Cache Manager operation you want to trace is complete, use the <emphasis role="bold">fstrace dump</emphasis>
+       command to dump the trace log to the standard output stream or to the file named by the <emphasis role="bold">-file</emphasis>
+       argument. Or, to dump the trace log continuously, use the <emphasis role="bold">-follow</emphasis> argument (combine it with
+       the <emphasis role="bold">-file</emphasis> argument if desired). To halt continuous dumping, press an interrupt signal such as
+       &lt;<emphasis role="bold">Ctrl-c</emphasis>&gt;.</para>
+ 
+       <para>To clear a trace log when you no longer need the data in it, issue the <emphasis role="bold">fstrace clear</emphasis>
+       command. (The <emphasis role="bold">fstrace setlog</emphasis> command also clears an existing trace log automatically when you
+       use it to change the log's size.)</para>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>dump</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fstrace dump</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>trace log (fstrace)</primary>
+ 
+         <secondary>dumping</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>contents of trace log (fstrace)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dumping</primary>
+ 
+         <secondary>trace log contents (fstrace)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_387">
+       <title>To dump the contents of a trace log</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fstrace dump</emphasis> command to dump trace logs. <programlisting>
+    # <emphasis role="bold">fstrace dump</emphasis> [<emphasis role="bold">-set</emphasis> &lt;<replaceable>set_name</replaceable>&gt;+]  [<emphasis
+                 role="bold">-follow</emphasis> &lt;<replaceable>log_name</replaceable>&gt;]  \
+                   [<emphasis role="bold">-file</emphasis> &lt;<replaceable>output_filename</replaceable>&gt;]  \
+                   [<emphasis role="bold">-sleep</emphasis> &lt;<replaceable>seconds_between_reads</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>At the beginning of the output of each dump is a header specifying the date and time at which the dump began. The number
+       of logs being dumped is also displayed if the <emphasis role="bold">-follow</emphasis> argument is not specified. The header
+       appears as follows:</para>
+ 
+       <programlisting>
+    AFS Trace Dump --
+    Date: date time
+    Found n logs.
+ </programlisting>
+ 
+       <para>where <emphasis>date</emphasis> is the starting date of the trace log dump, <emphasis>time</emphasis> is the starting
+       time of the trace log dump, and <emphasis>n</emphasis> specifies the number of logs found by the <emphasis role="bold">fstrace
+       dump</emphasis> command.</para>
+ 
+       <para>The following is an example of trace log dump header:</para>
+ 
+       <programlisting>
+    AFS Trace Dump --
+    Date: Fri Apr 16 10:44:38 1999
+    Found 1 logs.
+ </programlisting>
+ 
+       <para>The contents of the log follow the header and are comprised of messages written to the log from an active event set. The
+       messages written to the log contain the following three components: <itemizedlist>
+           <listitem>
+             <para>The timestamp associated with the message (number of seconds from an arbitrary start point)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The process ID or thread ID associated with the message</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The message itself</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>A trace log message is formatted as follows:</para>
+ 
+       <programlisting>
+    time timestamp, pid pid:event message
+ </programlisting>
+ 
+       <para>where <emphasis>timestamp</emphasis> is the number of seconds from an arbitrary start point, <emphasis>pid</emphasis> is
+       the process ID number of the Cache Manager event, and <emphasis>event message</emphasis> is the Cache Manager event which
+       corresponds with a function in the AFS source code.</para>
+ 
+       <para>The following is an example of a dumped trace log message:</para>
+ 
+       <programlisting>
+    time 749.641274, pid 3002:Returning code 2 from 19
+ </programlisting>
+ 
+       <para>For the messages in the trace log to be most readable, the Cache Manager catalog file needs to be installed on the local
+       disk of the client machine; the conventional location is <emphasis role="bold">/usr/vice/etc/C/afszcm.cat</emphasis>. Log
+       messages that begin with the string <computeroutput>raw op</computeroutput>, like the following, indicate that the catalog is
+       not installed.</para>
+ 
+       <programlisting>
+    raw op 232c, time 511.916288, pid 0
+    p0:Fri Apr 16 10:36:31 1999
+ </programlisting>
+ 
+       <para>Every 1024 seconds, a current time message is written to each log. This message has the following format:</para>
+ 
+       <programlisting>
+    time timestamp, pid pid: Current time: unix_time
+ </programlisting>
+ 
+       <para>where timestamp is the number of seconds from an arbitrary start point, pid is the process ID number, and unix_time is
+       the standard time format since January 1, 1970.</para>
+ 
+       <para>The current time message can be used to determine the actual time associated with each log message. Determine the actual
+       time as follows: <orderedlist>
+           <listitem>
+             <para>Locate the log message whose actual time you want to determine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Search backward through the dump record until you come to a current time message.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the current time message's <emphasis>timestamp</emphasis> is smaller than the log message's
+             <emphasis>timestamp</emphasis>, subtract the former from the latter. If the current time message's
+             <emphasis>timestamp</emphasis> is larger than the log message's <emphasis>timestamp</emphasis>, add 1024 to the latter
+             and subtract the former from the result.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Add the resulting number to the current time message's <emphasis>unix_time</emphasis> to determine the log
+             message's actual time.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>Because log data is stored in a finite, circular buffer, some of the data can be overwritten before being read. If this
+       happens, the following message appears at the appropriate place in the dump:</para>
+ 
+       <programlisting>
+    Log wrapped; data missing.
+ </programlisting>
+ 
+       <note>
+         <para>If this message appears in the middle of a dump, which can happen under a heavy work load, it indicates that not all
+         of the log data is being written to the log or some data is being overwritten. Increasing the size of the log with the
+         <emphasis role="bold">fstrace setlog</emphasis> command can alleviate this problem.</para>
+       </note>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>clear</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fstrace clear</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>trace log (fstrace)</primary>
+ 
+         <secondary>clearing contents</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>clearing</primary>
+ 
+         <secondary>contents of trace log (fstrace)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>trace log contents (fstrace)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_388">
+       <title>To clear the contents of a trace log</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fstrace clear</emphasis> command to clear logs by log name or by event set.
+           <programlisting>
+    # <emphasis role="bold">fstrace clear</emphasis>  [<emphasis role="bold">-set</emphasis> &lt;<replaceable>set_name</replaceable>&gt;+]  [<emphasis
+                 role="bold">-log</emphasis> &lt;<replaceable>log_name</replaceable>&gt;+]
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example clears the <emphasis role="bold">cmfx</emphasis> log used by the <emphasis
+       role="bold">cm</emphasis> event set on the local machine.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace clear cm</emphasis>
+ </programlisting>
+ 
+       <para>The following example also clears the <emphasis role="bold">cmfx</emphasis> log on the local machine.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace clear cmfx</emphasis>
+ </programlisting>
+ 
+       <indexterm>
+         <primary>fstrace commands</primary>
+ 
+         <secondary>example of use</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ348">
+       <title>Examples of fstrace Commands</title>
+ 
+       <para>This section contains an extensive example of the use of the <emphasis role="bold">fstrace</emphasis> command suite,
+       which is useful for gathering a detailed trace of Cache Manager activity when you are working with AFS Product Support to
+       diagnose a problem. The Product Support representative can guide you in choosing appropriate parameter settings for the
+       trace.</para>
+ 
+       <para>Before starting the kernel trace log, try to isolate the Cache Manager on the AFS client machine that is experiencing
+       the problem accessing the file. If necessary, instruct users to move to another machine so as to minimize the Cache Manager
+       activity on this machine. To minimize the amount of unrelated AFS activity recorded in the trace log, place both the <emphasis
+       role="bold">fstrace</emphasis> binary and the dump file must reside on the local disk, not in AFS. You must be logged in as
+       the local superuser <emphasis role="bold">root</emphasis> to issue <emphasis role="bold">fstrace</emphasis> commands.</para>
+ 
+       <para>Before starting a kernel trace, issue the <emphasis role="bold">fstrace lsset</emphasis> command to check the state of
+       the <emphasis role="bold">cm</emphasis> event set.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace lsset cm</emphasis>
+ </programlisting>
+ 
+       <para>If tracing has not been enabled previously or if tracing has been turned off on the client machine, the following output
+       is displayed:</para>
+ 
+       <programlisting>
+    Available sets:
+    cm inactive
+ </programlisting>
+ 
+       <para>If tracing has been turned off and kernel memory is not allocated for the trace log on the client machine, the following
+       output is displayed:</para>
+ 
+       <programlisting>
+    Available sets:
+    cm inactive (dormant)
+ </programlisting>
+ 
+       <para>If the current state of the <emphasis role="bold">cm</emphasis> event set is <computeroutput>inactive</computeroutput>
+       or <computeroutput>inactive (dormant)</computeroutput>, turn on kernel tracing by issuing the <emphasis role="bold">fstrace
+       setset</emphasis> command with the <emphasis role="bold">-active</emphasis> flag.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace setset cm -active</emphasis>
+ </programlisting>
+ 
+       <para>If tracing is enabled currently on the client machine, the following output is displayed:</para>
+ 
+       <programlisting>
+    Available sets:
+    cm active
+ </programlisting>
+ 
+       <para>If tracing is enabled currently, you do not need to use the <emphasis role="bold">fstrace setset</emphasis> command. Do
+       issue the <emphasis role="bold">fstrace clear</emphasis> command to clear the contents of any existing trace log, removing
+       prior traces that are not related to the current problem.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace clear cm</emphasis>
+ </programlisting>
+ 
+       <para>After checking on the state of the event set, issue the <emphasis role="bold">fstrace lslog</emphasis> command with the
+       <emphasis role="bold">-long</emphasis> flag to check the current state and size of the kernel trace log .</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace lslog cmfx -long</emphasis>
+ </programlisting>
+ 
+       <para>If tracing has not been enabled previously or the <emphasis role="bold">cm</emphasis> event set was set to
+       <computeroutput>active</computeroutput> or <computeroutput>inactive</computeroutput> previously, output similar to the
+       following is displayed:</para>
+ 
+       <programlisting>
+    Available logs:
+    cmfx : 60 kbytes (allocated)
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">fstrace</emphasis> tracing utility allocates 60 kilobytes of memory to the trace log by
+       default. You can increase or decrease the amount of memory allocated to the kernel trace log by setting it with the <emphasis
+       role="bold">fstrace setlog</emphasis> command. The number specified with the <emphasis role="bold">-buffersize</emphasis>
+       argument represents the number of kilobytes allocated to the kernel trace log. If you increase the size of the kernel trace
+       log to 100 kilobytes, issue the following command.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace setlog cmfx</emphasis> 100
+ </programlisting>
+ 
+       <para>After ensuring that the kernel trace log is configured for your needs, you can set up a file into which you can dump the
+       kernel trace log. For example, create a dump file with the name <emphasis role="bold">cmfx.dump.file.1</emphasis> using the
+       following <emphasis role="bold">fstrace dump</emphasis> command. Issue the command as a continuous process by adding the
+       <emphasis role="bold">-follow</emphasis> and <emphasis role="bold">-sleep</emphasis> arguments. Setting the <emphasis
+       role="bold">-sleep</emphasis> argument to <emphasis>10</emphasis> dumps output from the kernel trace log to the file every 10
+       seconds.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">fstrace dump -follow</emphasis> cmfx <emphasis role="bold">-file</emphasis> cmfx.dump.file.1 <emphasis
+           role="bold">-sleep</emphasis> 10
+    AFS Trace Dump -
+       Date: Fri Apr 16 10:54:57 1999
+    Found 1 logs.
+    time 32.965783, pid 0: Fri Apr 16 10:45:52 1999
+    time 32.965783, pid 33657: Close 0x5c39ed8 flags 0x20 
+    time 32.965897, pid 33657: Gn_close vp 0x5c39ed8 flags 0x20 (returns
+    0x0) 
+    time 35.159854, pid 10891: Breaking callback for 5bd95e4 states 1024
+    (volume 0)
+    time 35.407081, pid 10891: Breaking callback for 5c0fadc states 1024
+    (volume 0)
+        .                         .
+        .                         .
+        .                         .
+    time 71.440456, pid 33658: Lookup adp 0x5bbdcf0 name g3oCKs fid (756
+    4fb7e:588d240.2ff978a8.6) 
+    time 71.440569, pid 33658: Returning code 2 from 19 
+    time 71.440619, pid 33658: Gn_lookup vp 0x5bbdcf0 name g3oCKs (returns
+    0x2) 
+    time 71.464989, pid 38267: Gn_open vp 0x5bbd000 flags 0x0 (returns 0x
+    0) 
+    AFS Trace Dump - Completed
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ349">
+     <title>Using the afsmonitor Program</title>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>features summarized</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">afsmonitor</emphasis> program enables you to monitor the status and performance of specified
+     File Server and Cache Manager processes by gathering statistical information. Among its other uses, the <emphasis
+     role="bold">afsmonitor</emphasis> program can be used to fine-tune Cache Manager configuration and load balance File
+     Servers.</para>
+ 
+     <para>The <emphasis role="bold">afsmonitor</emphasis> program enables you to perform the following tasks. <itemizedlist>
+         <listitem>
+           <para>Monitor any number of File Server and Cache Manager processes on any number of machines (in both local and foreign
+           cells) from a single location.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Set threshold values for any monitored statistic. When the value of a statistic exceeds the threshold, the <emphasis
+           role="bold">afsmonitor</emphasis> program highlights it to draw your attention. You can set threshold levels that apply to
+           every machine or only some.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Invoke programs or scripts automatically when a statistic exceeds its threshold.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ350">
+       <title>Requirements for running the afsmonitor program</title>
+ 
+       <indexterm>
+         <primary>afsmonitor program</primary>
+ 
+         <secondary>requirements for running</secondary>
+       </indexterm>
+ 
+       <para>The following software must be accessible to a machine where the <emphasis role="bold">afsmonitor</emphasis> program is
+       running: <itemizedlist>
+           <listitem>
+             <para>The AFS <emphasis role="bold">xstat</emphasis> libraries, which the <emphasis role="bold">afsmonitor</emphasis>
+             program uses to gather data</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">curses</emphasis> graphics package, which most UNIX distributions provide as a standard
+             utility</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>curses graphics utility</primary>
+ 
+         <secondary>afsmonitor program</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>xstat as requirement for running afsmonitor</primary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">afsmonitor</emphasis> screens format successfully both on so-called dumb terminals and in
+       windowing systems that emulate terminals. For the output to looks its best, the display environment needs to support reverse
+       video and cursor addressing. Set the TERM environment variable to the correct terminal type, or to a value that has
+       characteristics similar to the actual terminal type. The display window or terminal must be at least 80 columns wide and 12
+       lines long.</para>
+ 
+       <indexterm>
+         <primary>afsmonitor program</primary>
+ 
+         <secondary>setting terminal type</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>terminal type</primary>
+ 
+         <secondary>setting for afsmonitor</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>dumb terminal</primary>
+ 
+         <secondary>use with afsmonitor</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">afsmonitor</emphasis> program must run in the foreground, and in its own separate, dedicated
+       window or terminal. The window or terminal is unavailable for any other activity as long as the <emphasis
+       role="bold">afsmonitor</emphasis> program is running. Any number of instances of the <emphasis
+       role="bold">afsmonitor</emphasis> program can run on a single machine, as long as each instance runs in its own dedicated
+       window or terminal. Note that it can take up to three minutes to start an additional instance.</para>
+ 
+       <indexterm>
+         <primary>privilege</primary>
+ 
+         <secondary>required for afsmonitor program</secondary>
+       </indexterm>
+ 
+       <para>No privilege is required to run the <emphasis role="bold">afsmonitor</emphasis> program. By convention, it is installed
+       in the <emphasis role="bold">/usr/afsws/bin</emphasis> directory, and anyone who can access the directory can monitor File
+       Servers and Cache Managers. The probes through which the <emphasis role="bold">afsmonitor</emphasis> program collects
+       statistics do not constitute a significant burden on the File Server or Cache Manager unless hundreds of people are running
+       the program. If you wish to restrict its use, place the binary file in a directory available only to authorized users.</para>
+     </sect2>
+ 
+     <sect2 id="Header_392">
+       <title>The afsmonitor Output Screens</title>
+ 
+       <indexterm>
+         <primary>afsmonitor program</primary>
+ 
+         <secondary>screen layout</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">afsmonitor</emphasis> program displays its data on three screens: <itemizedlist>
+           <listitem>
+             <para><computeroutput>System Overview</computeroutput>: This screen appears automatically when the <emphasis
+             role="bold">afsmonitor</emphasis> program initializes. It summarizes separately for File Servers and Cache Managers the
+             number of machines being monitored and how many of them have <emphasis>alerts</emphasis> (statistics that have exceeded
+             their thresholds). It then lists the hostname and number of alerts for each machine being monitored, indicating if
+             appropriate that a process failed to respond to the last probe.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>File Server</computeroutput>: This screen displays File Server statistics for each file server
+             machine being monitored. It highlights statistics that have exceeded their thresholds, and identifies machines that
+             failed to respond to the last probe.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><computeroutput>Cache Managers</computeroutput>: This screen displays Cache Manager statistics for each client
+             machine being monitored. It highlights statistics that have exceeded their thresholds, and identifies machines that
+             failed to respond to the last probe.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Fields at the corners of every screen display the following information: <itemizedlist>
+           <listitem>
+             <para>In the top left corner, the program name and version number.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In the top right corner, the screen name, current and total page numbers, and current and total column numbers.
+             The page number (for example, <computeroutput>p. 1 of 3</computeroutput>) indicates the index of the current page and
+             the total number of (vertical) pages over which data is displayed. The column number (for example, <computeroutput>c. 1
+             of 235</computeroutput>) indicates the index of the current leftmost column and the total number of columns in which
+             data appears. (The symbol <computeroutput>&gt;&gt;&gt;</computeroutput> indicates that there is additional data to the
+             right; the symbol <computeroutput>&lt;&lt;&lt;</computeroutput> indicates that there is additional data to the
+             left.)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In the bottom left corner, a list of the available commands. Enter the first letter in the command name to run
+             that command. Only the currently possible options appear; for example, if there is only one page of data, the
+             <computeroutput>next</computeroutput> and <computeroutput>prev</computeroutput> commands, which scroll the screen up and
+             down respectively, do not appear. For descriptions of the commands, see the following section about navigating the
+             display screens.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In the bottom right corner, the <computeroutput>probes</computeroutput> field reports how many times the program
+             has probed File Servers (<computeroutput>fs</computeroutput>), Cache Managers (<computeroutput>cm</computeroutput>), or
+             both. The counts for File Servers and Cache Managers can differ. The <computeroutput>freq</computeroutput> field reports
+             how often the program sends probes.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para><emphasis role="bold">Navigating the afsmonitor Display Screens</emphasis></para>
+ 
+       <para>As noted, the lower left hand corner of every display screen displays the names of the commands currently available for
+       moving to alternate screens, which can either be a different type or display more statistics or machines of the current type.
+       To execute a command, press the lowercase version of the first letter in its name. Some commands also have an uppercase
+       version that has a somewhat different effect, as indicated in the following list. <variablelist>
+           <varlistentry>
+             <term><computeroutput>cm</computeroutput></term>
+ 
+             <listitem>
+               <para>Switches to the <computeroutput>Cache Managers</computeroutput> screen. Available only on the
+               <computeroutput>System Overview</computeroutput> and <computeroutput>File Servers</computeroutput> screens.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>fs</computeroutput></term>
+ 
+             <listitem>
+               <para>Switches to the <computeroutput>File Servers</computeroutput> screen. Available only on the
+               <computeroutput>System Overview</computeroutput> and the <computeroutput>Cache Managers</computeroutput>
+               screens.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>left</computeroutput></term>
+ 
+             <listitem>
+               <para>Scrolls horizontally to the left, to access the data columns situated to the left of the current set. Available
+               when the <computeroutput>&lt;&lt;&lt;</computeroutput> symbol appears at the top left of the screen. Press uppercase
+               <emphasis role="bold">L</emphasis> to scroll horizontally all the way to the left (to display the first set of data
+               columns).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>next</computeroutput></term>
+ 
+             <listitem>
+               <para>Scrolls down vertically to the next page of machine names. Available when there are two or more pages of
+               machines and the final page is not currently displayed. Press uppercase <emphasis role="bold">N</emphasis> to scroll
+               to the final page.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>oview</computeroutput></term>
+ 
+             <listitem>
+               <para>Switches to the <computeroutput>System Overview</computeroutput> screen. Available only on the
+               <computeroutput>Cache Managers</computeroutput> and <computeroutput>File Servers</computeroutput> screens.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>prev</computeroutput></term>
+ 
+             <listitem>
+               <para>Scrolls up vertically to the previous page of machine names. Available when there are two or more pages of
+               machines and the first page is not currently displayed. Press uppercase <emphasis role="bold">N</emphasis> to scroll
+               to the first page.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><computeroutput>right</computeroutput></term>
+ 
+             <listitem>
+               <para>Scrolls horizontally to the right, to access the data columns situated to the right of the current set. This
+               command is available when the <computeroutput>&gt;&gt;&gt;</computeroutput> symbol appears at the upper right of the
+               screen. Press uppercase <emphasis role="bold">R</emphasis> to scroll horizontally all the way to the right (to display
+               the final set of data columns).</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="Header_393">
+       <title>The System Overview Screen</title>
+ 
+       <para>The <computeroutput>System Overview</computeroutput> screen appears automatically as the <emphasis
+       role="bold">afsmonitor</emphasis> program initializes. This screen displays the status of as many File Server and Cache
+       Manager processes as can fit in the current window; scroll down to access additional information.</para>
+ 
+       <para>The information on this screen is split into File Server information on the left and Cache Manager information on the
+       right. The header for each grouping reports two pieces of information: <itemizedlist>
+           <listitem>
+             <para>The number of machines on which the program is monitoring the indicated process</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The number of alerts and the number of machines affected by them (an <emphasis>alert</emphasis> means that a
+             statistic has exceeded its threshold or a process failed to respond to the last probe)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>A list of the machines being monitored follows. If there are any alerts on a machine, the number of them appears in
+       square brackets to the left of the hostname. If a process failed to respond to the last probe, the letters
+       <computeroutput>PF</computeroutput> (probe failure) appear in square brackets to the left of the hostname.</para>
+ 
+       <para>The following graphic is an example <computeroutput>System Overview</computeroutput> screen. The <emphasis
+       role="bold">afsmonitor</emphasis> program is monitoring six File Servers and seven Cache Managers. The File Server process on
+       host <emphasis role="bold">fs1.abc.com</emphasis> and the Cache Manager on host <emphasis role="bold">cli33.abc.com</emphasis>
+       are each marked <computeroutput>[ 1]</computeroutput> to indicate that one threshold value is exceeded. The
+       <computeroutput>[PF]</computeroutput> marker on host <emphasis role="bold">fs6.abc.com</emphasis> indicates that its File
+       Server process did not respond to the last probe.</para>
+ 
+       <figure id="Figure_6" label="6">
+         <title>The afsmonitor System Overview Screen</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="overview.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+     </sect2>
+ 
+     <sect2 id="Header_394">
+       <title>The File Servers Screen</title>
+ 
+       <para>The <computeroutput>File Servers</computeroutput> screen displays the values collected at the most recent probe for File
+       Server statistics.</para>
+ 
+       <para>A summary line at the top of the screen (just below the standard program version and screen title blocks) specifies the
+       number of monitored File Servers, the number of alerts, and the number of machines affected by the alerts.</para>
+ 
+       <para>The first column always displays the hostnames of the machines running the monitored File Servers.</para>
+ 
+       <para>To the right of the hostname column appear as many columns of statistics as can fit within the current width of the
+       display screen or window; each column requires space for 10 characters. The name of the statistic appears at the top of each
+       column. If the File Server on a machine did not respond to the most recent probe, a pair of dashes
+       (<computeroutput>--</computeroutput>) appears in each column. If a value exceeds its configured threshold, it is highlighted
+       in reverse video. If a value is too large to fit into the allotted column width, it overflows into the next row in the same
+       column.</para>
+ 
+       <para>For a list of the available File Server statistics, see <link linkend="HDRWQ617">Appendix C, The afsmonitor Program
+       Statistics</link>.</para>
+ 
+       <para>The following graphic depicts the <computeroutput>File Servers</computeroutput> screen that follows the System Overview
+       Screen example previously discussed; however, one additional server probe has been completed. In this example, the File Server
+       process on <emphasis role="bold">fs1</emphasis> has exceeded the configured threshold for the number of performance calls
+       received (the <emphasis role="bold">numPerfCalls</emphasis> statistic), and that field appears in reverse video. Host
+       <emphasis role="bold">fs6</emphasis> did not respond to Probe 10, so dashes appear in all fields.</para>
+ 
+       <figure id="Figure_7" label="7">
+         <title>The afsmonitor File Servers Screen</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="fserver1.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+ 
+       <para>Both the File Servers and Cache Managers screen (discussed in the following section) can display hundreds of columns of
+       data and are therefore designed to scroll left and right. In the preceding graphic, the screen displays the leftmost screen
+       and the screen title block shows that column 1 of 235 is displayed. The appearance of the
+       <computeroutput>&gt;&gt;&gt;</computeroutput> symbol in the upper right hand corner of the screen and the <emphasis
+       role="bold">right</emphasis> command in the command block indicate that additional data is available by scrolling right. (For
+       information on the available statistics, see <link linkend="HDRWQ617">Appendix C, The afsmonitor Program
+       Statistics</link>.)</para>
+ 
+       <para>If the <emphasis role="bold">right</emphasis> command is executed, the screen looks something like the following
+       example. Note that the horizontal scroll symbols now point both to the left (<computeroutput>&lt;&lt;&lt;</computeroutput>)
+       and to the right (<computeroutput>&gt;&gt;&gt;</computeroutput>) and both the <emphasis role="bold">left</emphasis> and
+       <emphasis role="bold">right</emphasis> commands appear, indicating that additional data is available by scrolling both left
+       and right.</para>
+ 
+       <figure id="Figure_8" label="8">
+         <title>The afsmonitor File Servers Screen Shifted One Page to the Right</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="fserver2.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+     </sect2>
+ 
+     <sect2 id="Header_395">
+       <title>The Cache Managers Screen</title>
+ 
+       <para>The <computeroutput>Cache Managers</computeroutput> screen displays the values collected at the most recent probe for
+       Cache Manager statistics.</para>
+ 
+       <para>A summary line at the top of the screen (just below the standard program version and screen title blocks) specifies the
+       number of monitored Cache Managers, the number of alerts, and the number of machines affected by the alerts.</para>
+ 
+       <para>The first column always displays the hostnames of the machines running the monitored Cache Managers.</para>
+ 
+       <para>To the right of the hostname column appear as many columns of statistics as can fit within the current width of the
+       display screen or window; each column requires space for 10 characters. The name of the statistic appears at the top of each
+       column. If the Cache Manager on a machine did not respond to the most recent probe, a pair of dashes
+       (<computeroutput>--</computeroutput>) appears in each column. If a value exceeds its configured threshold, it is highlighted
+       in reverse video. If a value is too large to fit into the allotted column width, it overflows into the next row in the same
+       column.</para>
+ 
+       <para>For a list of the available Cache Manager statistics, see <link linkend="HDRWQ617">Appendix C, The afsmonitor Program
+       Statistics</link>.</para>
+ 
+       <para>The following graphic depicts a Cache Managers screen that follows the System Overview Screen previously discussed. In
+       the example, the Cache Manager process on host <emphasis role="bold">cli33</emphasis> has exceeded the configured threshold
+       for the number of cells it can contact (the <emphasis role="bold">numCellsContacted</emphasis> statistic), so that field
+       appears in reverse video.</para>
+ 
+       <figure id="Figure_9" label="9">
+         <title>The afsmonitor Cache Managers Screen</title>
+ 
+         <mediaobject>
+           <imageobject>
+             <imagedata fileref="cachmgr.png" scale="50" />
+           </imageobject>
+         </mediaobject>
+       </figure>
+ 
+       <para><emphasis role="bold"> </emphasis></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ351">
+     <title>Configuring the afsmonitor Program</title>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>creating configuration files for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>configuring</primary>
+ 
+       <secondary>afsmonitor program</secondary>
+     </indexterm>
+ 
+     <para>To customize the <emphasis role="bold">afsmonitor</emphasis> program, create an ASCII-format configuration file and use
+     the <emphasis role="bold">-config</emphasis> argument to name it. You can specify the following in the configuration file:
+     <itemizedlist>
+         <listitem>
+           <para>The File Servers, Cache Managers, or both to monitor.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The statistics to display. By default, the display includes 271 statistics for File Servers and 570 statistics for
+           Cache Managers. For information on the available statistics, see <link linkend="HDRWQ617">Appendix C, The afsmonitor
+           Program Statistics</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The threshold values to set for statistics and a script or program to execute if a threshold is exceeded. By
+           default, no threshold values are defined and no scripts or programs are executed.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The following list describes the instructions that can appear in the configuration file: <variablelist>
+         <varlistentry>
+           <term><computeroutput>cm</computeroutput> <replaceable>hostname</replaceable></term>
+ 
+           <listitem>
+             <para>Names a client machine for which to display Cache Manager statistics. The order of <emphasis
+             role="bold">cm</emphasis> lines in the file determines the order in which client machines appear from top to bottom on
+             the <computeroutput>System Overview</computeroutput> and <computeroutput>Cache Managers</computeroutput> output
+             screens.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><computeroutput>fs</computeroutput> <replaceable>hostname</replaceable></term>
+ 
+           <listitem>
+             <para>Names a file server machine for which to display File Server statistics. The order of <emphasis
+             role="bold">fs</emphasis> lines in the file determines the order in which file server machines appear from top to bottom
+             on the <computeroutput>System Overview</computeroutput> and <computeroutput>File Servers</computeroutput> output
+             screens.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><computeroutput>thresh fs | cm <replaceable>field_name</replaceable> <replaceable>thresh_val</replaceable>
+           [<replaceable>cmd_to_run</replaceable>] [<replaceable>arg1</replaceable>] . . .
+           [<replaceable>argn</replaceable>]</computeroutput></term>
+ 
+           <listitem>
+             <para>Assigns the threshold value thresh_val to the statistic field_name, for either a File Server statistic (<emphasis
+             role="bold">fs</emphasis>) or a Cache Manager statistic (<emphasis role="bold">cm</emphasis>). The optional
+             cmd_to_execute field names a binary or script to execute each time the value of the statistic changes from being below
+             thresh_val to being at or above thresh_val. A change between two values that both exceed thresh_val does not retrigger
+             the binary or script. The optional arg1 through argn fields are additional values that the <emphasis
+             role="bold">afsmonitor</emphasis> program passes as arguments to the cmd_to_execute command. If any of them include one
+             or more spaces, enclose the entire field in double quotes.</para>
+ 
+             <para>The parameters <emphasis role="bold">fs</emphasis>, <emphasis role="bold">cm</emphasis>, field_name,
+             threshold_val, and arg1 through argn correspond to the values with the same name on the <emphasis
+             role="bold">thresh</emphasis> line. The host_name parameter identifies the file server or client machine where the
+             statistic has crossed the threshold, and the actual_val parameter is the actual value of field_name that equals or
+             exceeds the threshold value.</para>
+ 
+             <para>Use the <emphasis role="bold">thresh</emphasis> line to set either a global threshold, which applies to all file
+             server machines listed on <emphasis role="bold">fs</emphasis> lines or client machines listed on <emphasis
+             role="bold">cm</emphasis> lines in the configuration file, or a machine-specific threshold, which applies to only one
+             file server or client machine. <itemizedlist>
+                 <listitem>
+                   <para>To set a global threshold, place the <emphasis role="bold">thresh</emphasis> line before any of the
+                   <emphasis role="bold">fs</emphasis> or <emphasis role="bold">cm</emphasis> lines in the file.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>To set a machine-specific threshold, place the <emphasis role="bold">thresh</emphasis> line below the
+                   corresponding <emphasis role="bold">fs</emphasis> or <emphasis role="bold">cm</emphasis> line, and above any other
+                   <emphasis role="bold">fs</emphasis> or <emphasis role="bold">cm</emphasis> lines. A machine-specific threshold
+                   value always overrides the corresponding global threshold, if set. Do not place a <emphasis role="bold">thresh
+                   fs</emphasis> line directly after a <emphasis role="bold">cm</emphasis> line or a <emphasis role="bold">thresh
+                   cm</emphasis> line directly after a <emphasis role="bold">fs</emphasis> line.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><computeroutput>show fs | cm <replaceable>field/group/section</replaceable></computeroutput></term>
+ 
+           <listitem>
+             <para>Specifies which individual statistic, group of statistics, or section of statistics to display on the
+             <computeroutput>File Servers</computeroutput> screen (<emphasis role="bold">fs</emphasis>) or <computeroutput>Cache
+             Managers</computeroutput> screen (<emphasis role="bold">cm</emphasis>) and the order in which to display them. The
+             appendix of <emphasis role="bold">afsmonitor</emphasis> statistics in the <emphasis>OpenAFS Administration
+             Guide</emphasis> specifies the group and section to which each statistic belongs. Include as many <emphasis
+             role="bold">show</emphasis> lines as necessary to customize the screen display as desired, and place them anywhere in
+             the file. The top-to-bottom order of the <emphasis role="bold">show</emphasis> lines in the configuration file
+             determines the left-to-right order in which the statistics appear on the corresponding screen.</para>
+ 
+             <para>If there are no <emphasis role="bold">show</emphasis> lines in the configuration file, then the screens display
+             all statistics for both Cache Managers and File Servers. Similarly, if there are no <emphasis role="bold">show
+             fs</emphasis> lines, the <computeroutput>File Servers</computeroutput> screen displays all file server statistics, and
+             if there are no <emphasis role="bold">show cm</emphasis> lines, the <computeroutput>Cache Managers</computeroutput>
+             screen displays all client statistics.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"># comments</emphasis></term>
+ 
+           <listitem>
+             <para>Precedes a line of text that the <emphasis role="bold">afsmonitor</emphasis> program ignores because of the
+             initial number (<emphasis role="bold">#</emphasis>) sign, which must appear in the very first column of the line.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist></para>
+ 
+     <para>For a list of the values that can appear in the field/group/section field of a <emphasis role="bold">show</emphasis>
+     instruction, see <link linkend="HDRWQ617">Appendix C, The afsmonitor Program Statistics</link>.)</para>
+ 
+     <para>The following example illustrates a possible configuration file:</para>
+ 
+     <programlisting>
+    thresh cm dlocalAccesses  1000000
+    thresh cm dremoteAccesses  500000 handleDRemote
+    thresh fs rx_maxRtt_Usec     1000
+    cm client5
+    cm client33
+    cm client14
+    thresh cm dlocalAccesses  2000000
+    thresh cm vcacheMisses      10000
+    cm client2
+    fs fs3
+    fs fs9
+    fs fs5
+    fs fs10
+    show cm numCellsContacted
+    show cm dlocalAccesses
+    show cm dremoteAccesses
+    show cm vcacheMisses
+    show cm Auth_Stats_group
+ </programlisting>
+ 
+     <para>Since the first three <emphasis role="bold">thresh</emphasis> instructions appear before any <emphasis
+     role="bold">fs</emphasis> or <emphasis role="bold">cm</emphasis> instructions, they set global threshold values: <itemizedlist>
+         <listitem>
+           <para>All Cache Manager process in this file use <emphasis role="bold">1000000</emphasis> as the threshold for the
+           <emphasis role="bold">dlocalAccesses</emphasis> statistic (except for the machine <emphasis role="bold">client2</emphasis>
+           which uses an overriding value of <emphasis role="bold">2000000</emphasis>.)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>All Cache Manager processes in this file use <emphasis role="bold">500000</emphasis> as the threshold value for the
+           <emphasis role="bold">dremoteAccesses</emphasis> statistic; if that value is exceeded, the script <emphasis
+           role="bold">handleDRemote</emphasis> is invoked.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>All File Server processes in this file use <emphasis role="bold">1000</emphasis> as the threshold value for the
+           <emphasis role="bold">rx_maxRtt_Usec</emphasis> statistic.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The four <emphasis role="bold">cm</emphasis> instructions monitor the Cache Manager on the machines <emphasis
+     role="bold">client5</emphasis>, <emphasis role="bold">client33</emphasis>, <emphasis role="bold">client14</emphasis>, and
+     <emphasis role="bold">client2</emphasis>. The first three use all of the global threshold values.</para>
+ 
+     <para>The Cache Manager on <emphasis role="bold">client2</emphasis> uses the global threshold value for the <emphasis
+     role="bold">dremoteAccesses</emphasis> statistic, but a different one for the <emphasis role="bold">dlocalAccesses</emphasis>
+     statistic. Furthermore, <emphasis role="bold">client22</emphasis> is the only Cache Manager that uses the threshold set for the
+     <emphasis role="bold">vcacheMisses</emphasis> statistic.</para>
+ 
+     <para>The <emphasis role="bold">fs</emphasis> instructions monitor the File Server on the machines <emphasis
+     role="bold">fs3</emphasis>, <emphasis role="bold">fs9</emphasis>, <emphasis role="bold">fs5</emphasis>, and <emphasis
+     role="bold">fs10</emphasis>. They all use the global threshold for the<emphasis role="bold">rx_maxRtt_Usec</emphasis>
+     statistic.</para>
+ 
+     <para>Because there are no <emphasis role="bold">show fs</emphasis> instructions, the File Servers screen displays all File
+     Server statistics. The Cache Managers screen displays only the statistics named in <emphasis role="bold">show cm</emphasis>
+     instructions, ordering them from left to right. The <emphasis role="bold">Auth_Stats_group</emphasis> includes several
+     statistics, all of which are displayed (<emphasis role="bold">curr_PAGs</emphasis>, <emphasis
+     role="bold">curr_Records</emphasis>, <emphasis role="bold">curr_AuthRecords</emphasis>, <emphasis
+     role="bold">curr_UnauthRecords</emphasis>, <emphasis role="bold">curr_MaxRecordsInPAG</emphasis>, <emphasis
+     role="bold">curr_LongestChain</emphasis>, <emphasis role="bold">PAGCreations</emphasis>, <emphasis
+     role="bold">TicketUpdates</emphasis>, <emphasis role="bold">HWM_PAGS</emphasis>, <emphasis role="bold">HWM_Records</emphasis>,
+     <emphasis role="bold">HWM_MaxRecordsInPAG</emphasis>, and <emphasis role="bold">HWM_LongestChain</emphasis>).</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ352">
+     <title>Writing afsmonitor Statistics to a File</title>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>creating an output file</secondary>
+     </indexterm>
+ 
+     <para>All of the statistical information collected and displayed by the <emphasis role="bold">afsmonitor</emphasis> program can
+     be preserved by writing it to an output file. You can create an output file by using the <emphasis
+     role="bold">-output</emphasis> argument when you startup the <emphasis role="bold">afsmonitor</emphasis> process. You can use
+     the output file to track process performance over long periods of time and to apply post-processing techniques to further
+     analyze system trends.</para>
+ 
+     <para>The <emphasis role="bold">afsmonitor</emphasis> program output file is a simple ASCII file that records the information
+     reported by the File Server and Cache Manager screens. The output file has the following format:</para>
+ 
+     <programlisting>
+    time   host_name <emphasis role="bold">CM</emphasis>|<emphasis role="bold">FS</emphasis>   list_of_measured_values
+ </programlisting>
+ 
+     <para>and specifies the <emphasis>time</emphasis> at which the <emphasis>list_of_measured_values</emphasis> were gathered from
+     the Cache Manager (<emphasis role="bold">CM</emphasis>) or File Server (<emphasis role="bold">FS</emphasis>) process housed on
+     host_name. On those occasion where probes fail, the value <computeroutput>-1</computeroutput> is reported instead of the
+     <emphasis>list_of_measured_values</emphasis>.</para>
+ 
+     <para>This file format provides several advantages: <itemizedlist>
+         <listitem>
+           <para>It can be viewed using a standard editor. If you intend to view this file frequently, use the <emphasis
+           role="bold">-detailed</emphasis> flag with the <emphasis role="bold">-output</emphasis> argument. It formats the output
+           file in a way that is easier to read.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It can be passed through filters to extract desired information using the standard set of UNIX tools.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It is suitable for long term storage of the <emphasis role="bold">afsmonitor</emphasis> program output.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>command syntax</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>afsmonitor</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="Header_398">
+     <title>To start the afsmonitor Program</title>
+ 
+     <orderedlist>
+       <listitem>
+         <para>Open a separate command shell window or use a dedicated terminal for each instance of the <emphasis
+         role="bold">afsmonitor</emphasis> program. This window or terminal must be devoted to the exclusive use of the <emphasis
+         role="bold">afsmonitor</emphasis> process because the command cannot be run in the background.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Initialize the <emphasis role="bold">afsmonitor</emphasis> program. The message <computeroutput>afsmonitor Collecting
+         Statistics...</computeroutput>, followed by the appearance of the <computeroutput>System Overview</computeroutput> screen,
+         confirms a successful start. <programlisting>
+    % <emphasis role="bold">afsmonitor</emphasis> [<emphasis role="bold">initcmd</emphasis>]  [<emphasis role="bold">-config</emphasis> &lt;<replaceable>configuration file</replaceable>&gt;]  \
+                 [<emphasis role="bold">-frequency</emphasis> &lt;<replaceable>poll frequency, in seconds</replaceable>&gt;]  \
+                 [<emphasis role="bold">-output</emphasis> &lt;<replaceable>storage file name</replaceable>&gt;] [<emphasis
+               role="bold">-detailed</emphasis>]  \
+                 [<emphasis role="bold">-debug</emphasis> &lt;<replaceable>turn debugging output on to the named file</replaceable>&gt;] \
+                 [<emphasis role="bold">-fshosts</emphasis> &lt;<replaceable>list of file servers to monitor</replaceable>&gt;+]  \
+                 [<emphasis role="bold">-cmhosts</emphasis> &lt;<replaceable>list of cache managers to monitor</replaceable>&gt;+]
+    afsmonitor Collecting Statistics...
+ </programlisting></para>
+ 
+         <para>where <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">initcmd</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an optional string that accommodates the command's use of the AFS command parser. It can be omitted and
+                 ignored.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-config</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the pathname of an <emphasis role="bold">afsmonitor</emphasis> configuration file, which lists the
+                 machines and statistics to monitor. Partial pathnames are interpreted relative to the current working directory.
+                 Provide either this argument or one or both of the <emphasis role="bold">-fshosts</emphasis> and <emphasis
+                 role="bold">-cmhosts</emphasis> arguments. You must use a configuration file to set thresholds or customize the
+                 screen display. For instructions on creating the configuration file, see <link linkend="HDRWQ351">Configuring the
+                 afsmonitor Program</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-frequency</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies how often to probe the File Server and Cache Manager processes, as a number of seconds. Acceptable
+                 values range from <emphasis role="bold">1</emphasis> and <emphasis role="bold">86400</emphasis>; the default value
+                 is <emphasis role="bold">60</emphasis>. This frequency applies to both File Server and Cache Manager probes;
+                 however, File Server and Cache Manager probes are initiated and processed independent of each other. The actual
+                 interval between probes to a host is the probe frequency plus the time needed by all hosts to respond to the
+                 probe.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-output</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name of an output file to which to write all of the statistical data. By default, no output file
+                 is created. For information on this file, see <link linkend="HDRWQ352">Writing afsmonitor Statistics to a
+                 File</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-detailed</emphasis></term>
+ 
+               <listitem>
+                 <para>Formats the output file named by the <emphasis role="bold">-output</emphasis> argument to be more easily
+                 readable. The <emphasis role="bold">-output</emphasis> argument must be provided along with this flag.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-fshosts</emphasis></term>
+ 
+               <listitem>
+                 <para>Identifies each File Server process to monitor by specifying the host it is running on. You can identify a
+                 host using either its complete Internet-style host name or an abbreviation acceptable to the cell's naming service.
+                 Combine this argument with the <emphasis role="bold">-cmhosts</emphasis> if you wish, but not the <emphasis
+                 role="bold">-config</emphasis> argument.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-cmhosts</emphasis></term>
+ 
+               <listitem>
+                 <para>Identifies each Cache Manager process to monitor by specifying the host it is running on. You can identify a
+                 host using either its complete Internet-style host name or an abbreviation acceptable to the cell's naming service.
+                 Combine this argument with the <emphasis role="bold">-fshosts</emphasis> if you wish, but not the <emphasis
+                 role="bold">-config</emphasis> argument.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+       </listitem>
+     </orderedlist>
+   </sect1>
+ 
+   <sect1 id="Header_399">
+     <title>To stop the afsmonitor program</title>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>stopping</secondary>
+     </indexterm>
+ 
+     <para>To exit an <emphasis role="bold">afsmonitor</emphasis> program session, Enter the &lt;<emphasis
+     role="bold">Ctrl-c</emphasis>&gt; interrupt signal or an uppercase <emphasis role="bold">Q</emphasis>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ353">
+     <title>The xstat Data Collection Facility</title>
+ 
+     <indexterm>
+       <primary>xstat data collection facility</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>xstat data collection facility</primary>
+ 
+       <secondary>libxstat_fs.a library</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>xstat data collection facility</primary>
+ 
+       <secondary>libxstat_cm.a library</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>data collection</primary>
+ 
+       <secondary>with xstat data collection facility</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>collecting</primary>
+ 
+       <secondary>data with xstat data collection facility</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>File Server</primary>
+ 
+       <secondary>collecting data with xstat data collection facility</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>collecting data with xstat data collection facility</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>File Server</primary>
+ 
+       <secondary>xstat data collection facility libraries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>xstat data collection facility libraries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>libxstat_fs.a library</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>libxstat_cm.a library</primary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">afsmonitor</emphasis> program uses the <emphasis role="bold">xstat</emphasis> data collection
+     facility to gather and calculate the data that it (the <emphasis role="bold">afsmonitor</emphasis> program) then uses to perform
+     its function. You can also use the <emphasis role="bold">xstat</emphasis> facility to create your own data display programs. If
+     you do, keep the following in mind. The File Server considers any program calling its RPC routines to be a Cache Manager;
+     therefore, any program calling the File Server interface directly must export the Cache Manager's callback interface. The
+     calling program must be capable of emulating the necessary callback state, and it must respond to periodic keep-alive messages
+     from the File Server. In addition, a calling program must be able to gather the collected data.</para>
+ 
+     <para>The <emphasis role="bold">xstat</emphasis> facility consists of two C language libraries available to user-level
+     applications: <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">/usr/afsws/lib/afs/libxstat_fs.a</emphasis> exports calls that gather information from one or
+           more running File Server processes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">/usr/afsws/lib/afs/libxstat_cm.a</emphasis> exports calls that collect information from one or
+           more running Cache Managers.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The libraries allow the caller to register <itemizedlist>
+         <listitem>
+           <para>A set of File Servers or Cache Managers to be examined.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The frequency with which the File Servers or Cache Managers are to be probed for data.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A user-specified routine to be called each time data is collected.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The libraries handle all of the lightweight processes, callback interactions, and timing issues associated with the data
+     collection. The user needs only to process the data as it arrives.</para>
+ 
+     <sect2 id="Header_401">
+       <title>The libxstat Libraries</title>
+ 
+       <indexterm>
+         <primary>libxstat_fs.a library</primary>
+ 
+         <secondary>routines</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_cm.a library</primary>
+ 
+         <secondary>routines</secondary>
+       </indexterm>
+ 
+       <para>The <emphasis role="bold">libxstat_fs.a</emphasis> and <emphasis role="bold">libxstat_cm.a</emphasis> libraries handle
+       the callback requirements and other complications associated with the collection of data from File Servers and Cache Managers.
+       The user provides only the means of accumulating the desired data. Each <emphasis role="bold">xstat</emphasis> library
+       implements three routines: <itemizedlist>
+           <listitem>
+             <para>Initialization (<emphasis role="bold">xstat_fs_Init</emphasis> and <emphasis role="bold">xstat_cm_Init</emphasis>)
+             arranges the periodic collection and handling of data.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Immediate probe (<emphasis role="bold">xstat_fs_ForceProbeNow</emphasis> and <emphasis
+             role="bold">xstat_cm_ForceProbeNow</emphasis>) forces the immediate collection of data, after which collection returns
+             to its normal probe schedule.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Cleanup (<emphasis role="bold">xstat_fs_Cleanup</emphasis> and <emphasis role="bold">xstat_cm_Cleanup</emphasis>)
+             terminates all connections and removes all traces of the data collection from memory.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>xstat data collections</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>xstat data collections</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>xstat data collection facility</primary>
+ 
+         <secondary>data collections</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_fs.a library</primary>
+ 
+         <secondary>data collections</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_cm.a library</primary>
+ 
+         <secondary>data collections</secondary>
+       </indexterm>
+ 
+       <para>The File Server and Cache Manager each define data collections that clients can fetch. A data collection is simply a
+       related set of numbers that can be collected as a unit. For example, the File Server and Cache Manager each define profiling
+       and performance data collections. The profiling collections maintain counts of the number of times internal functions are
+       called within servers, allowing bottleneck analysis to be performed. The performance collections record, among other things,
+       internal disk I/O statistics for a File Server and cache effectiveness figures for a Cache Manager, allowing for performance
+       analysis.</para>
+ 
+       <indexterm>
+         <primary>xstat data collection facility</primary>
+ 
+         <secondary>obtaining more information</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_fs.a library</primary>
+ 
+         <secondary>obtaining more information</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_cm.a library</primary>
+ 
+         <secondary>obtaining more information</secondary>
+       </indexterm>
+ 
+       <para>For a copy of the detailed specification which provides much additional usage information about the <emphasis
+       role="bold">xstat</emphasis> facility, its libraries, and the routines in the libraries, contact AFS Product Support.</para>
+     </sect2>
+ 
+     <sect2 id="Header_402">
+       <title>Example xstat Commands</title>
+ 
+       <indexterm>
+         <primary>xstat data collection facility</primary>
+ 
+         <secondary>example commands</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_fs.a library</primary>
+ 
+         <secondary>example command using</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_cm.a library</primary>
+ 
+         <secondary>example command using</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>xstat example commands</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>xstat example commands</secondary>
+       </indexterm>
+ 
+       <para>AFS comes with two low-level, example commands: <emphasis role="bold">xstat_fs_test</emphasis> and <emphasis
+       role="bold">xstat_cm_test</emphasis>. The commands allow you to experiment with the <emphasis role="bold">xstat</emphasis>
+       facility. They gather information and display the available data collections for a File Server or Cache Manager. They are
+       intended merely to provide examples of the types of data that can be collected via <emphasis role="bold">xstat</emphasis>;
+       they are not intended for use in the actual collection of data.</para>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>xstat_fs_test</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>libxstat_fs.a library</primary>
+ 
+         <secondary>xstat_fs_test example command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>File Server</primary>
+ 
+         <secondary>xstat_fs_test example command</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>xstat data collection facility</primary>
+ 
+         <secondary>xstat_fs_test example command</secondary>
+       </indexterm>
+ 
+       <sect3 id="Header_403">
+         <title>To use the example xstat_fs_test command</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Issue the example <emphasis role="bold">xstat_fs_test</emphasis> command to test the routines in the <emphasis
+             role="bold">libxstat_fs.a</emphasis> library and display the data collections associated with the File Server process.
+             The command executes in the foreground. <programlisting>
+    % <emphasis role="bold">xstat_fs_test</emphasis> [<emphasis role="bold">initcmd</emphasis>]  \
+                    <emphasis role="bold">-fsname</emphasis> &lt;<replaceable>File Server name(s) to monitor</replaceable>&gt;+  \
+                    <emphasis role="bold">-collID</emphasis> &lt;<replaceable>Collection(s) to fetch</replaceable>&gt;+  [<emphasis
+                   role="bold">-onceonly</emphasis>]  \
+                    [<emphasis role="bold">-frequency</emphasis> &lt;<replaceable>poll frequency, in seconds</replaceable>&gt;]  \
+                    [<emphasis role="bold">-period</emphasis> &lt;<replaceable>data collection time, in minutes</replaceable>&gt;] [<emphasis
+                   role="bold">-debug</emphasis>] 
+ </programlisting></para>
+ 
+             <para>where <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold">xstat_fs_test</emphasis></term>
+ 
+                   <listitem>
+                     <para>Must be typed in full.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">initcmd</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is an optional string that accommodates the command's use of the AFS command parser. It can be omitted and
+                     ignored.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-fsname</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is the Internet host name of each file server machine on which to monitor the File Server process.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-collID</emphasis></term>
+ 
+                   <listitem>
+                     <para>Specifies each data collection to return. The indicated data collection defines the type and amount of
+                     data the command is to gather about the File Server. Data is returned in the form of a predefined data structure
+                     (refer to the specification documents referenced previously for more information about the data
+                     structures).</para>
+ 
+                     <para>There are two acceptable values: <itemizedlist>
+                         <listitem>
+                           <para><emphasis role="bold">1</emphasis> reports various internal performance statistics related to the
+                           File Server (for example, vnode cache entries and <emphasis role="bold">Rx</emphasis> protocol
+                           activity).</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para><emphasis role="bold">2</emphasis> reports all of the internal performance statistics provided by
+                           the <emphasis role="bold">1</emphasis> setting, plus some additional, detailed performance figures about
+                           the File Server (for example, minimum, maximum, and cumulative statistics regarding File Server RPCs, how
+                           long they take to complete, and how many succeed).</para>
+                         </listitem>
+                       </itemizedlist></para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-onceonly</emphasis></term>
+ 
+                   <listitem>
+                     <para>Directs the command to gather statistics just one time. Omit this option to have the command continue to
+                     probe the File Server for statistics every 30 seconds. If you omit this option, you can use the &lt;<emphasis
+                     role="bold">Ctrl-c</emphasis>&gt; interrupt signal to halt the command at any time.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-frequency</emphasis></term>
+ 
+                   <listitem>
+                     <para>Sets the frequency in seconds at which the program initiates probes to the File Server. If you omit this
+                     argument, the default is 30 seconds.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-period</emphasis></term>
+ 
+                   <listitem>
+                     <para>Sets how long the utility runs before exiting, as a number of minutes. If you omit this argument, the
+                     default is 10 minutes.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-debug</emphasis></term>
+ 
+                   <listitem>
+                     <para>Displays additional information as the command runs.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+         </orderedlist>
+ 
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>xstat_cm_test</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>libxstat_cm.a library</primary>
+ 
+           <secondary>xstat_cm_test example command</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>Cache Manager</primary>
+ 
+           <secondary>xstat_cm_test example command</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>xstat data collection facility</primary>
+ 
+           <secondary>xstat_cm_test example command</secondary>
+         </indexterm>
+       </sect3>
+ 
+       <sect3 id="Header_404">
+         <title>To use the example xstat_cm_test command</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Issue the example <emphasis role="bold">xstat_cm_test</emphasis> command to test the routines in the <emphasis
+             role="bold">libxstat_cm.a</emphasis> library and display the data collections associated with the Cache Manager. The
+             command executes in the foreground. <programlisting>
+    % <emphasis role="bold">xstat_cm_test</emphasis> [<emphasis role="bold">initcmd</emphasis>]  \
+                    <emphasis role="bold">-cmname</emphasis> &lt;<replaceable>Cache Manager name(s) to monitor</replaceable>&gt;+  \
+                    <emphasis role="bold">-collID</emphasis> &lt;<replaceable>Collection(s) to fetch</replaceable>&gt;+ \
+                    [<emphasis role="bold">-onceonly</emphasis>] [<emphasis role="bold">-frequency</emphasis> &lt;<replaceable>poll frequency, in seconds</replaceable>&gt;]  \
+                    [<emphasis role="bold">-period</emphasis> &lt;<replaceable>data collection time, in minutes</replaceable>&gt;] [<emphasis
+                   role="bold">-debug</emphasis>] 
+ </programlisting></para>
+ 
+             <para>where <variablelist>
+                 <varlistentry>
+                   <term><emphasis role="bold">xstat_cm_test</emphasis></term>
+ 
+                   <listitem>
+                     <para>Must be typed in full.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">initcmd</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is an optional string that accommodates the command's use of the AFS command parser. It can be omitted and
+                     ignored.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-cmname</emphasis></term>
+ 
+                   <listitem>
+                     <para>Is the host name of each client machine on which to monitor the Cache Manager.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-collID</emphasis></term>
+ 
+                   <listitem>
+                     <para>Specifies each data collection to return. The indicated data collection defines the type and amount of
+                     data the command is to gather about the Cache Manager. Data is returned in the form of a predefined data
+                     structure (refer to the specification documents referenced previously for more information about the data
+                     structures).</para>
+ 
+                     <para>There are two acceptable values: <itemizedlist>
+                         <listitem>
+                           <para><emphasis role="bold">0</emphasis> provides profiling information about the numbers of times
+                           different internal Cache Manager routines were called since the Cache manager was started.</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para><emphasis role="bold">1</emphasis> reports various internal performance statistics related to the
+                           Cache manager (for example, statistics about how effectively the cache is being used and the quantity of
+                           intracell and intercell data access).</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para><emphasis role="bold">2</emphasis> reports all of the internal performance statistics provided by
+                           the <emphasis role="bold">1</emphasis> setting, plus some additional, detailed performance figures about
+                           the Cache Manager (for example, statistics about the number of RPCs sent by the Cache Manager and how long
+                           they take to complete; and statistics regarding things such as authentication, access, and PAG information
+                           associated with data access).</para>
+                         </listitem>
+                       </itemizedlist></para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-onceonly</emphasis></term>
+ 
+                   <listitem>
+                     <para>Directs the command to gather statistics just one time. Omit this option to have the command continue to
+                     probe the Cache Manager for statistics every 30 seconds. If you omit this option, you can use the &lt;<emphasis
+                     role="bold">Ctrl-c</emphasis>&gt; interrupt signal to halt the command at any time.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-frequency</emphasis></term>
+ 
+                   <listitem>
+                     <para>Sets the frequency in seconds at which the program initiates probes to the Cache Manager. If you omit this
+                     argument, the default is 30 seconds.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-period</emphasis></term>
+ 
+                   <listitem>
+                     <para>Sets how long the utility runs before exiting, as a number of minutes. If you omit this argument, the
+                     default is 10 minutes.</para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term><emphasis role="bold">-debug</emphasis></term>
+ 
+                   <listitem>
+                     <para>Displays additional information as the command runs.</para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+         </orderedlist>
+       </sect3>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ354">
+     <title>Auditing AFS Events on AIX File Servers</title>
+ 
+     <indexterm>
+       <primary>AFS</primary>
+ 
+       <secondary>auditing events on AIX server machines</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AIX</primary>
+ 
+       <secondary>auditing AFS events</secondary>
+ 
+       <tertiary>about</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>auditing AFS events on AIX server machines</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>events</primary>
+ 
+       <secondary>auditing AFS on AIX server machines</secondary>
+     </indexterm>
+ 
+     <para>You can audit AFS events on AIX File Servers using an AFS mechanism that transfers audit information from AFS to the AIX
+     auditing system. The following general classes of AFS events can be audited. For a complete list of specific AFS audit events,
+     see <link linkend="HDRWQ620">Appendix D, AIX Audit Events</link>. <itemizedlist>
+         <listitem>
+           <para>Authentication and Identification Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Security Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Privilege Required Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Object Creation and Deletion Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Attribute Modification Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Process Control Events</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <note>
+       <para>This section assumes familiarity with the AIX auditing system. For more information, see the <emphasis>AIX System
+       Management Guide</emphasis> for the version of AIX you are using.</para>
+     </note>
+ 
+     <sect2 id="Header_406">
+       <title>Configuring AFS Auditing on AIX File Servers</title>
+ 
+       <para>The directory <emphasis role="bold">/usr/afs/local/audit</emphasis> contains three files that contain the information
+       needed to configure AIX File Servers to audit AFS events: <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">events.sample</emphasis> file contains information on auditable AFS events. The contents
+             of this file are integrated into the corresponding AIX events file (<emphasis
+             role="bold">/etc/security/audit/events</emphasis>).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">config.sample</emphasis> file defines the six classes of AFS audit events and the events
+             that make up each class. It also defines the classes of AFS audit events to audit for the File Server, which runs as the
+             local superuser <emphasis role="bold">root</emphasis>. The contents of this file must be integrated into the
+             corresponding AIX config file (<emphasis role="bold">/etc/security/audit/config</emphasis>).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">objects.sample</emphasis> file contains a list of information about audited files. You
+             must only audit files in the local file space. The contents of this file must be integrated into the corresponding AIX
+             objects file (<emphasis role="bold">/etc/security/audit/objects</emphasis>).</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Once you have properly configured these files to include the AFS-relevant information, use the AIX auditing system to
+       start up and shut down the auditing.</para>
+     </sect2>
+ 
+     <sect2 id="Header_407">
+       <title>To enable AFS auditing</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Create the following string in the file <emphasis role="bold">/usr/afs/local/Audit</emphasis> on each File Server on
+           which you plan to audit AFS events: <programlisting><emphasis role="bold">AFS_AUDIT_AllEvents</emphasis></programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command (with the <emphasis role="bold">-all</emphasis> flag)
+           to stop and restart all server processes on each File Server. For instructions on using this command, see <link
+           linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_408">
+       <title>To disable AFS auditing</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Remove the contents of the file <emphasis role="bold">/usr/afs/local/Audit</emphasis> on each File Server for which
+           you are no longer interested in auditing AFS events.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command (with the <emphasis role="bold">-all</emphasis> flag)
+           to stop and restart all server processes on each File Server. For instructions on using this command, see <link
+           linkend="HDRWQ170">Stopping and Immediately Restarting Processes</link>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/AdminGuide/auagd014.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd014.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd014.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,1533 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ355">
+   <title>Managing Server Encryption Keys</title>
+ 
+   <para>This chapter explains how to maintain your cell's server encryption keys, which are vital for secure communications in
+   AFS.</para>
+ 
+   <sect1 id="HDRWQ356">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Add a new server encryption key</entry>
+ 
+             <entry><emphasis role="bold">bos addkey</emphasis> and <emphasis role="bold">kas setpassword</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Inspect key checksums in the Authentication Database</entry>
+ 
+             <entry><emphasis role="bold">kas examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Inspect key checksums in the <emphasis role="bold">KeyFile</emphasis></entry>
+ 
+             <entry><emphasis role="bold">bos listkeys</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove an old server encryption key</entry>
+ 
+             <entry><emphasis role="bold">bos removekey</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ358">
+     <title>About Server Encryption Keys</title>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS</primary>
+ 
+       <secondary>server encryption key</secondary>
+ 
+       <see>server encryption key</see>
+     </indexterm>
+ 
+     <para>An encryption key is a string of octal numbers used to encrypt and decrypt packets of information. In AFS, a server
+     encryption key is the key used to protect information being transferred between AFS server processes and between them and their
+     clients. A server encryption key is essentially a password for a server process and like a user password is stored in the
+     Authentication Database.</para>
+ 
+     <para>Maintaining your cell's server encryption keys properly is the most basic way to protect the information in your AFS
+     filespace from access by unauthorized users.</para>
+ 
+     <sect2 id="Header_412">
+       <title>Keys and Mutual Authentication: A Review</title>
+ 
+       <indexterm>
+         <primary>mutual authentication</primary>
+ 
+         <secondary>server encryption key's role</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server encryption key</primary>
+ 
+         <secondary>role in mutual authentication</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Ticket Granting Service</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>TGS</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server ticket</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>session key</primary>
+       </indexterm>
+ 
+       <para>Server encryption keys play a central role in the mutual authentication between client and server processes in AFS. For
+       a more detailed description of mutual authentication, see <link linkend="HDRWQ75">A More Detailed Look at Mutual
+       Authentication</link>.</para>
+ 
+       <para>When a client wants to contact an AFS server, it first contacts the Ticket Granting Service (TGS) module of the
+       Authentication Server. After verifying the client's identity (based indirectly on the password of the human user whom the
+       client represents), the TGS gives the client a server ticket. This ticket is encrypted with the server's encryption key. (The
+       TGS also invents a second encryption key, called the session key, to be used only for a single episode of communication
+       between server and client. The server ticket and session key, together with other pieces of information, are collectively
+       referred to as a token.)</para>
+ 
+       <para>The client cannot read the server ticket or token because it does not know the server encryption key. However, the
+       client sends it to the AFS server along with service requests, because the ticket proves to the AFS server processes that it
+       has already authenticated with the TGS. AFS servers trust the TGS to grant tickets only to valid clients. The fact that the
+       client possesses a ticket encrypted with the server's encryption key proves to the server that the client is valid. On the
+       other hand, the client assumes that only a genuine AFS server knows the server encryption key needed to decrypt the ticket.
+       The server's ability to decrypt the ticket and understand its contents proves to the client that the server is
+       legitimate.</para>
+     </sect2>
+ 
+     <sect2 id="Header_413">
+       <title>Maintaining AFS Server Encryption Keys</title>
+ 
+       <para>As you maintain your cell's server encryption keys, keep the following in mind. <itemizedlist>
+           <listitem>
+             <para>Change the key frequently to enhance your cell's security. Changing the key at least once a month is strongly
+             recommended.</para>
+ 
+             <indexterm>
+               <primary>server encryption key</primary>
+ 
+               <secondary>changing frequently</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>The AFS server encryption key currently in use is stored in two places. When you add a new key, you must make
+             changes in both places and make them in the correct order, as instructed in <link linkend="HDRWQ362">Adding Server
+             Encryption Keys</link>. Failure to follow the instructions can seriously impair cell functioning, as clients and servers
+             become unable to communicate. The two storage sites for the current server encryption key are the following:
+             <orderedlist>
+                 <listitem>
+                   <para>The file <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> on the local disk of every file server
+                   machine. The file can list more than one key, each with an associated numerical identifier, the key version number
+                   or kvno. A client token records the key version number of the key used to seal it, and the server process
+                   retrieves the appropriate key from this file when the client presents the token.</para>
+ 
+                   <indexterm>
+                     <primary>key version number</primary>
+ 
+                     <secondary>defined</secondary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>kvno</primary>
+ 
+                     <secondary></secondary>
+ 
+                     <see>key version number</see>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>KeyFile file</primary>
+ 
+                     <secondary>storage site for server encryption keys</secondary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>files</primary>
+ 
+                     <secondary>/usr/afs/etc/KeyFile</secondary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>server encryption key</primary>
+ 
+                     <secondary>KeyFile file</secondary>
+                   </indexterm>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">afs</emphasis> entry in the Authentication Database. The current server encryption
+                   key is in the entry's password field, just like an individual user's scrambled password. The Authentication
+                   Server's Ticket Granting Service (TGS) uses this key to encrypt the tokens it gives to clients. There is only a
+                   single key in the entry, because the TGS never needs to read existing tokens, but only to generate new ones by
+                   using the current key.</para>
+ 
+                   <indexterm>
+                     <primary>server encryption key</primary>
+ 
+                     <secondary>Authentication Database</secondary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>Authentication Database</primary>
+ 
+                     <secondary>site for AFS server encryption key</secondary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>Authentication Database</primary>
+ 
+                     <secondary>afs entry</secondary>
+                   </indexterm>
+                 </listitem>
+               </orderedlist></para>
+ 
+             <para>For instructions on creating the initial <emphasis role="bold">afs</emphasis> entry and <emphasis
+             role="bold">KeyFile</emphasis> files as you install your cell's first server machine, see the OpenAFS Quick
+             Beginnings.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>At any specific time, the tokens that the Authentication Server's Ticket Granting Service gives to clients are
+             sealed with only one of the server encryption keys, namely the one stored in the <emphasis role="bold">afs</emphasis>
+             entry in the Authentication Database.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When you add a new server encryption key, you cannot immediately remove the former key from the <emphasis
+             role="bold">/usr/afs/etc/KeyFile</emphasis> file on the local disk of every AFS server machine. Any time that you add a
+             new key, it is likely that some clients still have valid, unexpired tokens sealed with the previous key. The more
+             frequently you change the server encryption key, the more such tickets there are likely to be. To be able to grant
+             service appropriately to clients with such tokens, an AFS server process must still be able to access the server
+             encryption key used to seal it.</para>
+ 
+             <para>You can safely delete an old server encryption key only when it is certain that no clients have tokens sealed with
+             that key. In general, wait a period of time at least as long as the maximum token lifetime in your cell. By default, the
+             maximum token lifetime for users is 25 hours (except for users whose Authentication Database entries were created by
+             using the 3.0 version of AFS, for whom the default is 100 hours). You can use the <emphasis
+             role="bold">-lifetime</emphasis> argument to the <emphasis role="bold">kas setfields</emphasis> command to change this
+             default.</para>
+ 
+             <para>Instructions for removing obsolete keys appear in <link linkend="HDRWQ368">Removing Server Encryption
+             Keys</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You create a new AFS server encryption key in much the same way regular users change their passwords, by providing
+             a character string that is converted into an encryption key automatically. See <link linkend="HDRWQ362">Adding Server
+             Encryption Keys</link>.</para>
+ 
+             <indexterm>
+               <primary>server encryption key</primary>
+ 
+               <secondary>password-like nature</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>In addition to using server encryption keys when communicating with clients, the server processes use them to
+             protect communications with other server processes. Therefore, all server machines in your cell must have the same
+             version of the <emphasis role="bold">KeyFile</emphasis> file. The easiest way to maintain consistency (if you run the
+             United States edition of AFS) is to use the Update Server to distribute the contents of the system control machine's
+             <emphasis role="bold">/usr/afs/etc</emphasis> directory to all of the other server machines. There are two implications:
+             <itemizedlist>
+                 <listitem>
+                   <para>You must run the <emphasis role="bold">upserver</emphasis> process on the system control machine and an
+                   <emphasis role="bold">upclientetc</emphasis> process on all other server machines that references the system
+                   control machine. The OpenAFS Quick Beginnings explains how to install both processes. For instructions on
+                   verifying that the Update Server processes are running, see <link linkend="HDRWQ158">Displaying Process Status and
+                   Information from the BosConfig File</link>.</para>
+ 
+                   <indexterm>
+                     <primary>Update Server</primary>
+ 
+                     <secondary>distributor of KeyFile file</secondary>
+                   </indexterm>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Change the <emphasis role="bold">KeyFile</emphasis> file only on the system control machine (except in the
+                   types of emergencies discussed in <link linkend="HDRWQ370">Handling Server Encryption Key Emergencies</link>). Any
+                   changes you make on other server machines are overwritten the next time the <emphasis
+                   role="bold">upclientetc</emphasis> process retrieves the contents of the system control machine's <emphasis
+                   role="bold">/usr/afs/etc</emphasis> directory. By default, this happens every five minutes.</para>
+ 
+                   <indexterm>
+                     <primary>system control machine</primary>
+ 
+                     <secondary>source for common KeyFile file</secondary>
+                   </indexterm>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>If you run the international edition of AFS, do not use the Update Server to distribute the contents of the
+             <emphasis role="bold">/usr/afs/etc</emphasis> directory, particularly the <emphasis role="bold">KeyFile</emphasis> file.
+             The data in the file is too sensitive for transfer in unencrypted form, and because of United States government exports
+             regulations the international edition of AFS does not include the necessary encryption routines in a form that the
+             Update Server can use. You must instead modify the file on each server machine individually, taking care to enter the
+             same key on every server machine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Never edit the <emphasis role="bold">KeyFile</emphasis> directly with a text editor. Instead, always use the
+             appropriate <emphasis role="bold">bos</emphasis> commands as instructed in <link linkend="HDRWQ362">Adding Server
+             Encryption Keys</link> and <link linkend="HDRWQ368">Removing Server Encryption Keys</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ359">
+     <title>Displaying Server Encryption Keys</title>
+ 
+     <para>To display the server encryption keys in the <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file on any file server
+     machine, use the <emphasis role="bold">bos listkeys</emphasis> command. Use the <emphasis role="bold">kas examine</emphasis>
+     command to display the key in the Authentication Database's <emphasis role="bold">afs</emphasis> entry.</para>
+ 
+     <indexterm>
+       <primary>checksum</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>checksum displayed</secondary>
+     </indexterm>
+ 
+     <para>By default the commands do not display the actual string of octal digits that constitute a key, but rather a checksum, a
+     decimal number derived by encrypting a constant with the key. This prevents unauthorized users from easily accessing the actual
+     key, which they can then use to falsify or eavesdrop on protected communications. The <emphasis role="bold">bos
+     listkeys</emphasis> and <emphasis role="bold">kas examine</emphasis> commands generate the same checksum for a given key, so
+     displaying checksums rather than actual keys is generally sufficient. If you suspect that the keys differ in a way that the
+     checksums are not revealing, then you are probably experiencing authentication problems throughout your cell. The easiest
+     solution is to create a new server encryption key following the instructions in <link linkend="HDRWQ362">Adding Server
+     Encryption Keys</link> or <link linkend="HDRWQ370">Handling Server Encryption Key Emergencies</link>. Another common reason to
+     issue the <emphasis role="bold">bos listkeys</emphasis> command is to display the key version numbers currently in use, in
+     preparation for choosing the next one; here, the checksum is sufficient because the key itself is irrelevant.</para>
+ 
+     <para>If it is important to display the actual octal digits, include the <emphasis role="bold">-showkey</emphasis> argument to
+     both the <emphasis role="bold">bos listkeys</emphasis> and <emphasis role="bold">kas examine</emphasis> commands.</para>
+ 
+     <indexterm>
+       <primary>KeyFile file</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>displaying from KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>server encryption keys in KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>bos listkeys</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>listkeys</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ360">
+       <title>To display the KeyFile file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos listkeys</emphasis> command to display the contents of one machine's <emphasis
+           role="bold">/usr/afs/etc/KeyFile</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt; [<emphasis role="bold">-showkey</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listkeys</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a file server machine. In the normal case, it is acceptable to name any machine, because correct cell
+                   functioning requires that the <emphasis role="bold">KeyFile</emphasis> file be the same on all of them.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-showkey</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the octal digits that constitute each key.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>In the following example, the output displays a checksum for each server encryption key rather than the actual octal
+       digits. The penultimate line indicates when an administrator last changed the file, and the final line confirms that the
+       output is complete.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos listkeys fs1.abc.com</emphasis>
+    key 0 has cksum 972037177
+    key 1 has cksum 2825165022
+    Keys last changed on Wed Jan 13 11:20:29 1999. 
+    All done.
+ </programlisting>
+ 
+       <indexterm>
+         <primary>Authentication Database</primary>
+ 
+         <secondary>server encryption key</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>server encryption key from Authentication Database</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afs entry in Authentication Database</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>server encryption key</primary>
+ 
+         <secondary>displaying from Authentication Database</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas examine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>examine, to inspect afs key</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ361">
+       <title>To display the afs key from the Authentication Database</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas examine</emphasis> command to display the <emphasis role="bold">afs</emphasis>
+           entry in the Authentication Database.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas examine afs</emphasis> [<emphasis role="bold">-showkey</emphasis>]  \
+                  <emphasis role="bold">-admin</emphasis>  &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">e</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">afs</emphasis></term>
+ 
+                 <listitem>
+                   <para>Designates the <emphasis role="bold">afs</emphasis> entry.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-showkey</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the octal digits that constitute the key.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account with the <computeroutput>ADMIN</computeroutput> flag on its Authentication
+                   Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as admin_user. Enter
+                   the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>In the following example, the <emphasis role="bold">admin</emphasis> user displays the <emphasis
+       role="bold">afs</emphasis> entry without using the <emphasis role="bold">-showkey</emphasis> flag. The second line shows the
+       key version number in parentheses and the key's checksum. The line that begins with the string <computeroutput>last
+       mod</computeroutput> reports the date on which the indicated administrator changed the key. There is no necessary relationship
+       between this date and the date reported by the <emphasis role="bold">bos listkeys</emphasis> command, because the latter date
+       changes for any type of change to the <emphasis role="bold">KeyFile</emphasis> file, not just a key addition. For a
+       description of the other lines in the output from the <emphasis role="bold">kas examine</emphasis> command, see its reference
+       page in the OpenAFS Administration Reference.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">kas examine afs  -admin admin</emphasis>
+    Administrator's (admin) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    User data for afs
+     key (1) cksum is 2825165022, last cpw: no date
+     password will never expire.
+     An unlimited number of unsuccessful authentications is permitted.
+     entry expires on never. Max ticket lifetime 100.00 hours.
+     last mod on Wed Jan 13 11:21:36 1999 by admin
+     permit password reuse
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ362">
+     <title>Adding Server Encryption Keys</title>
+ 
+     <indexterm>
+       <primary>adding</primary>
+ 
+       <secondary>server encryption key to KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>defining</primary>
+ 
+       <secondary>server encryption key</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>server encryption key</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>adding to KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>KeyFile file</primary>
+ 
+       <secondary>adding server encryption key</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Authentication Database</primary>
+ 
+       <secondary>server encryption key</secondary>
+ 
+       <tertiary>setting</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>defining</primary>
+ 
+       <secondary>server encryption key in Authentication Database</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afs entry in Authentication Database</primary>
+ 
+       <secondary>setting server encryption key</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>setting in Authentication Database</secondary>
+     </indexterm>
+ 
+     <para>As noted, AFS records server encryption keys in two separate places: <orderedlist>
+         <listitem>
+           <para>In the file <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> on the local disk of each server machine, for use
+           by the AFS server processes running on the machine</para>
+         </listitem>
+ 
+         <listitem>
+           <para>In the <emphasis role="bold">afs</emphasis> entry in the Authentication Database, for use by the Ticket Granting
+           Service (TGS) when creating tokens</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>To ensure that server processes and the TGS share the same AFS server encryption key, execute all the steps in this
+     section without interruption.</para>
+ 
+     <para>The following instructions include a step in which you restart the database server processes (the Authentication, Backup,
+     Protection, and Volume Location Server processes) on all database server machines. As a database server process starts, it reads
+     in the server encryption key that has the highest key version number in the <emphasis role="bold">KeyFile</emphasis> file and
+     uses it to protect the messages that it sends for synchronizing the database and maintaining quorum. It uses the same key
+     throughout its lifetime, which can be for an extended period, even if you remove the key from the <emphasis
+     role="bold">KeyFile</emphasis> file. However, if one of the peer database server processes restarts and the others do not,
+     quorum and database synchronization break down because the processes are no longer using the same key: the restarted process is
+     using the key that currently has the highest key version number, and the other processes are still using the key they read in
+     when they originally started. To avoid this problem, it is safest to restart all of the database server processes when adding a
+     new key.</para>
+ 
+     <para>After adding a new key, you can remove obsolete keys from the <emphasis role="bold">KeyFile</emphasis> file to prevent it
+     from becoming cluttered. However, you must take care not to remove keys that client or server processes are still using. For
+     discussion and instructions, see <link linkend="HDRWQ368">Removing Server Encryption Keys</link>.</para>
+ 
+     <sect2 id="HDRWQ363">
+       <title>To add a new server encryption key</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ364" />Issue the <emphasis role="bold">bos listkeys</emphasis> command to display the key version
+           numbers that are already in use, as a first step in choosing the key version number for the new key. <programlisting>
+    % <emphasis role="bold">bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listkeys</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names any file server machine.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ365" />Choose a key version number for the new key, based on the output from Step <link
+           linkend="LIWQ364">2</link> and the following requirements: <itemizedlist>
+               <listitem>
+                 <para>A key version number must be an integer between 0 (zero) and 255 to comply with Kerberos standards. It is
+                 simplest if you keep your key version numbers in sequence by choosing a key version number one greater than the
+                 largest existing one.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Do not reuse a key version number currently found in the <emphasis role="bold">KeyFile</emphasis> file,
+                 particularly if it is also the one in the Authentication Database <emphasis role="bold">afs</emphasis> entry. Client
+                 processes possibly still have tickets sealed with the key that originally had that key version number, but the
+                 server processes start using the new key marked with that key version number. Because the keys do not match, the
+                 server processes refuse requests from clients who hold legitimate tokens.</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <indexterm>
+             <primary>bos commands</primary>
+ 
+             <secondary>addkey</secondary>
+ 
+             <tertiary>basic instructions</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>bos addkey</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ366" />Issue the <emphasis role="bold">bos addkey</emphasis> command to create a new AFS server
+           encryption key in the <emphasis role="bold">KeyFile</emphasis> file.</para>
+ 
+           <para>If you run the United States edition of AFS and use the Update Server to distribute the contents of the system
+           control machine's <emphasis role="bold">/usr/afs/etc</emphasis> directory, substitute the system control machine for the
+           machine name argument. (If you have forgotten which machine is the system control machine, see <link linkend="HDRWQ96">To
+           locate the system control machine</link>.)</para>
+ 
+           <para>If you run the international edition of AFS or do not use the Update Server, repeat the <emphasis role="bold">bos
+           addkey</emphasis> command, substituting each server machine in your cell for the machine name argument in turn.</para>
+ 
+           <para>To avoid visible echoing of the string that corresponds to the new key, omit the <emphasis
+           role="bold">-key</emphasis> argument from the command line; instead enter the string at the prompts that appear when you
+           omit it, as shown in the following syntax specification.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos addkey  -server</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-kvno</emphasis> &lt;<replaceable>key version number</replaceable>&gt;
+    input key: &lt;<replaceable>afs_password</replaceable>&gt;
+    Retype input key: &lt;<replaceable>afs_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addkey</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the cell's system control machine if you are using the Update Server, or each server machine in turn
+                   if you are not.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-kvno</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the new key's key version number as an integer from the range 0 (zero) through 255.</para>
+ 
+                   <para>Remember the number. You need to use it again in Step <link linkend="LIWQ367">6</link>. If you are using the
+                   international edition of AFS, be sure to type the same number each time you issue this command.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">afs_password</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is a character string similar to a user password, of any length from one to about 1,000 characters. To
+                   improve security, include nonalphabetic characters and make the string as long as is practical (you need to type
+                   it only in this step and in Step <link linkend="LIWQ367">6</link>). If you are using the international edition of
+                   AFS, be sure to type the same string each time you issue this command.</para>
+ 
+                   <para>Do not enter an octal string directly. The BOS Server scrambles the character string into an octal string
+                   appropriate for use as an encryption key before recording it in the <emphasis role="bold">KeyFile</emphasis>
+                   file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you are using the Update Server, wait for a few minutes while the Update Server distributes the new <emphasis
+           role="bold">KeyFile</emphasis> file to all server machines. The maximum necessary waiting period is the largest value
+           provided for the <emphasis role="bold">-t</emphasis> argument to the <emphasis role="bold">upclientetc</emphasis>
+           process's initialization command used on any of the server machines; the default time is five minutes.</para>
+ 
+           <para>To be certain that all machines have the same <emphasis role="bold">KeyFile</emphasis> file, issue the <emphasis
+           role="bold">bos listkeys</emphasis> command for every file server machine and verify that the checksum for the new key is
+           the same on all machines.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting>
+ 
+           <para>If you are not using the Update Server, try to complete Step <link linkend="LIWQ366">4</link> within five
+           minutes.</para>
+ 
+           <indexterm>
+             <primary>kas commands</primary>
+ 
+             <secondary>setpassword</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>kas setpassword</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ367" />Issue the <emphasis role="bold">kas setpassword</emphasis> command to enter the same key in
+           the <emphasis role="bold">afs</emphasis> entry in the Authentication Database.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas setpassword -name afs -kvno</emphasis> &lt;<replaceable>kvno</replaceable>&gt;  \
+                      <emphasis role="bold">-admin</emphasis>  &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    new_password: afs_password
+    Verifying, please re-enter new_password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sp</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setpassword</emphasis> (<emphasis
+                   role="bold">setp</emphasis> is the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-name afs</emphasis></term>
+ 
+                 <listitem>
+                   <para>Creates the new key in the <emphasis role="bold">afs</emphasis> entry.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-kvno</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the same key version number as in Step <link linkend="LIWQ366">4</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account with the <computeroutput>ADMIN</computeroutput> flag on its Authentication
+                   Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as admin_user. Enter
+                   the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">afs_password</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the same character string you entered in Step <link linkend="LIWQ366">4</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional.)</emphasis> If you want to verify that the keys you just created in the <emphasis
+           role="bold">KeyFile</emphasis> file and the Authentication Database <emphasis role="bold">afs</emphasis> entry are
+           identical and have the same key version number, follow the instructions in <link linkend="HDRWQ359">Displaying Server
+           Encryption Keys</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command to restart the database server processes on all
+           database server machines. This forces them to start using the key in the <emphasis role="bold">KeyFile</emphasis> file
+           that currently has the highest key version number.</para>
+ 
+           <para>Repeat this command in quick succession for each database server machine, starting with the machine that has the
+           lowest IP address.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos restart</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver kaserver ptserver vlserver</emphasis>
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">res</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">restart</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each database server machine in turn.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">buserver kaserver ptserver vlserver</emphasis></term>
+ 
+                 <listitem>
+                   <para>Designates the Backup Server, Authentication Server, Protection Server, and Volume Location (VL) Server,
+                   respectively.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ368">
+     <title>Removing Server Encryption Keys</title>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>server encryption key from KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>removing from KeyFile file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>KeyFile file</primary>
+ 
+       <secondary>removing server encryption key</secondary>
+     </indexterm>
+ 
+     <para>You can periodically remove old keys from the <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file to keep it to a
+     reasonable size. To avoid disturbing cell functioning, do not remove an old key until all tokens sealed with the key and held by
+     users or client processes have expired. After adding a new key, wait to remove old keys at least as long as the longest token
+     lifetime you use in your cell. For Authentication Database user entries created under AFS version 3.1 or higher, the default
+     token lifetime is 25 hours; for entries created under AFS version 3.0, it is 100 hours.</para>
+ 
+     <para>There is no command for removing the key from the <emphasis role="bold">afs</emphasis> entry in the Authentication
+     Database, because the key field in that entry must never be empty. Use the <emphasis role="bold">kas setpassword</emphasis>
+     command to replace the <emphasis role="bold">afs</emphasis> key, but only as part of the complete procedure detailed in <link
+     linkend="HDRWQ363">To add a new server encryption key</link>.</para>
+ 
+     <para>Never remove from the <emphasis role="bold">KeyFile</emphasis> file the key that is currently in the <emphasis
+     role="bold">afs</emphasis> entry in the Authentication Database. AFS server processes become unable to decrypt the tickets that
+     clients present to them.</para>
+ 
+     <sect2 id="HDRWQ369">
+       <title>To remove a key from the KeyFile file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you are authenticated as a user listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis>
+           file. If necessary, issue the <emphasis role="bold">bos listusers</emphasis> command, which is fully described in <link
+           linkend="HDRWQ593">To display the users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos listkeys</emphasis> command to display the key version number of each key you
+           want to remove. The output also reveals whether it has been at least 25 hours since a new key was placed in the <emphasis
+           role="bold">KeyFile</emphasis> file. For complete instructions for the <emphasis role="bold">bos listkeys</emphasis>
+           command, see <link linkend="HDRWQ360">To display the KeyFile file</link>. <programlisting>
+    % <emphasis role="bold">bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas examine</emphasis> command to verify that the key currently in the
+           Authentication Database's <emphasis role="bold">afs</emphasis> entry does not have the same key version number as any of
+           the keys you are removing from the <emphasis role="bold">KeyFile</emphasis> file. For detailed instructions for the
+           <emphasis role="bold">kas examine</emphasis> command, see <link linkend="HDRWQ361">To display the afs key from the
+           Authentication Database</link>. <programlisting>
+    % <emphasis role="bold">kas examine afs  -admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>bos removekey</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>bos commands</primary>
+ 
+             <secondary>removekey</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos removekey</emphasis> command to remove one or more server encryption keys from
+           the <emphasis role="bold">KeyFile</emphasis> file.</para>
+ 
+           <para>If you run the United States edition of AFS and use the Update Server to distribute the contents of the system
+           control machine's <emphasis role="bold">/usr/afs/etc</emphasis> directory, substitute the system control machine for the
+           machine name argument. (If you have forgotten which machine is the system control machine, see <link linkend="HDRWQ96">To
+           locate the system control machine</link>.)</para>
+ 
+           <para>If you run the international edition of AFS or do not use the Update Server, repeat the <emphasis role="bold">bos
+           removekey</emphasis> command, substituting each server machine in your cell for the machine name argument in turn.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos removekey</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>key version number</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">removek</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">removekey</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the cell's system control machine if you are using the Update Server, or each server machine in turn
+                   if you are not.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">key version number</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the key version number of each key to remove.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ370">
+     <title>Handling Server Encryption Key Emergencies</title>
+ 
+     <indexterm>
+       <primary>emergency</primary>
+ 
+       <secondary>server encryption keys mismatched</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server encryption key</primary>
+ 
+       <secondary>emergency need to replace</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mutual authentication</primary>
+ 
+       <secondary>failure due to mismatched keys</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Ubik</primary>
+ 
+       <secondary>failure due to mismatched server encryption keys</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>handling</primary>
+ 
+       <secondary>server encryption key emergency</secondary>
+     </indexterm>
+ 
+     <para>In rare circumstances, the AFS server processes can become unable to decrypt the server tickets that clients or peer
+     server processes are presenting. Activity in your cell can come to a halt, because the server processes believe that the tickets
+     are forged or expired, and refuse to execute any actions. This can happen on one machine or several; the effect is more serious
+     when more machines are involved.</para>
+ 
+     <para>One common cause of server encryption key problems is that the client's ticket is encrypted with a key that the server
+     process does not know. Usually this means that the <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> on the server machine
+     does not include the key in the <emphasis role="bold">afs</emphasis> Authentication Database entry, which the Authentication
+     Server's Ticket Granting Service (TGS) module is using to encrypt server tickets.</para>
+ 
+     <para>Another possibility is that the <emphasis role="bold">KeyFile</emphasis> files on different machines do not contain the
+     same keys. In this case, communications among server processes themselves become impossible. For instance, AFS's replicated
+     database mechanism (Ubik) breaks down if the instances of a database server process on the different database server machines
+     are not using the same key.</para>
+ 
+     <para>The appearance of the following error message when you direct a <emphasis role="bold">bos</emphasis> command to a file
+     server machine in the local cell is one possible symptom of server encryption key mismatch. (Note, however, that you can also
+     get this message if you forget to include the <emphasis role="bold">-cell</emphasis> argument when directing the <emphasis
+     role="bold">bos</emphasis> command to a file server machine in a foreign cell.)</para>
+ 
+     <programlisting>
+    bos: failed to contact host's bosserver (security object was passed a bad ticket).
+ </programlisting>
+ 
+     <para>The solution to server encryption key emergencies is to put a new AFS server encryption key in both the Authentication
+     Database and the <emphasis role="bold">KeyFile</emphasis> file on every server machine, so that the TGS and all server processes
+     again share the same key.</para>
+ 
+     <para>Handling key emergencies requires some unusual actions. The reasons for these actions are explained in the following
+     sections; the actual procedures appear in the subsequent instructions.</para>
+ 
+     <sect2 id="HDRWQ371">
+       <title>Prevent Mutual Authentication</title>
+ 
+       <para>It is necessary to prevent the server processes from trying to mutually authenticate with you as you deal with a key
+       emergency, because they possibly cannot decrypt your token. When you do not mutually authenticate, the server processes assign
+       you the identity <emphasis role="bold">anonymous</emphasis>. To prevent mutual authentication, use the <emphasis
+       role="bold">unlog</emphasis> command to discard your tokens and include the <emphasis role="bold">-noauth</emphasis> flag on
+       every command where it is available.</para>
+     </sect2>
+ 
+     <sect2 id="Header_423">
+       <title>Disable Authorization Checking by Hand</title>
+ 
+       <para>Because the server processes recognize you as the user <emphasis role="bold">anonymous</emphasis> when you do not
+       mutually authenticate, you must turn off authorization checking. Only with authorization checking disabled do the server
+       processes allow the <emphasis role="bold">anonymous</emphasis> user to perform privileged actions such as key creation.</para>
+ 
+       <para>In an emergency, disable authorization checking by creating the file <emphasis
+       role="bold">/usr/afs/local/NoAuth</emphasis> by hand. In normal circumstances, use the <emphasis role="bold">bos
+       setauth</emphasis> command instead.</para>
+     </sect2>
+ 
+     <sect2 id="Header_424">
+       <title>Work Quickly on Each Machine</title>
+ 
+       <para>Disabling authorization checking is a serious security exposure, because server processes on the affected machine
+       perform any action for anyone. Disable authorization checking only for as long as necessary, completing all steps in an
+       uninterrupted session and as quickly as possible.</para>
+     </sect2>
+ 
+     <sect2 id="Header_425">
+       <title>Work at the Console</title>
+ 
+       <para>Working at the console of each server machine on which you disable authorization checking ensures that no one else logs
+       onto the console while you are working there. It does not prevent others from connecting to the machine remotely (using the
+       <emphasis role="bold">telnet</emphasis> program, for example), which is why it is important to work quickly. The only way to
+       ensure complete security is to disable network traffic, which is not a viable option in many environments. You can improve
+       security in general by limiting the number of people who can connect remotely to your server machines at any time, as
+       recommended in <link linkend="HDRWQ74">Improving Security in Your Cell</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ372">
+       <title>Change Individual KeyFile Files</title>
+ 
+       <para>If you use the Update Server to distribute the contents of the <emphasis role="bold">/usr/afs/etc</emphasis> directory,
+       an emergency is the only time when it is appropriate to change the <emphasis role="bold">KeyFile</emphasis> file on individual
+       machines instead. Updating each machine's file is necessary because mismatched keys can prevent the system control machine's
+       <emphasis role="bold">upserver</emphasis> process from mutually authenticating with <emphasis
+       role="bold">upclientetc</emphasis> processes on other server machines, in which case the <emphasis
+       role="bold">upserver</emphasis> process refuses to distribute its <emphasis role="bold">KeyFile</emphasis> file to
+       them.</para>
+ 
+       <para>Even if it appears that the Update Server is working correctly, the only way to verify that is to change the key on the
+       system control machine and wait the standard delay period to see if the <emphasis role="bold">upclientetc</emphasis> processes
+       retrieve the key. During an emergency, it does not usually make sense to wait the standard delay period. It is more efficient
+       simply to update the file on each server machine separately. Also, even if the Update Server can distribute the file
+       correctly, other processes can have trouble because of mismatched keys. The following instructions add the new key file on the
+       system control machine first. If the Update Server is working, then it is distributing the same change as you are making on
+       each server machine individually.</para>
+ 
+       <para>If your cell does not use the Update Server, or uses the international edition of AFS, you always change keys on server
+       machines individually. The following instructions are also appropriate for you.</para>
+     </sect2>
+ 
+     <sect2 id="Header_427">
+       <title>Two Component Procedures</title>
+ 
+       <para>There are two subprocedures used frequently in the following instructions: disabling authorization checking and
+       reenabling it. For the sake of clarity, the procedures are detailed here; the instructions refer to them as necessary.</para>
+ 
+       <sect3 id="HDRWQ373">
+         <title>Disabling Authorization Checking in an Emergency</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by
+             issuing the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+ 
+             <indexterm>
+               <primary>NoAuth file</primary>
+ 
+               <secondary>creating in emergencies</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ374" />Create the file <emphasis role="bold">/usr/afs/local/NoAuth</emphasis> to disable
+             authorization checking. <programlisting>
+    # <emphasis role="bold">touch /usr/afs/local/NoAuth</emphasis>
+ </programlisting></para>
+ 
+             <indexterm>
+               <primary>unlog command</primary>
+ 
+               <secondary>when handling key emergency</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Discard your tokens, in case they were sealed with an incompatible key, which can prevent some commands from
+             executing. <programlisting>
+    # <emphasis role="bold">unlog</emphasis>
+ </programlisting></para>
+           </listitem>
+         </orderedlist>
+       </sect3>
+ 
+       <sect3 id="HDRWQ375">
+         <title>Reenabling Authorization Checking in an Emergency</title>
+ 
+         <orderedlist>
+           <listitem>
+             <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by
+             issuing the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Remove the <emphasis role="bold">/usr/afs/local/NoAuth</emphasis> file. <programlisting>
+    # <emphasis role="bold">rm /usr/afs/local/NoAuth</emphasis>
+ </programlisting></para>
+ 
+             <indexterm>
+               <primary>klog command</primary>
+ 
+               <secondary>when handling key emergency</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Authenticate as an administrative identity that belongs to the <emphasis
+             role="bold">system:administrators</emphasis> group and is listed in the <emphasis
+             role="bold">/usr/afs/etc/UserList</emphasis> file. <programlisting>
+    # <emphasis role="bold">klog</emphasis> &lt;<replaceable>admin_user</replaceable>&gt;
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If appropriate, log out from the console (or close the remote connection you are using), after issuing the
+             <emphasis role="bold">unlog</emphasis> command to destroy your tokens.</para>
+           </listitem>
+         </orderedlist>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="Header_430">
+       <title>To create a new server encryption key in emergencies</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para><anchor id="LIWQ376" /><emphasis role="bold">On the system control machine</emphasis>, disable authorization
+           checking as instructed in <link linkend="HDRWQ373">Disabling Authorization Checking in an Emergency</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ377" />Issue the <emphasis role="bold">bos listkeys</emphasis> command to display the key version
+           numbers already in use in the <emphasis role="bold">KeyFile</emphasis> file, as a first step in choosing the new key's key
+           version number. <programlisting>
+    # <emphasis role="bold">bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-noauth</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listkeys</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a file server machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-noauth</emphasis></term>
+ 
+                 <listitem>
+                   <para>Bypasses mutual authentication with the BOS Server. Include it in case the key emergency is preventing
+                   successful mutual authentication.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ378" />Choose a key version number for the new key, based on what you learned in Step <link
+           linkend="LIWQ377">2</link> plus the following requirements: <itemizedlist>
+               <listitem>
+                 <para>It is best to keep your key version numbers in sequence by choosing a key version number one greater than the
+                 largest existing one.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Key version numbers must be integers between 0 and 255 to comply with Kerberos standards.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Do not reuse a key version number currently listed in the <emphasis role="bold">KeyFile</emphasis>
+                 file.</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <indexterm>
+             <primary>bos commands</primary>
+ 
+             <secondary>addkey</secondary>
+ 
+             <tertiary>when handling key emergency</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ379" /><emphasis role="bold">On the system control machine</emphasis>, issue the <emphasis
+           role="bold">bos addkey</emphasis> command to create a new AFS server encryption key in the <emphasis
+           role="bold">KeyFile</emphasis> file. <programlisting>
+    # <emphasis role="bold">bos addkey</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-kvno</emphasis> &lt;<replaceable>key version number</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+    input key: &lt;<replaceable>afs_password</replaceable>&gt;
+    Retype input key: &lt;<replaceable>afs_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addk</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">addkey</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine on which to define the new key in the <emphasis role="bold">KeyFile</emphasis>
+                   file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-kvno</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the key version number you chose in Step <link linkend="LIWQ378">3</link>, an integer in the range
+                   0 (zero) through 255. You must specify the same number in Steps <link linkend="LIWQ382">7</link>, <link
+                   linkend="LIWQ383">8</link>, and <link linkend="LIWQ386">13</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-noauth</emphasis></term>
+ 
+                 <listitem>
+                   <para>Bypasses mutual authentication with the BOS Server. Include it in case the key emergency is preventing
+                   successful mutual authentication.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">afs_password</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is a character string similar to a user password, of any length from one to about 1,000 characters. To
+                   improve security, make the string as long as is practical, and include nonalphabetic characters.</para>
+ 
+                   <para>Do not type an octal string directly. The BOS Server scrambles the character string into an octal string
+                   appropriate for use as an encryption key before recording it in the <emphasis role="bold">KeyFile</emphasis>
+                   file.</para>
+ 
+                   <para>Remember the string. You need to use it again in Steps <link linkend="LIWQ382">7</link>, <link
+                   linkend="LIWQ383">8</link>, and <link linkend="LIWQ386">13</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ380" /><emphasis role="bold">On every database server machine in your cell</emphasis> (other than
+           the system control machine), disable authorization checking as instructed in <link linkend="HDRWQ373">Disabling
+           Authorization Checking in an Emergency</link>. Do not repeat the procedure on the system control machine, if it is a
+           database server machine, because you already disabled authorization checking in Step <link linkend="LIWQ376">1</link>. (If
+           you need to learn which machines are database server machines, use the <emphasis role="bold">bos listhosts</emphasis>
+           command as described in <link linkend="HDRWQ95">To locate database server machines</link>.)</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ381" />Wait at least 90 seconds after finishing Step <link linkend="LIWQ380">5</link>, to allow each
+           of the database server processes (the Authentication, Backup, Protection and Volume Location Servers) to finish electing a
+           new sync site. Then issue the <emphasis role="bold">udebug</emphasis> command to verify that the election worked properly.
+           Issue the following commands, substituting each database server machine's name for server machine in turn. Include the
+           system control machine if it is a database server machine. <programlisting>
+    # <emphasis role="bold">udebug</emphasis> &lt;<replaceable>server machine</replaceable>&gt; <emphasis role="bold">buserver</emphasis>
+    # <emphasis role="bold">udebug</emphasis> &lt;<replaceable>server machine</replaceable>&gt; <emphasis role="bold">kaserver</emphasis>
+    # <emphasis role="bold">udebug</emphasis> &lt;<replaceable>server machine</replaceable>&gt; <emphasis role="bold">ptserver</emphasis>
+    # <emphasis role="bold">udebug</emphasis> &lt;<replaceable>server machine</replaceable>&gt; <emphasis role="bold">vlserver</emphasis>
+ </programlisting></para>
+ 
+           <para>For each process, the output from all of the database server machines must agree on which one is the sync site for
+           the process. It is not, however, necessary that the same machine serves as the sync site for each of the four processes.
+           For each process, the output from only one machine must include the following string:</para>
+ 
+           <programlisting>
+    I am sync site ...
+ </programlisting>
+ 
+           <para>The output on the other machines instead includes the following line</para>
+ 
+           <programlisting>
+    I am not sync site
+ </programlisting>
+ 
+           <para>and a subsequent line that begins with the string <computeroutput>Sync host</computeroutput> and specifies the IP
+           address of the machine claiming to be the sync site.</para>
+ 
+           <para>If the output does not meet these requirements or seems abnormal in another way, contact AFS Product Support for
+           assistance.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ382" /><emphasis role="bold">On every database server machine in your cell</emphasis> (other than
+           the system control machine), issue the <emphasis role="bold">bos addkey</emphasis> command described in Step <link
+           linkend="LIWQ379">4</link>. Be sure to use the same values for afs_password and kvno as you used in that step.</para>
+ 
+           <indexterm>
+             <primary>kas commands</primary>
+ 
+             <secondary>setpassword , when handling key emergency</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ383" />Issue the <emphasis role="bold">kas setpassword</emphasis> command to define the new key in
+           the Authentication Database's <emphasis role="bold">afs</emphasis> entry. It must match the key you created in Step <link
+           linkend="LIWQ379">4</link> and Step <link linkend="LIWQ382">7</link>. <programlisting>
+    # <emphasis role="bold">kas setpassword  -name afs</emphasis>  <emphasis role="bold">-kvno</emphasis> &lt;<replaceable>key version number</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+    new_password: &lt;<replaceable>afs_password</replaceable>&gt;
+    Verifying, please re-enter new_password: &lt;<replaceable>afs_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sp</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setpassword</emphasis> (<emphasis
+                   role="bold">setp</emphasis> is the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-kvno</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the same key version number you specified in Step <link linkend="LIWQ379">4</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">afs_password</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the same character string you specified as afs_password in Step <link linkend="LIWQ379">4</link>. It does
+                   not echo visibly.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ384" /><emphasis role="bold">On every database server machine in your cell</emphasis> (including the
+           system control machine if it is a database server machine), reenable authorization checking as instructed in <link
+           linkend="HDRWQ375">Reenabling Authorization Checking in an Emergency</link>. If the system control machine is not a
+           database server machine, do not perform this procedure until Step <link linkend="LIWQ385">11</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Repeat Step <link linkend="LIWQ381">6</link> to verify that each database server process has properly elected a sync
+           site after being restarted in Step <link linkend="LIWQ384">9</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ385" /><emphasis role="bold">On the system control machine</emphasis> (if it is not a database
+           server machine), reenable authorization checking as instructed in <link linkend="HDRWQ375">Reenabling Authorization
+           Checking in an Emergency</link>. If it is a database server machine, you already performed the procedure in Step <link
+           linkend="LIWQ384">9</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">On all remaining (simple) file server machines</emphasis>, disable authorization checking as
+           instructed in <link linkend="HDRWQ373">Disabling Authorization Checking in an Emergency</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ386" /><emphasis role="bold">On all remaining (simple) file server machines</emphasis>, issue the
+           <emphasis role="bold">bos addkey</emphasis> command described in Step <link linkend="LIWQ379">4</link>. Be sure to use the
+           same values for afs_password and kvno as you used in that step.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">On all remaining (simple) file server machines</emphasis>, reenable authorization checking as
+           instructed in <link linkend="HDRWQ375">Reenabling Authorization Checking in an Emergency</link>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd015.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd015.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd015.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,3912 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ387">
+   <title>Administering Client Machines and the Cache Manager</title>
+ 
+   <para>This chapter describes how to administer an AFS client machine, which is any machine from which users can access the AFS
+   filespace and communicate with AFS server processes. (A client machine can simultaneously function as an AFS server machine if
+   appropriately configured.) An AFS client machine has the following characteristics: <itemizedlist>
+       <listitem>
+         <para>The kernel includes the set of modifications, commonly referred to as the <emphasis>Cache Manager</emphasis>, that
+         enable access to AFS files and directories. You can configure many of the Cache Manager's features to suit your users'
+         needs. See <link linkend="HDRWQ390">Overview of Cache Manager Customization</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The <emphasis role="bold">/usr/vice/etc</emphasis> directory on the local disk stores several configuration files. See
+         <link linkend="HDRWQ392">Configuration Files in the /usr/vice/etc Directory</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>A cache stores temporary copies of data fetched from AFS file server machines, either in machine memory or on a
+         devoted local disk partition. See <link linkend="HDRWQ394">Determining the Cache Type, Size, and Location</link> and <link
+         linkend="HDRWQ402">Setting Other Cache Parameters with the afsd program</link>.</para>
+       </listitem>
+     </itemizedlist></para>
+ 
+   <para>To learn how to install the client functionality on a machine, see the <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+ 
+   <sect1 id="HDRWQ388">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="67*" />
+ 
+         <colspec colwidth="33*" />
+ 
+         <tbody>
+           <row>
+             <entry>Display cache size set at reboot</entry>
+ 
+             <entry><emphasis role="bold">cat /usr/vice/etc/cacheinfo</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display current cache size and usage</entry>
+ 
+             <entry><emphasis role="bold">fs getcacheparms</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change disk cache size without rebooting</entry>
+ 
+             <entry><emphasis role="bold">fs setcachesize</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Initialize Cache Manager</entry>
+ 
+             <entry><emphasis role="bold">afsd</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display contents of <emphasis role="bold">CellServDB</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">cat /usr/vice/etc/CellServDB</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display list of database server machines from kernel memory</entry>
+ 
+             <entry><emphasis role="bold">fs listcells</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change list of database server machines in kernel memory</entry>
+ 
+             <entry><emphasis role="bold">fs newcell</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Check cell's status regarding setuid</entry>
+ 
+             <entry><emphasis role="bold">fs getcellstatus</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set cell's status regarding setuid</entry>
+ 
+             <entry><emphasis role="bold">fs setcell</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set server probe interval</entry>
+ 
+             <entry><emphasis role="bold">fs checkservers -interval</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display machine's cell membership</entry>
+ 
+             <entry><emphasis role="bold">cat /usr/vice/etc/ThisCell</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change machine's cell membership</entry>
+ 
+             <entry>Edit <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Flush cached file/directory</entry>
+ 
+             <entry><emphasis role="bold">fs flush</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Flush everything cached from a volume</entry>
+ 
+             <entry><emphasis role="bold">fs flushvolume</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Update volume-to-mount-point mappings</entry>
+ 
+             <entry><emphasis role="bold">fs checkvolumes</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display Cache Manager's server preference ranks</entry>
+ 
+             <entry><emphasis role="bold">fs getserverprefs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set Cache Manager's server preference ranks</entry>
+ 
+             <entry><emphasis role="bold">fs setserverprefs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display client machine addresses to register</entry>
+ 
+             <entry><emphasis role="bold">fs getclientaddrs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set client machine addresses to register</entry>
+ 
+             <entry><emphasis role="bold">fs setclientaddrs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Control the display of warning and status messages</entry>
+ 
+             <entry><emphasis role="bold">fs messages</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display and change machine's system type</entry>
+ 
+             <entry><emphasis role="bold">fs sysname</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Enable asynchronous writes</entry>
+ 
+             <entry><emphasis role="bold">fs storebehind</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ390">
+     <title>Overview of Cache Manager Customization</title>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>configuring and customizing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>configuring</primary>
+ 
+       <secondary>Cache Manager</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>described</secondary>
+     </indexterm>
+ 
+     <para>An AFS client machine's kernel includes a set of modifications, commonly referred to as the <emphasis>Cache
+     Manager</emphasis>, that enable access to AFS files and directories and communications with AFS server processes. It is common
+     to speak of the Cache Manager as a process or program, and in regular usage it appears to function like one. When configuring
+     it, though, it is helpful to keep in mind that this usage is not strictly accurate.</para>
+ 
+     <para>The Cache Manager mainly fetches files on behalf of application programs running on the machine. When an application
+     requests an AFS file, the Cache Manager contacts the Volume Location (VL) Server to obtain a list of the file server machines
+     that house the volume containing the file. The Cache Manager then translates the application program's system call requests into
+     remote procedure calls (RPCs) to the File Server running on the appropriate machine. When the File Server delivers the file, the
+     Cache Manager stores it in a local <emphasis>cache</emphasis> before delivering it to the application program.</para>
+ 
+     <para>The File Server delivers a data structure called a <emphasis>callback</emphasis> along with the file. (To be precise, it
+     delivers a callback for each file fetched from a read/write volume, and a single callback for all data fetched from a read-only
+     volume.) A valid callback indicates that the Cache Manager's cached copy of a file matches the central copy maintained by the
+     File Server. If an application on another AFS client machine changes the central copy, the File Server breaks the callback, and
+     the Cache Manager must retrieve the new version when an application program on its machine next requests data from the file. As
+     long as the callback is unbroken, however, the Cache Manager can continue to provide the cached version of the file to
+     applications on its machine, which eliminates unnecessary network traffic.</para>
+ 
+     <para>The indicated sections of this chapter explain how to configure and customize the following Cache Manager features. All
+     but the first (choosing disk or memory cache) are optional, because AFS sets suitable defaults for them. <itemizedlist>
+         <listitem>
+           <para><emphasis>disk or memory cache</emphasis>. The AFS Cache Manager can use machine memory for caching instead of space
+           on the local disk. Deciding which to use is the most basic configuration decision you must make. See <link
+           linkend="HDRWQ394">Determining the Cache Type, Size, and Location</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>cache size</emphasis>. Cache size probably has the most direct influence on client machine performance. It
+           determines how often the Cache Manager must contact the File Server across the network or discard cached data to make room
+           for newly requested files, both of which affect how quickly the Cache Manager delivers files to users. See <link
+           linkend="HDRWQ394">Determining the Cache Type, Size, and Location</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>cache location</emphasis>. For a disk cache, you can alter the conventional cache directory location
+           (<emphasis role="bold">/usr/vice/cache</emphasis>) to take advantage of greater space availability on other disks on the
+           machine. A larger cache can result in faster file delivery. See <link linkend="HDRWQ394">Determining the Cache Type, Size,
+           and Location</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>chunk size and number</emphasis>. The <emphasis role="bold">afsd</emphasis> program, which initializes the
+           Cache Manager, allows you to control the size and number of chunks into which a cache is divided, plus related parameters.
+           Setting these parameters is optional, because there are reasonable defaults, but it provides precise control. The AFS
+           distribution includes configuration scripts that set Cache Manager parameters to values that are reasonable for different
+           configurations and usage patterns. See <link linkend="HDRWQ402">Setting Other Cache Parameters with the afsd
+           program</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>knowledge of database server machines</emphasis>. Enable access to a cell's AFS filespace and other
+           services by listing the cell's database server machines in the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis>
+           file on the local disk. See <link linkend="HDRWQ406">Maintaining Knowledge of Database Server Machines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>setuid privilege</emphasis>. You can control whether the Cache Manager allows programs from a cell to
+           execute with setuid permission. See <link linkend="HDRWQ409">Determining if a Client Can Run Setuid
+           Programs</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>cell membership</emphasis>. Each client belongs to a one cell defined by the local <emphasis
+           role="bold">/usr/vice/etc/ThisCell</emphasis> file. Cell membership determines the default cell in which the machine's
+           users are authenticated and in which AFS commands run. See <link linkend="HDRWQ411">Setting a Client Machine's Cell
+           Membership</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>cached file version</emphasis>. AFS's system of callbacks normally guarantees that the Cache Manager has
+           the most current versions of files and directories possible. Nevertheless, you can force the Cache Manager to fetch the
+           most current version of a file from the File Server if you suspect that the cache contains an outdated version. See <link
+           linkend="HDRWQ412">Forcing the Update of Cached Data</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>File Server and Volume Location Server preferences</emphasis>. The Cache Manager sets numerical preference
+           ranks for the interfaces on file server machines and Volume Server (VL) machines. The ranks determine which interface the
+           Cache Manager first attempts to use when fetching data from a volume or from the Volume Location Database (VLDB). The
+           Cache Manager sets default ranks as it initializes, basing them on its network proximity to each interface, but you can
+           modify the preference ranks if you wish. See <link linkend="HDRWQ414">Maintaining Server Preference Ranks</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>interfaces registered with the File Server</emphasis>. If the Cache Manager is multihomed (has multiple
+           interface addresses), you can control which of them it registers for File Servers to use when they initiate RPCs to the
+           client machine. See <link linkend="HDRWQ415">Managing Multihomed Client Machines</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>display of information messages</emphasis>. By default, the Cache Manager sends basic error and
+           informational messages to the client machine's console and to command shells. You can disable the messaging. See <link
+           linkend="HDRWQ416">Controlling the Display of Warning and Informational Messages</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>system type</emphasis>. The Cache Manager records the local machine's AFS system type in kernel memory,
+           and substitutes the value for the @sys variable in pathnames. See <link linkend="HDRWQ417">Displaying and Setting the
+           System Type Name</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>delayed writes</emphasis>. By default, the Cache Manager writes all data to the File Server immediately
+           and synchronously when an application program closes a file. You can enable asynchronous writes, either for an individual
+           file, or all files that the Cache Manager handles, and set how much data remains to be written when the Cache Manager
+           returns control to the closing application. See <link linkend="HDRWQ418">Enabling Asynchronous Writes</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>You must make all configuration changes on the client machine itself (at the console or over a direct connection such as a
+     <emphasis role="bold">telnet</emphasis> connection). You cannot configure the Cache Manager remotely. You must be logged in as
+     the local superuser <emphasis role="bold">root</emphasis> to issue some commands, whereas others require no privilege. All files
+     mentioned in this chapter must actually reside on the local disk of each AFS client machine (they cannot, for example, be
+     symbolic links to files in AFS).</para>
+ 
+     <para>AFS's <emphasis role="bold">package</emphasis> program can simplify other aspects of client machine configuration,
+     including those normally set in the machine's AFS initialization file. See <link linkend="HDRWQ419">Configuring Client Machines
+     with the package Program</link>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ391">
+     <title>Configuration and Cache-Related Files on the Local Disk</title>
+ 
+     <indexterm>
+       <primary>usr/vice/etc directory</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directory</primary>
+ 
+       <secondary>/usr/vice/etc</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>configuration files</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>configuration files</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>/usr/vice/etc directory</secondary>
+     </indexterm>
+ 
+     <para>This section briefly describes the client configuration files that must reside in the local <emphasis
+     role="bold">/usr/vice/etc</emphasis> directory on every client machine. If the machine uses a disk cache, there must be a
+     partition devoted to cache files; by convention, it is mounted at the <emphasis role="bold">/usr/vice/cache</emphasis>
+     directory.</para>
+ 
+     <para><emphasis role="bold">Note for Windows users:</emphasis> Some files described in this document possibly do not exist on
+     machines that run a Windows operating system. Also, Windows uses a backslash (<emphasis role="bold">\</emphasis>) rather than a
+     forward slash (<emphasis role="bold">/</emphasis>) to separate the elements in a pathname.</para>
+ 
+     <sect2 id="HDRWQ392">
+       <title>Configuration Files in the /usr/vice/etc Directory</title>
+ 
+       <para>The <emphasis role="bold">/usr/vice/etc</emphasis> directory on a client machine's local disk must contain certain
+       configuration files for the Cache Manager to function properly. They control the most basic aspects of Cache Manager
+       configuration.</para>
+ 
+       <para>If it is important that the client machines in your cell perform uniformly, it is most efficient to update these files
+       from a central source. The following descriptions include pointers to sections that discuss how best to maintain the files.
+       <variablelist>
+           <indexterm>
+             <primary>afsd program</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Cache Manager</primary>
+ 
+             <secondary>afsd initialization program</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>afsd</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>afsd</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>programs</primary>
+ 
+             <secondary>afsd</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">afsd</emphasis></term>
+ 
+             <listitem>
+               <para>The binary file for the program that initializes the Cache Manager. It must run each time the machine reboots in
+               order for the machine to remain an AFS client machine. The program also initializes several daemons that improve Cache
+               Manager functioning, such as the process that handles callbacks. <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>cacheinfo</secondary>
+                 </indexterm> <indexterm>
+                   <primary>cacheinfo file</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">cacheinfo</emphasis></term>
+ 
+             <listitem>
+               <para>A one-line file that sets the cache's most basic configuration parameters: the local directory at which the
+               Cache Manager mounts the AFS filespace, the local disk directory to use as the cache, and how many kilobytes to
+               allocate to the cache.</para>
+ 
+               <para>The <emphasis>OpenAFS Quick Beginnings</emphasis> explains how to create this file as you install a client
+               machine. To change the cache size on a machine that uses a memory cache, edit the file and reboot the machine. On a
+               machine that uses a disk cache, you can change the cache size without rebooting by issuing the <emphasis
+               role="bold">fs setcachesize</emphasis> command. For instructions, see <link linkend="HDRWQ394">Determining the Cache
+               Type, Size, and Location</link>. <indexterm>
+                   <primary>CellServDB file (client)</primary>
+ 
+                   <secondary>about</secondary>
+                 </indexterm> <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>CellServDB (client)</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">CellServDB</emphasis></term>
+ 
+             <listitem>
+               <para>This ASCII file names the database server machines in the local cell and in any foreign cell to which you want
+               to enable access from this machine. (Database server machines are the machines in a cell that run the Authentication,
+               Backup, Protection, and VL Server processes; see <link linkend="HDRWQ92">Database Server Machines</link>.)</para>
+ 
+               <para>The Cache Manager must be able to reach a cell's database server machines to fetch files from its filespace.
+               Incorrect or missing information in the <emphasis role="bold">CellServDB</emphasis> file can slow or completely block
+               access. It is important to update the file whenever a cell's database server machines change.</para>
+ 
+               <para>As the <emphasis role="bold">afsd</emphasis> program initializes the Cache Manager, it loads the contents of the
+               file into kernel memory. The Cache Manager does not read the file between reboots, so to incorporate changes to the
+               file into kernel memory, you must reboot the machine. Alternatively, you can issue the <emphasis role="bold">fs
+               newcell</emphasis> command to insert the changes directly into kernel memory without changing the file. It can also be
+               convenient to upgrade the file from a central source. For instructions, see <link linkend="HDRWQ406">Maintaining
+               Knowledge of Database Server Machines</link>.</para>
+ 
+               <para>(The <emphasis role="bold">CellServDB</emphasis> file on client machines is not the same as the one kept in the
+               <emphasis role="bold">/usr/afs/etc</emphasis> directory on server machines, which lists only the local cell's database
+               server machines. For instructions on maintaining the server <emphasis role="bold">CellServDB</emphasis> file, see
+               <link linkend="HDRWQ118">Maintaining the Server CellServDB File</link>). <indexterm>
+                   <primary>NetInfo file (client version)</primary>
+                 </indexterm> <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>NetInfo (client version)</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">NetInfo</emphasis></term>
+ 
+             <listitem>
+               <para>This optional ASCII file lists one or more of the network interface addresses on the client machine. If it
+               exists when the Cache Manager initializes, the Cache Manager uses it as the basis for the list of interfaces that it
+               registers with File Servers. See <link linkend="HDRWQ415">Managing Multihomed Client Machines</link>. <indexterm>
+                   <primary>NetRestrict file (client version)</primary>
+                 </indexterm> <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>NetRestrict (client version)</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">NetRestrict</emphasis></term>
+ 
+             <listitem>
+               <para>This optional ASCII file lists one or more network interface addresses. If it exists when the Cache Manager
+               initializes, the Cache Manager removes the specified addresses from the list of interfaces that it registers with File
+               Servers. See <link linkend="HDRWQ415">Managing Multihomed Client Machines</link>. <indexterm>
+                   <primary>ThisCell file (client)</primary>
+                 </indexterm> <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>ThisCell (client)</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ThisCell</emphasis></term>
+ 
+             <listitem>
+               <para>This ASCII file contains a single line that specifies the complete domain-style name of the cell to which the
+               machine belongs. Examples are <computeroutput>abc.com</computeroutput> and
+               <computeroutput>stateu.edu</computeroutput>. This value defines the default cell in which the machine's users become
+               authenticated, and in which the command interpreters (for example, the <emphasis role="bold">bos</emphasis> command)
+               contact server processes.</para>
+ 
+               <para>The <emphasis>OpenAFS Quick Beginnings</emphasis> explains how to create this file as you install the AFS client
+               functionality. To learn about changing a client machine's cell membership, see <link linkend="HDRWQ411">Setting a
+               Client Machine's Cell Membership</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>In addition to these files, the <emphasis role="bold">/usr/vice/etc</emphasis> directory also sometimes contains the
+       following types of files and subdirectories: <itemizedlist>
+           <indexterm>
+             <primary>AFS</primary>
+ 
+             <secondary>initialization script</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>AFS initialization script</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>initialization script for AFS</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>script for AFS initialization</primary>
+           </indexterm>
+ 
+           <listitem>
+             <para>The AFS initialization script, called <emphasis role="bold">afs.rc</emphasis> on many system types. In the
+             conventional configuration specified by the <emphasis>OpenAFS Quick Beginnings</emphasis>, it is a symbolic link to the
+             actual script kept in the same directory as other initialization files used by the operating system. <indexterm>
+                 <primary>dynamic kernel loader programs</primary>
+ 
+                 <secondary>directory for AFS library files</secondary>
+               </indexterm> <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>AFS libraries used by dynamic kernel loader programs</secondary>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para>A subdirectory that houses AFS kernel library files used by a dynamic kernel loading program. <indexterm>
+                 <primary>afszcm.cat file</primary>
+               </indexterm> <indexterm>
+                 <primary>files</primary>
+ 
+                 <secondary>afszcm.cat</secondary>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para>A subdirectory called <emphasis role="bold">C</emphasis>, which houses the Cache Manager catalog file called
+             <emphasis role="bold">afszcm.cat</emphasis>. The fstrace program uses the catalog file to translate operation codes into
+             character strings, which makes the message in the trace log more readable. See <link linkend="HDRWQ342">About the
+             fstrace Command Suite</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ393">
+       <title>Cache-Related Files</title>
+ 
+       <indexterm>
+         <primary>usr/vice/cache directory</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>/usr/vice/cache</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>disk cache</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cache files (client)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>cache files</secondary>
+       </indexterm>
+ 
+       <para>A client machine that uses a disk cache must have a local disk directory devoted to the cache. The conventional mount
+       point is <emphasis role="bold">/usr/vice/cache</emphasis>, but you can use another partition that has more available
+       space.</para>
+ 
+       <para>Do not delete or directly modify any of the files in the cache directory. Doing so can cause a kernel panic, from which
+       the only way to recover is to reboot the machine. By default, only the local superuser <emphasis role="bold">root</emphasis>
+       can read the files directly, by virtue of owning them.</para>
+ 
+       <para>A client machine that uses a memory cache keeps all of the information stored in these files in machine memory instead.
+       <variablelist>
+           <indexterm>
+             <primary>CacheItems file</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>files</primary>
+ 
+             <secondary>CacheItems</secondary>
+           </indexterm>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">CacheItems</emphasis></term>
+ 
+             <listitem>
+               <para>A binary-format file in which the Cache Manager tracks the contents of cache chunks (the <emphasis
+               role="bold">V</emphasis> files in the directory, described just following), including the file ID number (fID) and the
+               data version number. <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>VolumeItems</secondary>
+                 </indexterm> <indexterm>
+                   <primary>VolumeItems file</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">VolumeItems</emphasis></term>
+ 
+             <listitem>
+               <para>A binary-format file in which the Cache Manager records the mapping between mount points and the volumes from
+               which it has fetched data. The Cache Manager uses the information when responding to the <emphasis
+               role="bold">pwd</emphasis> command, among others. <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>Vn</secondary>
+                 </indexterm> <indexterm>
+                   <primary>Vn file (data cache)</primary>
+                 </indexterm> <indexterm>
+                   <primary>data cache</primary>
+ 
+                   <secondary>Vn file in</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">Vn</emphasis></term>
+ 
+             <listitem>
+               <para>A cache chunk file, which expands to a maximum size (by default, 64 KB) to house data fetched from AFS files.
+               The number of <emphasis role="bold">V</emphasis>n files in the cache depends on the cache size among other factors.
+               The n is the index assigned to each file; they are numbered sequentially, but the Cache Manager does not necessarily
+               use them in order or contiguously. If an AFS file is larger than the maximum size for <emphasis
+               role="bold">V</emphasis>n files, the Cache Manager divides it across multiple <emphasis role="bold">V</emphasis>n
+               files.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ394">
+     <title>Determining the Cache Type, Size, and Location</title>
+ 
+     <para>This section explains how to configure a memory or disk cache, how to display and set the size of either type of cache,
+     and how to set the location of the cache directory for a disk cache. <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>disk versus memory</secondary>
+       </indexterm> <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>disk versus memory cache</secondary>
+       </indexterm></para>
+ 
+     <para>The Cache Manager uses a disk cache by default, and it is the preferred type of caching. To configure a memory cache,
+     include the <emphasis role="bold">-memcache</emphasis> flag on the <emphasis role="bold">afsd</emphasis> command, which is
+     normally invoked in the machine's AFS initialization file. If configured to use a memory cache, the Cache Manager does no disk
+     caching, even if the machine has a disk.</para>
+ 
+     <sect2 id="Header_438">
+       <title>Choosing the Cache Size</title>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>size</secondary>
+ 
+         <tertiary>recommendations</tertiary>
+       </indexterm>
+ 
+       <para>Cache size influences the performance of a client machine more directly than perhaps any other cache parameter. The
+       larger the cache, the faster the Cache Manager is likely to deliver files to users. A small cache can impair performance
+       because it increases the frequency at which the Cache Manager must discard cached data to make room for newly requested data.
+       When an application asks for data that has been discarded, the Cache Manager must request it from the File Server, and
+       fetching data across the network is almost always slower than fetching it from the local disk. The Cache Manager never
+       discards data from a file that has been modified locally but not yet stored back to the File Server. If the cache is very
+       small, the Cache Manager possible cannot find any data to discard. For more information about the algorithm it uses when
+       discarding cached data, see <link linkend="HDRWQ401">How the Cache Manager Chooses Data to Discard</link>).</para>
+ 
+       <para>The amount of disk or memory you devote to caching depends on several factors. The amount of space available in memory
+       or on the partition housing the disk cache directory imposes an absolute limit. In addition, you cannot allocate more than 95%
+       of the space available on the cache directory's partition to a disk cache. The <emphasis role="bold">afsd</emphasis> program
+       exits without starting the Cache Manager and prints an appropriate message to the standard output stream if you violate this
+       restriction. For a memory cache, you must leave enough memory for other processes and applications to run. If you try to
+       allocate more memory than is actually available, the <emphasis role="bold">afsd</emphasis> program exits without initializing
+       the Cache Manager and produces the following message on the standard output stream:</para>
+ 
+       <programlisting>
+    afsd: memCache allocation failure at number KB
+ </programlisting>
+ 
+       <para>where number is how many kilobytes were allocated just before the failure.</para>
+ 
+       <para>Within these hard limits, the factors that determine appropriate cache size include the number of users working on the
+       machine, the size of the files with which they usually work, and (for a memory cache) the number of processes that usually run
+       on the machine. The higher the demand from these factors, the larger the cache needs to be to maintain good
+       performance.</para>
+ 
+       <para>Disk caches smaller than 10 MB do not generally perform well. Machines serving multiple users usually perform better
+       with a cache of at least 60 to 70 MB. The point at which enlarging the cache further does not really improve performance
+       depends on the factors mentioned previously, and is difficult to predict.</para>
+ 
+       <para>Memory caches smaller than 1 MB are nonfunctional, and the performance of caches smaller than 5 MB is usually
+       unsatisfactory. Suitable upper limits are similar to those for disk caches but are probably determined more by the demands on
+       memory from other sources on the machine (number of users and processes). Machines running only a few processes possibly can
+       use a smaller memory cache.</para>
+ 
+       <para>AFS imposes an absolute limit on cache size in some versions. See the <emphasis>OpenAFS Release Notes</emphasis> for the
+       version you are using.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ395">
+       <title>Displaying and Setting the Cache Size and Location</title>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>disk cache location</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>cache size from cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>cache size in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>data cache</secondary>
+ 
+         <tertiary>displaying size set at reboot</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cacheinfo file</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>disk cache location</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cacheinfo file</primary>
+ 
+         <secondary>displaying contents</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cacheinfo file</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>cache size</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>data cache size specified in cacheinfo file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>disk cache location, in cacheinfo file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>disk cache location</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>data cache size set at reboot</secondary>
+ 
+         <tertiary>displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>data cache size from cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>data cache size in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>set at reboot</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>specified in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>size</secondary>
+ 
+         <tertiary>setting in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>changing location of disk cache</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>size</secondary>
+ 
+         <tertiary>set at reboot, displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>displaying size specified in cacheinfo file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>location</primary>
+ 
+         <secondary>setting for client</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>disk cache location in cacheinfo file</secondary>
+       </indexterm>
+ 
+       <para>The Cache Manager determines how big to make the cache by reading the <emphasis
+       role="bold">/usr/vice/etc/cacheinfo</emphasis> file as it initializes. As directed in the <emphasis>OpenAFS Quick
+       Beginnings</emphasis>, you must create the file before running the <emphasis role="bold">afsd</emphasis> program. The file
+       also defines the directory on which to mount AFS (by convention, <emphasis role="bold">/afs</emphasis>), and the local disk
+       directory to use for a cache directory.</para>
+ 
+       <para>To change any of the values in the file, log in as the local superuser <emphasis role="bold">root</emphasis>. You must
+       reboot the machine to have the new value take effect. For instructions, see <link linkend="HDRWQ398">To edit the cacheinfo
+       file</link>.</para>
+ 
+       <para>To change the cache size at reboot without editing the <emphasis role="bold">cacheinfo</emphasis> file, include the
+       <emphasis role="bold">-blocks</emphasis> argument to the <emphasis role="bold">afsd</emphasis> command; see the command's
+       reference page in the OpenAFS Administration Reference.</para>
+ 
+       <para>For a disk cache, you can also use the <emphasis role="bold">fs setcachesize</emphasis> command to reset the cache size
+       without rebooting. The value you set persists until the next reboot, at which time the cache size returns to the value
+       specified in the <emphasis role="bold">cacheinfo</emphasis> file or by the <emphasis role="bold">-blocks</emphasis> argument
+       to the <emphasis role="bold">afsd</emphasis> command. For instructions, see <link linkend="HDRWQ399">To change the disk cache
+       size without rebooting</link>.</para>
+ 
+       <para>To display the current cache size and the amount of space the Cache Manager is using at the moment, use the <emphasis
+       role="bold">fs getcacheparms</emphasis> command as detailed in <link linkend="HDRWQ397">To display the current cache
+       size</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ396">
+       <title>To display the cache size set at reboot</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Use a text editor or the <emphasis role="bold">cat</emphasis> command to display the contents of the <emphasis
+           role="bold">/usr/vice/etc/cacheinfo</emphasis> file. <programlisting>
+    % <emphasis role="bold">cat /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>size</secondary>
+ 
+         <tertiary>current, displaying</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>displaying current</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>displaying current</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>data cache size, current</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>getcacheparms</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs getcacheparms</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ397">
+       <title>To display the current cache size</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs getcacheparms</emphasis> command on the client machine. <programlisting>
+    % <emphasis role="bold">fs getcacheparms</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">getca</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">getcacheparms</emphasis>.</para>
+ 
+           <para>The output shows the number of kilobyte blocks the Cache Manager is using as a cache at the moment the command is
+           issued, and the current size of the cache. For example:</para>
+ 
+           <programlisting>
+    AFS using 13709 of the cache's available 15000 1K byte blocks.
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>size</secondary>
+ 
+         <tertiary>setting in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>setting in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>setting in cacheinfo file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>data cache size in cacheinfo file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cacheinfo file</primary>
+ 
+         <secondary>format</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ398">
+       <title>To edit the cacheinfo file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Use a text editor to edit the <emphasis role="bold">/usr/vice/etc/cacheinfo</emphasis> file, which has three fields,
+           separated by colons: <itemizedlist>
+               <listitem>
+                 <para>The first field names the local directory on which to mount the AFS filespace. The conventional location is
+                 <emphasis role="bold">/afs</emphasis>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The second field defines the local disk directory to use for the disk cache. The conventional location is the
+                 <emphasis role="bold">/usr/vice/cache</emphasis> directory, but you can specify an alternate directory if another
+                 partition has more space available. There must always be a value in this field, but the Cache Manager ignores it if
+                 the machine uses a memory cache.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The third field defines cache size as a number of kilobyte (1024-byte) blocks.</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>The following example mounts the AFS filespace at the <emphasis role="bold">/afs</emphasis> directory, names
+           <emphasis role="bold">/usr/vice/cache</emphasis> as the cache directory, and sets cache size to 50,000 KB:</para>
+ 
+           <programlisting>
+             <emphasis role="bold">/afs:/usr/vice/cache:50000</emphasis>
+           </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>size</secondary>
+ 
+         <tertiary>setting until next reboot</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>data cache size temporarily</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>setting until next reboot</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>setting until next reboot</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setcachesize</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setcachesize</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ399">
+       <title>To change the disk cache size without rebooting</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ400" />Issue the <emphasis role="bold">fs setcachesize</emphasis> command to set a new disk cache
+           size.</para>
+ 
+           <note>
+             <para>This command does not work for a memory cache.</para>
+           </note>
+ 
+           <programlisting>
+    # <emphasis role="bold">fs setcachesize</emphasis> &lt;<replaceable>size in 1K byte blocks (0 =</replaceable>&gt; reset)&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">setca</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setcachesize</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">size in 1K byte blocks (0 =&gt; reset)</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the number of kilobyte blocks to be used for the cache. Specify a positive integer (<emphasis
+                   role="bold">1024</emphasis> equals 1 MB), or <emphasis role="bold">0</emphasis> (zero) to reset the cache size to
+                   the value specified in the <emphasis role="bold">cacheinfo</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>data cache</primary>
+ 
+         <secondary>disk cache size</secondary>
+ 
+         <tertiary>resetting to default value</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>disk cache size to default value</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>resetting</primary>
+ 
+         <secondary>disk cache size to default value</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cacheinfo file</primary>
+ 
+         <secondary>resetting disk cache to size specified</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>disk cache size</secondary>
+ 
+         <tertiary>resetting to default value</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>data cache size</secondary>
+ 
+         <tertiary>resetting to default value (for disk cache only)</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_444">
+       <title>To reset the disk cache size to the default without rebooting</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setcachesize</emphasis> command to reset the size of the local disk cache (the
+           command does not work for a memory cache). Choose one of the two following options: <itemizedlist>
+               <listitem>
+                 <para>To reset the cache size to the value specified in the local <emphasis role="bold">cacheinfo</emphasis> file,
+                 specify the value <emphasis role="bold">0</emphasis> (zero) <programlisting>
+    # <emphasis role="bold">fs setcachesize 0</emphasis>
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>To reset the cache size to the value set at the last reboot of the machine, include the <emphasis
+                 role="bold">-reset</emphasis> flag. Unless the <emphasis role="bold">-blocks</emphasis> argument was used on the
+                 <emphasis role="bold">afsd</emphasis> command, this is also the value in the <emphasis
+                 role="bold">cacheinfo</emphasis> file. <programlisting>
+    # <emphasis role="bold">fs setcachesize -reset</emphasis>
+ </programlisting></para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">setca</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setcachesize</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">0</emphasis></term>
+ 
+                 <listitem>
+                   <para>Resets the disk cache size to the value in the third field of the <emphasis
+                   role="bold">/usr/vice/etc/cacheinfo</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-reset</emphasis></term>
+ 
+                 <listitem>
+                   <para>Resets the cache size to the value set at the last reboot.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ401">
+       <title>How the Cache Manager Chooses Data to Discard</title>
+ 
+       <para>When the cache is full and application programs request more data from AFS, the Cache Manager must flush out cache
+       chunks to make room for the data. The Cache Manager considers two factors: <orderedlist>
+           <listitem>
+             <para>How recently an application last accessed the data.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Whether the chunk is <emphasis>dirty</emphasis>. A dirty chunk contains changes to a file that have not yet been
+             saved back to the permanent copy stored on a file server machine.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>The Cache Manager first checks the least-recently used chunk. If it is not dirty, the Cache Manager discards the data in
+       that chunk. If the chunk is dirty, the Cache Manager moves on to check the next least recently used chunk. It continues in
+       this manner until it has created a sufficient number of empty chunks.</para>
+ 
+       <para>Chunks that contain data fetched from a read-only volume are by definition never dirty, so the Cache Manager can always
+       discard them. Normally, the Cache Manager can also find chunks of data fetched from read/write volumes that are not dirty, but
+       a small cache makes it difficult to find enough eligible data. If the Cache Manager cannot find any data to discard, it must
+       return I/O errors to application programs that request more data from AFS. Application programs usually have a means for
+       notifying the user of such errors, but not for revealing their cause.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ402">
+     <title>Setting Other Cache Parameters with the afsd program</title>
+ 
+     <para>There are only three cache configuration parameters you must set: the mount directory for AFS, the location of the disk
+     cache directory, and the cache size. They correspond to the three fields in the <emphasis
+     role="bold">/usr/vice/etc/cacheinfo</emphasis> file, as discussed in <link linkend="HDRWQ394">Determining the Cache Type, Size,
+     and Location</link>. However, if you want to experiment with fine-tuning cache performance, you can use the arguments on the
+     <emphasis role="bold">afsd</emphasis> command to control several other parameters. This section discusses a few of these
+     parameters that have the most direct effect on cache performance. To learn more about the <emphasis role="bold">afsd</emphasis>
+     command's arguments, see its reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+     <para>In addition, the AFS initialization script included in the AFS distribution for each system type includes several
+     variables that set several <emphasis role="bold">afsd</emphasis> arguments in a way that is suitable for client machines of
+     different sizes and usage patterns. For instructions on using the script most effectively, see the section on configuring the
+     Cache Manager in the <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+ 
+     <sect2 id="HDRWQ403">
+       <title>Setting Cache Configuration Parameters</title>
+ 
+       <para>The cache configuration parameters with the most direct effect on cache performance include the following: <itemizedlist>
+           <listitem>
+             <para><emphasis>total cache size</emphasis>. This is the amount of disk space or machine memory available for caching,
+             as discussed in detail in <link linkend="HDRWQ394">Determining the Cache Type, Size, and Location</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis>number of cache chunks</emphasis>. For a disk cache, each chunk is a <emphasis role="bold">V</emphasis>n
+             file in the local cache directory (see <link linkend="HDRWQ393">Cache-Related Files</link>). For a memory cache, each
+             chunk is a set of contiguous blocks allocated in machine memory.</para>
+ 
+             <para>This parameter does not have as much of an effect on cache performance as total size. However, adjusting it can
+             influence how often the Cache Manager must discard cached data to make room for new data. Suppose, for example, that you
+             set the disk cache size to 50 MB and the number of chunks (<emphasis role="bold">V</emphasis>n files) to 1,000. If each
+             of the ten users on the machine caches 100 AFS files that average 20 KB in size, then all 1,000 chunks are full (a chunk
+             can contain data from only one AFS file) but the cache holds only about 20 MB of data. When a user requests more data
+             from the File Server, the Cache Manager must discard cached data to reclaim some chunks, even though the cache is filled
+             to less than 50% of its capacity. In such a situation, increasing the number of chunks enables the Cache Manager to
+             discard data less often.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis>chunk size</emphasis>. This parameter determines the maximum amount of data that can fit in a chunk. If
+             a cached element is smaller than the chunk size, the remaining space in the chunk is not used (a chunk can hold no more
+             than one element). If an element cannot fit in a single chunk, it is split across as many chunks as needed. This
+             parameter also determines how much data the Cache Manager requests at a time from the File Server (how much data per
+             <emphasis>fetch RPC</emphasis>, because AFS uses partial file transfer).</para>
+ 
+             <para>The main reason to change chunk size is because of its relation to the amount of data fetched per RPC. If your
+             network links are very fast, it can improve performance to increase chunk size; if the network is especially slow, it
+             can make sense to decrease chunk size.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis>number of dcache entries in memory</emphasis>. The Cache Manager maintains one dcache entry for each
+             cache chunk, recording a small amount of information, such as the file ID (fID) and version number of the AFS file
+             corresponding to the chunk.</para>
+ 
+             <para>For a disk cache, dcache entries reside in the <emphasis role="bold">/usr/vice/cache/CacheItems</emphasis> file; a
+             small number are duplicated in machine memory to speed access.</para>
+ 
+             <para>For a memory cache, the number of dcache entries equals the number of cache chunks. For a discussion of the
+             implications of this correspondence, see <link linkend="HDRWQ405">Controlling Memory Cache Configuration</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>For a description of how the Cache Manager determines defaults for number of chunks, chunk size, and number of dcache
+       entries in a disk cache, see <link linkend="HDRWQ404">Configuring a Disk Cache</link>; for a memory cache, see <link
+       linkend="HDRWQ405">Controlling Memory Cache Configuration</link>. The instructions also explain how to use the <emphasis
+       role="bold">afsd</emphasis> command's arguments to override the defaults.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ404">
+       <title>Configuring a Disk Cache</title>
+ 
+       <para>The default number of cache chunks (<emphasis role="bold">V</emphasis>n files) in a disk cache is calculated by the
+       <emphasis role="bold">afsd</emphasis> command to be the greatest of the following: <itemizedlist>
+           <listitem>
+             <para>100</para>
+           </listitem>
+ 
+           <listitem>
+             <para>1.5 times the result of dividing cache size by chunk size (cachesize/chunksize * 1.5)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The result of dividing cachesize by 10 MB (cachesize/10240)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>You can override this value by specifying a positive integer with the <emphasis role="bold">-files</emphasis> argument.
+       Consider increasing this value if more than 75% of the <emphasis role="bold">V</emphasis>n files are already used soon after
+       the Cache Manager finishes initializing. Consider decreasing it if only a small percentage of the chunks are used at that
+       point. In any case, never specify a value less than 100, because a smaller value can cause performance problems.</para>
+ 
+       <para>The following example sets the number of <emphasis role="bold">V</emphasis>n files to 2,000:</para>
+ 
+       <programlisting>
+         <emphasis role="bold">/usr/vice/etc/afsd -files 2000</emphasis>
+       </programlisting>
+ 
+       <note>
+         <para>It is conventional to place the <emphasis role="bold">afsd</emphasis> command in a machine's AFS initialization file,
+         rather than entering it in a command shell. Furthermore, the values specified in this section are examples only, and are not
+         necessarily suitable for a specific machine.</para>
+       </note>
+ 
+       <para>The default chunk size for a disk cache is 64 KB. In general, the only reason to change it is to adjust to exceptionally
+       slow or fast networks; see <link linkend="HDRWQ403">Setting Cache Configuration Parameters</link>. You can use the <emphasis
+       role="bold">-chunksize</emphasis> argument to override the default. Chunk size must be a power of 2, so provide an integer
+       between 0 (zero) and 30 to be used as an exponent of 2. For example, a value of 10 sets chunk size to 1 KB (210 = 1024); a
+       value of 16 equals the default for disk caches (216 = 64 KB). Specifying a value of 0 (zero) or greater than 30 returns chunk
+       size to the default. Values less than 10 (1 KB) are not recommended. The following example sets chunk size to 16 KB
+       (214):</para>
+ 
+       <programlisting>
+         <emphasis role="bold">/usr/vice/etc/afsd -chunksize 14</emphasis>
+       </programlisting>
+ 
+       <para>For a disk cache, the default number of dcache entries duplicated in memory is one-half the number of chunks specified
+       with the <emphasis role="bold">-files</emphasis> argument, to a maximum of 2,000 entries. You can use the <emphasis
+       role="bold">-dcache</emphasis> argument to change the default, even exceeding 2,000 if you wish. Duplicating more than half
+       the dcache entries in memory is not usually necessary, but sometimes improves performance slightly, because access to memory
+       is faster than access to disk. The following example sets the number to 750:</para>
+ 
+       <programlisting>
+         <emphasis role="bold">/usr/vice/etc/afsd -dcache 750</emphasis>
+       </programlisting>
+ 
+       <para>When configuring a disk cache, you can combine the <emphasis role="bold">afsd</emphasis> command's arguments in any way.
+       The main reason for this flexibility is that the setting you specify for disk cache size (in the <emphasis
+       role="bold">cacheinfo</emphasis> file or with the <emphasis role="bold">-blocks</emphasis> argument) is an absolute maximum
+       limit. You cannot override it by specifying higher values for the <emphasis role="bold">-files</emphasis> or <emphasis
+       role="bold">-chunksize</emphasis> arguments, alone or in combination. A related reason is that the Cache Manager does not have
+       to reserve a set amount of memory on disk. <emphasis role="bold">V</emphasis>n files (the chunks in a disk cache) are
+       initially zero-length, but can expand up to the specified chunk size and shrink again, as needed. If you set the number of
+       <emphasis role="bold">V</emphasis>n files to such a large value that expanding all of them to the full allowable size exceeds
+       the total cache size, they simply never grow to full size.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ405">
+       <title>Controlling Memory Cache Configuration</title>
+ 
+       <para>Configuring a memory cache differs from configuring a disk cache in that not all combinations of the <emphasis
+       role="bold">afsd</emphasis> command's arguments are allowed. This limitation results from the greater interaction between the
+       configuration parameters in a memory cache than a disk cache. If all combinations are allowed, it is possible to set the
+       parameters in an inconsistent way. A list of the acceptable and unacceptable combinations follows a discussion of default
+       values.</para>
+ 
+       <para>The default chunk size for a memory cache is 8 KB. In general, the only reason to change it is to adjust to
+       exceptionally slow or fast networks; see <link linkend="HDRWQ403">Setting Cache Configuration Parameters</link>.</para>
+ 
+       <para>There is no predefined default for number of chunks in a memory cache. The Cache Manager instead calculates the correct
+       number by dividing the total cache size by the chunk size. Recall that for a memory cache, all dcache entries must be in
+       memory. This implies that the number of chunks equals the number of dcache entries in memory, and that there is no default for
+       number of dcache entries (like the number of chunks, it is calculated by dividing the total size by the chunk size).</para>
+ 
+       <para>The following are acceptable combinations of the <emphasis role="bold">afsd</emphasis> command's arguments when
+       configuring a memory cache: <itemizedlist>
+           <listitem>
+             <para><emphasis role="bold">-blocks</emphasis> alone, which overrides the cache size specified in the <emphasis
+             role="bold">/usr/vice/etc/cacheinfo</emphasis> file. The Cache Manager divides the value of this argument by the default
+             chunk size of eight KB to calculate the number of chunks and dcache entries. The following example sets cache size to
+             five MB (5,120 KB) and the number of chunks to 640 (5,120 divided by 8): <programlisting><emphasis role="bold">/usr/vice/etc/afsd -memcache -blocks 5120</emphasis></programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-chunksize</emphasis> alone, to override the default of eight KB. The chunk size must be a
+             power of two, so provide an integer between 0 (zero) and 30 to be used as an exponent of two. For example, a value of
+             ten sets chunk size to 1 KB (210 = 1024); a value of 13 equals the default for memory caches (213 = 8 KB). Specifying a
+             value of 0 (zero) or greater than 30 returns the chunk size to the default. Values less than ten (equivalent to 1 KB)
+             are not recommended. The following example sets the chunk size to four KB (212). Assuming a total cache size of four MB
+             (4,096 KB), the resulting number of chunks is 1024. <programlisting><emphasis role="bold">/usr/vice/etc/afsd -memcache -chunksize 12</emphasis></programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-blocks</emphasis> and <emphasis role="bold">-chunksize</emphasis> together override the
+             defaults for cache size and chunk size. The Cache Manager divides the first by the second to calculate the number of
+             chunks and dcache entries. For example, the following example sets the cache size to six MB (6,144 KB) and chunksize to
+             four KB (212), resulting in 1,536 chunks: <programlisting><emphasis role="bold">/usr/vice/etc/afsd -memcache -blocks 6144 -chunksize 12</emphasis></programlisting></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The following arguments or combinations explicitly set the number of chunks and dcache entries. It is best not to use
+       them, because they set the cache size indirectly, forcing you to perform a hand calculation to determine the size of the
+       cache. Instead, set the <emphasis role="bold">-blocks</emphasis> and <emphasis role="bold">-chunksize</emphasis> arguments
+       alone or in combination; in those cases, the Cache Manager determines the number of chunks and dcache entries itself. Because
+       the following combinations are not recommended, no examples are included. <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">-dcache</emphasis> argument alone explicitly sets the number of chunks and dcache
+             entries. The Cache Manager multiples this value times the default chunk size of 8 KB to derive the total cache size
+             (overriding the value in the <emphasis role="bold">cacheinfo</emphasis> file).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The combination of <emphasis role="bold">-dcache</emphasis> and <emphasis role="bold">-chunksize</emphasis> sets
+             the chunk number and size. The Cache Manager sets the specified values and multiplies them together to obtain total
+             cache size (overriding the value in the <emphasis role="bold">cacheinfo</emphasis> file).</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Do not use the following arguments for a memory cache: <itemizedlist>
+           <listitem>
+             <para><emphasis role="bold">-files</emphasis> alone. This argument controls the number of <emphasis
+             role="bold">V</emphasis>n files for a disk cache, but is ignored for a memory cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-blocks</emphasis> and <emphasis role="bold">-dcache</emphasis>. An error message results,
+             because it is possible to provide values such that dividing the first (total size) by the second (number of chunks)
+             results in a chunk size that is not a power of two.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ406">
+     <title>Maintaining Knowledge of Database Server Machines</title>
+ 
+     <indexterm>
+       <primary>CellServDB file (client)</primary>
+ 
+       <secondary>about</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>CellServDB file (client)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>client knowledge of</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>database server processes, contacting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>database server processes, contacting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>CellServDB file (client), using</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>command interpreters</primary>
+ 
+       <secondary>CellServDB file (client), using</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CellServDB file (client)</primary>
+ 
+       <secondary>copied into kernel memory</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>kernel memory (client)</primary>
+ 
+       <secondary>CellServDB file, reading into</secondary>
+     </indexterm>
+ 
+     <para>For the users of an AFS client machine to access a cell's AFS filespace and other services, the Cache Manager and other
+     client-side agents must have an accurate list of the cell's database server machines. The affected functions include the
+     following: <itemizedlist>
+         <listitem>
+           <para>Accessing files. The Cache Manager contacts the Volume Location (VL) Server to learn which file server machine
+           houses the volume containing a requested file or directory. If the Cache Manager cannot contact a cell's VL Servers, it
+           cannot fetch files.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Authenticating. The <emphasis role="bold">klog</emphasis> program and AFS-modified login utilities contact the
+           Authentication Server to obtain tokens, which the AFS server processes accept as proof that the user is
+           authenticated.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Creating protection groups. The <emphasis role="bold">pts</emphasis> command interpreter contacts the Protection
+           Server when users create protection groups or request information from the Protection Database.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Editing access control lists (ACLs). The <emphasis role="bold">fs</emphasis> command interpreter contacts the File
+           Server that maintains the read/write volume containing a file or directory; the location information comes from the VL
+           Server.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>To enable a machine's users to access a cell, you must list the names and IP addresses of its database server machines in
+     the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on the machine's local disk. In addition to the machine's
+     home cell, you can list any foreign cells that you want to enable users to access. (To enable access to a cell's filespace, you
+     must also mount its <emphasis role="bold">root.cell</emphasis> volume in the local AFS filespace; the conventional location is
+     just under the AFS root directory, <emphasis role="bold">/afs</emphasis>. For instructions, see the <emphasis>OpenAFS Quick
+     Beginnings</emphasis>.)</para>
+ 
+     <sect2 id="Header_451">
+       <title>How Clients Use the List of Database Server Machines</title>
+ 
+       <para>As the <emphasis role="bold">afsd</emphasis> program runs and initializes the Cache Manager, it reads the contents of
+       the <emphasis role="bold">CellServDB</emphasis> file into kernel memory. The Cache Manager does not consult the file again
+       until the machine next reboots. In contrast, the command interpreters for the AFS command suites (such as <emphasis
+       role="bold">fs</emphasis> and <emphasis role="bold">pts</emphasis>) read the <emphasis role="bold">CellServDB</emphasis> file
+       each time they need to contact a database server process.</para>
+ 
+       <para>When a cell's list of database server machines changes, you must change both the <emphasis
+       role="bold">CellServDB</emphasis> file and the list in kernel memory to preserve consistent client performance; some commands
+       probably fail if the two lists of machines disagree. One possible method for updating both the <emphasis
+       role="bold">CellServDB</emphasis> file and kernel memory is to edit the file and reboot the machine. To avoid needing to
+       reboot, you can instead perform both of the following steps: <orderedlist>
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs newcell</emphasis> command to alter the list in kernel memory directly, making
+             the changes available to the Cache Manager.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the <emphasis role="bold">CellServDB</emphasis> file to make the changes available to command interpreters.
+             For a description of the file's format, see <link linkend="HDRWQ407">The Format of the CellServDB file</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>The consequences of missing or incorrect information in the <emphasis role="bold">CellServDB</emphasis> file or kernel
+       memory are as follows: <itemizedlist>
+           <listitem>
+             <para>If there is no entry for a cell, the machine's users cannot access the cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If a cell's entry does not include a database server machine, then the Cache Manager and command interpreters
+             never attempt to contact the machine. The omission does not prevent access to the cell--as long as the information about
+             the other database server machines is correct and the server processes, machines, and network are functioning
+             correctly--but it can put an undue burden on the machines that are listed. If all of the listed machines become
+             inaccessible to clients, then the cell becomes inaccessible even if the omitted database server machine is functioning
+             correctly.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If a machine's name or address is incorrect, or the machine is not actually running the database server processes,
+             then requests from clients time out. Users can experience lengthy delays because they have to wait the full timeout
+             period before the Cache Manager or command interpreter contacts another database server machine.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ407">
+       <title>The Format of the CellServDB file</title>
+ 
+       <indexterm>
+         <primary>CellServDB file (client)</primary>
+ 
+         <secondary>correct format</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>format of CellServDB file (client)</primary>
+       </indexterm>
+ 
+       <para>When editing the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file, you must use the correct format for
+       cell and machine entries. Each cell has a separate entry. The first line has the following format:</para>
+ 
+       <programlisting>
+    &gt;cell_name      #organization
+ </programlisting>
+ 
+       <para>where cell_name is the cell's complete Internet domain name (for example, <emphasis role="bold">abc.com</emphasis>) and
+       organization is an optional field that follows any number of spaces and the number sign (<computeroutput>#</computeroutput>)
+       and can name the organization to which the cell corresponds (for example, the ABC Corporation). After the first line comes a
+       separate line for each database server machine. Each line has the following format:</para>
+ 
+       <programlisting>
+    IP_address   #machine_name
+ </programlisting>
+ 
+       <para>where IP_address is the machine's IP address in dotted decimal format (for example, 192.12.105.3). Following any number
+       of spaces and the number sign (<computeroutput>#</computeroutput>) is machine_name, the machine's fully-qualified hostname
+       (for example, <emphasis role="bold">db1.abc.com</emphasis>). In this case, the number sign does not indicate a comment:
+       machine_name is a required field.</para>
+ 
+       <para>The order in which the cells appear is not important, but it is convenient to put the client machine's home cell first.
+       Do not include any blank lines in the file, not even after the last entry.</para>
+ 
+       <para>The following example shows entries for two cells, each of which has three database server machines:</para>
+ 
+       <programlisting>
+    &gt;abc.com       #ABC Corporation (home cell)
+    192.12.105.3      #db1.abc.com
+    192.12.105.4      #db2.abc.com
+    192.12.105.55     #db3.abc.com
+    &gt;stateu.edu    #State University cell
+    138.255.68.93     #serverA.stateu.edu
+    138.255.68.72     #serverB.stateu.edu
+    138.255.33.154    #serverC.stateu.edu
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ408">
+       <title>Maintaining the Client CellServDB File</title>
+ 
+       <indexterm>
+         <primary>maintaining</primary>
+ 
+         <secondary>CellServDB file (client)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (client)</primary>
+ 
+         <secondary>maintaining</secondary>
+       </indexterm>
+ 
+       <para>Because a correct entry in the <emphasis role="bold">CellServDB</emphasis> file is vital for consistent client
+       performance, you must also update the file on each client machine whenever a cell's list of database server machines changes
+       (for instance, when you follow the instructions in the <emphasis>OpenAFS Quick Beginnings</emphasis> to add or remove a
+       database server machine). To facilitate the client updates, you can use the <emphasis role="bold">package</emphasis> program,
+       which copies files from a central source in AFS to the local disk of client machines. It is conventional to invoke the
+       <emphasis role="bold">package</emphasis> program in a client machine's AFS initialization file so that it runs as the machine
+       reboots, but you can also issue the <emphasis role="bold">package</emphasis> command at any time. For instructions, see <link
+       linkend="HDRWQ448">Running the package program</link>.</para>
+ 
+       <para>If you use the <emphasis role="bold">package</emphasis> program, the conventional location for your cell's central
+       source <emphasis role="bold">CellServDB</emphasis> file is <emphasis role="bold">/afs/</emphasis>cell_name<emphasis
+       role="bold">/common/etc/CellServDB</emphasis>, where cell_name is your cell name. <indexterm>
+           <primary>CellServDB file (client)</primary>
+ 
+           <secondary>central update source for clients</secondary>
+         </indexterm></para>
+ 
+       <para>Creating a symbolic or hard link from <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> to a central source file
+       in AFS is not a viable option. The <emphasis role="bold">afsd</emphasis> program reads the file into kernel memory before the
+       Cache Manager is completely initialized and able to access AFS.</para>
+ 
+       <para>Because every client machine has its own copy of the <emphasis role="bold">CellServDB</emphasis> file, you can in theory
+       make the set of accessible cells differ on various machines. In most cases, however, it is best to maintain consistency
+       between the files on all client machines in the cell: differences between machines are particularly confusing if users
+       commonly use a variety of machines rather than just one.</para>
+ 
+       <para>The AFS Product Support group maintains a central <emphasis role="bold">CellServDB</emphasis> file that includes all
+       cells that have agreed to make their database server machines access to other AFS cells. It is advisable to check this file
+       periodically for updated information. See <link linkend="HDRWQ38">Making Your Cell Visible to Others</link>. <indexterm>
+           <primary>CellServDB file (client)</primary>
+ 
+           <secondary>global source from AFS Support</secondary>
+         </indexterm></para>
+ 
+       <para>An entry in the local <emphasis role="bold">CellServDB</emphasis> is one of the two requirements for accessing a cell.
+       The other is that the cell's <emphasis role="bold">root.cell</emphasis> volume is mounted in the local filespace, by
+       convention as a subdirectory of the <emphasis role="bold">/afs</emphasis> directory. For instructions, see <link
+       linkend="HDRWQ213">To create a cellular mount point</link>.</para>
+ 
+       <note>
+         <para>The <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on a client machine is not the same as the
+         <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on the local disk of a file server machine. The server version
+         lists only the database server machines in the server machine's home cell, because server processes never need to contact
+         foreign cells. It is important to update both types of <emphasis role="bold">CellServDB</emphasis> file on all machines in
+         the cell whenever there is a change to your cell's database server machines. For more information about maintaining the
+         server version of the <emphasis role="bold">CellServDB</emphasis> file, see <link linkend="HDRWQ118">Maintaining the Server
+         CellServDB File</link>.</para>
+       </note>
+ 
+       <indexterm>
+         <primary>CellServDB file (client)</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>CellServDB file (client)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>CellServDB file (client), displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>CellServDB file, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>database server machines, displaying knowledge of</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_454">
+       <title>To display the /usr/vice/etc/CellServDB file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Use a text editor or the <emphasis role="bold">cat</emphasis> command to display the contents of the <emphasis
+           role="bold">/usr/vice/etc/CellServDB</emphasis> file. By default, the mode bits on the file permit anyone to read it.
+           <programlisting>
+    % <emphasis role="bold">cat /usr/vice/etc/CellServDB</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>listcells</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs listcells</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_455">
+       <title>To display the list of database server machines in kernel memory</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs listcells</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs listcells [&amp;]</emphasis> 
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">listc</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">listcells</emphasis>.</para>
+ 
+           <para>To have your shell prompt return immediately, include the ampersand (<emphasis role="bold">&amp;</emphasis>), which
+           makes the command run in the background. It can take a while to generate the complete output because the kernel stores
+           database server machines' IP addresses only, and the <emphasis role="bold">fs</emphasis> command interpreter has the
+           cell's name resolution service (such as the Domain Name Service or a local host table) translate them into hostnames. You
+           can halt the command at any time by issuing an interrupt signal such as <emphasis role="bold">Ctrl-c</emphasis>.</para>
+ 
+           <para>The output includes a single line for each cell, in the following format:</para>
+ 
+           <programlisting>
+    Cell cell_name on hosts list_of_hostnames.
+ </programlisting>
+ 
+           <para>The name service sometimes returns hostnames in uppercase letters, and if it cannot resolve a name at all, it
+           returns its IP address. The following example illustrates all three possibilities:</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">fs listcells</emphasis>
+       .
+       .
+    Cell abc.com on hosts db1.abc.com db2.abc.com db3.abc.com
+    Cell stateu.edu on hosts SERVERA.STATEU.EDU SERVERB.STATEU.EDU 
+                             SERVERC.STATEU.EDU
+    Cell ghi.org on hosts 191.255.64.111 191.255.64.112
+       .
+       .
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>database server machine</secondary>
+ 
+         <tertiary>to client CellServDB file and kernel memory</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>database server machine</secondary>
+ 
+         <tertiary>from client CellServDB file and kernel memory</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>adding</secondary>
+ 
+         <tertiary>to client CellServDB file and kernel memory</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>removing</secondary>
+ 
+         <tertiary>from client CellServDB file and kernel memory</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>changing list of cells in kernel memory</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cell</primary>
+ 
+         <secondary>changing list in client kernel memory</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>changing CellServDB file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (client)</primary>
+ 
+         <secondary>changing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>to update client</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (client)</primary>
+ 
+         <secondary>updating with or without package</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>updating</primary>
+ 
+         <secondary>CellServDB file (client) with or without package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_456">
+       <title>To change the list of a cell's database server machines in kernel memory</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you a use a central copy of the <emphasis role="bold">CellServDB</emphasis> file as a source for client machines,
+           verify that its directory's ACL grants you the <emphasis role="bold">l</emphasis> (<emphasis
+           role="bold">lookup</emphasis>), <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>), and <emphasis
+           role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) permissions. The conventional directory is <emphasis
+           role="bold">/afs/</emphasis>cell_name<emphasis role="bold">/common/etc</emphasis>. If necessary, issue the <emphasis
+           role="bold">fs listacl</emphasis> command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>.
+           <programlisting>
+    # <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting> <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>newcell</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs newcell</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LINEWCELL" />Issue the <emphasis role="bold">fs newcell</emphasis> command to add or change a cell's
+           entry in kernel memory. Repeat the command for each cell.</para>
+ 
+           <note>
+             <para>You cannot use this command to remove a cell's entry completely from kernel memory. In the rare cases when you
+             urgently need to prevent access to a specific cell, you must edit the <emphasis role="bold">CellServDB</emphasis> file
+             and reboot the machine.</para>
+           </note>
+ 
+           <programlisting>
+    # <emphasis role="bold">fs newcell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; &lt;<replaceable>primary servers</replaceable>&gt;+ \
+                 [<emphasis role="bold">-linkedcell</emphasis> &lt;<replaceable>linked cell name</replaceable>&gt;]
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">n</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">newcell</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">cell name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete Internet domain name of the cell for which to record a new list of database server
+                   machines.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">primary servers</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully-qualified hostname or IP address in dotted-decimal format for each database server
+                   machine in the cell. The list you provide completely replaces the existing list.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-linkedcell</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the complete Internet domain name of the AFS cell to link to a DCE cell for the purposes of DFS
+                   fileset location. You can use this argument if the machine's AFS users access DFS via the AFS/DFS Migration
+                   Toolkit Protocol Translator. For instructions, see the <emphasis>OpenAFS/DFS Migration Toolkit Administration
+                   Guide and Reference</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Add or edit the cell's entry in the local <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file, using one
+           of the following three methods. In each case, be sure to obey the formatting requirements described in <link
+           linkend="HDRWQ407">The Format of the CellServDB file</link>. <itemizedlist>
+               <listitem>
+                 <para>If you maintain a central source version of the <emphasis role="bold">CellServDB</emphasis> file and use the
+                 <emphasis role="bold">package</emphasis> program, first use a text editor to alter the central copy of the file.
+                 Then issue the <emphasis role="bold">package</emphasis> command to transfer the contents of the file to the local
+                 machine. For complete instructions, see <link linkend="HDRWQ448">Running the package program</link>.
+                 <programlisting>
+    # <emphasis role="bold">/etc/package -v -c</emphasis> &lt;<replaceable>name of package file</replaceable>&gt;
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If you maintain a central source <emphasis role="bold">CellServDB</emphasis> file but do not use the <emphasis
+                 role="bold">package</emphasis> program, first use a text editor to alter the central copy of the file. Then use a
+                 copying command such as the <emphasis role="bold">cp</emphasis> command to copy it to the local <emphasis
+                 role="bold">/usr/vice/etc/CellServDB</emphasis> file.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If you do not use a central source <emphasis role="bold">CellServDB</emphasis> file, edit the local machine's
+                 <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file directly.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ409">
+     <title>Determining if a Client Can Run Setuid Programs</title>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>controlling running of setuid programs</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>setuid programs</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setuid programs</primary>
+     </indexterm>
+ 
+     <para>A <emphasis>setuid program</emphasis> is one whose binary file has the UNIX setuid mode bit turned on. While a setuid
+     program runs, the user who initialized it assumes the local identity (UNIX UID) of the binary file's owner, and so is granted
+     the permissions in the local file system that pertain to the owner. Most commonly, the issuer's assumed identity (often referred
+     to as <emphasis>effective UID</emphasis>) is the local superuser <emphasis role="bold">root</emphasis>.</para>
+ 
+     <para>AFS does not recognize effective UID: if a setuid program accesses AFS files and directories, it uses the current AFS
+     identity of the user who initialized the program, not of the program's owner. Nevertheless, it can be useful to store setuid
+     programs in AFS for use on more than one client machine. AFS enables a client machine's administrator to determine whether the
+     local Cache Manager allows setuid programs to run or not.</para>
+ 
+     <para>By default, the Cache Manager allows programs from its home cell to run with setuid permission, but denies setuid
+     permission to programs from foreign cells. A program belongs to the same cell as the file server machine that houses the volume
+     in which the file resides, as specified in the file server machine's <emphasis role="bold">/usr/afs/etc/ThisCell</emphasis>
+     file. The Cache Manager determines its own home cell by reading the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file
+     at initialization.</para>
+ 
+     <para>To change a cell's setuid status with respect to the local machine, become the local superuser <emphasis
+     role="bold">root</emphasis> and issue the <emphasis role="bold">fs setcell</emphasis> command. To determine a cell's current
+     setuid status, use the <emphasis role="bold">fs getcellstatus</emphasis> command.</para>
+ 
+     <para>When you issue the <emphasis role="bold">fs setcell</emphasis> command, you directly alter a cell's setuid status as
+     recorded in kernel memory, so rebooting the machine is not necessary. However, nondefault settings do not persist across reboots
+     of the machine unless you add the appropriate <emphasis role="bold">fs setcell</emphasis> command to the machine's AFS
+     initialization file.</para>
+ 
+     <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can turn on the setuid mode bit on an AFS
+     file or directory. When the setuid mode bit is turned on, the UNIX <emphasis role="bold">ls -l</emphasis> command displays the
+     third user mode bit as an <emphasis role="bold">s</emphasis> instead of an <emphasis role="bold">x</emphasis>, but for an AFS
+     file or directory, the <emphasis role="bold">s</emphasis> appears only if setuid permission is enabled for the cell in which the
+     file resides. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>getcellstatus</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs getcellstatus</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_458">
+       <title>To determine a cell's setuid status</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs getcellstatus</emphasis> command to check the setuid status of each desired cell.
+           <programlisting>
+    % <emphasis role="bold">fs getcellstatus</emphasis> &lt;<replaceable>cell name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">getce</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">getcellstatus</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">cell name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each cell for which to report setuid status. Provide the complete Internet domain name or a shortened
+                   form that distinguishes it from the other cells listed in the local <emphasis
+                   role="bold">/usr/vice/etc/CellServDB</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output reports the setuid status of each cell: <itemizedlist>
+           <listitem>
+             <para>the string <computeroutput>no setuid allowed</computeroutput> indicates that the Cache Manager does not allow
+             programs from the cell to run with <computeroutput>setuid permission</computeroutput></para>
+           </listitem>
+ 
+           <listitem>
+             <para>setuid allowed indicates that the Cache Manager allows programs from the cell to run with setuid permission</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setcell</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setcell</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_459">
+       <title>To change a cell's setuid status</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setcell</emphasis> command to change the setuid status of the cell.
+           <programlisting>
+    # <emphasis role="bold">fs setcell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;+ [<emphasis role="bold">-suid</emphasis>] [<emphasis
+                 role="bold">-nosuid</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">setce</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setcell</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">cell name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each cell for which to change setuid status as specified by the <emphasis role="bold">-suid</emphasis>
+                   or <emphasis role="bold">-nosuid</emphasis> flag. Provide each cell's complete Internet domain name or a shortened
+                   form that distinguishes it from the other cells listed in the local <emphasis
+                   role="bold">/usr/vice/etc/CellServDB</emphasis> file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-suid</emphasis></term>
+ 
+                 <listitem>
+                   <para>Enables programs from each specified cell to execute with setuid permission. Provide this flag or the
+                   <emphasis role="bold">-nosuid</emphasis> flag, or omit both to disable setuid permission for each cell.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-nosuid</emphasis></term>
+ 
+                 <listitem>
+                   <para>Prevents programs from each specified cell from executing with setuid permission. Provide this flag or the
+                   <emphasis role="bold">-suid</emphasis> flag, or omit both to disable setuid permission for each cell.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ410">
+     <title>Setting the File Server Probe Interval</title>
+ 
+     <indexterm>
+       <primary>file server probe interval</primary>
+ 
+       <secondary>setting for a client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>client-to-file-server probe interval</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>setting</secondary>
+ 
+       <tertiary>probe interval for File Server</tertiary>
+     </indexterm>
+ 
+     <para>The Cache Manager periodically sends a probe to server machines to verify that they are still accessible. Specifically, it
+     probes the database server machines in its cell and those file servers that house data it has cached.</para>
+ 
+     <para>If a server process does not respond to a probe, the client machine assumes that it is inaccessible. By default, the
+     interval between probes is three minutes, so it can take up to three minutes for a client to recognize that a server process is
+     once again accessible after it was inaccessible.</para>
+ 
+     <para>To adjust the probe interval, include the <emphasis role="bold">-interval</emphasis> argument to the <emphasis
+     role="bold">fs checkservers</emphasis> command while logged in as the local superuser <emphasis role="bold">root</emphasis>. The
+     new interval setting persists until you again issue the command or reboot the machine, at which time the setting returns to the
+     default. To preserve a nondefault setting across reboots, include the appropriate <emphasis role="bold">fs
+     checkservers</emphasis> command in the machine's AFS initialization file.</para>
+ 
+     <sect2 id="Header_461">
+       <title>To set a client's file server probe interval</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs checkservers</emphasis> command with the <emphasis
+           role="bold">-interval</emphasis> argument. <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>checkservers</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs checkservers</secondary>
+             </indexterm> <programlisting>
+    # <emphasis role="bold">fs checkservers -interval</emphasis> &lt;<replaceable>seconds between probes</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">checks</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">checkservers</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-interval</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the number of seconds between probes. Provide an integer value greater than zero.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ411">
+     <title>Setting a Client Machine's Cell Membership</title>
+ 
+     <indexterm>
+       <primary>cell</primary>
+ 
+       <secondary>setting home cell for client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>home cell for client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>ThisCell file (client), value in</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>setting</secondary>
+ 
+       <tertiary>home cell</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>setting</secondary>
+ 
+       <tertiary>home cell</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ThisCell file (client)</primary>
+ 
+       <secondary>setting value in</secondary>
+     </indexterm>
+ 
+     <para>Each client machine belongs to a particular cell, as named in the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis>
+     on its local disk. The machine's cell membership determines three defaults important to users of the machine: <itemizedlist>
+         <listitem>
+           <para>The cell for which users of the machine obtain tokens (authenticate) when they use the <emphasis
+           role="bold">login</emphasis> program or issue the <emphasis role="bold">klog</emphasis> command. There are two effects:
+           <itemizedlist>
+               <listitem>
+                 <para>The <emphasis role="bold">klog</emphasis> program and AFS-modified login utilities contact an Authentication
+                 Server in the cell named in the <emphasis role="bold">ThisCell</emphasis> file.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The <emphasis role="bold">klog</emphasis> program and AFS-modified login utilities combine the contents of the
+                 <emphasis role="bold">ThisCell</emphasis> file with the password that the user provides, generating an encryption
+                 key from the combination. The user's entry in the Authentication Database includes an encryption key also generated
+                 from the combination of password and cell name. If the cell name in the <emphasis role="bold">ThisCell</emphasis>
+                 file is incorrect, users cannot authenticate even if they provide the correct password.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>The cell the Cache Manager considers its local, or home, cell. The Cache Manager allows programs from its local cell
+           to run with setuid permission, but not programs from foreign cells, as discussed further in <link
+           linkend="HDRWQ409">Determining if a Client Can Run Setuid Programs</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The default database server machines that are contacted by the AFS command interpreters running on this
+           machine.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="Header_463">
+       <title>To display a client machine's cell membership</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Use a text editor or the <emphasis role="bold">cat</emphasis> command to display the contents of the <emphasis
+           role="bold">/usr/vice/etc/ThisCell</emphasis> file. <programlisting>
+    % <emphasis role="bold">cat /usr/vice/etc/ThisCell</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_464">
+       <title>To set a client machine's cell membership</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using a text editor, replace the cell name in the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis>
+           file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional.)</emphasis> Reboot the machine to enable the Cache Manager to use the new cell name
+           immediately; the appropriate command depends on the machine's system type. The <emphasis role="bold">klog</emphasis>
+           program, AFS-modified login utilities, and the AFS command interpreters use the new cell name the next time they are
+           invoked; no reboot is necessary. <programlisting>
+    # <emphasis role="bold">sync</emphasis>
+    # <emphasis role="bold">shutdown</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ412">
+     <title>Forcing the Update of Cached Data</title>
+ 
+     <indexterm>
+       <primary>flushing</primary>
+ 
+       <secondary>data cache on client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>data cache</primary>
+ 
+       <secondary>flushing (forcing update)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>flushing cache</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file</primary>
+ 
+       <secondary>flushing from data cache on client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directory</primary>
+ 
+       <secondary>flushing from data cache on client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>flushing from data cache on client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mount point</primary>
+ 
+       <secondary>flushing from data cache on client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>flushing data cache</secondary>
+     </indexterm>
+ 
+     <para>AFS's callback mechanism normally guarantees that the Cache Manager provides the most current version of a file or
+     directory to the application programs running on its machine. However, you can force the Cache Manager to discard (flush) cached
+     data so that the next time an application program requests it, the Cache Manager fetches the latest version available at the
+     File Server.</para>
+ 
+     <para>You can control how many file system elements to flush at a time: <itemizedlist>
+         <listitem>
+           <para>To flush only specific files or directories, use the <emphasis role="bold">fs flush</emphasis> command. This command
+           forces the Cache Manager to discard the data and status information it has cached from the specified files or directories.
+           It does not discard information from an application program's buffer or information that has been altered locally (changes
+           made in the cache but not yet saved permanently to the File Server). However, the next time an application requests the
+           element's data or status information, the Cache Manager has to contact the File Server to get it.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To flush everything cached from a certain volume, use the <emphasis role="bold">fs flushvolume</emphasis> command.
+           This command works like the <emphasis role="bold">fs flush</emphasis> command, but differs in two ways: <itemizedlist>
+               <listitem>
+                 <para>The Cache Manager discards data for all elements in the cache that come from the same volume as the specified
+                 files or directories.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The Cache Manager discards only data, not status information. This difference has little practical effect, but
+                 can lead to different output from the <emphasis role="bold">ls</emphasis> command when the two different commands
+                 are used to flush the same element.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>In addition to callbacks, the Cache Manager has a mechanism for tracking other kinds of possible changes, such as changes
+     in a volume's location. If a volume moves and the Cache Manager has not accessed any data in it for a long time, the Cache
+     Manager's volume location record can be wrong. To resynchronize it, use the <emphasis role="bold">fs checkvolumes</emphasis>
+     command. When you issue the command, the Cache Manager creates a new table of mappings between volume names, ID numbers, and
+     locations. This forces the Cache Manager to reference newly relocated and renamed volumes before it can provide data from
+     them.</para>
+ 
+     <para>It is also possible for information about mount points to become corrupted in the cache. Symptoms of a corrupted mount
+     point included garbled output from the <emphasis role="bold">fs lsmount</emphasis> command, and failed attempts to change
+     directory to or list the contents of a mount point. Use the <emphasis role="bold">fs flushmount</emphasis> command to discard a
+     corrupted mount point. The Cache Manager must refetch the mount point the next time it crosses it in a pathname. (The Cache
+     Manager periodically refreshes cached mount points, but the only other way to discard them immediately is to reinitialize the
+     Cache Manager by rebooting the machine. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>flush</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs flush</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_466">
+       <title>To flush certain files or directories</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs flush</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs flush</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">flush</emphasis></term>
+ 
+                 <listitem>
+                   <para>Must be typed in full.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each file or directory structure to flush from the cache. Omit this argument to flush the current
+                   working directory. Flushing a directory structure does not flush any files or subdirectories cached from
+                   it.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>flushvolume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs flushvolume</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_467">
+       <title>To flush all data from a volume</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs flushvolume</emphasis> command. <programlisting>
+   % <emphasis role="bold">fs flushvolume</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">flushv</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">flushvolume</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names a file or directory from each volume to flush from the cache. The Cache Manager flushes everything in
+                   the cache that it has fetched from the same volume. Omit this argument to flush all cached data fetched from the
+                   volume that contains the current working directory.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>checkvolumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs checkvolumes</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_468">
+       <title>To force the Cache Manager to notice other volume changes</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs checkvolumes</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs checkvolumes</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">checkv</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">checkvolumes</emphasis>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following command confirms that the command completed successfully:</para>
+ 
+       <programlisting>
+    All volumeID/name mappings checked.
+ </programlisting>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>flushmount</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs flushmount</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ413">
+       <title>To flush one or more mount points</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs flushmount</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs flush</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">flushm</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">flushmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each mount point to flush from the cache. Omit this argument to flush the current working directory.
+                   Files or subdirectories cached from the associated volume are unaffected.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ414">
+     <title>Maintaining Server Preference Ranks</title>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>preference ranks for File Server and VL Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>file server machine</primary>
+ 
+       <secondary>Cache Manager preference ranks for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>Cache Manager preference ranks for file server machines</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>Cache Manager preferences for file server machines</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server preference ranks</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>VL Server</primary>
+ 
+       <secondary>Cache Manager preference ranks for</secondary>
+     </indexterm>
+ 
+     <para>As mentioned in the introduction to this chapter, AFS uses client-side data caching and callbacks to reduce the amount of
+     network traffic in your cell. The Cache Manager also tries to make its use of the network as efficient as possible by assigning
+     <emphasis>preference ranks</emphasis> to server machines based on their network proximity to the local machine. The ranks bias
+     the Cache Manager to fetch information from the server machines that are on its own subnetwork or network rather than on other
+     networks, if possible. Reducing the network distance that data travels between client and server machine tends to reduce network
+     traffic and speed the Cache Manager's delivery of data to applications.</para>
+ 
+     <para>The Cache Manager stores two separate sets of preference ranks in kernel memory. The first set of ranks applies to
+     machines that run the Volume Location (VL) Server process, hereafter referred to as <emphasis>VL Server machines</emphasis>. The
+     second set of ranks applies to machines that run the File Server process, hereafter referred to as <emphasis>file server
+     machines</emphasis>. This section explains how the Cache Manager sets default ranks, how to use the <emphasis role="bold">fs
+     setserverprefs</emphasis> command to change the defaults or set new ranks, and how to use the <emphasis role="bold">fs
+     getserverprefs</emphasis> command to display the current set of ranks.</para>
+ 
+     <sect2 id="Header_471">
+       <title>How the Cache Manager Sets Default Ranks</title>
+ 
+       <para>As the <emphasis role="bold">afsd</emphasis> program initializes the Cache Manager, it assigns a preference rank of
+       10,000 to each of the VL Server machines listed in the local <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file.
+       It then randomizes the ranks by adding an integer randomly chosen from the range 0 (zero) to 126. It avoids assigning the same
+       rank to machines in one cell, but it is possible for machines from different cells to have the same rank. This does not
+       present a problem in use, because the Cache Manager compares the ranks of only one cell's database server machines at a time.
+       Although AFS supports the use of multihomed database server machines, the Cache Manager only uses the single address listed
+       for each database server machine in the local <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file. Only Ubik can
+       take advantage of a multihomed database server machine's multiple interfaces.</para>
+ 
+       <para>The Cache Manager assigns preference ranks to a file server machine when it obtains the server's VLDB record from the VL
+       Server, the first time that it accesses a volume that resides on the machine. If the machine is multihomed, the Cache Manager
+       assigns a distinct rank to each of its interfaces (up to the number of interfaces that the VLDB can store for each machine,
+       which is specified in the <emphasis>OpenAFS Release Notes</emphasis>). The Cache Manager compares the interface's IP address
+       to the local machine's address and applies the following algorithm: <itemizedlist>
+           <listitem>
+             <para>If the local machine is a file server machine, the base rank for each of its interfaces is 5,000.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the file server machine interface is on the same subnetwork as the local machine, its base rank is
+             20,000.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the file server machine interface is on the same network as the local machine, or is at the distant end of a
+             point-to-point link with the local machine, its base rank is 30,000.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the file server machine interface is on a different network than the local machine, or the Cache Manager cannot
+             obtain network information about it, its base rank is 40,000.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If the client machine has only one interface, the Cache Manager compares it to the server interface's IP address and
+       sets a rank according to the algorithm. If the client machine is multihomed, the Cache Manager compares each of the local
+       interface addresses to the server interface, and assigns to the server interface the lowest rank that results from comparing
+       it to all of the client interfaces.</para>
+ 
+       <para>After assigning a base rank to a file server machine interface, the Cache Manager adds to it a number randomly chosen
+       from the range 0 (zero) to 15. As an example, a file server machine interface in the same subnetwork as the local machine
+       receives a base rank of 20,000, but the Cache Manager records the actual rank as an integer between 20,000 and 20,015. This
+       process reduces the number of interfaces that have exactly the same rank. As with VL Server machine ranks, it is possible for
+       file server machine interfaces from foreign cells to have the same rank as interfaces in the local cell, but this does not
+       present a problem. Only the relative ranks of the interfaces that house a specific volume are relevant, and AFS supports
+       storage of a volume in only one cell at a time.</para>
+     </sect2>
+ 
+     <sect2 id="Header_472">
+       <title>How the Cache Manager Uses Preference Ranks</title>
+ 
+       <para>Each preference rank pairs an interface's IP address with an integer that can range from 1 to 65,534. A lower rank
+       (lower number) indicates a stronger preference. Once set, a rank persists until the machine reboots, or until you use the
+       <emphasis role="bold">fs setserverprefs</emphasis> command to change it.</para>
+ 
+       <para>The Cache Manager uses VL Server machine ranks when it needs to fetch volume location information from a cell. It
+       compares the ranks for the cell's VL Server machines and attempts to contact the VL Server process on the machine with the
+       best (lowest integer) rank. If it cannot reach that VL Server, it tries to contact the VL Server with the next best rank, and
+       so on. If all of a cell's VL Server machines are inaccessible, the Cache Manager cannot fetch data from the cell.</para>
+ 
+       <para>Similarly, when the Cache Manager needs to fetch data from a volume, it compares the ranks for the interfaces of
+       machines that house the volume, and attempts to contact the interface that has the best rank. If it cannot reach the <emphasis
+       role="bold">fileserver</emphasis> process via that interface, it tries to contact the interface with the next best integer
+       rank, and so on. If it cannot reach any of the interfaces for machines that house the volume, it cannot fetch data from the
+       volume.</para>
+     </sect2>
+ 
+     <sect2 id="Header_473">
+       <title>Displaying and Setting Preference Ranks</title>
+ 
+       <para>To display the file server machine ranks that the Cache Manager is using, use the <emphasis role="bold">fs
+       getserverprefs</emphasis> command. Include the <emphasis role="bold">-vlservers</emphasis> flag to display VL Server machine
+       ranks instead. By default, the output appears on the standard output stream (stdout), but you can write it to a file instead
+       by including the <emphasis role="bold">-file</emphasis> argument.</para>
+ 
+       <para>The Cache Manager stores IP addresses rather than hostnames in its kernel list of ranks, but by default the output
+       identifies interfaces by hostname after calling a translation routine that refers to either the cell's name service (such as
+       the Domain Name Server) or the local host table. If an IP address appears in this case, it is because the translation attempt
+       failed. To bypass the translation step and display IP addresses rather than hostnames, include the <emphasis
+       role="bold">-numeric</emphasis> flag. This can significantly speed up the output.</para>
+ 
+       <para>You can use the <emphasis role="bold">fs setserverprefs</emphasis> command to reset an existing preference rank, or to
+       set the initial rank of a file server machine interface or VL Server machine for which the Cache Manager has no rank. The
+       ranks you set persist until the machine reboots or until you issue the <emphasis role="bold">fs setserverprefs</emphasis>
+       command again. To make a rank persist across a reboot, place the appropriate <emphasis role="bold">fs
+       setserverprefs</emphasis> command in the machine's AFS initialization file.</para>
+ 
+       <para>As with default ranks, the Cache Manager adds a randomly chosen integer to each rank range that you assign. For file
+       server machine interfaces, the randomizing number is from the range 0 (zero) to 15; for VL Server machines, it is from the
+       range 0 (zero) to 126. For example, if you assign a rank of 15,000 to a file server machine interface, the Cache Manager
+       stores an integer between 15,000 to 15,015.</para>
+ 
+       <para>To assign VL Server machine ranks, list them after the <emphasis role="bold">-vlserver</emphasis> argument to the
+       <emphasis role="bold">fs setserverprefs</emphasis> command.</para>
+ 
+       <para>To assign file server machine ranks, use or more of the three possible methods: <orderedlist>
+           <listitem>
+             <para>List them after the <emphasis role="bold">-servers</emphasis> argument on the command line.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Record them in a file and name it with the <emphasis role="bold">-file</emphasis> argument. You can easily
+             generate a file with the proper format by including the <emphasis role="bold">-file</emphasis> argument to the <emphasis
+             role="bold">fs getserverprefs</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Provide them via the standard input stream, by including the <emphasis role="bold">-stdin</emphasis> flag. This
+             enables you to feed in values directly from a command or script that generates preferences using an algorithm
+             appropriate for your cell. It must generate them in the proper format, with one or more spaces between each pair and
+             between the two parts of the pair. The AFS distribution does not include such a script, so you must write one if you
+             want to use this method.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>You can combine any of the <emphasis role="bold">-servers</emphasis>, <emphasis role="bold">-file</emphasis>, and
+       <emphasis role="bold">-stdin</emphasis> options on the same command line if you wish. If more than one of them specifies a
+       rank for the same interface, the one assigned with the <emphasis role="bold">-servers</emphasis> argument takes precedence.
+       You can also provide the <emphasis role="bold">-vlservers</emphasis> argument on the same command line to set VL Server
+       machine ranks at the same time as file server machine ranks.</para>
+ 
+       <para>The <emphasis role="bold">fs</emphasis> command interpreter does not verify hostnames or IP addresses, and so willingly
+       stores ranks for hostnames and addresses that don't actually exist. The Cache Manager never uses such ranks unless the same
+       VLDB record for a server machine records the same incorrect information. <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>getserverprefs</secondary>
+         </indexterm> <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>fs getserverprefs</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="Header_474">
+       <title>To display server preference ranks</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs getserverprefs</emphasis> command to display the Cache Manager's preference ranks
+           for file server machines or VL Server machines. <programlisting>
+    % <emphasis role="bold">fs getserverprefs</emphasis> [<emphasis role="bold">-file</emphasis> &lt;<replaceable>output to named file</replaceable>&gt;] [<emphasis
+                 role="bold">-numeric</emphasis>] [<emphasis role="bold">-vlservers</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">gp</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">getserverprefs</emphasis> (<emphasis
+                   role="bold">gets</emphasis> is the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of the file to which to write the list of ranks. Omit this argument to display the
+                   list on the standard output stream (stdout).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-numeric</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the IP address, rather than the hostname, of each ranked machine interface. Omit this flag to have
+                   the addresses translated into hostnames, which takes longer.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-vlservers</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays ranks for VL Server machines rather than file server machines.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <para>The following example displays file server machine ranks. The <emphasis role="bold">-numeric</emphasis> flag is not
+           used, so the appearance of an IP address indicates that is not currently possible to translate it to a hostname.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">fs gp</emphasis>
+    fs5.abc.com         20000
+    fs1.abc.com         30014
+    server1.stateu.edu  40011
+    fs3.abc.com         20001
+    fs4.abc.com         30001
+    192.12.106.120      40002
+    192.12.106.119      40001
+       .   .   .   .   .     . .
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setserverprefs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setserverprefs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>preferences</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_475">
+       <title>To set server preference ranks</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setserverprefs</emphasis> command to set the Cache Manager's preference ranks for
+           one or more file server machines or VL Server machines. <programlisting>
+    # <emphasis role="bold">fs setserverprefs</emphasis> [<emphasis role="bold">-servers</emphasis> &lt;<replaceable>fileserver names and ranks</replaceable>&gt;+]  \
+                        [<emphasis role="bold">-vlservers</emphasis> &lt;<replaceable>VL server names and ranks</replaceable>&gt;+]  \
+                        [<emphasis role="bold">-file</emphasis> &lt;<replaceable>input from named file</replaceable>&gt;] [<emphasis
+                 role="bold">-stdin</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sp</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setserverprefs</emphasis> (<emphasis
+                   role="bold">sets</emphasis> is the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-servers</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more pairs of file server machine interface and rank. Identify each interface by its
+                   fully-qualified hostname or IP address in dotted decimal format. Acceptable ranks are the integers from <emphasis
+                   role="bold">1</emphasis> to <emphasis role="bold">65534</emphasis>. Separate the parts of a pair, and the pairs
+                   from one another, with one or more spaces.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-vlservers</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more pairs of VL Server machine and rank. Identify each machine by its fully-qualified
+                   hostname or IP address in dotted decimal format. Acceptable ranks are the integers from <emphasis
+                   role="bold">1</emphasis> to <emphasis role="bold">65534</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of a file that contains one more pairs of file server machine interface and rank.
+                   Place each pair on its own line in the file. Use the same format for interfaces and ranks as with the <emphasis
+                   role="bold">-servers</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-stdin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Indicates that pairs of file server machine interface and rank are being provided via the standard input
+                   stream (stdin). The program or script that generates the pairs must format them in the same manner as for the
+                   <emphasis role="bold">-servers</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ415">
+     <title>Managing Multihomed Client Machines</title>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>use of NetInfo file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>use of NetRestrict file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>interfaces registered with File Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>File Server</primary>
+ 
+       <secondary>client interfaces registered</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>client interfaces registered with File Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>client interfaces registered with File Server</secondary>
+     </indexterm>
+ 
+     <para>The File Server can choose the interface to which to send a message when it initiates communication with the Cache Manager
+     on a multihomed client machine (one with more than one network interface and IP address). If that interface is inaccessible, it
+     automatically switches to an alternate. This improves AFS performance, because it means that the outage of an interface does not
+     interrupt communication between File Server and Cache Manager.</para>
+ 
+     <para>The File Server can choose the client interface when it sends two types of messages: <itemizedlist>
+         <listitem>
+           <para>A message to break the callback that the Cache Manager holds on a cached file</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>ping</emphasis> message to check that the Cache Manager is still accessible and responding; the File
+           Server sends such a message every few minutes</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>(The File Server does not choose which client interface to respond to when filling a Cache Manager's request for AFS data.
+     In that case, it always responds to the client interface via which the Cache Manager sent the request.)</para>
+ 
+     <para>The Cache Manager compiles the list of eligible interfaces on its client machine automatically as it initializes, and
+     records them in kernel memory. When the Cache Manager first establishes a connection with the File Server, it sends along the
+     list of interface addresses. The File Server records the addresses, and uses the one at the top of the list when it needs to
+     break a callback or send a ping to the Cache Manager. If that interface is inaccessible, the File Server simultaneously sends a
+     message to all of the other interfaces in the list. Whichever interface replies first is the one to which the File Server sends
+     future messages.</para>
+ 
+     <para>You can control which addresses the Cache Manager registers with File Servers by listing them in two files in the
+     <emphasis role="bold">/usr/vice/etc</emphasis> directory on the client machine's local disk: <emphasis
+     role="bold">NetInfo</emphasis> and <emphasis role="bold">NetRestrict</emphasis>. If the <emphasis role="bold">NetInfo</emphasis>
+     file exists when the Cache Manager initializes, the Cache Manager uses its contents as the basis for the list of interfaces.
+     Otherwise, the Cache Manager uses the list of interfaces configured with the operating system. It then removes from the list any
+     addresses that appear in the <emphasis role="bold">/usr/vice/etc/NetRestrict</emphasis> file, if it exists. The Cache Manager
+     records the resulting list in kernel memory.</para>
+ 
+     <para>You can also use the <emphasis role="bold">fs setclientaddrs</emphasis> command to change the list of addresses stored in
+     the Cache Manager's kernel memory, without rebooting the client machine. The list of addresses you provide on the command line
+     completely replaces the current list in kernel memory. The changes you make persist only until the client machine reboots,
+     however. To preserve the revised list across reboots, list the interfaces in the <emphasis role="bold">NetInfo</emphasis> file
+     (and if appropriate, the <emphasis role="bold">NetRestrict</emphasis> file) in the local <emphasis
+     role="bold">/usr/vice/etc</emphasis> directory. (You can also place the appropriate <emphasis role="bold">fs
+     setclientaddrs</emphasis> command in the machine's AFS initialization script, but that is less efficient: by the time the Cache
+     Manager reads the command in the script, it has already compiled a list of interfaces.)</para>
+ 
+     <para>To display the list of addresses that the Cache Manager is currently registering with File Servers, use the <emphasis
+     role="bold">fs getclientaddrs</emphasis> command.</para>
+ 
+     <para>Keep the following in mind when you change the <emphasis role="bold">NetInfo</emphasis> or <emphasis
+     role="bold">NetRestrict</emphasis> file, or issue the <emphasis role="bold">fs getclientaddrs</emphasis> or <emphasis
+     role="bold">fs setclientaddrs</emphasis> commands: <itemizedlist>
+         <listitem>
+           <para>When you issue the <emphasis role="bold">fs setclientaddrs</emphasis> command, the revised list of addresses does
+           not propagate automatically to File Servers with which the Cache Manager has already established a connection. They
+           continue to use the list that the Cache Manager registered with them when it first established a connection. To force
+           previously contacted File Servers to use the revised list, you must either reboot each file server machine, or reboot the
+           client machine after changing its <emphasis role="bold">NetInfo</emphasis> file, <emphasis
+           role="bold">NetRestrict</emphasis> file, or both.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">fs</emphasis> command interpreter verifies that each of the addresses you specify on the
+           <emphasis role="bold">fs setclientaddrs</emphasis> command line is actually configured with the client machine's operating
+           system. If it is not, the command fails with an error message that marks the address as a <computeroutput>Nonexistent
+           interface</computeroutput>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>As previously noted, the File Server does not use the registered list of addresses when it responds to the Cache
+           Manager's request for data (as opposed to initiating communication itself). It always attempts to send its reply to the
+           interface from which the Cache Manager sent the request. If the reply attempt fails, the File Server selects an alternate
+           route for resending the reply according to its server machine's network routing configuration, not the list of addresses
+           registered by the Cache Manager.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The Cache Manager does not use the list of interfaces when choosing the interface via which to establish a
+           connection to a File Server.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The list of addresses that the <emphasis role="bold">fs getclientaddrs</emphasis> command displays is not
+           necessarily the one that a specific File Server is using, if an administrator has issued the <emphasis role="bold">fs
+           setclientaddrs</emphasis> command since the Cache Manager first contacted that File Server. It determines only which
+           addresses the Cache Manager registers when connecting to File Servers in future.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>NetInfo (client version)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>NetInfo file (client version)</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>NetInfo file (client version)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>editing</primary>
+ 
+       <secondary>NetInfo file (client version)</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_477">
+       <title>To create or edit the client NetInfo file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using a text editor, open the <emphasis role="bold">/usr/vice/etc/NetInfo</emphasis> file. Place one IP address in
+           dotted decimal format (for example, <computeroutput>192.12.107.33</computeroutput>) on each line. On the first line, put
+           the address that you want each File Server to use initially. The order of the remaining machines does not matter, because
+           if an RPC to the first interface fails, the File Server simultaneously sends RPCs to all of the other interfaces in the
+           list. Whichever interface replies first is the one to which the File Server then sends pings and RPCs to break
+           callbacks.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you want the Cache Manager to start using the revised list immediately, either reboot the machine, or use the
+           <emphasis role="bold">fs setclientaddrs</emphasis> command to create the same list of addresses in kernel memory
+           directly.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>NetRestrict (client version)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>NetRestrict file (client version)</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>NetRestrict file (client version)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>editing</primary>
+ 
+         <secondary>NetRestrict file (client version)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_478">
+       <title>To create or edit the client NetRestrict file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using a text editor, open the <emphasis role="bold">/usr/vice/etc/NetRestrict</emphasis> file. Place one IP address
+           in dotted decimal format on each line. The order of the addresses is not significant. Use the value <emphasis
+           role="bold">255</emphasis> as a wildcard that represents all possible addresses in that field. For example, the entry
+           <computeroutput>192.12.105.255</computeroutput> indicates that the Cache Manager does not register any of the addresses in
+           the 192.12.105 subnet.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you want the Cache Manager to start using the revised list immediately, either reboot the machine, or use the
+           <emphasis role="bold">fs setclientaddrs</emphasis> command to set a list of addresses that does not included the
+           prohibited ones.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>getclientaddrs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs getclientaddrs</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_479">
+       <title>To display the list of addresses from kernel memory</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs getclientaddrs</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs getclientaddrs</emphasis> 
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">gc</emphasis> is an acceptable alias for <emphasis role="bold">getclientaddrs</emphasis>
+           (<emphasis role="bold">getcl</emphasis> is the shortest acceptable abbreviation).</para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output lists each IP address on its own line, in dotted decimal format. <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>setclientaddrs</secondary>
+         </indexterm> <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>fs setclientaddrs</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="Header_480">
+       <title>To set the list of addresses in kernel memory</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setclientaddrs</emphasis> command to replace the list of addresses currently in
+           kernel memory with a new list. <programlisting>
+    # <emphasis role="bold">fs setclientaddrs</emphasis> [<emphasis role="bold">-address</emphasis> &lt;<replaceable>client network interfaces</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sc</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setclientaddrs</emphasis> (<emphasis
+                   role="bold">setcl</emphasis> is the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-address</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies one or more IP addresses in dotted decimal format (hostnames are not acceptable). Separate each
+                   address with one or more spaces.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ416">
+     <title>Controlling the Display of Warning and Informational Messages</title>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>messages displayed, controlling</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>messages displayed, controlling</secondary>
+     </indexterm>
+ 
+     <para>By default, the Cache Manager generates two types of warning and informational messages: <itemizedlist>
+         <listitem>
+           <para>It sends <emphasis>user messages</emphasis>, which provide user-level status and warning information, to user
+           screens.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sends <emphasis>console messages</emphasis>, which provide system-level status and warning information, to the
+           client machine's designated console.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>You can use the <emphasis role="bold">fs messages</emphasis> command to control whether the Cache Manager displays either
+     type of message, both types, or neither. It is best not to disable messages completely, because they provide useful
+     information.</para>
+ 
+     <para>If you want to monitor Cache Manager status and performance more actively, you can use the <emphasis
+     role="bold">afsmonitor</emphasis> program to collect an extensive set of statistics (it also gathers File Server statistics). If
+     you experience performance problems, you can use <emphasis role="bold">fstrace</emphasis> suite of commands to gather a
+     low-level trace of Cache Manager operations, which the AFS Support and Development groups can analyze to help solve your
+     problem. To learn about both utilities, see <link linkend="HDRWQ323">Monitoring and Auditing AFS Performance</link>. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>messages</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs messages</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_482">
+       <title>To control the display of warning and status messages</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs messages</emphasis> command, using the <emphasis role="bold">-show</emphasis>
+           argument to specify the type of messages to be displayed. <programlisting>
+    # <emphasis role="bold">fs messages -show</emphasis> &lt;<emphasis role="bold">user</emphasis>|<emphasis role="bold">console</emphasis>|<emphasis
+                 role="bold">all</emphasis>|<emphasis role="bold">none</emphasis>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">me</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">messages</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-show</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the types of messages to display. Choose one of the following values: <variablelist>
+                       <varlistentry>
+                         <term><emphasis role="bold">user</emphasis></term>
+ 
+                         <listitem>
+                           <para>Sends user messages to user screens.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">console</emphasis></term>
+ 
+                         <listitem>
+                           <para>Sends console messages to the console.</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">all</emphasis></term>
+ 
+                         <listitem>
+                           <para>Sends user messages to user screens and console messages to the console (the default if the
+                           <emphasis role="bold">-show</emphasis> argument is omitted).</para>
+                         </listitem>
+                       </varlistentry>
+ 
+                       <varlistentry>
+                         <term><emphasis role="bold">none</emphasis></term>
+ 
+                         <listitem>
+                           <para>Disables messages completely.</para>
+                         </listitem>
+                       </varlistentry>
+                     </variablelist></para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ417">
+     <title>Displaying and Setting the System Type Name</title>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>system type name stored in kernel memory</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>system type name stored in Cache Manager memory</secondary>
+     </indexterm>
+ 
+     <para>The Cache Manager stores the system type name of the local client machine in kernel memory. It reads in the default value
+     from a hardcoded definition in the AFS client software.</para>
+ 
+     <para>The Cache Manager uses the system name as a substitute for the @sys variable in AFS pathnames. The variable is useful when
+     creating a symbolic link from the local disk to an AFS directory that houses binaries for the client machine's system type.
+     Because the @sys variable automatically steers the Cache Manager to the appropriate directory, you can create the same symbolic
+     link on client machines of different system types. (You can even automate the creation operation by using the package utility
+     described in <link linkend="HDRWQ419">Configuring Client Machines with the package Program</link>.) The link also remains valid
+     when you upgrade the machine to a new system type.</para>
+ 
+     <para>Configuration is simplest if you use the system type names that AFS assigns. For a list, see the <emphasis>OpenAFS Release
+     Notes</emphasis>.</para>
+ 
+     <para>To display the system name stored in kernel memory, use the <emphasis role="bold">sys</emphasis> or <emphasis
+     role="bold">fs sysname</emphasis> command. To change the name, add the latter command's <emphasis role="bold">-newsys</emphasis>
+     argument. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>sysname</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs sysname</secondary>
+       </indexterm> <indexterm>
+         <primary>sys command</primary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>sys</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_484">
+       <title>To display the system type name</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs sysname</emphasis> or <emphasis role="bold">sys</emphasis> command.
+           <programlisting>
+    % <emphasis role="bold">fs sysname</emphasis> 
+    % <emphasis role="bold">sys</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output of the <emphasis role="bold">fs sysname</emphasis> command has the following format:</para>
+ 
+       <programlisting>
+    Current sysname is 'system_name'
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">sys</emphasis> command displays the system_name string with no other text.</para>
+     </sect2>
+ 
+     <sect2 id="Header_485">
+       <title>To change the system type name</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs sysname</emphasis> command, using the <emphasis role="bold">-newsys</emphasis>
+           argument to specify the new name. <programlisting>
+    # <emphasis role="bold">fs sysname</emphasis> &lt;<replaceable>new sysname</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sys</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">sysname</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">new sysname</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the new system type name.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ418">
+     <title>Enabling Asynchronous Writes</title>
+ 
+     <indexterm>
+       <primary>asynchrony</primary>
+ 
+       <secondary>enabling for Cache Manager write operations</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>synchrony</primary>
+ 
+       <secondary>controlling for Cache Manager write operations</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Cache Manager</primary>
+ 
+       <secondary>enabling asynchrony for write operations</secondary>
+     </indexterm>
+ 
+     <para>By default, the Cache Manager writes all data to the File Server immediately and synchronously when an application program
+     closes a file. That is, the <emphasis role="bold">close</emphasis> system call does not return until the Cache Manager has
+     actually written all of the cached data from the file back to the File Server. You can enable the Cache Manager to write files
+     asynchronously by specifying the number of kilobytes of a file that can remain to be written to the File Server when the Cache
+     Manager returns control to the application.</para>
+ 
+     <para>Enabling asynchronous writes can be helpful to users who commonly work with very large files, because it usually means
+     that the application appears to perform faster. However, it introduces some complications. It is best not to enable asynchronous
+     writes unless the machine's users are sophisticated enough to understand the potential problems and how to avoid them. The
+     complications include the following: <itemizedlist>
+         <listitem>
+           <para>In most cases, the Cache Manager returns control to applications earlier than it does by default, but it is not
+           guaranteed to do so. Users cannot always expect faster performance.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If an asynchronous write fails, there is no way to notify the application, because the <emphasis
+           role="bold">close</emphasis> system call has already returned with a code indicating success.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Asynchronous writing increases the possibility that the user fails to notice when a write operation makes a volume
+           exceed its quota. As always, the portion of the file that exceeds the quota is lost, as indicated by a message like the
+           following: <programlisting>
+    No space left on device
+ </programlisting></para>
+ 
+           <para>To avoid losing data because of insufficient quota, before closing a file users must verify that the volume housing
+           the file has enough free space to accommodate it.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>When you enable asynchronous writes by issuing the <emphasis role="bold">fs storebehind</emphasis> command, you set the
+     number of kilobytes of a file that can still remain to be written to the File Server when the Cache Manager returns control to
+     the application program. You can apply the setting either to all files manipulated by applications running on the machine, or
+     only to certain files: <itemizedlist>
+         <listitem>
+           <para>The setting that applies to all files is called the <emphasis>default store asynchrony</emphasis> for the machine,
+           and persists until the machine reboots. If, for example, you set the default store asynchrony to 10 KB, it means that when
+           an application closes a file, the Cache Manager can return control to the application as soon as no more than 10 KB of a
+           file that the application has closed remain to be written to the File Server.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The setting for an individual file overrides the default store asynchrony and persists as long as there is an entry
+           for the file in the internal table that the Cache Manager uses to track information about files. In general, such an entry
+           persists at least until an application closes the file or exits completely, but the Cache Manager is free to recycle the
+           entry if the file is inactive and it needs to free up slots in the table. To be sure the entry exists in the table, issue
+           the <emphasis role="bold">fs storebehind</emphasis> command shortly before closing the file.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>fs commands</primary>
+ 
+       <secondary>storebehind</secondary>
+ 
+       <tertiary>setting default asynchrony</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>fs storebehind</secondary>
+ 
+       <tertiary>setting default asynchrony</tertiary>
+     </indexterm>
+ 
+     <sect2 id="Header_487">
+       <title>To set the default store asynchrony</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs storebehind</emphasis> command with the <emphasis
+           role="bold">-allfiles</emphasis> argument. <programlisting>
+    # <emphasis role="bold">fs storebehind -allfiles</emphasis>  &lt;<replaceable>new default (KB)</replaceable>&gt; [<emphasis
+                 role="bold">-verbose</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">st</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">storebehind</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-allfiles</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the number of kilobytes of data that can remain to be written to the File Server when the Cache Manager
+                   returns control to the application that closed a file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose</emphasis></term>
+ 
+                 <listitem>
+                   <para>Produces a message that confirms the new setting.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>storebehind</secondary>
+ 
+         <tertiary>setting asynchrony for specific files</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs storebehind</secondary>
+ 
+         <tertiary>setting asynchrony for specific files</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_488">
+       <title>To set the store asynchrony for one or more files</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) permission on
+           the access control list (ACL) of each file for which you are setting the store asynchrony, by issuing the <emphasis
+           role="bold">fs listacl</emphasis> command, which is described fully in <link linkend="HDRWQ572">Displaying ACLs</link>.
+           <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> dir/file path
+ </programlisting></para>
+ 
+           <para>Alternatively, become the local superuser <emphasis role="bold">root</emphasis> on the client machine, if you are
+           not already, by issuing the <emphasis role="bold">su</emphasis> command.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs storebehind</emphasis> command with the <emphasis role="bold">-kbytes</emphasis>
+           and <emphasis role="bold">-files</emphasis> arguments. <programlisting>
+    # <emphasis role="bold">fs storebehind -kbytes</emphasis> &lt;<replaceable>asynchrony for specified names</replaceable>&gt; \
+                     <emphasis role="bold">-files</emphasis> &lt;<replaceable>specific pathnames</replaceable>&gt;+  \
+                     [<emphasis role="bold">-verbose</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">st</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">storebehind</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-kbytes</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the number of kilobytes of data that can remain to be written to the File Server when the Cache Manager
+                   returns control to the application that closed a file named by the <emphasis role="bold">-files</emphasis>
+                   argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-files</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each file for which to set a store asynchrony that overrides the default. Partial pathnames are
+                   interpreted relative to the current working directory.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose</emphasis></term>
+ 
+                 <listitem>
+                   <para>Produces a message that confirms that new setting.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>storebehind</secondary>
+ 
+         <tertiary>displaying default asynchrony</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs storebehind</secondary>
+ 
+         <tertiary>displaying default asynchrony</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_489">
+       <title>To display the default store asynchrony</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs storebehind</emphasis> command with no arguments, or with the <emphasis
+           role="bold">-verbose</emphasis> flag only. <programlisting>
+    % <emphasis role="bold">fs storebehind</emphasis>  [<emphasis role="bold">-verbose</emphasis>]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">st</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">storebehind</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose</emphasis></term>
+ 
+                 <listitem>
+                   <para>Produces output that reports the default store asynchrony.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>storebehind</secondary>
+ 
+         <tertiary>displaying asynchrony for specific files</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs storebehind</secondary>
+ 
+         <tertiary>displaying asynchrony for specific files</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_490">
+       <title>To display the store asynchrony for one or more files</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs storebehind</emphasis> command with the <emphasis role="bold">-files</emphasis>
+           argument only. <programlisting>
+    % <emphasis role="bold">fs storebehind</emphasis> <emphasis role="bold">-files</emphasis> &lt;<replaceable>specific pathnames</replaceable>&gt;+ 
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">st</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">storebehind</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-files</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies each file for which to display the store asynchrony. Partial pathnames are interpreted relative to
+                   the current working directory.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output lists each file separately. If a value has previously been set for the specified files, the output reports
+       the following:</para>
+ 
+       <programlisting>
+    Will store up to y kbytes of file asynchronously.
+    Default store asynchrony is x kbytes.
+ </programlisting>
+ 
+       <para>If the default store asynchrony applies to a file (because you have not set a <emphasis role="bold">-kbytes</emphasis>
+       value for it), the output reports the following:</para>
+ 
+       <programlisting>
+    Will store file according to default.
+    Default store asynchrony is x kbytes.
+ </programlisting>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd016.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd016.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd016.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,1876 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ419">
+   <title>Configuring Client Machines with the package Program</title>
+ 
+   <para>The <emphasis role="bold">package</emphasis> program automates many aspects of the client configuration process. With the
+   <emphasis role="bold">package</emphasis> program, you can easily configure the local disk of numerous clients by defining global
+   configuration files. <indexterm>
+       <primary>configuring</primary>
+ 
+       <secondary>local disk of client with package</secondary>
+     </indexterm> <indexterm>
+       <primary>client</primary>
+ 
+       <secondary>configuring local disk with package</secondary>
+     </indexterm> <indexterm>
+       <primary>disk</primary>
+ 
+       <secondary>local</secondary>
+ 
+       <see>local disk</see>
+     </indexterm> <indexterm>
+       <primary>local disk</primary>
+ 
+       <secondary>configuring on client, using package</secondary>
+     </indexterm></para>
+ 
+   <sect1 id="HDRWQ420">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands or instructions in a prototype
+     file:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="37*" />
+ 
+         <colspec colwidth="63*" />
+ 
+         <tbody>
+           <row>
+             <entry>Configure a client machine's local disk</entry>
+ 
+             <entry><emphasis role="bold">package</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Define directory</entry>
+ 
+             <entry><emphasis role="bold">D</emphasis> [update_code] directory owner group mode_bits</entry>
+           </row>
+ 
+           <row>
+             <entry>Define file</entry>
+ 
+             <entry><emphasis role="bold">F</emphasis> [update_code] file source_file [owner group mode_bits]</entry>
+           </row>
+ 
+           <row>
+             <entry>Define symbolic link</entry>
+ 
+             <entry><emphasis role="bold">L</emphasis> [update_code] link actual_file [owner group mode_bits]</entry>
+           </row>
+ 
+           <row>
+             <entry>Define block special device</entry>
+ 
+             <entry><emphasis role="bold">B</emphasis> device_name major_device_number minor_device_number owner group
+             mode_bits</entry>
+           </row>
+ 
+           <row>
+             <entry>Define character special device</entry>
+ 
+             <entry><emphasis role="bold">C</emphasis> device_name major_device_number minor_device_number owner group
+             mode_bits</entry>
+           </row>
+ 
+           <row>
+             <entry>Define socket</entry>
+ 
+             <entry><emphasis role="bold">S</emphasis> socket_name [owner group mode_bits]</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ422">
+     <title>Using the package Program</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>prototype file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>prototype files in package</primary>
+ 
+       <secondary>about</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">package</emphasis> program uses system-independent <emphasis>prototype files</emphasis> to
+     define a standard disk configuration; a prototype file indicates which files reside on the local client disk, which files are
+     links into AFS, etc. The prototype files are then compiled into <emphasis>configuration files</emphasis> for each different
+     system type.</para>
+ 
+     <para>Not all client machines have the same configuration. If desired, you can create different prototype files for different
+     client functions (print server, regular client, etc.).</para>
+ 
+     <para>The <emphasis role="bold">package</emphasis> program compares the contents of a local client disk with the configuration
+     file. If there are any differences, the <emphasis role="bold">package</emphasis> program makes the necessary updates to the
+     local disk by copying the files from AFS onto the disk. The <emphasis role="bold">package</emphasis> program can also be
+     configured to delete files that are not part of the system configuration or automatically reboot the client when certain files
+     (such as the <emphasis role="bold">dkload</emphasis> file) have been updated.</para>
+ 
+     <para>The <emphasis role="bold">package</emphasis> program does require that you take some time to prepare the prototype files,
+     but it provides the following benefits: <itemizedlist>
+         <listitem>
+           <para>You no longer need to configure each machine individually; the prototype configuration file applies to all
+           machines.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can change the configuration of machines simply by changing the prototype file and rebooting the clients.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Disk organization is uniform across a set of machines.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The configuration files serve as a record of files on the disk and symbolic links into AFS.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="Header_494">
+       <title>Using Package on File Server Machines</title>
+ 
+       <para>While the <emphasis role="bold">package</emphasis> program was designed for use on client machines, it can also be used
+       to configure a file server machine's disk. However, if any of the files referred to in a configuration file reside in volumes
+       on the file server, the <emphasis role="bold">package</emphasis> program cannot access the volumes during reboot (and until
+       the File Server process and Volume Server process start up again).</para>
+ 
+       <para>Since the <emphasis role="bold">package</emphasis> program aborts when it cannot access a file, you need to eliminate
+       references to files in AFS that reside in volumes on the file server machine. Because of these constraints, the remainder of
+       this chapter assumes the <emphasis role="bold">package</emphasis> program is being used for client configurations.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ423">
+     <title>Package Overview</title>
+ 
+     <para>There are three main steps to follow before running the <emphasis role="bold">package</emphasis> program: <orderedlist>
+         <listitem>
+           <para>Preparing function-specific <emphasis>prototype files</emphasis> (and any included <emphasis>library
+           files</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Modifying the <emphasis role="bold">package</emphasis> <emphasis role="bold">Makefile</emphasis> and compiling
+           prototype files into system-specific <emphasis>configuration files</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Modifying client machines to run the appropriate <emphasis role="bold">package</emphasis> configuration file
+           automatically.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>The following sections summarize these steps.</para>
+ 
+     <sect2 id="Header_496">
+       <title>Preparing Prototype Files</title>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>preparing prototype files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>prototype files in package</primary>
+ 
+         <secondary>preparing</secondary>
+       </indexterm>
+ 
+       <para>Begin by listing the different functions or roles client machines perform and the local disk configurations that support
+       those functions. Example roles include a standard client that provides AFS access, a print server that drives a printer, and a
+       backup machine on which you issue commands from the <emphasis role="bold">backup</emphasis> suite. Create a different
+       <emphasis>prototype file</emphasis> for each role.</para>
+ 
+       <para>A prototype file defines the disk configuration that supports a specific role. Usually, prototype files are
+       function-specific, but system independent; system-specific values can be defined using variables and library files. Then, when
+       you modify a variable or library file, the change gets propagated to all appropriate clients when the <emphasis
+       role="bold">package</emphasis> program is invoked.</para>
+ 
+       <para>Methods for building flexible prototype files that are easy to maintain are presented in <link
+       linkend="HDRWQ427">Example Prototype and Library Files</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ424">
+       <title>Compiling Prototype Files</title>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>compiling prototype files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>configuration files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuration files</primary>
+ 
+         <secondary>package program</secondary>
+       </indexterm>
+ 
+       <para>Prototype files are usually system-independent, but can include <computeroutput>ifdef</computeroutput> statements to
+       satisfy the needs of different system types. The prototype files are compiled to generate operating-system specific versions.
+       During compilation, the <emphasis role="bold">package</emphasis> program selects the definitions suitable for each system type
+       and replaces any variables with actual values. These compiled, machine-specific files are called <emphasis>configuration
+       files</emphasis>.</para>
+ 
+       <para>Prototype files are compiled using a standard-type <emphasis role="bold">Makefile</emphasis> file, as described in <link
+       linkend="HDRWQ438">The Package Makefile File</link>.</para>
+     </sect2>
+ 
+     <sect2 id="Header_498">
+       <title>Preparing Clients</title>
+ 
+       <para>Once system-specific configuration files exist, the <emphasis role="bold">package</emphasis> program is ready to run on
+       the clients. You must first make the <emphasis role="bold">package</emphasis> binary available and specify the correct
+       configuration file.</para>
+ 
+       <para>Modify the clients as described below: <orderedlist>
+           <listitem>
+             <para>Create a <emphasis role="bold">.package</emphasis> file in the root ( <emphasis role="bold">/</emphasis> )
+             directory of each client's local disk that defines the default configuration file.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Make the <emphasis role="bold">package</emphasis> binary (<emphasis role="bold">/etc/package</emphasis>) available
+             on the local disk.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Modify the machine's initialization file (<emphasis role="bold">/etc/rc</emphasis> or equivalent) to include a
+             call to the <emphasis role="bold">package</emphasis> program.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>These steps are discussed more completely in <link linkend="HDRWQ447">Modifying Client Machines</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ425">
+     <title>The package Directory Structure</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>directory structure</secondary>
+     </indexterm>
+ 
+     <para>This section assumes that the <emphasis role="bold">package</emphasis>-related files have been installed in three
+     subdirectories of the <emphasis role="bold">/afs/</emphasis>cellname/<emphasis role="bold">wsadmin</emphasis> directory:
+     <emphasis role="bold">src</emphasis>, <emphasis role="bold">lib</emphasis> and <emphasis role="bold">etc</emphasis>, as
+     recommended in the <emphasis>OpenAFS Quick Beginnings</emphasis>.</para>
+ 
+     <para>These directories contain several sample prototype, library, and configuration files, which can help to clarify how the
+     <emphasis role="bold">package</emphasis> program works. However, they are not necessarily suitable for use in your cell; you
+     must modify them for your needs.</para>
+ 
+     <sect2 id="HDRWQ426">
+       <title>The src directory</title>
+ 
+       <para>The <emphasis role="bold">src</emphasis> directory contains some sample prototype files (used to build the configuration
+       files), the <emphasis role="bold">Makefile</emphasis> file used to build them, and the resulting compiled configuration
+       files.</para>
+ 
+       <para>Prototype files have names of the form function.<emphasis role="bold">proto</emphasis>. For example, a <emphasis
+       role="bold">minimal.proto</emphasis> file defines the minimum set of library files need to run AFS and a<emphasis
+       role="bold">staff.dkload.proto</emphasis> file defines a client configuration that uses the a dynamic kernel loading program.
+       Prototype files can also contain definitions for system administrative files, such as a <emphasis
+       role="bold">hosts.equiv</emphasis> file.</para>
+ 
+       <para>The <emphasis role="bold">Makefile</emphasis> file is used to compile the system-independent prototype files into
+       system-specific configuration files. To learn how to modify this file for use in your cell, see <link linkend="HDRWQ438">The
+       Package Makefile File</link>.</para>
+ 
+       <para>Configuration files are the compiled version of the prototype files and are named function<emphasis
+       role="bold">.</emphasis>sysname. Configuration files also appear in the <emphasis role="bold">etc</emphasis> subdirectory,
+       which the <emphasis role="bold">package</emphasis> program accesses when configuring disks.</para>
+     </sect2>
+ 
+     <sect2 id="Header_501">
+       <title>The lib directory</title>
+ 
+       <para>The <emphasis role="bold">lib</emphasis> directory contains many of the example library files referred to in prototype
+       files. For example, the <emphasis role="bold">base.generic</emphasis> file is a system-independent file which includes a
+       definition of the cell name, system options, and variables; these are used to set the owner, group, and mode_bits fields in
+       the file and the symbolic link definitions.</para>
+     </sect2>
+ 
+     <sect2 id="Header_502">
+       <title>The etc directory</title>
+ 
+       <para>The <emphasis role="bold">etc</emphasis> directory contains the system-specific configuration files built from the
+       prototype files in the <emphasis role="bold">src</emphasis> subdirectory. The <emphasis role="bold">package</emphasis> program
+       uses the configuration files in the <emphasis role="bold">etc</emphasis> directory to configure disks.</para>
+ 
+       <para>Some of the example files include <emphasis role="bold">minimal</emphasis> and <emphasis role="bold">staff</emphasis>
+       prototype files compiled for different system types.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ427">
+     <title>Example Prototype and Library Files</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>example prototype files</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>prototype files in package</primary>
+ 
+       <secondary>examples</secondary>
+     </indexterm>
+ 
+     <para>A prototype file is a template that defines the configuration of a client's local disk. Prototype files are usually
+     function-specific (for example, a backup machine, print server, etc.) but system-independent. Prototype files support the use of
+     <computeroutput>ifdef</computeroutput> statements and variables, so you can include system-specific definitions. The actual
+     system-specific configuration file is generated when the prototype file is compiled.</para>
+ 
+     <para>The components defined in a prototype file can include the directories, files, symbolic links, block special devices,
+     character special devices and sockets that need to reside on a client's local disk in order for it to perform a specific role,
+     such as a print server or backup machine. Thus, we recommend that you construct a unique prototype file for each different
+     client function.</para>
+ 
+     <para>To make the <emphasis role="bold">package</emphasis> program more effective and easy to maintain, create prototype files
+     that are modular and generic, instead of specific, by using library files and variables: <indexterm>
+         <primary>library files in package</primary>
+       </indexterm> <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>library files</secondary>
+       </indexterm> <itemizedlist>
+         <listitem>
+           <para>By creating general-purpose library files, you can include the same library file in many prototype files. Thus, you
+           can make global configuration changes by modifying a single library file; you do not need to modify each prototype
+           file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Variables enable you to change definitions simply by changing the variable's value.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ428">
+       <title>An Example Prototype File</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>prototype files for package</secondary>
+       </indexterm>
+ 
+       <para>The following is part of an example prototype file that contains the minimum definitions necessary to run AFS. A similar
+       file called <emphasis role="bold">minimal.proto</emphasis> can reside in your <emphasis role="bold">src</emphasis>
+       subdirectory. As recommended, this prototype file references library files and does not include actual definitions.</para>
+ 
+       <programlisting>
+             .
+             .
+    # Package prototype for a minimal configuration.
+    # Base components
+    %include ${wsadmin}/lib/base.generic
+    # Machine-specific components
+    %ifdef rs_aix42
+    %include ${wsadmin}/lib/rs_aix42.readonly
+    %include ${wsadmin}/lib/rs_aix42.AFS
+    %endif rs_aix42
+    %ifdef alpha_dux40
+    %include ${wsadmin}/lib/alpha_dux40.readonly
+    %include ${wsadmin}/lib/alpha_dux40.AFS
+    %endif alpha_dux40
+    %ifdef sun4x_56
+    %include ${wsadmin}/lib/sun4x_56.readonly
+    %include ${wsadmin}/lib/sun4x_56.AFS
+    %endif sun4x_56
+             .
+             .
+ </programlisting>
+ 
+       <para>In the previous example, the first uncommented line includes the <emphasis role="bold">/lib/base.generic</emphasis>
+       library file. This library file can contain definitions appropriate for many prototype files; the <emphasis
+       role="bold">base.generic</emphasis> library file can also be included in other prototype files, like a <emphasis
+       role="bold">staff.proto</emphasis> or <emphasis role="bold">backup.proto</emphasis> file. An example library file appears in
+       the following section.</para>
+ 
+       <para>Note that system-specific definitions are permitted through the use of <computeroutput>ifdef</computeroutput> statements
+       and variables (for example, <computeroutput>${wsadmin}</computeroutput> is used to specify pathnames). Thus, the same
+       prototype file can be used to configure a machine running AIX 4.2 or Solaris 2.6, even though they require different files,
+       directories, symbolic links and devices.</para>
+ 
+       <para>In the next uncommented lines of this example, the administrator has constructed different library files for different
+       system types. Each of these is compiled into unique configuration files. For instance, the following lines in this prototype
+       file tell the <emphasis role="bold">package</emphasis> program to use the library files <emphasis
+       role="bold">lib/rs_aix42.readonly</emphasis> and <emphasis role="bold">lib/rs_aix42.AFS</emphasis> for the configuration file
+       when the value rs_aix42 has been declared. (The system-type definition is declared in the <emphasis
+       role="bold">Makefile</emphasis>; see <link linkend="HDRWQ438">The Package Makefile File</link>.)</para>
+ 
+       <programlisting>
+    %ifdef rs_aix42
+    %include ${wsadmin}/lib/rs_aix42.readonly
+    %include ${wsadmin}/lib/rs_aix42.AFS
+    %endif rs_aix42
+ </programlisting>
+ 
+       <para>Similarly, the following lines tell the <emphasis role="bold">package</emphasis> program to use the library files
+       <emphasis role="bold">lib/sun4x_56.readonly</emphasis> and <emphasis role="bold">lib/sun4x_56.AFS</emphasis> when the value
+       sun4x_56 has been declared.</para>
+ 
+       <programlisting>
+    %ifdef sun4x_56
+    %include ${wsadmin}/lib/sun4x_56.readonly
+    %include ${wsadmin}/lib/sun4x_56.AFS
+    %endif sun4x_56
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_505">
+       <title>Example Library File</title>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>example library files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>library files in package</primary>
+ 
+         <secondary>examples</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>preparing prototype files</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>library files for package</secondary>
+       </indexterm>
+ 
+       <para>The following is part of an example library file for basic configuration definitions. A similar file, called <emphasis
+       role="bold">base.generic</emphasis>, can reside in your <emphasis role="bold">lib</emphasis> subdirectory. Note that
+       configurations are defined using standard <computeroutput>ifdef</computeroutput> statements.</para>
+ 
+       <programlisting>
+             .
+             .
+    #
+    # Base package definitions.
+    #
+    %ifndef      cell
+    %define      cell    abc.com
+    %endif       cell
+    %ifndef      sys
+    %include /etc/package.sys
+    %endif       sys
+    %define      ${name}         ${name}
+    %define      ${cpu}          ${cpu}
+    %define      ${sys}          ${sys}
+    %define      ${dept}         ${dept}
+    %define      ${hostname}     ${hostname}
+    %ifdef       rs_aix42
+    %    define  AIX
+    %    define  rootlinks
+    %ifndef      noafsd 
+    %    define  afsd
+    %endif       noafsd
+    %endif       rs_aix42
+             .
+             .
+    #
+    # Some definitions to handle common combinations of owner, group,
+    # and protection fields.
+    #
+    %define      rzmode          root wheel 600
+    %define      usermode        root wheel 666
+    %define      systemmode      root wheel 644
+    %define      diskmode        root wheel 644
+    %define      ptymode         root wheel 666
+    %define      ttymode         root wheel 666
+             .
+             .
+    %define aix_rootbin     root bin
+    %define aix_rootprintq  root printq
+    %define aix_rootstaff   root staff
+    %define aix_rootsys     root system
+    %define aix_binbin      bin bin
+    %define aix_binmail     bin mail
+    %define aix_binsys      bin system
+    %define aix_addsys      adduser system
+    %define aix_romode      444
+    %define aix_loginmode   544
+    %define aix_usermode    666
+    %define aix_systemmode  644
+    %define aix_textmode    644
+    %define aix_rwmode1     660
+    %define aix_allrugw     664
+ </programlisting>
+ 
+       <para>The following example library file uses <emphasis role="bold">package</emphasis>-specific syntax to define files,
+       directories, sockets, etc. Each line, called a <emphasis>configuration file instruction</emphasis>, defines a specific
+       component of disk configuration. The proper syntax for these instructions is briefly described in <link
+       linkend="HDRWQ429">Package Configuration File Instruction Syntax</link>; see the reference page for the <emphasis
+       role="bold">package</emphasis> configuration file in the <emphasis>OpenAFS Administration Reference</emphasis> for detailed
+       descriptions.</para>
+ 
+       <para>In this example, the library file contains instructions specific to the configuration of an <emphasis
+       role="bold">rs_aix42</emphasis> machine. You can have similar library files in your <emphasis role="bold">lib</emphasis>
+       subdirectory.</para>
+ 
+       <programlisting>
+             .
+             .
+    #
+    # Generic configuration for an AFS rs_aix42 machine.
+    #
+    D    /                                       ${treemode}
+    D    /afs
+    FAQ  /unix          ${machine}/unix.std      ${binmode}
+    LA   /unix.std       /unix
+    D    /bin                                    ${treemode}
+    F    /bin/as         ${machine}              ${binmode}
+    F    /bin/ld         ${machine}              ${binmode}
+    F    /bin/nm         ${machine}              ${binmode}
+    FO   /bin/login      ${afstest}              ${suidmode}
+             .
+             .
+    FAQ  /usr/vice/etc/ThisCell  ${common}/etc/ThisCell ${textmode}
+    FQ   /usr/vice/etc/afsd      ${afstest}/root.client ${binmode}
+    FA   /usr/vice/etc/bos       ${afstest}/bin/bos     ${binmode}
+    FA   /usr/vice/etc/fs        ${afstest}/bin/fs      ${binmode}
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ429">
+     <title>Package Configuration File Instruction Syntax</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>configuration file instructions</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>configuration file</primary>
+ 
+       <secondary>instructions for package program</secondary>
+     </indexterm>
+ 
+     <para>Within a library file, configuration file instructions are used to define the specific disk configuration. Each
+     instruction can be used to define a file, directory, socket, or device on the client machine. The syntax for each valid
+     instruction type is described briefly here; detailed descriptions of the fields appear in the <emphasis>OpenAFS Command
+     Reference Manual</emphasis>. <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">D</emphasis> defines a directory</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">F</emphasis> defines a file</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">L</emphasis> defines a link</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">B</emphasis> defines a block special device</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">C</emphasis> defines a character special device</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">S</emphasis> defines a socket</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <note>
+       <para>Each configuration instruction must appear on a single, unbroken line. Instructions sometimes appear here on multiple
+       lines only for legibility.</para>
+ 
+       <para>The configuration file must be completely correct. If there are any syntax errors or incorrect values, the <emphasis
+       role="bold">package</emphasis> command interpreter exits without executing any instruction.</para>
+     </note>
+ 
+     <sect2 id="HDRWQ430">
+       <title>Local Files versus Symbolic Links</title>
+ 
+       <para>You can take advantage of the AFS by keeping the number of files on the local client disk to a minimum; instead, create
+       symbolic links that point into AFS. This can improve machine performance by allowing more space for caching and
+       swapping.</para>
+ 
+       <para>Some files, however, must reside on the local disk, as described below. Create these files in the prototype or library
+       files using the <emphasis role="bold">F</emphasis> (file) instruction, not the <emphasis role="bold">L</emphasis> (symbolic
+       link) instruction.</para>
+ 
+       <para>The following types of files must reside on the local disk of all AFS clients: <itemizedlist>
+           <listitem>
+             <para>Boot sequence files executed before the <emphasis role="bold">afsd</emphasis> program runs.</para>
+ 
+             <para>Until <emphasis role="bold">afsd</emphasis> runs and initializes the Cache Manager, AFS is inaccessible from the
+             client. Any files that are executed before the <emphasis role="bold">afsd</emphasis> program runs must reside on the
+             local client disk.</para>
+ 
+             <para>For example, on a machine that uses a disk cache, the <emphasis role="bold">/usr/vice/cache</emphasis> directory
+             must exist when you bring up the Cache Manager, so that there is a location to create cache files. The binary files
+             <emphasis role="bold">/etc/mount</emphasis> and <emphasis role="bold">/etc/umount</emphasis> must be available on the
+             local disk as the machine boots in order to mount the <emphasis role="bold">/usr/vice/cache</emphasis> directory.</para>
+ 
+             <para>In addition, certain UNIX files, such as initialization files (<emphasis role="bold">/etc/rc</emphasis> or
+             equivalent) and file system mapping files (<emphasis role="bold">/etc/fstab</emphasis> or equivalent), must reside on
+             the local disk.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Diagnostic and recovery files</para>
+ 
+             <para>Certain commands can be used to diagnose and recover from problems caused by a file server outage. It is best to
+             keep copies of the binaries for these commands on the local disk. For example, store the <emphasis
+             role="bold">bos</emphasis> and <emphasis role="bold">fs</emphasis> binaries in the <emphasis
+             role="bold">/usr/vice/etc</emphasis> directory on the local disk, as well as in the <emphasis
+             role="bold">/usr/afsws</emphasis> directory (which in the conventional configuration is a symbolic link into AFS). Then,
+             set PATH variables so that the <emphasis role="bold">/usr/afsws</emphasis> directory appears before the <emphasis
+             role="bold">/usr/vice/etc</emphasis> directory. Thus, even if users cannot access AFS (for example, due to a file server
+             outage) they can still access copies of the <emphasis role="bold">bos</emphasis> and <emphasis role="bold">fs</emphasis>
+             binaries in the <emphasis role="bold">/usr/vice/etc</emphasis> directory on the local disk.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Files in the <emphasis role="bold">/usr/vice</emphasis> directory</para>
+ 
+             <para>The contents of the <emphasis role="bold">/usr/vice</emphasis> directory, including the cache files in the
+             <emphasis role="bold">cache</emphasis> subdirectory and the configuration files in the <emphasis
+             role="bold">etc</emphasis> subdirectory, must reside on the local disk. For a description of the files in the directory,
+             see <link linkend="HDRWQ391">Configuration and Cache-Related Files on the Local Disk</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>D instruction</primary>
+ 
+         <secondary>package configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>D instruction in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>defining directory in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>creating with package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ431">
+       <title>Defining a Directory</title>
+ 
+       <para>The <emphasis role="bold">D</emphasis> instruction defines a directory to be created on the local disk. If a symbolic
+       link, file, or other element on the local disk has the same name, it is replaced with a directory. If the directory already
+       exists, its owner, group, and mode bits are changed if necessary to conform with the instruction.</para>
+ 
+       <para>Use the following instruction to define a directory:</para>
+ 
+       <programlisting><emphasis role="bold">D</emphasis>[update_code]   directory   owner   group   mode_bits
+ </programlisting>
+ 
+       <para>The following example defines the <emphasis role="bold">/usr</emphasis> directory:</para>
+ 
+       <programlisting>
+    D /usr root wheel 755
+ </programlisting>
+ 
+       <indexterm>
+         <primary>F instruction</primary>
+ 
+         <secondary>package configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>F instruction in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>defining file in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file</primary>
+ 
+         <secondary>creating with package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ432">
+       <title>Defining a File</title>
+ 
+       <para>The <emphasis role="bold">F</emphasis> instruction defines a file to be created on the local disk. The source file can
+       reside in either AFS or the local disk.</para>
+ 
+       <para>If a file of this name already exists, then it is updated with (overwritten by) the source file, unless the <emphasis
+       role="bold">I</emphasis> update code is specified. If a symbolic link or directory of this name exists, the <emphasis
+       role="bold">package</emphasis> program replaces it with the source file.</para>
+ 
+       <note>
+         <para>Some files must reside on the local disk; they cannot be symbolic links. See <link linkend="HDRWQ430">Local Files
+         versus Symbolic Links</link>.</para>
+       </note>
+ 
+       <para>Use the following instruction to define a file:</para>
+ 
+       <programlisting><emphasis role="bold">F</emphasis>[update_code]   file   source_file  [owner   group   mode_bits]
+ </programlisting>
+ 
+       <para>An example which creates/updates the file <emphasis role="bold">/bin/grep</emphasis> on the local disk, using <emphasis
+       role="bold">/afs/abc.com/rs_aix42/bin/grep</emphasis> as the source:</para>
+ 
+       <programlisting>
+    F /bin/grep /afs/abc.com/rs_aix42 root wheel 755
+ </programlisting>
+ 
+       <para>In the following example, two update codes are used, and the <emphasis>owner</emphasis>, <emphasis>group</emphasis> and
+       <emphasis>mode_bits</emphasis> slots are left empty, so that the disk file adopts the source file's values for those
+       slots.</para>
+ 
+       <programlisting>
+    FAQ /usr/vice/etc/ThisCell /afs/abc.com/common/etc/ThisCell
+ </programlisting>
+ 
+       <indexterm>
+         <primary>L instruction</primary>
+ 
+         <secondary>package configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>L instruction in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>defining symbolic link in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>symbolic link</primary>
+ 
+         <secondary>creating with package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ433">
+       <title>Defining a Symbolic Link</title>
+ 
+       <para>The <emphasis role="bold">L</emphasis> instruction defines a symbolic link to be created on the local disk. The symbolic
+       link can point to the AFS file system or the local disk. If the identical symbolic link already exists, the <emphasis
+       role="bold">package</emphasis> program does nothing. However, if an element of the same name exists on the disk as a file or
+       directory, the <emphasis role="bold">package</emphasis> program replaces the element with a symbolic link.</para>
+ 
+       <note>
+         <para>Some files must reside on the local disk; they cannot be symbolic links. See <link linkend="HDRWQ430">Local Files
+         versus Symbolic Links</link>.</para>
+       </note>
+ 
+       <para>Use the following instruction to define a symbolic link:</para>
+ 
+       <programlisting><emphasis role="bold">L</emphasis>[update_code]  link actual_file  [owner   group   mode_bits]
+ </programlisting>
+ 
+       <note>
+         <para>Do not create a symbolic link to a file whose name begins with the number sign (<emphasis role="bold">#</emphasis>) or
+         percent sign (<emphasis role="bold">%</emphasis>). The Cache Manager interprets such a link as a mount point to a regular or
+         Read/Write volume, respectively.</para>
+       </note>
+ 
+       <para>The following example creates a symbolic link from the <emphasis role="bold">/etc/ftpd</emphasis> directory on the local
+       disk to the <emphasis role="bold">/afs/abc.com/hp_ux110/etc/ftpd</emphasis> file in AFS. Since the <emphasis>owner</emphasis>,
+       <emphasis>group</emphasis> and <emphasis>mode_bits</emphasis> fields are empty, the symbolic link adopts values for those
+       fields from the actual file:</para>
+ 
+       <programlisting>
+    L /etc/ftpd /afs/abc.com/hp_ux110 
+ </programlisting>
+ 
+       <para>This example uses the <emphasis role="bold">A</emphasis> update code:</para>
+ 
+       <programlisting>
+    LA /etc/printcap /afs/abc.com/common/etc/printcap.remote 
+                root wheel 644
+ </programlisting>
+ 
+       <indexterm>
+         <primary>B instruction</primary>
+ 
+         <secondary>package configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>B instruction in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>defining block special device in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>block special device</primary>
+ 
+         <secondary>creating with package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ434">
+       <title>Defining a Block Special Device</title>
+ 
+       <para>The <emphasis role="bold">B</emphasis> instruction defines a block special device, which is a device that handles data
+       in units of multibyte blocks, such as a disk. If a device of the same name already exists, the <emphasis
+       role="bold">package</emphasis> program replaces it with the specified block device.</para>
+ 
+       <para>Use the following instruction to define a block special device (it appears on two lines here only for
+       legibility):</para>
+ 
+       <programlisting><emphasis role="bold">B</emphasis> device_name   major_device_number   minor_device_number  \
+       owner   group   mode_bits
+ </programlisting>
+ 
+       <para>The following example defines a disk called <emphasis role="bold">/dev/hd0a</emphasis> to have major and minor device
+       numbers <emphasis role="bold">1</emphasis> and <emphasis role="bold">0</emphasis>:</para>
+ 
+       <programlisting>
+    B /dev/hd0a 1 0 root wheel 644
+ </programlisting>
+ 
+       <indexterm>
+         <primary>C instruction</primary>
+ 
+         <secondary>package configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>C instruction in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>defining character special device in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>character special device</primary>
+ 
+         <secondary>creating with package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ435">
+       <title>Defining a Character Special Device</title>
+ 
+       <para>The <emphasis role="bold">C</emphasis> instruction defines a character special device, which is device that handles data
+       in units of a single character at a time, such as a terminal or tty. If a device of the same name already exists, the
+       <emphasis role="bold">package</emphasis> program replaces it with the specified character device.</para>
+ 
+       <para>Use the following instruction to define a character special device (it appears here on two lines only for
+       legibility):</para>
+ 
+       <programlisting><emphasis role="bold">C</emphasis> device_name   major_device_number   minor_device_number  \
+       owner   group   mode_bits
+ </programlisting>
+ 
+       <para>The following example defines the tty called <emphasis role="bold">/dev/ttyp5</emphasis> with major and minor device
+       numbers <emphasis role="bold">6</emphasis> and <emphasis role="bold">5</emphasis>:</para>
+ 
+       <programlisting>
+    C /dev/ttyp5 6 5 root wheel 666
+ </programlisting>
+ 
+       <indexterm>
+         <primary>S instruction</primary>
+ 
+         <secondary>package configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>S instruction in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package</primary>
+ 
+         <secondary>defining socket in configuration file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>socket</primary>
+ 
+         <secondary>creating with package</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ436">
+       <title>Defining a Socket</title>
+ 
+       <para>The <emphasis role="bold">S</emphasis> instruction defines a socket, which is communications device for UDP and TCP/IP
+       connections. If a socket of the same name already exists, the <emphasis role="bold">package</emphasis> program replaces
+       it.</para>
+ 
+       <para>Use the following instruction to define a socket:</para>
+ 
+       <programlisting><emphasis role="bold">S</emphasis>   socket_name   [owner   group   mode_bits]
+ </programlisting>
+ 
+       <para>The following example defines a socket called <emphasis role="bold">/dev/printer</emphasis>:</para>
+ 
+       <programlisting>
+    S /dev/printer root wheel 777
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ437">
+     <title>Constructing Prototype and Library Files</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>constructing prototype and library files</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>prototype files in package</primary>
+ 
+       <secondary>constructing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>library files in package</primary>
+ 
+       <secondary>constructing</secondary>
+     </indexterm>
+ 
+     <para>This section describes the general steps required to create <emphasis role="bold">package</emphasis> prototype and library
+     files. Refer to the previous sections for guidelines, and the files in your <emphasis role="bold">wsadmin</emphasis> directory
+     for examples. The construction of prototype and library files is different for each cell.</para>
+ 
+     <sect2 id="Header_515">
+       <title>To construct a prototype file and its component library files</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Determine where the three <emphasis role="bold">package</emphasis>-related subdirectories (<emphasis
+           role="bold">src</emphasis>, <emphasis role="bold">lib</emphasis> and <emphasis role="bold">etc</emphasis>) reside in your
+           cell's file tree; the following instructions assume they were loaded into the <emphasis
+           role="bold">/afs/</emphasis>cellname<emphasis role="bold">/wsadmin</emphasis> directory, as described in the OpenAFS Quick
+           Beginnings.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide how many different functions you want client machines in your cell to perform. We recommend that you
+           construct a separate prototype file for each function. Common functions include: <itemizedlist>
+               <listitem>
+                 <para>Standard workstation: provides users with access to files in AFS</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Printer server: drives a printer; can be combined with "staff" functionality</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Backup machine: performs backups of AFS volumes to tape by running the AFS Backup System software</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Determine the minimum functionality needed for all clients (such as AFS setup) and place these generic definitions
+           in one or more library files.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>For each type of client (printer server, backup machine, and so on), place all system-independent definitions in one
+           file, and all operating-system dependent definitions in another file.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ438">
+     <title>The Package Makefile File</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>Makefile</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Makefile for package</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>package Makefile</secondary>
+     </indexterm>
+ 
+     <para>Once you have created the appropriate prototype and library files, you must compile the prototype for each system type.
+     The result is a system-specific configuration file.</para>
+ 
+     <para>The <emphasis role="bold">Makefile</emphasis> file defines the prototype and library files used and the order of
+     compilation. We recommend that you create your <emphasis role="bold">Makefile</emphasis> file by modifying the example provided
+     with the AFS distribution, as described in this section. In the conventional configuration, it is located at <emphasis
+     role="bold">/afs/</emphasis>cellname<emphasis role="bold">/wsadmin/src/Makefile</emphasis>.</para>
+ 
+     <sect2 id="Header_517">
+       <title>Overview</title>
+ 
+       <para>The following list summarizes the sections in the <emphasis role="bold">package</emphasis> <emphasis
+       role="bold">Makefile</emphasis> file, identifying each by the header name that begins the section. More detailed descriptions
+       follow. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">CONFIG=</emphasis></term>
+ 
+             <listitem>
+               <para>Lists all of the configuration files to be created and defines which prototype files are compiled for which
+               system types. See <link linkend="HDRWQ439">The CONFIG Section</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">BASE_LIBS=</emphasis></term>
+ 
+             <listitem>
+               <para>Lists the pathnames of all operating-system- and function independent library files included in any prototype
+               files. See <link linkend="HDRWQ440">The BASE_LIBS Section</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">MACHINE_LIBS=</emphasis></term>
+ 
+             <listitem>
+               <para>Lists the pathnames of all operating-system-specific library files included in any prototype files. See <link
+               linkend="HDRWQ441">The MACHINE_LIBS Section</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">LIBS=</emphasis></term>
+ 
+             <listitem>
+               <para>A one-line instruction that defines LIBS as the combination of BASE_LIBS and MACHINE_LIBS. See <link
+               linkend="HDRWQ442">The LIBS Section</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">.SUFFIXES</emphasis></term>
+ 
+             <listitem>
+               <para>Defines all of the suffixes that can appear on a prototype or configuration file. See <link
+               linkend="HDRWQ443">The .SUFFIXES Section</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>Finally, the <emphasis role="bold">Makefile</emphasis> file contains a set of instructions that the <emphasis
+       role="bold">package</emphasis> program follows to generate configuration files. It is not generally necessary to alter this
+       section. See <link linkend="HDRWQ444">The Makefile Instructions Section</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ439">
+       <title>The CONFIG Section</title>
+ 
+       <para>As mentioned, a configuration file is a prototype file that has been compiled for a specific operating system type. The
+       CONFIG section of the <emphasis role="bold">Makefile</emphasis> file defines the prototype files to compile for each system
+       type. The resulting compiled file is a system-specific configuration file.</para>
+ 
+       <para>Study the following example taken from the sample <emphasis role="bold">Makefile</emphasis> file. Configuration files
+       are defined by specifying the prototype-system combination as prototype_file<emphasis role="bold">.</emphasis>sysname. Note
+       that it is not necessary to generate a configuration file for each prototype-system type combination.</para>
+ 
+       <programlisting>
+    #Makefile...
+    #    (C) Copyright IBM Corporation 1999
+    #    Licensed Materials - Property of IBM
+    #    All Rights Reserved.
+    #
+    CONFIG = \
+             staff.rs_aix42 \
+             staff.alpha_dux40 \
+             staff.xdm.alpha_dux40 \
+             staff.sun4x_56 \
+             staff.hp_ux110 \
+             minimal.rs_aix42 \
+             minimal.alpha_dux40 \
+             minimal.hp_ux110 \
+             minimal.sun4x_56
+ </programlisting>
+ 
+       <para>An entry in the CONFIG section has the following format: <itemizedlist>
+           <listitem>
+             <para>The first part of the entry defines the prototype file and is the same as the prototype file name (without the
+             <emphasis role="bold">.proto</emphasis> extension). The second part of the entry indicates the system type for which the
+             prototype file is to be compiled. A complete list of these suffixes is in the .SUFFIXES section of the <emphasis
+             role="bold">Makefile</emphasis> file, as described in <link linkend="HDRWQ443">The .SUFFIXES Section</link>. This
+             prototype_file<emphasis role="bold">.</emphasis>sysname definition becomes the name of the compiled configuration
+             file.</para>
+ 
+             <para>For example, <emphasis role="bold">staff.rs_aix42</emphasis> indicates that the <emphasis
+             role="bold">staff.proto</emphasis> file is compiled for machines running AIX 4.2. The resulting compiled configuration
+             file is called <emphasis role="bold">staff.rs_aix42</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Each configuration file must appear on a separate line.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A backslash must follow the CONFIG= header and every name but the last one. A backslash must also appear on blank
+             lines.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ440">
+       <title>The BASE_LIBS Section</title>
+ 
+       <para>This section defines the complete pathname of all system- and function-independent library files included in any
+       prototype file. (System-specific library files are defined in the MACHINE_LIBS section). The pathnames can include the
+       ${wsadmin} variable, whose value is supplied on the <emphasis role="bold">make</emphasis> command line.</para>
+ 
+       <para>You must include all of the library files referred to in your prototype files; files included but not used are
+       ignored.</para>
+ 
+       <para>Study the following example. Note that the all entries (except the last one) must be followed by a backslash.</para>
+ 
+       <programlisting>
+    BASE_LIBS = \
+            ${wsadmin}/src/admin \
+            ${wsadmin}/lib/devel \
+            ${wsadmin}/lib/base.generic
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ441">
+       <title>The MACHINE_LIBS Section</title>
+ 
+       <para>This section lists the complete pathname of all operating-system-specific library files included in prototype files.
+       (System- and function-independent library files are defined in the BASE_LIBS section.)</para>
+ 
+       <para>Study the following example. Note that in this example, library files were grouped by operating-system type. Again, all
+       lines (except the last one) must be followed by a backslash, the ${wsadmin} variable is allowed, and files included but not
+       used are ignored.</para>
+ 
+       <programlisting>
+    MACHINE_LIBS = \
+            ${wsadmin}/lib/rs_aix42.generic \
+            ${wsadmin}/lib/rs_aix42.generic.dev \
+            ${wsadmin}/lib/rs_aix42.readonly \
+            ${wsadmin}/lib/rs_aix42.readwrite \
+            ${wsadmin}/lib/rt_aix42.generic.printer \
+     \
+     .
+     .
+            ${wsadmin}/lib/alpha_dux40.AFS \
+            ${wsadmin}/lib/hp_ux110.AFS \
+            ${wsadmin}/lib/sun4x_56.AFS \
+            ${wsadmin}/lib/rs_aix42.AFS
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ442">
+       <title>The LIBS Section</title>
+ 
+       <para>This section contains only one instruction, which indicates that LIBS is defined as the combination of MACHINE_LIBS and
+       BASE_LIBS. Insert a blank line after the line to separate this section from the next.</para>
+ 
+       <programlisting>
+    LIBS = ${MACHINE_LIBS} ${BASE_LIBS}
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ443">
+       <title>The .SUFFIXES Section</title>
+ 
+       <para>This section lists the valid machine-type suffixes. This list includes system types currently supported for AFS. Unused
+       suffixes are ignored.</para>
+ 
+       <programlisting>
+    .SUFFIXES: .rs_aix42 \
+               .alpha_dux40 \
+               .proto \
+               .sun4x_56 \
+               .i386_linux22 \
+               .hp_ux110
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ444">
+       <title>The Makefile Instructions Section</title>
+ 
+       <para>The remainder of the <emphasis role="bold">Makefile</emphasis> file controls how the <emphasis
+       role="bold">package</emphasis> program generates configuration files.</para>
+ 
+       <para>Study the following instructions; it is assumed that you are familiar with programming and <emphasis
+       role="bold">Makefile</emphasis> concepts.</para>
+ 
+       <programlisting>
+    #The following appear on a single line each in the actual file
+    .proto.rs_aix42: ;  mpp -Dwsadmin=${wsadmin} -Dsys=rs_aix42  
+                            -Dname=$* $*.proto &gt; $@
+    .proto.alpha_dux40: ; mpp -Dwsadmin=${wsadmin} -Dsys=alpha_dux40 
+                            -Dname=$* $*.proto &gt; $@
+    .proto.sun4x_56:  ; mpp -Dwsadmin=${wsadmin} -Dsys=sun4x_56 
+                            -Dname=$* $*.proto &gt; $@
+    .proto.hp_ux110:  ; mpp -Dwsadmin=${wsadmin} -Dsys=hp_ux110  
+                            -Dname=$* $*.proto &gt; $@
+    all: ${CONFIG}
+    ${CONFIG}: ${LIBS}
+    system: install
+    install: ${CONFIG}
+            cp ${CONFIG} ${wsadmin}/etc
+    clean:
+            rm -f ${CONFIG} *.BAK *.CKP
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ445">
+     <title>Modifying the Makefile</title>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>modifying the Makefile</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Makefile for package</primary>
+ 
+       <secondary>modifying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>modifying</primary>
+ 
+       <secondary>package Makefile</secondary>
+     </indexterm>
+ 
+     <para>Modify the <emphasis role="bold">package</emphasis> <emphasis role="bold">Makefile</emphasis> files when you <itemizedlist>
+         <listitem>
+           <para>Add a new prototype file (function<emphasis role="bold">.proto</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Add a new system type.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Add new library files.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The following sections provide brief examples of how to modify the <emphasis role="bold">Makefile</emphasis> file for
+     these reasons.</para>
+ 
+     <sect2 id="Header_525">
+       <title>Adding a New Prototype File</title>
+ 
+       <para>When you create a new prototype file, add the file name and each system type for which it is to be built into the CONFIG
+       section of the <emphasis role="bold">Makefile</emphasis> file.</para>
+ 
+       <para>For example, to add a function<emphasis role="bold">.proto</emphasis> file for <emphasis
+       role="bold">alpha_dux40</emphasis> and <emphasis role="bold">hp_ux110</emphasis>, add the following entries to the CONFIG
+       section:</para>
+ 
+       <programlisting>
+    CONFIG = \
+    ...
+            function.alpha_dux40 \
+            function.hp_ux110 \
+    ...
+ </programlisting>
+ 
+       <para>If you have added new library files for this prototype function, add those to the MACHINE_LIBS section.</para>
+     </sect2>
+ 
+     <sect2 id="Header_526">
+       <title>Adding a New System Type</title>
+ 
+       <para>For each prototype file that you want to build for the new system type, add an entry to the CONFIG section. Also add any
+       new libraries to the MACHINE_LIBS section, and the new system type to the .SUFFIXES section.</para>
+ 
+       <para>The following example shows the modifications appropriate when building the <emphasis role="bold">staff</emphasis> and
+       <emphasis role="bold">minimal</emphasis> prototype files for this new system type.</para>
+ 
+       <programlisting>
+    CONFIG = \
+    ...
+            staff.sysname \
+            minimal.sysname \
+    ...
+ </programlisting>
+ 
+       <para>If you have created corresponding library files for this new machine type, add them to the MACHINE_LIBS section.</para>
+ 
+       <programlisting>
+    MACHINE_LIBS = \
+    ...
+            ${wsadmin}/lib/sysname.generic \
+            ${wsadmin}/lib/sysname.generic.dev \
+            ${wsadmin}/lib/sysname.readonly \
+            ${wsadmin}/lib/sysname.readwrite \
+    ...
+ </programlisting>
+ 
+       <para>Add the new system type to the SUFFIXES section.</para>
+ 
+       <programlisting>
+    .SUFFIXES: ...\
+             .sysname \
+    ...
+ </programlisting>
+ 
+       <para>Add a line to build the configuration files for this system in the section with the rest of the commands to build
+       configuration files:</para>
+ 
+       <programlisting>
+    .proto.sysname: ; mpp -Dwsadmin=${wsadmin} \
+    -Dsys=sysname  -Dname=$* $*.proto &gt; $
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_527">
+       <title>Adding New Library Files</title>
+ 
+       <para>If you added a new library file for each system type, sysname<emphasis
+       role="bold">.</emphasis><emphasis>library_file</emphasis>, add these files to the MACHINE_LIBS section of the <emphasis
+       role="bold">Makefile</emphasis>.</para>
+ 
+       <programlisting>
+    MACHINE_LIBS = \
+    ...
+            ${wsadmin}/lib/rs_aix42.library_file \
+    ...
+            ${wsadmin}/lib/alpha_dux40.library_file \
+    ...
+            ${wsadmin}/lib/sun4x_56.library_file \
+    ...
+ </programlisting>
+ 
+       <para>If you added a new library file that is common to all system types, library_file, add this only to the BASE_LIBS
+       section:</para>
+ 
+       <programlisting>
+    BASE_LIBS = \
+    ...
+            ${wsadmin}/lib/library_file \
+    ...
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ446">
+     <title>Compiling Prototype Files</title>
+ 
+     <indexterm>
+       <primary>compiling</primary>
+ 
+       <secondary>package prototype file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>compiling prototype files</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">package</emphasis> program generates configuration files and installs them in the <emphasis
+     role="bold">etc</emphasis> and <emphasis role="bold">src</emphasis> subdirectories of the directory designated as <emphasis
+     role="bold">wsadmin=</emphasis> on the <emphasis role="bold">make</emphasis> command line. Recompile whenever you modify a
+     prototype or library file.</para>
+ 
+     <sect2 id="Header_529">
+       <title>To compile prototype files</title>
+ 
+       <note>
+         <para>These instructions assume that you store your <emphasis role="bold">package</emphasis>-related files in the <emphasis
+         role="bold">/afs/</emphasis>cellname<emphasis role="bold">/wsadmin</emphasis> directory. If you use a different directory,
+         substitute its name for <emphasis role="bold">/afs/</emphasis>cellname<emphasis role="bold">/wsadmin</emphasis>.</para>
+       </note>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have all privileges in the <emphasis role="bold">/afs/</emphasis>cellname<emphasis
+           role="bold">/wsadmin</emphasis> directory and in its <emphasis role="bold">src</emphasis>, <emphasis
+           role="bold">lib</emphasis> and <emphasis role="bold">etc</emphasis> subdirectories. If necessary, issue the <emphasis
+           role="bold">fs</emphasis> <emphasis role="bold">listacl</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [dir/file path]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Change to the <emphasis role="bold">/afs/</emphasis>cellname<emphasis role="bold">/wsadmin/src</emphasis>
+           subdirectory. <programlisting>
+    % <emphasis role="bold">cd /afs/</emphasis>cellname<emphasis role="bold">/wsadmin/src</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create a backup copy of the <emphasis role="bold">Makefile</emphasis> file included in the AFS distribution.
+           <programlisting>
+    % <emphasis role="bold">cp  Makefile Makefile.example</emphasis> 
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Modify the CONFIG, BASE_LIBS and MACHINE_LIBS sections of the <emphasis role="bold">Makefile</emphasis> file, as
+           described in <link linkend="HDRWQ439">The CONFIG Section</link>, <link linkend="HDRWQ440">The BASE_LIBS Section</link>,
+           and <link linkend="HDRWQ441">The MACHINE_LIBS Section</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Compile the prototype files using the <emphasis role="bold">make</emphasis> command.</para>
+ 
+           <para>Use the <emphasis role="bold">wsadmin=</emphasis> argument to specify the <emphasis role="bold">package</emphasis>
+           directory. This becomes the value of the ${wsadmin} variable in the prototype and the library files.</para>
+ 
+           <para>The <emphasis role="bold">package</emphasis> program generates configuration files and installs them in the
+           <emphasis role="bold">etc</emphasis> and <emphasis role="bold">src</emphasis> subdirectories of the directory designated
+           as <emphasis role="bold">wsadmin=</emphasis>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">make system wsadmin=/afs/</emphasis>cellname<emphasis role="bold">/wsadmin</emphasis>
+ </programlisting>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ447">
+     <title>Modifying Client Machines</title>
+ 
+     <indexterm>
+       <primary>package directory</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client</primary>
+ 
+       <secondary>modifying to run package</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>package</primary>
+ 
+       <secondary>modifying clients to run</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>modifying</primary>
+ 
+       <secondary>clients to run package</secondary>
+     </indexterm>
+ 
+     <para>To prepare a client to run the <emphasis role="bold">package</emphasis> program automatically, perform the following
+     steps. The instructions are generic because they do not refer to system-specific configuration files. If desired, you can invoke
+     the <emphasis role="bold">package</emphasis> program with specific arguments, as described in the <emphasis>OpenAFS
+     Administration Reference</emphasis>. <orderedlist>
+         <listitem>
+           <para>Specify the configuration file to use.</para>
+ 
+           <para>The <emphasis role="bold">.package</emphasis> file in the client machine's root ( <emphasis
+           role="bold">/</emphasis>) directory is redirected as an argument to the <emphasis role="bold">package</emphasis> command;
+           the <emphasis role="bold">.package</emphasis> file specifies which configuration file the <emphasis
+           role="bold">package</emphasis> program uses.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Make the <emphasis role="bold">package</emphasis> binary available to the client, either by copying it to the local
+           disk, or by creating a symbolic link to AFS. <itemizedlist>
+               <listitem>
+                 <para>A symbolic link saves local disk space. However, when the file server machine that houses it is down, the
+                 <emphasis role="bold">package</emphasis> binary is inaccessible.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Keeping the <emphasis role="bold">package</emphasis> binary on the local disk enables you to run the <emphasis
+                 role="bold">package</emphasis> program even if file server is down. However, a file server machine outage usually
+                 makes it difficult to run the <emphasis role="bold">package</emphasis> program because most configuration file
+                 instructions refer to files in AFS. A local copy of the <emphasis role="bold">package</emphasis> binary can be
+                 useful if the files referred to in instructions are in replicated volumes.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Modify the client machine's initialization file to invoke the <emphasis role="bold">package</emphasis> program at
+           reboot. The client machine reboots a second time if the <emphasis role="bold">package</emphasis> program updates any files
+           marked with the <emphasis role="bold">Q</emphasis> update code.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <sect2 id="Header_531">
+       <title>To prepare a client machine to run the package program</title>
+ 
+       <para>Repeat these instructions on every client that runs the <emphasis role="bold">package</emphasis> program.</para>
+ 
+       <para>These instructions assume that the <emphasis role="bold">package</emphasis> configuration files (created when the
+       prototype files were compiled) reside in the <emphasis role="bold">/afs/</emphasis>cellname<emphasis
+       role="bold">/wsadmin/etc</emphasis> directory. <orderedlist>
+           <listitem>
+             <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by
+             issuing the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create the <emphasis role="bold">.package</emphasis> file in the root ( <emphasis role="bold">/</emphasis>)
+             directory and specify the name of the prototype file to use. Do not include the system-type suffix (such as <emphasis
+             role="bold">.rs_aix42</emphasis>); the <emphasis role="bold">package</emphasis> program automatically determines the
+             correct machine type. <programlisting>
+    # <emphasis role="bold">echo "/afs/</emphasis>cellname<emphasis role="bold">/wsadmin/etc/</emphasis>config_file<emphasis
+                   role="bold">" &gt;&gt; /.package</emphasis>
+ </programlisting></para>
+ 
+             <para>For example, to configure a machine for a member of staff machine (assuming the proper prototype file had been
+             defined and compiled for the system type), the appropriate command is:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">echo "/afs/</emphasis>cellname<emphasis role="bold">/wsadmin/etc/staff" &gt;&gt; /.package</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Make the <emphasis role="bold">package</emphasis> binary available on the local disk as <emphasis
+             role="bold">/etc/package</emphasis>. Issue one of the following commands, depending on whether you want to create a file
+             or create a symbolic link.</para>
+ 
+             <para>To store the <emphasis role="bold">package</emphasis> binary locally, enter the following command:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp /afs/</emphasis>cellname<emphasis role="bold">/</emphasis>sysname<emphasis role="bold">/usr/afsws/etc/package   /etc/package</emphasis>
+ </programlisting>
+ 
+             <para>To create a symbolic link, enter the following command:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis>cellname<emphasis role="bold">/</emphasis>sysname<emphasis role="bold">/usr/afsws/etc/package   /etc/package</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Add the following lines to the appropriate initialization file, after the <emphasis role="bold">afsd</emphasis>
+             command is invoked. If this is a file server machine, the <emphasis role="bold">bosserver</emphasis> command must follow
+             the <emphasis role="bold">package</emphasis> command.</para>
+ 
+             <para>Using the <emphasis role="bold">-v</emphasis> and <emphasis role="bold">-c</emphasis> options is recommended. The
+             <emphasis role="bold">-v</emphasis> flag produces a detailed trace, and the <emphasis role="bold">-c</emphasis> option
+             appends the system type to the base name of the configuration file. See the <emphasis>OpenAFS Administration
+             Reference</emphasis> for a description of other options.</para>
+ 
+             <note>
+               <para>Replace the <emphasis role="bold">shutdown</emphasis> command with a similar command if it is not appropriate
+               for rebooting your machine.</para>
+             </note>
+ 
+             <programlisting>
+    if [ -f /etc/package ]; then
+            if [ -f /.package ]: then
+                    /etc/package -v -c `cat /.package` &gt;/dev/console
+            else
+                    /etc/package -v &gt;/dev/console
+    fi
+    case $? in
+    0)
+            echo "Package completed successfully" &gt;/dev/console 2&gt;&amp;1
+            date &gt;/dev/console 2&gt;&amp;1
+            ;;
+    4)
+            echo "Rebooting to restart system" &gt;/dev/console 2&gt;&amp;1
+            echo &gt;/fastboot
+            shutdown
+            ;;
+    *)
+            echo "Update failed, continuing anyway" &gt;/dev/console 2&gt;&amp;1
+            ;;
+    esac
+    fi
+ </programlisting>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ448">
+     <title>Running the package program</title>
+ 
+     <para>After you have created and compiled prototype files and modified client machines, you are ready to run the <emphasis
+     role="bold">package</emphasis> program. It is probably most convenient to run the <emphasis role="bold">package</emphasis>
+     program automatically at reboot by invoking it in the machine's AFS initialization file, but you can also issue the command at
+     the command shell prompt.</para>
+ 
+     <para>The configuration file must be completely correct. If there are any syntax errors or incorrect values, the program exits
+     without executing any instruction. To check the configuration file, issue the <emphasis role="bold">package</emphasis> command
+     with the <emphasis role="bold">-noaction</emphasis> and <emphasis role="bold">-debug</emphasis> flags at the command shell
+     prompt. They display a list of potential problems without actually executing instructions.</para>
+ 
+     <para>The <emphasis role="bold">package</emphasis> program follows these general rules. Complete explanations are in <link
+     linkend="HDRWQ429">Package Configuration File Instruction Syntax</link>. <itemizedlist>
+         <listitem>
+           <para>The <emphasis role="bold">package</emphasis> program does not delete any files from the disk unless the <emphasis
+           role="bold">R</emphasis> update code was specified in the prototype file. If the <emphasis role="bold">R</emphasis> update
+           code is associated with the parent directory, the <emphasis role="bold">package</emphasis> program removes anything from
+           the local disk directory that is not specified in the configuration file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Local files are updated only if they are out of date. For each <emphasis role="bold">F</emphasis> instruction in the
+           configuration file, the <emphasis role="bold">package</emphasis> program compares the time of the local file with the
+           indicated source file. If the source file is newer than the local, the file is updated.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>When the initialization file is modified as recommended in <link linkend="HDRWQ447">Modifying Client
+           Machines</link>, the <emphasis role="bold">package</emphasis> program reboots the workstation automatically if any files
+           marked with the <emphasis role="bold">Q</emphasis> update code are updated, and if the <emphasis
+           role="bold">package</emphasis> program has been invoked from the initialization file. When a file marked with the
+           <emphasis role="bold">Q</emphasis> update code is changed, the <emphasis role="bold">package</emphasis> program exits with
+           status code 4, causing a reboot (as directed in the initialization file). Files that require a reboot before changes are
+           recognized (such as the operating system kernel and <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> files) must
+           be marked with a <emphasis role="bold">Q</emphasis> update code in the configuration file.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">package</emphasis> program copies the configuration file it has just used to <emphasis
+           role="bold">/etc/package.</emphasis>sysname, where sysname reflects this machine's system type. The <emphasis
+           role="bold">package</emphasis> command interpreter consults this file if you do not provide a configuration file name. To
+           be sure that it configures the local disk as you wish, review its contents.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="Header_533">
+       <title>To invoke the package program by rebooting</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Recommended)</emphasis> Verify the following: <itemizedlist>
+               <listitem>
+                 <para>The <emphasis role="bold">/.package</emphasis> file identifies the desired configuration file</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The <emphasis role="bold">package</emphasis> binary is available as <emphasis
+                 role="bold">/etc/package</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The initialization file is properly modified to invoke the <emphasis role="bold">package</emphasis> program
+                 automatically</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Reboot the machine, using the appropriate command. <programlisting>
+    # <emphasis role="bold">shutdown</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>package</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>package command</primary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_534">
+       <title>To invoke the package program directly (without rebooting)</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify the following: <itemizedlist>
+               <listitem>
+                 <para>The <emphasis role="bold">/.package</emphasis> file identifies the desired configuration file</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The <emphasis role="bold">package</emphasis> binary is available as <emphasis
+                 role="bold">/etc/package</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The initialization file is properly modified to invoke the <emphasis role="bold">package</emphasis> program
+                 automatically</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">package</emphasis> command. <programlisting>
+    # <emphasis role="bold">package</emphasis>  [<emphasis role="bold">initcmd</emphasis>]  [<emphasis role="bold">-config</emphasis> &lt;<replaceable>base name of configuration file</replaceable>&gt;]  \
+     [<emphasis role="bold">-fullconfig</emphasis> &lt;<replaceable>full name of configuration file, or stdin for standard input</replaceable>&gt;]  \
+     [<emphasis role="bold">-overwrite</emphasis>]  [<emphasis role="bold">-noaction</emphasis>]  [<emphasis role="bold">-verbose</emphasis>]  [<emphasis
+                 role="bold">-silent</emphasis>] [<emphasis role="bold">-rebootfiles</emphasis>] 
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-config</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the full pathname of the configuration file to use, ending in the file's base name, which omits
+                   the suffix that indicates the machine type. The <emphasis role="bold">package</emphasis> program knows how to
+                   determine a machine's type, and automatically selects the appropriate version of the base file name. An example of
+                   the proper value for this argument is <emphasis role="bold">staff</emphasis> rather than <emphasis
+                   role="bold">staff.rs_aix42</emphasis>. You can also have the <emphasis role="bold">package</emphasis> program
+                   refer to <emphasis role="bold">/.package</emphasis> to learn the configuration file name by providing the
+                   following value:</para>
+ 
+                   <para><emphasis role="bold">`cat /.package`</emphasis></para>
+ 
+                   <para>Use either this argument or the <emphasis role="bold">-fullconfig</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-fullconfig</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the full name of the configuration file to use, complete with the machine-type extension. Examples
+                   are <emphasis role="bold">staff.rs_aix42</emphasis> and <emphasis role="bold">minimal.hp_ux110</emphasis>
+                   files.</para>
+ 
+                   <para>Another possibility is the string <emphasis role="bold">stdin</emphasis>, which indicates that the issuer is
+                   providing configuration information via the standard input stream, either as a piped file or by typing the
+                   configuration file at the keyboard. Press &lt;<emphasis role="bold">Ctrl-d</emphasis>&gt; to conclude the
+                   input.</para>
+ 
+                   <para>Use either this argument or the <emphasis role="bold">-config</emphasis> argument.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-overwrite</emphasis></term>
+ 
+                 <listitem>
+                   <para>Overwrite elements on the local disk with the source version indicated in the configuration file, even if
+                   the first (owner) <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) mode bit is turned
+                   off on the local disk copy of the file. Files protected by the <emphasis role="bold">I</emphasis> update code are
+                   not overwritten; see the definition for the <emphasis role="bold">F</emphasis> instruction.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-noaction</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays on the standard output stream a trace of potential problems in running the command, rather than
+                   actually running it. If the <emphasis role="bold">-verbose</emphasis> flag is added, the trace also notes the
+                   actions the <emphasis role="bold">package</emphasis> program attempts.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-silent</emphasis></term>
+ 
+                 <listitem>
+                   <para>Explicitly invokes the default level of tracing, which includes only a list of problems encountered while
+                   executing the command.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-verbose</emphasis></term>
+ 
+                 <listitem>
+                   <para>Produces a detailed trace of the program's actions on the standard output stream. The trace records on the
+                   transfer and ownership/mode bit setting of each element in the configuration file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-rebootfiles</emphasis></term>
+ 
+                 <listitem>
+                   <para>Prevents the overwrite of any element marked with the <emphasis role="bold">Q</emphasis> update-mode code in
+                   the configuration file. This effectively prevents the machine from rebooting automatically again when the
+                   <emphasis role="bold">package</emphasis> program is invoked from an initialization file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you think files marked with the <emphasis role="bold">Q</emphasis> update code were updated, reboot the machine.
+           This reboot does not occur automatically.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd017.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd017.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd017.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,4067 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ449">
+   <title>Creating and Deleting User Accounts with the uss Command Suite</title>
+ 
+   <para><indexterm>
+       <primary>user account</primary>
+ 
+       <secondary>two methods for creating and deleting</secondary>
+     </indexterm></para>
+ 
+   <para>The <emphasis role="bold">uss</emphasis> command suite helps you create and delete AFS user accounts quickly and easily. You
+   can create a single account with the <emphasis role="bold">uss add</emphasis> command, delete a single account with the <emphasis
+   role="bold">uss delete</emphasis> command, or create and delete multiple accounts with the <emphasis role="bold">uss
+   bulk</emphasis> command.</para>
+ 
+   <para>A single <emphasis role="bold">uss add</emphasis> or <emphasis role="bold">uss bulk</emphasis> command can create a complete
+   AFS user account because the <emphasis role="bold">uss</emphasis> command interpreter refers to a template file in which you
+   predefine the configuration of many account components. The <emphasis role="bold">uss delete</emphasis> command deletes most of
+   the components of a user account, but does not use a template file.</para>
+ 
+   <para>The <emphasis role="bold">uss</emphasis> suite also easily incorporates shell scripts or other programs that you write to
+   perform parts of account creation and deletion unique to your site. To invoke a script or program automatically as a <emphasis
+   role="bold">uss</emphasis> command runs, use the appropriate instructions in the template file or bulk input file. Various
+   sections of this chapter discuss possible uses for scripts.</para>
+ 
+   <para>Using the <emphasis role="bold">uss</emphasis> commands to create and delete accounts is the recommended method because it
+   automates and correctly orders most of the necessary steps. The alternative is to issue a series of separate commands to the
+   various AFS servers, which requires more careful record keeping. For instructions, see <link linkend="HDRWQ491">Administering User
+   Accounts</link>.</para>
+ 
+   <sect1 id="HDRWQ450">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="80*" />
+ 
+         <colspec colwidth="20*" />
+ 
+         <tbody>
+           <row>
+             <entry>Add a single user account</entry>
+ 
+             <entry><emphasis role="bold">uss add</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete a single user account</entry>
+ 
+             <entry><emphasis role="bold">uss delete</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Add and delete multiple accounts</entry>
+ 
+             <entry><emphasis role="bold">uss bulk</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ452">
+     <title>Overview of the uss Command Suite</title>
+ 
+     <para>The commands in the <emphasis role="bold">uss</emphasis> suite help you to automate the creation and deletion of AFS user
+     accounts: <itemizedlist>
+         <listitem>
+           <para>The <emphasis role="bold">uss add</emphasis> command creates all of the components of an account, one account at a
+           time. It consults a template file that defines account configuration.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">uss delete</emphasis> command deletes the major components of an account, one account at a
+           time. It does not use a template file, so you possibly need to perform additional tasks manually.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">uss bulk</emphasis> command can create and delete multiple accounts. It refers to a bulk
+           input file that can contain any number of account-creation and deletion instructions, along with other instructions for
+           further automating the process.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>user account</primary>
+ 
+       <secondary>components</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>account</secondary>
+ 
+       <see>user account</see>
+     </indexterm>
+ 
+     <sect2 id="Header_538">
+       <title>The Components of an AFS User Account</title>
+ 
+       <para>An AFS user account can have many components. The only two required components are entries in the Protection Database
+       and Authentication Database, but the other components add functionality and usability. The following information also appears
+       in a corresponding section of <link linkend="HDRWQ491">Administering User Accounts</link>, but is repeated here for your
+       convenience. <itemizedlist>
+           <listitem>
+             <para>A <emphasis>Protection Database entry</emphasis> defines the username (the name provided when authenticating with
+             AFS), and maps it to an AFS user ID (AFS UID), a number that the AFS servers use internally when referencing users. The
+             Protection Database also tracks the groups to which the user belongs. For details, see <link
+             linkend="HDRWQ531">Administering the Protection Database</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>An <emphasis>Authentication Database entry</emphasis> records the user's AFS password in a scrambled form suitable
+             for use as an encryption key.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A home <emphasis>volume</emphasis> stores all the files in the user's home directory together on a single
+             partition of a file server machine. The volume has an associated quota that limits its size. For a complete discussion
+             of volumes, see <link linkend="HDRWQ174">Managing Volumes</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A <emphasis>mount point</emphasis> makes the contents of the user's volume visible and accessible in the AFS
+             filespace, and acts as the user's home directory. For more details about mount points, see <link
+             linkend="HDRWQ183">About Mounting Volumes</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Full access permissions on the home directory's <emphasis>access control list (ACL)</emphasis> and ownership of
+             the directory (as displayed by the UNIX <emphasis role="bold">ls -ld</emphasis> command) enable the user to manage his
+             or her files. For details on AFS file protection, see <link linkend="HDRWQ562">Managing Access Control
+             Lists</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>A <emphasis>local password file entry</emphasis> (in the <emphasis role="bold">/etc/passwd</emphasis> file or
+             equivalent) of each AFS client machine enables the user to log in and access AFS files through the Cache Manager. A
+             subsequent section in this chapter further discusses local password file entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Other optional <emphasis>configuration files</emphasis> make the account more convenient to use. Such files help
+             the user log in and log out more easily, receive electronic mail, print, and so on.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>privilege required</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>privilege</primary>
+ 
+         <secondary>required for uss commands</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ453">
+       <title>Privilege Requirements for the uss Commands</title>
+ 
+       <para>To issue <emphasis role="bold">uss</emphasis> commands successfully, you usually need all of the standard AFS
+       administrative privileges: membership in the <emphasis role="bold">system:administrators</emphasis> group, inclusion in the
+       <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file on every relevant server machine, and the
+       <computeroutput>ADMIN</computeroutput> flag on your Authentication Database entry. For details on administrative privilege,
+       see <link linkend="HDRWQ581">Managing Administrative Privilege</link>. <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>add</secondary>
+ 
+           <tertiary>avoiding interruption</tertiary>
+         </indexterm> <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>delete</secondary>
+ 
+           <tertiary>avoiding interruption</tertiary>
+         </indexterm> <indexterm>
+           <primary>previewing</primary>
+ 
+           <secondary>user account creation/deletion with uss</secondary>
+         </indexterm> <indexterm>
+           <primary>user account</primary>
+ 
+           <secondary>uss commands to create/delete</secondary>
+ 
+           <tertiary>previewing</tertiary>
+         </indexterm> <indexterm>
+           <primary>user account</primary>
+ 
+           <secondary>creation using uss</secondary>
+ 
+           <tertiary>previewing</tertiary>
+         </indexterm> <indexterm>
+           <primary>user account</primary>
+ 
+           <secondary>deletion using uss</secondary>
+ 
+           <tertiary>previewing</tertiary>
+         </indexterm> <indexterm>
+           <primary>uss</primary>
+ 
+           <secondary>previewing effect of command</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ454">
+       <title>Avoiding and Recovering from Errors and Interrupted Operations</title>
+ 
+       <para>As for any complex operation, there are a number of possible reasons that an account-creation or deletion operation can
+       halt before it completes. You can easily avoid several of the common reasons by making the following checks before issuing a
+       <emphasis role="bold">uss</emphasis> command: <itemizedlist>
+           <listitem>
+             <para>Verify that you have all of the administrative privileges you need to complete an operation, as described in <link
+             linkend="HDRWQ453">Privilege Requirements for the uss Commands</link>. The instructions for using the <emphasis
+             role="bold">uss add</emphasis>, <emphasis role="bold">uss delete</emphasis>, and <emphasis role="bold">uss
+             bulk</emphasis> commands include this check as a step.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Proofread the template and bulk input files for correct syntax and acceptable values. For discussion, see <link
+             linkend="HDRWQ463">Constructing a uss Template File</link> and <link linkend="HDRWQ489">Constructing a Bulk Input
+             File</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Do not issue <emphasis role="bold">uss</emphasis> commands when you are aware of network, server machine, or
+             server process outages. Because <emphasis role="bold">uss</emphasis> operations affect so many components of AFS, it is
+             unlikely that the command can succeed when there are outages.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Another way to avoid errors that halt an operation is to preview the <emphasis role="bold">uss</emphasis> command by
+       combining the <emphasis role="bold">-dryrun</emphasis> flag with the other arguments to be used on the actual command. The
+       <emphasis role="bold">uss</emphasis> command interpreter generates a screen trace of the actions to be performed by the actual
+       command, without performing them.</para>
+ 
+       <para>Using the <emphasis role="bold">-dryrun</emphasis> flag reveals many basic errors that can halt an operation,
+       particularly the ones due to incorrect syntax in the command line, template file, or bulk input file. It does not catch all
+       possible errors, however, because the command interpreter is not actually attempting to perform the actions it is tracing. For
+       example, a Volume Server outage does not necessarily halt the volume creation step when the <emphasis
+       role="bold">-dryrun</emphasis> flag is included, because the command interpreter is not actually contacting the server; such
+       an outage halts the actual creation operation. <indexterm>
+           <primary>failure</primary>
+ 
+           <secondary>of uss account creation</secondary>
+ 
+           <tertiary>recovering from</tertiary>
+         </indexterm> <indexterm>
+           <primary>uss</primary>
+ 
+           <secondary>account</secondary>
+ 
+           <tertiary>recovering from account creation failure</tertiary>
+         </indexterm> <indexterm>
+           <primary>uss</primary>
+ 
+           <secondary>command</secondary>
+ 
+           <tertiary>reissuing, effect of</tertiary>
+         </indexterm></para>
+ 
+       <para>When the <emphasis role="bold">uss</emphasis> command interpreter encounters error conditions minor enough that they do
+       not require halting the operation, it usually generates a message that begins with the string <computeroutput>uss:
+       Warning:</computeroutput> and describes the action it is taking to avoid halting. For example, if a user's Protection Database
+       entry already exists, the following message appears on the standard output stream:</para>
+ 
+       <programlisting>
+    uss: Warning: User 'user' already in the protection database
+    The uid for user 'user' is AFS UID
+ </programlisting>
+ 
+       <para>If an error is more serious, the word <computeroutput>Warning</computeroutput> does not appear in the message, which
+       instead describes why the command interpreter cannot perform the requested action. Not all of these errors cause the <emphasis
+       role="bold">uss</emphasis> operation to halt, but they still require you to take corrective action. For example, attempting to
+       create a mount point fails if you lack the necessary permissions on the parent directory's ACL, or if the mount point pathname
+       in the <emphasis role="bold">V</emphasis> instruction's mount_point field is malformed. However, this error does not cause the
+       creation operation to halt until later instructions in the template attempt to install subdirectories or files under the
+       nonexistent mount point.</para>
+ 
+       <para>If the command shell prompts returns directly after an error message, then the error generally was serious enough to
+       halt the operation. When an error halts account creation or deletion, the best way to recover is to find and fix the cause,
+       and then reissue the same <emphasis role="bold">uss</emphasis> command. <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>overwriting existing account components</secondary>
+         </indexterm> <indexterm>
+           <primary>overwriting</primary>
+ 
+           <secondary>existing directories/files/links with uss</secondary>
+         </indexterm> <indexterm>
+           <primary>directory</primary>
+ 
+           <secondary>overwritten by uss if exists</secondary>
+         </indexterm> <indexterm>
+           <primary>file</primary>
+ 
+           <secondary>overwritten by uss if exists</secondary>
+         </indexterm> <indexterm>
+           <primary>hard link</primary>
+ 
+           <secondary>overwritten by uss if exists</secondary>
+         </indexterm> <indexterm>
+           <primary>symbolic link</primary>
+ 
+           <secondary>overwritten by uss if exists</secondary>
+         </indexterm></para>
+ 
+       <para>The following list describes what happens when components of a user's account already exist when you reissue an
+       account-creation command (the <emphasis role="bold">uss add</emphasis> command, or the <emphasis role="bold">uss
+       bulk</emphasis> command when the bulk input file contains <emphasis role="bold">add</emphasis> instructions): <itemizedlist>
+           <listitem>
+             <para>If the Protection Database entry already exists, a message confirms its existence and specifies the associated AFS
+             UID.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the Authentication Database entry already exists, a message confirms its existence.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the volume and associated Volume Location Database (VLDB) entry already exist, a message confirms their
+             existence. However, the <emphasis role="bold">uss</emphasis> command interpreter does alter the volume's quota, mount
+             point, or ACL if any of the relevant fields in the template <emphasis role="bold">V</emphasis> instruction have changed
+             since the command last ran. If the value in the mount_point field has changed, the command interpreter creates the new
+             mount point but does not remove any existing mount points.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If any of the fields in the template <emphasis role="bold">A</emphasis> instruction have changed, the <emphasis
+             role="bold">uss</emphasis> command interpreter makes the changes without comment.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If a directory, file, or link defined by a template file <emphasis role="bold">D</emphasis>, <emphasis
+             role="bold">E</emphasis>, <emphasis role="bold">F</emphasis>, <emphasis role="bold">L</emphasis>, or <emphasis
+             role="bold">S</emphasis> instruction already exists, the <emphasis role="bold">uss</emphasis> command interpreter
+             replaces the existing element with one that conforms to the template definition. To control whether the <emphasis
+             role="bold">uss</emphasis> command interpreter prompts for confirmation that you wish to overwrite a given element, use
+             the <emphasis role="bold">-overwrite</emphasis> flag to the <emphasis role="bold">uss add</emphasis> or <emphasis
+             role="bold">uss bulk</emphasis> command: <itemizedlist>
+                 <listitem>
+                   <para>If you include the <emphasis role="bold">-overwrite</emphasis> flag, the command interpreter automatically
+                   overwrites all elements without asking for confirmation.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If you omit the flag, the command interpreter prompts once for each account to ask if you want to overwrite
+                   all elements associated with it.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>The command interpreter always reexecutes <emphasis role="bold">X</emphasis> instructions in the template file. If
+             a command's result already holds, reissuing it has the same effect as reissuing it outside the context of the <emphasis
+             role="bold">uss</emphasis> commands.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The following describes what happens when a <emphasis role="bold">uss delete</emphasis> command references account
+       components that have already been deleted. <itemizedlist>
+           <listitem>
+             <para>If the volume and VLDB entry no longer exist, a message confirms their absence.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the Authentication Database entry no longer exists, a message confirms its absence.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>local password file</primary>
+ 
+         <secondary>creating entry for AFS user</secondary>
+ 
+         <tertiary>with uss</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ455">
+     <title>Creating Local Password File Entries with uss</title>
+ 
+     <para>To obtain authenticated access to a cell's AFS filespace, a user must not only have a valid AFS token, but also an entry
+     in the local password file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent) of the AFS client machine. This section
+     discusses why it is important for the user's AFS UID to match to the UNIX UID listed in the local password file, the appropriate
+     value to put in the file's password field, and outlines a method for creating a single source password file.</para>
+ 
+     <para>For instructions on using the template file's <emphasis role="bold">E</emphasis> instruction to generate local password
+     file entries automatically as part of account creation, see <link linkend="HDRWQ458">Creating a Common Source Password
+     File</link>.</para>
+ 
+     <para>The following information also appears in a corresponding section of <link linkend="HDRWQ491">Administering User
+     Accounts</link>, but is repeated here for your convenience. <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>matching with UNIX UID</secondary>
+       </indexterm> <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>matching AFS and UNIX UIDs</secondary>
+       </indexterm> <indexterm>
+         <primary>uss</primary>
+ 
+         <secondary>AFS UID, assigning</secondary>
+       </indexterm> <indexterm>
+         <primary>assigning</primary>
+ 
+         <secondary>AFS UID with uss</secondary>
+       </indexterm> <indexterm>
+         <primary>UNIX UID</primary>
+ 
+         <secondary>matching with AFS UID</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ456">
+       <title>Assigning AFS and UNIX UIDs that Match</title>
+ 
+       <para>A user account is easiest to administer and use if the AFS user ID number (AFS UID) and UNIX UID match. All instructions
+       in the AFS documentation assume that they do.</para>
+ 
+       <para>The most basic reason to make AFS and UNIX UIDs the same is so that the owner name reported by the UNIX <emphasis
+       role="bold">ls -l</emphasis> and <emphasis role="bold">ls -ld</emphasis> commands makes sense for AFS files and directories.
+       Following standard UNIX practice, the File Server records a number rather than a username in an AFS file or directory's owner
+       field: the owner's AFS UID. When you issue the <emphasis role="bold">ls -l</emphasis> command, it translates the UID to a
+       username according to the mapping in the local password file, not the AFS Protection Database. If the AFS and UNIX UIDs do not
+       match, the <emphasis role="bold">ls -l</emphasis> command reports an unexpected (and incorrect) owner. The output can even
+       vary on different client machines if their local password files map the same UNIX UID to different names.</para>
+ 
+       <para>Follow the recommendations in the indicated sections to make AFS and UNIX UIDs match when you are creating accounts for
+       various types of users: <itemizedlist>
+           <listitem>
+             <para>If creating an AFS account for a user who already has a UNIX UID, see <link linkend="HDRWQ459">Converting Existing
+             UNIX Accounts with uss</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If some users in your cell have existing UNIX accounts but the user for whom you are creating an AFS account does
+             not, then it is best to allow the Protection Server to allocate an AFS UID automatically. To avoid overlap of AFS UIDs
+             with existing UNIX UIDs, set the Protection Database's <computeroutput>max user id</computeroutput> counter higher than
+             the largest UNIX UID, using the instructions in <link linkend="HDRWQ560">Displaying and Setting the AFS UID and GID
+             Counters</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If none of your users have existing UNIX accounts, allow the Protection Server to allocate AFS UIDs automatically,
+             starting either at its default or at the value you have set for the <computeroutput>max user id</computeroutput>
+             counter.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>setting in local password file</secondary>
+ 
+         <tertiary>with uss</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local password file</primary>
+ 
+         <secondary>setting password in</secondary>
+ 
+         <tertiary>with uss</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ457">
+       <title>Specifying Passwords in the Local Password File</title>
+ 
+       <para>Authenticating with AFS is easiest for your users if you install and configure an AFS-modified login utility, which logs
+       a user into the local file system and obtains an AFS token in one step. In this case, the local password file no longer
+       controls a user's ability to login in most circumstances, because the AFS-modified login utility does not consult the local
+       password file if the user provides the correct AFS password. You can nonetheless use a password file entry's password field
+       (usually, the second field) in the following ways to control login and authentication: <itemizedlist>
+           <listitem>
+             <para>To prevent both local login and AFS authentication, place an asterisk ( * ) in the field. This is useful mainly in
+             emergencies, when you want to prevent a certain user from logging into the machine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To prevent login to the local file system if the user does not provide the correct AFS password, place a character
+             string of any length other than the standard thirteen characters in the field. This is appropriate if you want to allow
+             only people with local AFS accounts to log into to your machines. A single <emphasis role="bold">X</emphasis> or other
+             character is the most easily recognizable way to do this.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To enable a user to log into the local file system even after providing an incorrect AFS password, record a
+             standard UNIX encrypted password in the field by issuing the standard UNIX password-setting command (<emphasis
+             role="bold">passwd</emphasis> or equivalent).</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If you do not use an AFS-modified login utility, you must place a standard UNIX password in the local password file of
+       every client machine the user will use. The user logs into the local file system only, and then must issue the <emphasis
+       role="bold">klog</emphasis> command to authenticate with AFS. It is simplest if the passwords in the local password file and
+       the Authentication Database are the same, but this is not required. <indexterm>
+           <primary>creating</primary>
+ 
+           <secondary>common local password file with uss</secondary>
+         </indexterm> <indexterm>
+           <primary>local password file</primary>
+ 
+           <secondary>creating common source version with uss</secondary>
+         </indexterm> <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>local password file</secondary>
+ 
+           <tertiary>creating common source version</tertiary>
+         </indexterm> <indexterm>
+           <primary>passwd file</primary>
+ 
+           <secondary></secondary>
+ 
+           <see>local password file</see>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ458">
+       <title>Creating a Common Source Password File</title>
+ 
+       <para>This section explains how to create a common source version of the local password file when using <emphasis
+       role="bold">uss</emphasis> commands to create user accounts. The sequence of steps is as follows: <orderedlist>
+           <listitem>
+             <para>Include an <emphasis role="bold">E</emphasis> instruction in the template file to create a one-line file that has
+             the format of a local password file entry.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Incorporate the one-line file into the common source version of the local password file. It makes sense to store
+             this file in AFS. See the following two example scripts for automating this step.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Distribute the common password file to each client machine, perhaps by using the AFS <emphasis
+             role="bold">package</emphasis> utility as described in <link linkend="HDRWQ419">Configuring Client Machines with the
+             package Program</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>As an example, the template file used by the ABC Corporation includes the following <emphasis role="bold">E</emphasis>
+       instruction to create a file called <emphasis role="bold">passwd_</emphasis>username in the directory <emphasis
+       role="bold">/afs/.abc.com/common/etc/newaccts</emphasis> (the entire contents of the template file appear in <link
+       linkend="HDRWQ471">Example uss Templates</link> and a full description of the <emphasis role="bold">E</emphasis> instruction
+       appears in <link linkend="HDRWQ476">Creating One-Line Files with the E Instruction</link>):</para>
+ 
+       <programlisting>
+    E /afs/.abc.com/common/etc/newaccts/passwd_$USER 0644 root \
+         "$USER:X:$UID:11:$NAME:$MTPT:/bin/csh"
+ </programlisting>
+ 
+       <para>For the user Joe L. Smith with username <emphasis role="bold">smith</emphasis>, this instruction creates a file called
+       <emphasis role="bold">passwd_smith</emphasis> which contains the following line:</para>
+ 
+       <programlisting>
+    smith:X:1205:11:Joe L. Smith:/afs/abc.com/usr/usr1/smith:/bin/csh
+ </programlisting>
+ 
+       <para>A shell script is probably the easiest way to incorporate a set of files created in this manner into a common source
+       password file, and two sample shell scripts appear here. To automate the process even further, you can create a <emphasis
+       role="bold">cron</emphasis> process in a file server machine's <emphasis role="bold">/usr/afs/local/BosConfig</emphasis>
+       directory to execute the shell script, perhaps each day at a given time; for details, see <link linkend="HDRWQ162">To create
+       and start a new process</link>.</para>
+ 
+       <note>
+         <para>The following example scripts are suggestions only. If you choose to use them, or to model similar scripts on them,
+         you must test that your script has the desired result, preferably in a test environment.</para>
+       </note>
+ 
+       <para><emphasis role="bold">Example C Shell Script</emphasis></para>
+ 
+       <para>The first example is a simple C shell script suitable for the ABC Corporation cell. It incorporates the individual files
+       found in the <emphasis role="bold">/afs/.abc.com/common/uss/newaccts</emphasis> directory into a new version of the global
+       password file found in the <emphasis role="bold">/afs/.abc.com/common/etc</emphasis> directory, sorting the files into
+       alphabetical order. It takes care to save the current version with a <emphasis role="bold">.old</emphasis> extension, then
+       removes the individual files when done.</para>
+ 
+       <programlisting>
+    set  dir = /afs/.abc.com/common
+    cat  $dir/uss/newaccts/passwd_* $dir/etc/passwd  &gt;!  $dir/etc/passwd.new
+    mv  $dir/etc/passwd  $dir/etc/passwd.old
+    sort  $dir/etc/passwd.new  &gt;  $dir/etc/passwd
+    rm  $dir/etc/passwd.new  $dir/uss/newaccts/passwd_*
+ </programlisting>
+ 
+       <para><emphasis role="bold">Example Bourne Shell Script</emphasis></para>
+ 
+       <para>The second, more elaborate, example is a Bourne shell script that first verifies that there are new <emphasis
+       role="bold">passwd_</emphasis>username files to be incorporated into the global password file. While running, it checks that
+       each new entry does not already exist. Like the shorter C shell example, it incorporates the individual files found in the
+       <emphasis role="bold">/afs/.abc.com/common/uss/newaccts</emphasis> directory into a new version of the global <emphasis
+       role="bold">passwd</emphasis> file found in the <emphasis role="bold">/afs/.abc.com/common/etc</emphasis> directory.</para>
+ 
+       <programlisting>
+    #!/bin/sh
+    DESTDIR=/afs/.abc.com/common/uss/newaccts
+    cd  $DESTDIR
+    DEST=/afs/.abc.com/common/etc
+    cp /afs/.abc.com/common/etc/passwd   /afs/.abc.com/common/uss/newaccts/passwd
+    echo "copied in passwd file."
+    PASSWD=/afs/.abc.com/common/uss/newaccts/passwd
+    ENTRIES=`ls passwd_*`
+    case $ENTRIES in 
+    "")
+         echo No new entry found to be added to passwd file
+         ;;
+    *)
+         echo  "Adding new users to passwd file."
+         for  i  in  $ENTRIES
+         do
+            cat  $i  |  awk  -F:  '{print $1  &gt;  "foo"}'
+            USER=`cat foo`
+            case  `egrep  -e  \^$USER\: $PASSWD` in 
+            "")
+                    echo  adding  $USER
+                    cat  $i  &gt;&gt;  $PASSWD
+                    ;;
+            *)
+                    echo  $USER already in passwd file
+                    ;;
+            esac
+            mv  $i  ../old.passdir/done_${i}
+         done
+         cd  /afs/.abc.com/common/uss/newaccts
+         echo  "sorting password file"
+         sort  ${PASSWD}  &gt;  ${PASSWD}.sorted
+         echo  "installing files"     
+         install  ${PASSWD}.sorted ${DEST}/passwd
+         echo  "Password file is built, sorted and installed."
+         ;;
+    esac
+ </programlisting>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>converting existing UNIX accounts</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>converting</primary>
+ 
+         <secondary>existing UNIX accounts to AFS accounts</secondary>
+ 
+         <tertiary>with uss</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>converting existing UNIX to AFS</secondary>
+ 
+         <tertiary>with uss</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ459">
+     <title>Converting Existing UNIX Accounts with uss</title>
+ 
+     <para>This section discusses the three main issues you need to consider if there are existing UNIX accounts to be converted to
+     AFS accounts.</para>
+ 
+     <sect2 id="HDRWQ460">
+       <title>Making UNIX and AFS UIDs Match</title>
+ 
+       <para>As previously mentioned, AFS users must have an entry in the local password file on every client machine from which they
+       access the AFS filespace as an authenticated user. Both administration and use are much simpler if the UNIX UID and AFS UID
+       match. When converting existing UNIX accounts, you have two alternatives: <itemizedlist>
+           <listitem>
+             <para>Make the AFS UIDs match the existing UNIX UIDs. In this case, you need to assign the AFS UID yourself as you
+             create an AFS account: <itemizedlist>
+                 <listitem>
+                   <para>If using the <emphasis role="bold">uss add</emphasis> command, include the <emphasis
+                   role="bold">-uid</emphasis> argument.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If using the <emphasis role="bold">uss bulk</emphasis> command, specify the desired UID in the uid field of
+                   the <emphasis role="bold">add</emphasis> instruction in the bulk input file.</para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>Because you are retaining the user's UNIX UID, you do not need to alter the UID in the local password file entry.
+             However, if you are using an AFS-modified login utility, you possibly need to change the password field in the entry.
+             For a discussion of how the value in the password field affects login with an AFS-modified login utility, see <link
+             linkend="HDRWQ455">Creating Local Password File Entries with uss</link>.</para>
+ 
+             <para>If now or in the future you need to create AFS accounts for users who do not have an existing UNIX UID, then you
+             must guarantee that new AFS UIDs do not conflict with any existing UNIX UIDs. The simplest way is to set the
+             <computeroutput>max user id</computeroutput> counter in the Protection Database to a value higher than the largest
+             existing UNIX UID. See <link linkend="HDRWQ560">Displaying and Setting the AFS UID and GID Counters</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Change the existing UNIX UIDs to match the new AFS UIDs that the Protection Server assigns automatically.</para>
+ 
+             <para>Allow the Protection Server to allocate the AFS UIDs automatically as you create AFS accounts. For instructions on
+             creating a new entry for the local password file during account creation, see <link linkend="HDRWQ455">Creating Local
+             Password File Entries with uss</link>.</para>
+ 
+             <para>There is one drawback to changing the UNIX UID: any files and directories that the user owned in the local file
+             system before becoming an AFS user still have the former UID in their owner field. If you want the <emphasis
+             role="bold">ls -l</emphasis> and <emphasis role="bold">ls -ld</emphasis> commands to display the correct owner, you must
+             use the <emphasis role="bold">chown</emphasis> command to change the value to the user's new UID, whether you are
+             leaving the file in the local file system or moving it to AFS. See <link linkend="HDRWQ462">Moving Local Files into
+             AFS</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ461">
+       <title>Setting the Password Field Appropriately</title>
+ 
+       <para>Existing UNIX accounts already have an entry in the local password file, probably with a (scrambled) password in the
+       password field. You possibly need to change the value in the field, depending on the type of login utility you use:
+       <itemizedlist>
+           <listitem>
+             <para>If the login utility is not modified for use with AFS, the actual password must appear (in scrambled form) in the
+             password field of the local password file entry.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the login utility is modified for use with AFS, choose one of the acceptable values, each of which affects the
+             login utility's behavior differently. See <link linkend="HDRWQ455">Creating Local Password File Entries with
+             uss</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If you choose to place an actual password in a local password file entry, then you can define a dummy password when you
+       use a template file <emphasis role="bold">E</emphasis> instruction to create the entry, as described in <link
+       linkend="HDRWQ476">Creating One-Line Files with the E Instruction</link>. Have the user issue the UNIX password-setting
+       command (<emphasis role="bold">passwd</emphasis> or equivalent) to replace the dummy with an actual secret password.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ462">
+       <title>Moving Local Files into AFS</title>
+ 
+       <para>New AFS users with existing UNIX accounts probably already own files and directories stored in a machine's local file
+       system, and it usually makes sense to transfer them into the new home volume. The easiest method is to move them onto the
+       local disk of an AFS client machine, and then use the UNIX <emphasis role="bold">mv</emphasis> command to transfer them into
+       the user's new AFS home directory.</para>
+ 
+       <para>As you move files and directories into AFS, keep in mind that the meaning of their mode bits changes. AFS ignores the
+       second and third sets of mode bits (group and other), and does not use the first set (the owner bits) directly, but only in
+       conjunction with entries on the ACL (for details, see <link linkend="HDRWQ580">How AFS Interprets the UNIX Mode Bits</link>).
+       Be sure that the ACL protects the file or directory at least as securely as the mode bits.</para>
+ 
+       <para>If you have chosen to change a user's UNIX UID to match a new AFS UID, you must change the ownership of UNIX files and
+       directories as well. Only members of the <emphasis role="bold">system:administrators</emphasis> group can issue the <emphasis
+       role="bold">chown</emphasis> command on files and directories once they reside in AFS. <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>advantages over individual account-creation commands</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>advantages</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>instructions summarized</secondary>
+         </indexterm></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ463">
+     <title>Constructing a uss Template File</title>
+ 
+     <para>Creating user accounts with <emphasis role="bold">uss</emphasis> commands is generally more convenient than using
+     individual commands. You control the account creation process just as closely, but the <emphasis role="bold">uss</emphasis>
+     template file enables you to predefine many aspects of account configuration. Because you construct the template before issuing
+     <emphasis role="bold">uss</emphasis> commands, you have time to consider configuration details carefully and correct syntax
+     errors. The following list summarizes some further advantages of using a template: <itemizedlist>
+         <listitem>
+           <para>You do not have to remember the correct order in which to create or delete account components, or the order of each
+           command's arguments, which reduces the likelihood of errors.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You do not have to type the same information multiple times. Instead, you can place constants and variables in the
+           template file that enable you to type as little on the command line as possible. See <link linkend="HDRWQ465">Using
+           Constants and Variables in the Template File</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can create different templates for different types of users. Instead of having to remember which components
+           differ for a given user, specify the appropriate template when issuing the <emphasis role="bold">uss add</emphasis> or
+           <emphasis role="bold">uss bulk</emphasis> command.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can create any of the three types of AFS account (authentication-only, basic, or full) by including or omitting
+           certain information in the template, as described in <link linkend="HDRWQ464">Creating the Three Types of User
+           Accounts</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The following list briefly describes the instructions that can appear in a template file and points you to a later section
+     for more details. It lists them in the order that is usually optimal for correct handling of dependencies between the different
+     types of instruction. <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">G</emphasis></term>
+ 
+           <listitem>
+             <para>Defines a directory that is one of a set of parent directories into which the <emphasis role="bold">uss</emphasis>
+             command interpreter evenly distributes newly created home directories. Place the corresponding template file variable,
+             $AUTO, in the mount_point field of the <emphasis role="bold">V</emphasis> instruction. See <link
+             linkend="HDRWQ472">Evenly Distributing User Home Directories with the G Instruction</link> and <link
+             linkend="HDRWQ473">Creating a Volume with the V Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">V</emphasis></term>
+ 
+           <listitem>
+             <para>Creates a volume, mounts it as the user's home directory at a specified location in the AFS filespace, sets the
+             volume's quota, and defines the owner and ACL for the directory. This instruction must appear in any template that is
+             not empty (zero-length). See <link linkend="HDRWQ473">Creating a Volume with the V Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">D</emphasis></term>
+ 
+           <listitem>
+             <para>Creates a directory, generally a subdirectory of the new home directory, and sets its mode bits, owner, and ACL.
+             See <link linkend="HDRWQ474">Creating a Directory with the D Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">F</emphasis></term>
+ 
+           <listitem>
+             <para>Creates a file by copying a prototype and sets its mode bits and owner. See <link linkend="HDRWQ475">Creating a
+             File from a Prototype with the F Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">E</emphasis></term>
+ 
+           <listitem>
+             <para>Creates a single-line file by copying in the contents of the instruction itself, then sets the file's mode bits
+             and owner. See <link linkend="HDRWQ476">Creating One-Line Files with the E Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">L</emphasis></term>
+ 
+           <listitem>
+             <para>Creates a hard link. See <link linkend="HDRWQ477">Creating Links with the L and S Instructions</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">S</emphasis></term>
+ 
+           <listitem>
+             <para>Creates a symbolic link. See <link linkend="HDRWQ477">Creating Links with the L and S Instructions</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">A</emphasis></term>
+ 
+           <listitem>
+             <para>Improves account security by imposing restrictions on passwords and authentication attempts. See <link
+             linkend="HDRWQ478">Increasing Account Security with the A Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">X</emphasis></term>
+ 
+           <listitem>
+             <para>Executes a command. See <link linkend="HDRWQ479">Executing Commands with the X Instruction</link>.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist></para>
+ 
+     <indexterm>
+       <primary>uss template file</primary>
+ 
+       <secondary>instructions for different account types</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user account</primary>
+ 
+       <secondary>creating different types with uss</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>user account types with uss</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ464">
+       <title>Creating the Three Types of User Accounts</title>
+ 
+       <para>Using the <emphasis role="bold">uss add</emphasis> and <emphasis role="bold">uss bulk</emphasis> commands, you can
+       create three types of accounts that differ in their levels of functionality. For a description of the types, see <link
+       linkend="HDRWQ57">Configuring AFS User Accounts</link>. The following list explains how to construct a template for each type:
+       <itemizedlist>
+           <listitem>
+             <para>To create an authentication-only account, create an empty (zero-length) template file. Such an account has only
+             two components: entries in the Authentication Database and Protection Database.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To create a basic account, include a <emphasis role="bold">V</emphasis> instruction, and <emphasis
+             role="bold">G</emphasis> instructions if you want to distribute home directories evenly as described in <link
+             linkend="HDRWQ472">Evenly Distributing User Home Directories with the G Instruction</link>. In addition to
+             Authentication Database and Protection Database entries, this type of account includes a volume mounted at the home
+             directory with owner and ACL set appropriately.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To create a full account, include <emphasis role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>,
+             <emphasis role="bold">F</emphasis>, <emphasis role="bold">L</emphasis>, and <emphasis role="bold">S</emphasis>
+             instructions as appropriate, in addition to the <emphasis role="bold">V</emphasis> and <emphasis
+             role="bold">G</emphasis> instructions. This type of account includes configuration files for basic functions such as
+             logging in, printing, and mail delivery. For a discussion of some useful types of configuration files, see <link
+             linkend="HDRWQ60">Creating Standard Files in New AFS Accounts</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>constants</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>constants</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>variables</primary>
+ 
+         <secondary>in uss template file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>variables</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ465">
+       <title>Using Constants and Variables in the Template File</title>
+ 
+       <para>Each instruction in the <emphasis role="bold">uss</emphasis> template file has several fields that define the
+       characteristics of the element that it creates. The <emphasis role="bold">D</emphasis> instruction's fields, for instance,
+       define a directory's pathname, owner, mode bits, and ACL.</para>
+ 
+       <para>You can place three types of values in a field: a variable, a constant, or a combination of the two. The appropriate
+       value depends on the desired configuration, and determines which arguments you provide to the <emphasis role="bold">uss
+       add</emphasis> command or which fields you include in a bulk input file <emphasis role="bold">add</emphasis>
+       instruction.</para>
+ 
+       <para>If an aspect of account configuration is the same for every user, define a constant value in the appropriate field by
+       inserting a character string. For example, to assign a space quota of 10,000 KB to every user volume, place the string
+       <emphasis role="bold">10000</emphasis> in the <emphasis role="bold">V</emphasis> instruction's quota field.</para>
+ 
+       <para>If, on the other hand, an aspect of account configuration varies for each user, put a variable in the appropriate field.
+       When creating each account, provide a value for the variable by providing either the corresponding argument to the <emphasis
+       role="bold">uss add</emphasis> command or a value in the corresponding field of the <emphasis role="bold">add</emphasis>
+       instruction in the bulk input file.</para>
+ 
+       <para>The <emphasis role="bold">uss</emphasis> command suite defines a set of template variables, each of which has a
+       corresponding source for its value, as summarized in <link linkend="TBLWQ466">Table 3</link>. For a discussion of their
+       intended uses, see the following sections about each template instruction (<link linkend="HDRWQ473">Creating a Volume with the
+       V Instruction</link> through <link linkend="HDRWQ479">Executing Commands with the X Instruction</link>).</para>
+ 
+       <table id="TBLWQ466" label="3">
+         <title>Source for values of uss template variables</title>
+ 
+         <tgroup cols="2">
+           <colspec colwidth="20*" />
+ 
+           <colspec colwidth="80*" />
+ 
+           <thead>
+             <row>
+               <entry><emphasis role="bold">Variable</emphasis></entry>
+ 
+               <entry><emphasis role="bold">Source for value</emphasis></entry>
+             </row>
+           </thead>
+ 
+           <tbody>
+             <row>
+               <entry>$AUTO</entry>
+ 
+               <entry>Previous <emphasis role="bold">G</emphasis> instructions in template</entry>
+             </row>
+ 
+             <row>
+               <entry>$MTPT</entry>
+ 
+               <entry><emphasis role="bold">-mount</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or
+               mount_point field of bulk input file <emphasis role="bold">add</emphasis> instruction, when in <emphasis
+               role="bold">V</emphasis> instruction; <emphasis role="bold">V</emphasis> instruction's mount_point field when in
+               subsequent instructions</entry>
+             </row>
+ 
+             <row>
+               <entry>$NAME</entry>
+ 
+               <entry><emphasis role="bold">-realname</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or
+               mount_point field of bulk input file <emphasis role="bold">add</emphasis> instruction, if provided; otherwise,
+               <emphasis role="bold">-user</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or username field
+               of in bulk input file <emphasis role="bold">add</emphasis> instruction</entry>
+             </row>
+ 
+             <row>
+               <entry>$PART</entry>
+ 
+               <entry><emphasis role="bold">-partition</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or
+               partition field of bulk input file <emphasis role="bold">add</emphasis> instruction</entry>
+             </row>
+ 
+             <row>
+               <entry>$PWEXPIRES</entry>
+ 
+               <entry><emphasis role="bold">-pwexpires</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or
+               password_expires field of bulk input file <emphasis role="bold">add</emphasis> instruction</entry>
+             </row>
+ 
+             <row>
+               <entry>$SERVER</entry>
+ 
+               <entry><emphasis role="bold">-server</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or
+               file_server field of bulk input file <emphasis role="bold">add</emphasis> instruction</entry>
+             </row>
+ 
+             <row>
+               <entry>$UID</entry>
+ 
+               <entry><emphasis role="bold">-uid</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or uid field
+               of bulk input file <emphasis role="bold">add</emphasis> instruction, if provided; otherwise, allocated automatically
+               by Protection Server</entry>
+             </row>
+ 
+             <row>
+               <entry>$USER</entry>
+ 
+               <entry><emphasis role="bold">-user</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or username
+               field of bulk input file <emphasis role="bold">add</emphasis> instruction</entry>
+             </row>
+ 
+             <row>
+               <entry>$1 through $9</entry>
+ 
+               <entry><emphasis role="bold">-var</emphasis> argument to <emphasis role="bold">uss add</emphasis> command or var1
+               through var9 fields of bulk input file <emphasis role="bold">add</emphasis> instruction</entry>
+             </row>
+           </tbody>
+         </tgroup>
+       </table>
+ 
+       <para>A common use of variables is to define the file server machine and partition that house the user's volume, which often
+       vary from user to user. Place the $SERVER variable in the <emphasis role="bold">V</emphasis> instruction's server field, and
+       the $PART variable in its partition field. If using the <emphasis role="bold">uss add</emphasis> command, provide the desired
+       value with the <emphasis role="bold">-server</emphasis> and <emphasis role="bold">-partition</emphasis> arguments. If using
+       the <emphasis role="bold">uss bulk</emphasis> command, provide the desired values in the file_server and partition fields of
+       each user's <emphasis role="bold">add</emphasis> instruction in the bulk input file. <indexterm>
+           <primary>number variables</primary>
+ 
+           <secondary>uss template file</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>number variables</secondary>
+         </indexterm></para>
+ 
+       <para>The variables $1 through $9 can be used to customize other aspects of the account. Provide a value for these variables
+       with the <emphasis role="bold">-var</emphasis> argument to the <emphasis role="bold">uss add</emphasis> command or in the
+       appropriate field of the bulk input file <emphasis role="bold">add</emphasis> instruction. The <emphasis
+       role="bold">-var</emphasis> argument is unusual in that each instance for it has two parts: the number index and the value,
+       separated by a space. For examples of the use of a number variable, see the discussions of the mount_point and quota fields in
+       <link linkend="HDRWQ473">Creating a Volume with the V Instruction</link>.</para>
+ 
+       <para>If some aspect of account configuration is partly constant and partly variable, you can combine variables and constants
+       in an instruction field. For example, suppose that the ABC Corporation mounts user volumes in the <emphasis
+       role="bold">/afs/abc.com/usr</emphasis> directory. That part of the pathname is constant, but the name of the mount point and
+       home directory is the user's username, which corresponds to the $USER variable. To configure accounts in this way, combine a
+       constant string and a variable in the <emphasis role="bold">V</emphasis> instruction's mount_point field as follows:</para>
+ 
+       <programlisting>
+    /afs/abc.com/usr/$USER
+ </programlisting>
+ 
+       <para>Then provide the value for the $USER variable with the <emphasis role="bold">-user</emphasis> argument to the <emphasis
+       role="bold">uss add</emphasis> command, or in the username field of each user's <emphasis role="bold">add</emphasis>
+       instruction in the bulk input file. <indexterm>
+           <primary>location</primary>
+ 
+           <secondary>standard for uss template file</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>standard locations</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ468">
+       <title>Where to Place Template Files</title>
+ 
+       <para>A template must be available to the <emphasis role="bold">uss</emphasis> command interpreter as it executes a <emphasis
+       role="bold">uss add</emphasis> or <emphasis role="bold">uss bulk</emphasis> command, even if it is the zero-length file
+       appropriate for creating an authentication-only account.</para>
+ 
+       <para>If you do not provide the <emphasis role="bold">-template</emphasis> argument to the <emphasis role="bold">uss
+       add</emphasis> or <emphasis role="bold">uss bulk</emphasis> command, then the command interpreter searches for a template file
+       called <emphasis role="bold">uss.template</emphasis> in each of the following directories in turn: <orderedlist>
+           <listitem>
+             <para>The current working directory</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">/afs/cellname/common/uss</emphasis>, where cellname is the local cell</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">/etc</emphasis></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <para>To use a template file with a different name or stored in a different directory, include the <emphasis
+       role="bold">-template</emphasis> argument to the <emphasis role="bold">uss add</emphasis> or <emphasis role="bold">uss
+       bulk</emphasis> command. If you provide a filename only, the command interpreter looks for it in the directories listed just
+       previously. If you provide a pathname and filename, it looks only in the specified directory, interpreting a partial pathname
+       relative to the current working directory. <indexterm>
+           <primary>rules</primary>
+ 
+           <secondary>uss template file</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>rules for constructing</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ469">
+       <title>Some General Rules for Constructing a Template</title>
+ 
+       <para>This section summarizes some general rules to follow when constructing a template file. For each instruction's syntax
+       definition, see the following sections (<link linkend="HDRWQ472">Evenly Distributing User Home Directories with the G
+       Instruction</link> through <link linkend="HDRWQ479">Executing Commands with the X Instruction</link>). <itemizedlist>
+           <listitem>
+             <para>If a variable takes its value from an element elsewhere within the template, the definition must precede the
+             reference. Putting the instruction lines in the following order usually results in correct resolution of
+             variables:</para>
+ 
+             <para><emphasis role="bold">G V D F E L S A X</emphasis></para>
+           </listitem>
+ 
+           <listitem>
+             <para>The fields in each instruction must appear in the order specified by the instruction's syntax definition, which
+             appear in the following sections about each instruction. You cannot omit a field. Separate each field from its neighbors
+             with one or more spaces.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When specifying a pathname, provide a full one. Partial pathnames are interpreted relative to the current working
+             directory (the one in which the <emphasis role="bold">uss</emphasis> command is issued), with possibly unintended
+             results.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Each instruction must appear on a single line in the template file, with a newline character (<emphasis
+             role="bold">&lt;Return&gt;</emphasis>) only at the end of the instruction. Some example instructions appear in this
+             document on more than one line, but that is only for legibility.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Provide a value for every variable that appears in the template by including the corresponding argument to the
+             <emphasis role="bold">uss add</emphasis> command or placing a value in the corresponding field of the bulk input file
+             <emphasis role="bold">add</emphasis> instruction. A missing value halts the entire creation operation. If a variable
+             does not appear in the template file, the command interpreter ignores the corresponding command-line argument or field
+             in the bulk input file, even if you provide it.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>You can use blank lines in the template file to increase its legibility. If you place comments in the file, begin
+             each comment line with the number sign (<emphasis role="bold">#</emphasis>).</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ470">
+       <title>About Creating Local Disk Directories and Files</title>
+ 
+       <para>It is possible to use the <emphasis role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>, and <emphasis
+       role="bold">F</emphasis> instructions to create directories or files in the local file system of the machine on which you are
+       issuing the <emphasis role="bold">uss</emphasis> command, but that usage is not recommended. It introduces two potential
+       complications: <itemizedlist>
+           <listitem>
+             <para>The local file system automatically assigns ownership of a new local disk directory or file to its creator.
+             Because you are the issuer of the <emphasis role="bold">uss</emphasis> command that is creating the object, it records
+             your current UNIX UID. If that is not appropriate and you want to designate another owner as the object is created, then
+             you must be logged in as the local superuser <emphasis role="bold">root</emphasis> (the local file system allows only
+             the <emphasis role="bold">root</emphasis> user to issue the UNIX <emphasis role="bold">chown</emphasis> command, which
+             the <emphasis role="bold">uss</emphasis> command interpreter invokes to change the owner from the default value). You
+             must also use the <emphasis role="bold">-admin</emphasis> argument to the <emphasis role="bold">uss add</emphasis> or
+             <emphasis role="bold">uss bulk</emphasis> command to authenticate as a privileged AFS administrator. Only an
+             administrator can create Authentication Database and Protection Database entries, which the <emphasis
+             role="bold">uss</emphasis> command interpreter always creates as part of a new account.</para>
+ 
+             <para>The alternative is to become the local superuser <emphasis role="bold">root</emphasis> after the <emphasis
+             role="bold">uss</emphasis> operation completes, and issue the necessary <emphasis role="bold">chown</emphasis> command
+             then. However, that makes the account creation process that much less automated.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Creating a local disk directory always generates an error message because the <emphasis role="bold">uss</emphasis>
+             command interpreter cannot successfully set a local directory's ACL. The directory is created nevertheless, and a value
+             still must appear in the <emphasis role="bold">D</emphasis> instruction's ACL field.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The recommended method for configuring a machine's local disk is to use the AFS <emphasis role="bold">package</emphasis>
+       utility instead; see <link linkend="HDRWQ419">Configuring Client Machines with the package Program</link>. <indexterm>
+           <primary>examples</primary>
+ 
+           <secondary>uss template file</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>examples</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ471">
+       <title>Example uss Templates</title>
+ 
+       <para>This section describes example templates for the basic and full account types (the template for an authentication-only
+       account is empty).</para>
+ 
+       <para>The first example creates a basic account. It contains two <emphasis role="bold">G</emphasis> instructions and a
+       <emphasis role="bold">V</emphasis> instruction that defines the volume name, file server machine, partition, quota in
+       kilobytes, mount point, home directory owner, and home directory access control list. In the ABC Corporation cell, a suitable
+       template is:</para>
+ 
+       <programlisting>
+    G /afs/.abc.com/usr1
+    G /afs/.abc.com/usr2
+    V  user.$USER  $SERVER.abc.com  /vicep$PART  5000  $AUTO/$USER   $UID  \
+         $USER all staff rl
+ </programlisting>
+ 
+       <para>When issuing the <emphasis role="bold">uss add</emphasis> command with this type of template, provide the following
+       arguments: <itemizedlist>
+           <listitem>
+             <para><emphasis role="bold">-user</emphasis> to specify the username for the $USER variable</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-server</emphasis> to specify the unique part of the file server machine name for the
+             $SERVER variable</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-partition</emphasis> to specify the unique part of the partition name for the $PART
+             variable</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The Protection Server automatically assigns an AFS UID for the $UID variable, and the <emphasis role="bold">G</emphasis>
+       instructions provide a value for the $AUTO variable.</para>
+ 
+       <para>The following example template file creates a full account in the ABC Corporation cell. The following sections about
+       each type of instruction describe the effect of the examples. Note that the <emphasis role="bold">V</emphasis> and <emphasis
+       role="bold">E</emphasis> instructions appear on two lines each only for the sake of legibility.</para>
+ 
+       <programlisting>
+    #
+    # Specify the available grouping directories
+    #
+    G /afs/.abc.com/usr1
+    G /afs/.abc.com/usr2
+    #
+    # Create the user's home volume
+    #
+    V user.$USER $SERVER.abc.com /vicep$PART 5000 /afs/.abc.com/$AUTO/$USER \
+         $UID $USER all abc:staff rl
+    #
+    # Create directories and files for mail
+    #
+    D $MTPT/.MESSAGES 0700 $UID $USER all abc:staff none 
+    D $MTPT/.Outgoing 0700 $UID $USER rlidwk postman rlidwk 
+    D $MTPT/Mailbox 0700 $UID $USER all abc:staff none system:anyuser lik
+    #
+    # Here are some useful scripts for login etc.
+    #
+    F $MTPT/.Xbiff 0755 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/.Xresources 0644 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/.Xsession 0755 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/.cshrc 0755 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/.login 0755 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/.logout 0755 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/.twmrc 0644 $UID /afs/abc.com/admin/user/proto
+    F $MTPT/preferences 0644 $UID /afs/abc.com/admin/user/proto
+    #
+    # Make a passwd entry
+    #
+    E /afs/.abc.com/common/etc/newaccts/passwd_$USER 0644 root \
+         "$USER:X:$UID:11:$NAME:$MTPT:/bin/csh"
+    #
+    # Put in the standard password/authentication checks
+    #
+    A $USER 250 noreuse 9 25
+    #
+    # Create and mount a public volume for the user
+    #
+    X "create_public_vol $USER $1 $2"
+    #
+    # Here we set up the symbolic link to public directory
+    #
+    S /afs/abc.com/public/$USER $MTPT/public
+ </programlisting>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>directory</secondary>
+ 
+         <tertiary>distributing evenly with G instruction</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>defining</primary>
+ 
+         <secondary>directory for even distribution of accounts with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>defining for even distribution of accounts with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>G instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>directory</secondary>
+ 
+         <tertiary>G instruction for even distribution</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ472">
+       <title>Evenly Distributing User Home Directories with the G Instruction</title>
+ 
+       <para>In cells with thousands of user accounts, it often makes sense to distribute the mount points for user volumes into
+       multiple parent directories, because placing them all in one directory noticeably slows down directory lookup when a user home
+       directory is accessed. A possible solution is to create parent directories that group user home directories alphabetically, or
+       that reflect divisions like academic or corporate departments. However, in a really large cell, some such groups can still be
+       large enough to slow directory lookup, and users who belong to those groups are unfairly penalized every time they access
+       their home directory. Another drawback to groupings that reflect workplace divisions is that you must move mount points when
+       users change departmental affiliation.</para>
+ 
+       <para>An alternative is an even distribution of user home directories into multiple parent directories that do not represent
+       workplace divisions. The <emphasis role="bold">uss</emphasis> command suite enables you to define a list of directories by
+       placing a <emphasis role="bold">G</emphasis> instruction for each one at the top of the template file, and then using the
+       $AUTO variable in the <emphasis role="bold">V</emphasis> instruction's mount_point field. When the <emphasis
+       role="bold">uss</emphasis> command interpreter encounters the $AUTO variable, it substitutes the directory named by a
+       <emphasis role="bold">G</emphasis> instruction that currently has the fewest entries. (Actually, the $AUTO variable can appear
+       in any field that includes a pathname, in any type of instruction. In all cases, the command interpreter substitutes the
+       directory that currently has the fewest entries.)</para>
+ 
+       <para>The <emphasis role="bold">G</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    G  directory
+ </programlisting>
+ 
+       <para>where directory specifies either a complete directory pathname or only the final element (the directory itself). The
+       choice determines the appropriate value to place in the <emphasis role="bold">V</emphasis> instruction's mount_point
+       field.</para>
+ 
+       <para>Specify the read/write path to each directory, to avoid the failure that results when you attempt to create a new mount
+       point in a read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+       pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further discussion of the concept
+       of read/write and read-only paths through the filespace, see <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+ 
+       <para>For example, the ABC Corporation example template for a full account in <link linkend="HDRWQ471">Example uss
+       Templates</link> defines two directories:</para>
+ 
+       <programlisting>
+    G /afs/.abc.com/usr1
+    G /afs/.abc.com/usr2
+ </programlisting>
+ 
+       <para>and puts the value <emphasis role="bold">$AUTO/$USER</emphasis> in the <emphasis role="bold">V</emphasis> instruction's
+       mount_point field. An alternative with the same result is to define the directories as follows:</para>
+ 
+       <programlisting>
+    G usr1
+    G usr2
+ </programlisting>
+ 
+       <para>and specify a more complete pathname in the <emphasis role="bold">V</emphasis> instruction's mount_point field:
+       <emphasis role="bold">/afs/.abc.com/$AUTO/$USER</emphasis>. <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>volume</secondary>
+ 
+           <tertiary>creating with V instruction</tertiary>
+         </indexterm> <indexterm>
+           <primary>creating</primary>
+ 
+           <secondary>volume with uss</secondary>
+         </indexterm> <indexterm>
+           <primary>volume</primary>
+ 
+           <secondary>creating with uss</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>V instruction</secondary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>volume</secondary>
+ 
+           <tertiary>creating with V instruction</tertiary>
+         </indexterm> <indexterm>
+           <primary>uss template file</primary>
+ 
+           <secondary>zero-length</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ473">
+       <title>Creating a Volume with the V Instruction</title>
+ 
+       <para>Unless the template file is empty (zero-length), one and only one <emphasis role="bold">V</emphasis> instruction must
+       appear in it. (To create other volumes for a user as part of a <emphasis role="bold">uss</emphasis> account-creation
+       operation, use the <emphasis role="bold">X</emphasis> instruction to invoke the <emphasis role="bold">vos create</emphasis>
+       command or a script that invokes that command along with others, such as the <emphasis role="bold">fs mkmount</emphasis>
+       command. For an example, see <link linkend="HDRWQ479">Executing Commands with the X Instruction</link>.)</para>
+ 
+       <para>The <emphasis role="bold">V</emphasis> instruction defines the following AFS entities:</para>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>A volume and associated VLDB entry</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The volume's site (file server machine and partition)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The volume's mount point in the AFS filespace, which becomes the user's home directory</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The volume's space quota</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The home directory's owner, usually the new user</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The home directory's ACL, which normally at least grants all permissions to the user</para>
+         </listitem>
+       </itemizedlist>
+ 
+       <para>The following discussion of the fields in a <emphasis role="bold">V</emphasis> instruction refers to the example in the
+       full account template from <link linkend="HDRWQ471">Example uss Templates</link> (the instruction appears here on two lines
+       only for legibility):</para>
+ 
+       <programlisting>
+    V  user.$USER  $SERVER.abc.com  /vicep$PART  5000  \
+        /afs/.abc.com/$AUTO/$USER  $UID  $USER all abc:staff rl
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">V</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    V  volume_name  server  partition  quota  mount_point owner  ACL
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">V</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a volume creation instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">volume_name</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the volume's name as recorded in the VLDB.</para>
+ 
+               <para>To follow the convention of including the user's name as part of the volume name, include the $USER variable in
+               this field. The variable takes its value from the <emphasis role="bold">-user</emphasis> argument to the <emphasis
+               role="bold">uss add</emphasis> command or from the bulk input file <emphasis role="bold">add</emphasis> instruction's
+               username field.</para>
+ 
+               <para>The ABC Corporation example uses the value <emphasis role="bold">user.$USER</emphasis> to assign the
+               conventional volume name, <emphasis role="bold">user.</emphasis>username. When creating an account for user <emphasis
+               role="bold">smith</emphasis>, for example, you then include <emphasis role="bold">-user smith</emphasis> as an
+               argument to the <emphasis role="bold">uss add</emphasis> command, or place the value <emphasis
+               role="bold">smith</emphasis> in the bulk input file <emphasis role="bold">add</emphasis> instruction's username
+               field.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">server</emphasis></term>
+ 
+             <listitem>
+               <para>Names the file server machine on which to create the new volume. It is best to provide a fully qualified host
+               name (for example, <emphasis role="bold">fs1.abc.com</emphasis>), but an abbreviated form is acceptable if the cell's
+               naming service is available to resolve it at the time the volume is created.</para>
+ 
+               <para>To place different users' volumes on different file server machines, use the $SERVER variable in this field, and
+               provide a value for it either with the <emphasis role="bold">-server</emphasis> argument to the <emphasis
+               role="bold">uss add</emphasis> command or in the server field of the bulk input file <emphasis
+               role="bold">add</emphasis> instruction. One easy way to specify a fully qualified hostname without having to type it
+               completely on the command line is to combine a constant and the $SERVER variable. Specifically, the constant specifies
+               the domain-name suffix common to all the file server machines.</para>
+ 
+               <para>In the ABC Corporation example, all of the file server machines in the cell share the <emphasis
+               role="bold">abc.com</emphasis> domain name suffix, so the server field combines a variable and constant: <emphasis
+               role="bold">$SERVER.abc.com</emphasis>. To place the new volume on the machine <emphasis
+               role="bold">fs1.abc.com</emphasis>, you then include <emphasis role="bold">-server fs1</emphasis> as an argument to
+               the <emphasis role="bold">uss add</emphasis> command, or place the value <emphasis role="bold">fs1</emphasis> in the
+               bulk input file <emphasis role="bold">add</emphasis> instruction's server field.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">partition</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the partition on which to create the user's volume; it must be on the file server machine named in the
+               server field. Identify the partition by its complete name (for example, <emphasis role="bold">/vicepa</emphasis>) or
+               use one of the abbreviations listed in <link linkend="HDRWQ615">Rules for Using Abbreviations and
+               Aliases</link>.</para>
+ 
+               <para>To place different users' volumes on different partitions, use the $PART variable in this field, and provide a
+               value for it either with the <emphasis role="bold">-partition</emphasis> argument to the <emphasis role="bold">uss
+               add</emphasis> command or in the partition field of the bulk input file <emphasis role="bold">add</emphasis>
+               instruction. Because all full partition names start with the <emphasis role="bold">/vicep</emphasis> string, it is
+               convenient to combine that string as a constant with the $PART variable.</para>
+ 
+               <para>The ABC Corporation example template combines the constant string <emphasis role="bold">/vicep</emphasis> and
+               the $PART variable in this way, as <emphasis role="bold">/vicep$PART</emphasis>. <indexterm>
+                   <primary>uss commands</primary>
+ 
+                   <secondary>volume</secondary>
+ 
+                   <tertiary>setting quota</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>volume quota</primary>
+ 
+                   <secondary>setting</secondary>
+ 
+                   <tertiary>with uss</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>uss template file</primary>
+ 
+                   <secondary>quota on volume, setting with V instruction</secondary>
+                 </indexterm> <indexterm>
+                   <primary>setting</primary>
+ 
+                   <secondary>volume quota with uss</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">quota</emphasis></term>
+ 
+             <listitem>
+               <para>Sets the maximum number of kilobyte blocks the volume can occupy on the file server machine's disk. It must be
+               an integer. If you assign the same quota to all user volumes, specify a constant value. To assign different quotas to
+               different volumes, place one of the number variables ($1 through $9) in this field, and provide a value for it either
+               with the <emphasis role="bold">-var</emphasis> argument to the <emphasis role="bold">uss add</emphasis> command or in
+               the appropriate field of the bulk input file <emphasis role="bold">add</emphasis> instruction.</para>
+ 
+               <para>The ABC Corporation example grants a 5000 KB initial quota to every new user. <indexterm>
+                   <primary>uss commands</primary>
+ 
+                   <secondary>volume</secondary>
+ 
+                   <tertiary>mounting</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>creating</primary>
+ 
+                   <secondary>mount point with uss</secondary>
+                 </indexterm> <indexterm>
+                   <primary>uss template file</primary>
+ 
+                   <secondary>mount point, creating with V instruction</secondary>
+                 </indexterm> <indexterm>
+                   <primary>mount point</primary>
+ 
+                   <secondary>creating with uss</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">mount_point</emphasis></term>
+ 
+             <listitem>
+               <para>Creates a mount point for the volume, which serves as the volume's root directory and the user's home directory.
+               By convention, user home directory names include the username, which you can read in by including the $USER variable
+               in this field.</para>
+ 
+               <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to create the
+               new mount point in a read-only volume. By convention, you indicate the read/write path by placing a period before the
+               cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). If you use the
+               $AUTO variable in this field, the directories named by each <emphasis role="bold">G</emphasis> instruction possibly
+               already indicate the read/write path. For further discussion of the concept of read/write and read-only paths through
+               the filespace, see <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+ 
+               <para>If other parts of the mount point name also vary from user to user, you can use the $MTPT variable in this
+               field, and provide a value with the <emphasis role="bold">uss add</emphasis> command's <emphasis
+               role="bold">-mount</emphasis> argument or in the mount_point field of a bulk input file <emphasis
+               role="bold">add</emphasis> instruction. Note, however, that when the $MTPT variable appears in subsequent instructions
+               in the template (usually, in <emphasis role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>, or <emphasis
+               role="bold">F</emphasis> instructions), it instead takes as its value the complete contents of this field.</para>
+ 
+               <para>Combine constants and variables based on how you have decided to group home directories together in one or more
+               parent directories. Note that the parent directories must already exist before you run a <emphasis role="bold">uss
+               add</emphasis> or <emphasis role="bold">uss bulk</emphasis> command that references the template. Possibilities for
+               grouping home directories include the following: <indexterm>
+                   <primary>user account</primary>
+ 
+                   <secondary>methods for grouping</secondary>
+                 </indexterm> <itemizedlist>
+                   <listitem>
+                     <para>Placing all user home directories in a single parent directory; the name <emphasis
+                     role="bold">/afs/</emphasis>cellname<emphasis role="bold">/usr</emphasis> is an AFS-appropriate variation on the
+                     UNIX <emphasis role="bold">/usr</emphasis> convention. This choice is most appropriate for a cell with a small
+                     number of user accounts. The simplest way to implement this choice is to combine a constant string and the $USER
+                     variable, as in <emphasis role="bold">/afs/.abc.com/usr/$USER</emphasis>.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Distributing home directories evenly into a set of parent directories that do not correspond to workplace
+                     divisions. This choice is appropriate in cells with tens of thousands of accounts, where the number of home
+                     directories is large enough to slow directory lookup significantly if they all reside together in one parent
+                     directory, but distribution according to workplace divisions is not feasible.</para>
+ 
+                     <para>The $AUTO variable is designed to distribute home directories evenly in this manner. As explained in <link
+                     linkend="HDRWQ472">Evenly Distributing User Home Directories with the G Instruction</link>, the <emphasis
+                     role="bold">uss</emphasis> command interpreter substitutes the directory that is defined by a preceding
+                     <emphasis role="bold">G</emphasis> template instruction and that currently has the fewest entries. The example
+                     ABC Corporation template illustrates this choice by using the value <emphasis
+                     role="bold">/afs/.abc.com/$AUTO/$USER</emphasis>.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Distributing home directories into multiple directories that reflect divisions like academic or corporate
+                     departments. Perhaps the simplest way to implement this scheme is to use the $MTPT variable to represent the
+                     department, as in <emphasis role="bold">/afs/.ghi.com/usr/$MTPT/$USER</emphasis>. You then provide <emphasis
+                     role="bold">-user smith</emphasis> and <emphasis role="bold">-mount acctg</emphasis> arguments to the <emphasis
+                     role="bold">uss add</emphasis> command to create the mount point <emphasis
+                     role="bold">/afs/.ghi.com/usr/acctg/smith</emphasis>.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Distributing home directories into alphabetic subdirectories of <emphasis role="bold">usr</emphasis>
+                     (<emphasis role="bold">usr/a</emphasis>, <emphasis role="bold">usr/b</emphasis> and so on), based on the first
+                     letter or letters in the username. The advantage is that knowing the username enables you easily to locate a
+                     home directory. A potential drawback is that the distribution is not likely to be even, and if there are a large
+                     number of accounts, then slowed directory lookup unfairly affects users whose names begins with popular
+                     letters.</para>
+ 
+                     <para>Perhaps the simplest way to implement this scheme is to use the $MTPT variable to represent the letter or
+                     letters, as in <emphasis role="bold">/afs/.jkl.com/usr/$MTPT/$USER</emphasis>. Then provide the <emphasis
+                     role="bold">-user smith</emphasis> and <emphasis role="bold">-mount s/m</emphasis> arguments to the <emphasis
+                     role="bold">uss add</emphasis> command to create the mount point <emphasis
+                     role="bold">/afs/.jkl.com/usr/s/m/smith</emphasis>.</para>
+                   </listitem>
+                 </itemizedlist></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">owner</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the username or UID of the user to be designated the mount point's owner in the output from the UNIX
+               <emphasis role="bold">ls -ld</emphasis> command. To follow the standard convention for home directory ownership, use
+               the $UID variable in this field, as in the ABC Corporation example template. The Protection Server then automatically
+               assigns an AFS UID unless you provide the <emphasis role="bold">-uid</emphasis> argument to the <emphasis
+               role="bold">uss add</emphasis> command or fill in the uid field in the bulk input file <emphasis
+               role="bold">add</emphasis> instruction. (If you are converting existing UNIX accounts, see the discussion of
+               additional considerations in <link linkend="HDRWQ459">Converting Existing UNIX Accounts with uss</link>.) <indexterm>
+                   <primary>uss commands</primary>
+ 
+                   <secondary>ACL, setting on home directory</secondary>
+                 </indexterm> <indexterm>
+                   <primary>ACL</primary>
+ 
+                   <secondary>setting on user home directory with uss</secondary>
+                 </indexterm> <indexterm>
+                   <primary>uss template file</primary>
+ 
+                   <secondary>ACL, setting</secondary>
+ 
+                   <tertiary>user home directory with V instruction</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>setting</primary>
+ 
+                   <secondary>ACL on home directory with uss</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ACL</emphasis></term>
+ 
+             <listitem>
+               <para>Sets the ACL on the new home directory. Provide one or more paired values, each pair consisting of an AFS
+               username or group name and the desired permissions, in that order (a group name must already exist in the Protection
+               Database to be used). Separate the two parts of the pair, and each pair, with a space. For a discussion of the
+               available permissions, see <link linkend="HDRWQ567">The AFS ACL Permissions</link>.</para>
+ 
+               <para>At minimum, grant all permissions to the new user by including the value <emphasis role="bold">$USER
+               all</emphasis> in this field. The File Server automatically grants all permissions to the <emphasis
+               role="bold">system:administrators</emphasis> group as well. You cannot grant permissions to the issuer of the
+               <emphasis role="bold">uss</emphasis> command, because as the last step in account creation the <emphasis
+               role="bold">uss</emphasis> command interpreter automatically deletes that user from any ACLs set during the creation
+               process.</para>
+ 
+               <para>The ABC Corporation example uses the following value to grant all permissions to the new user and <emphasis
+               role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) and <emphasis role="bold">l</emphasis> (<emphasis
+               role="bold">lookup</emphasis>) permissions to the members of the <emphasis role="bold">abc:staff</emphasis>
+               group:</para>
+ 
+               <para><emphasis role="bold">$USER all abc:staff rl</emphasis></para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>D instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>directory</secondary>
+ 
+         <tertiary>creating</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>directory</secondary>
+ 
+         <tertiary>creating with D instruction</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>directory with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directory</primary>
+ 
+         <secondary>creating with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>D instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ474">
+       <title>Creating a Directory with the D Instruction</title>
+ 
+       <para>Each <emphasis role="bold">D</emphasis> instruction in the template file creates a directory; there is no limit on the
+       number of them in the template. If a <emphasis role="bold">D</emphasis> instruction creates a subdirectory in a new user's
+       home directory (its intended use), then it must follow the <emphasis role="bold">V</emphasis> instruction. Creating a
+       directory on the local disk of the machine where the <emphasis role="bold">uss</emphasis> command runs is not recommended for
+       the reasons outlined in <link linkend="HDRWQ470">About Creating Local Disk Directories and Files</link>.</para>
+ 
+       <para>The following discussion of the fields in a <emphasis role="bold">D</emphasis> instruction refers to one of the examples
+       in the full account template in <link linkend="HDRWQ471">Example uss Templates</link>:</para>
+ 
+       <programlisting>
+    D $MTPT/Mailbox 0700 $UID $USER all abc:staff none  system:anyuser lik
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">D</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    D  pathname  mode_bits  owner  ACL
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">D</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a directory creation instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">pathname</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the directory's full pathname. If it is a subdirectory of the user's home directory, it is simplest to
+               use the $MTPT variable to specify the home directory pathname. When the $MTPT variable appears in a <emphasis
+               role="bold">D</emphasis> instruction, it takes its value from the preceding <emphasis role="bold">V</emphasis>
+               instruction's mount_point field (this dependency is why a <emphasis role="bold">D</emphasis> instruction must follow
+               the <emphasis role="bold">V</emphasis> instruction).</para>
+ 
+               <para>Specify the read/write pathname to the directory, to avoid the failure that results when you attempt to create a
+               new directory in a read-only volume. By convention, you indicate the read/write path by placing a period before the
+               cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). If you use the
+               $MTPT variable in this field, the value in the <emphasis role="bold">V</emphasis> instruction's mount_point field
+               possibly already indicates the read/write path. For further discussion of the concept of read/write and read-only
+               paths through the filespace, see <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+ 
+               <para>The ABC Corporation example uses the value <emphasis role="bold">$MTPT/Mailbox</emphasis> to place the <emphasis
+               role="bold">Mailbox</emphasis> subdirectory in the user's home directory.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">mode_bits</emphasis></term>
+ 
+             <listitem>
+               <para>Defines the directory's UNIX mode bits. Acceptable values are the standard three- or four-digit numbers
+               corresponding to a combination of permissions. Examples: <emphasis role="bold">0755</emphasis> corresponds to
+               <emphasis role="bold">rwxr-xr-x</emphasis>, and <emphasis role="bold">0644</emphasis> to <emphasis
+               role="bold">rw-r--r--</emphasis>. The first (owner) <emphasis role="bold">x</emphasis> bit must be turned on to enable
+               access to a directory.</para>
+ 
+               <para>The ABC Corporation example uses the value <emphasis role="bold">0700</emphasis> to set the mode bits on the
+               <emphasis role="bold">Mailbox</emphasis> subdirectory to <emphasis role="bold">rwxr-----</emphasis>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">owner</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the username or UID of the user to be designated the directory's owner in the output from the UNIX
+               <emphasis role="bold">ls -ld</emphasis> command.</para>
+ 
+               <para>If the directory resides in AFS, place the $UID variable in this field, as in the ABC Corporation example
+               template. The Protection Server then automatically assigns an AFS UID unless you provide the <emphasis
+               role="bold">-uid</emphasis> argument to the <emphasis role="bold">uss add</emphasis> command or fill in the uid field
+               in the bulk input file <emphasis role="bold">add</emphasis> instruction. (If you are converting existing UNIX
+               accounts, see the discussion of additional considerations in <link linkend="HDRWQ459">Converting Existing UNIX
+               Accounts with uss</link>.)</para>
+ 
+               <para>If the directory resides on the local disk, it is simplest to specify the username or UNIX UID under which you
+               are issuing the <emphasis role="bold">uss</emphasis> command. For a discussion of the complications that arise from
+               designating another user, see <link linkend="HDRWQ470">About Creating Local Disk Directories and Files</link>.
+               <indexterm>
+                   <primary>ACL</primary>
+ 
+                   <secondary>setting for directory with uss</secondary>
+                 </indexterm> <indexterm>
+                   <primary>setting</primary>
+ 
+                   <secondary>ACL for directory with uss</secondary>
+                 </indexterm> <indexterm>
+                   <primary>uss template file</primary>
+ 
+                   <secondary>ACL, setting</secondary>
+ 
+                   <tertiary>directory created by D instruction</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>uss commands</primary>
+ 
+                   <secondary>ACL, setting for directory</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">ACL</emphasis></term>
+ 
+             <listitem>
+               <para>Sets the ACL on the new directory. Provide one or more paired values, each pair consisting of an AFS username or
+               group name and the desired permissions, in that order (a group name must already exist in the Protection Database to
+               be used). Separate the two parts of the pair, and each pair, with a space. For a description of the available
+               permissions, see <link linkend="HDRWQ567">The AFS ACL Permissions</link>.</para>
+ 
+               <para>At minimum, grant all permissions to the new user by including the value <emphasis role="bold">$USER
+               all</emphasis>. You cannot grant permissions to the issuer of the <emphasis role="bold">uss</emphasis> command,
+               because as the last step in account creation the <emphasis role="bold">uss</emphasis> command interpreter
+               automatically deletes that user from any ACLs set during the creation process. An error message always appears if the
+               directory is on the local disk, as detailed in <link linkend="HDRWQ470">About Creating Local Disk Directories and
+               Files</link>.</para>
+ 
+               <para>The ABC Corporation example uses the following value to grant all permissions to the new user, no permissions to
+               the members of the <emphasis role="bold">abc:staff</emphasis> group, and the <emphasis role="bold">l</emphasis>
+               (<emphasis role="bold">lookup</emphasis>), <emphasis role="bold">i</emphasis> (<emphasis
+               role="bold">insert</emphasis>), and <emphasis role="bold">k</emphasis> (<emphasis role="bold">lock</emphasis>)
+               permissions to the members of the <emphasis role="bold">system:anyuser</emphasis> group:</para>
+ 
+               <para><emphasis role="bold">$USER all abc:staff none system:anyuser lik</emphasis></para>
+ 
+               <para>It grants such extensive permissions to the <emphasis role="bold">system:anyuser</emphasis> group to enable any
+               system user (including a mail-delivery daemon) to insert mail into the <emphasis role="bold">Mailbox</emphasis>
+               directory. The absence of the <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permission
+               prevents members of the <emphasis role="bold">system:anyuser</emphasis> group from reading the mail files.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>file, creating from prototype</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>file with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file</primary>
+ 
+         <secondary>creating with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>F instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>file</secondary>
+ 
+         <tertiary>creating from prototype</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>F instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ475">
+       <title>Creating a File from a Prototype with the F Instruction</title>
+ 
+       <para>Each <emphasis role="bold">F</emphasis> instruction in the template file creates a file by copying the contents of an
+       existing prototype file; there is no limit on the number of them in the template, and each can refer to a different prototype.
+       If an <emphasis role="bold">F</emphasis> instruction creates a file in a new user's home directory or a subdirectory of it
+       (the intended use), then it must follow the <emphasis role="bold">V</emphasis> or <emphasis role="bold">D</emphasis>
+       instruction that creates the parent directory. Creating a file on the local disk of the machine where the <emphasis
+       role="bold">uss</emphasis> command runs is not recommended for the reasons detailed in <link linkend="HDRWQ470">About Creating
+       Local Disk Directories and Files</link>.</para>
+ 
+       <para>The <emphasis role="bold">E</emphasis> instruction also creates a file, but the two types of instruction have
+       complementary advantages. Files created with an <emphasis role="bold">E</emphasis> instruction can be customized for each
+       user, because variables can appear in the field that specifies the contents of the file. In contrast, the contents of a file
+       created using the <emphasis role="bold">F</emphasis> instruction are the same for every user. An <emphasis
+       role="bold">E</emphasis> file can be only a single line, however, whereas an <emphasis role="bold">F</emphasis> file can be
+       any length.</para>
+ 
+       <para>The following discussion of the fields in a <emphasis role="bold">F</emphasis> instruction refers to one of the examples
+       in the full account template in <link linkend="HDRWQ471">Example uss Templates</link>:</para>
+ 
+       <programlisting>
+    F $MTPT/.login 0755 $UID /afs/abc.com/admin/user/proto
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">F</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    F  pathname  mode_bits  owner  prototype_file
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">F</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a file creation instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">pathname</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the full pathname of the file to create, including the filename. If it resides in the user's home
+               directory or a subdirectory of it, it is simplest to use the $MTPT variable to specify the home directory pathname.
+               When the $MTPT variable appears in an <emphasis role="bold">F</emphasis> instruction, it takes its value from the
+               preceding <emphasis role="bold">V</emphasis> instruction's mount_point field (this dependency is why an <emphasis
+               role="bold">F</emphasis> instruction must follow the <emphasis role="bold">V</emphasis> instruction).</para>
+ 
+               <para>Specify the read/write path to the file, to avoid the failure that results when you attempt to create a new file
+               in a read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+               pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). If you use the $MTPT variable
+               in this field, the value in the <emphasis role="bold">V</emphasis> instruction's mount_point field possibly already
+               indicates the read/write path. For further discussion of the concept of read/write and read-only paths through the
+               filespace, see <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+ 
+               <para>The ABC Corporation example uses the value <emphasis role="bold">$MTPT/.login</emphasis> to place a file called
+               <emphasis role="bold">.login</emphasis> in the user's home directory.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">mode_bits</emphasis></term>
+ 
+             <listitem>
+               <para>Defines the file's UNIX mode bits. Acceptable values are the standard three- or four-digit numbers corresponding
+               to a combination of permissions. Examples: <emphasis role="bold">0755</emphasis> corresponds to <emphasis
+               role="bold">rwxr-xr-x</emphasis>, and <emphasis role="bold">0644</emphasis> to <emphasis
+               role="bold">rw-r--r--</emphasis>.</para>
+ 
+               <para>The ABC Corporation example uses the value <emphasis role="bold">0755</emphasis> to set the mode bits on the
+               <emphasis role="bold">.login</emphasis> file to <emphasis role="bold">rwxr-xr-x</emphasis>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">owner</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the username or UID of the user to be designated the file's owner in the output from the UNIX
+               <emphasis role="bold">ls -l</emphasis> command.</para>
+ 
+               <para>If the file resides in AFS, place the $UID variable in this field, as in the ABC Corporation example template.
+               The Protection Server then automatically assigns an AFS UID unless you provide the <emphasis
+               role="bold">-uid</emphasis> argument to the <emphasis role="bold">uss add</emphasis> command or fill in the uid field
+               in the bulk input file <emphasis role="bold">add</emphasis> instruction. (If you are converting existing UNIX
+               accounts, see the discussion of additional considerations in <link linkend="HDRWQ459">Converting Existing UNIX
+               Accounts with uss</link>.)</para>
+ 
+               <para>If the file resides on the local disk, it is simplest to specify the username or UNIX UID under which you are
+               issuing the <emphasis role="bold">uss</emphasis> command. For a discussion of the complications that arise from
+               designating another user, see <link linkend="HDRWQ470">About Creating Local Disk Directories and Files</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">prototype_file</emphasis></term>
+ 
+             <listitem>
+               <para>Names the AFS or local directory that houses the prototype file to copy. The prototype file's name must match
+               the final element in the pathname field.</para>
+ 
+               <para>The ABC Corporation example references a prototype file called <emphasis role="bold">.login</emphasis> in the
+               directory <emphasis role="bold">/afs/abc.com/admin/user/proto</emphasis>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>file, creating by echoing one line</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>file with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file</primary>
+ 
+         <secondary>creating with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>E instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>file</secondary>
+ 
+         <tertiary>creating by echoing one line</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>E instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ476">
+       <title>Creating One-Line Files with the E Instruction</title>
+ 
+       <para>Each <emphasis role="bold">E</emphasis> instruction in the template file creates a file by echoing a specified single
+       line into it; there is no limit on the number of them in the template. If an <emphasis role="bold">E</emphasis> instruction
+       creates a file in a new user's home directory or a subdirectory of it (the intended use), then it must follow the <emphasis
+       role="bold">V</emphasis> or <emphasis role="bold">D</emphasis> instruction that creates the parent directory. Creating a file
+       on the local disk of the machine where the <emphasis role="bold">uss</emphasis> command runs is not recommended for the
+       reasons detailed in <link linkend="HDRWQ470">About Creating Local Disk Directories and Files</link>.</para>
+ 
+       <para>The <emphasis role="bold">F</emphasis> instruction also creates a file, but the two types of instruction have
+       complementary advantages. Files created with an <emphasis role="bold">E</emphasis> instruction can be customized for each
+       user, because variables can appear in the field that specifies the contents of the file. The command interpreter replaces the
+       variables with appropriate values before creating the file. In contrast, the contents of a file created using the <emphasis
+       role="bold">F</emphasis> instruction are the same for every user. An <emphasis role="bold">E</emphasis> file can be only a
+       single line, however, whereas an <emphasis role="bold">F</emphasis> file can be any length.</para>
+ 
+       <para>The <emphasis role="bold">E</emphasis> instruction is particularly suited to creating an entry for the new user in the
+       cell's common source password file, which is then copied to client machines to serve as the local password file (<emphasis
+       role="bold">/etc/passwd</emphasis> or equivalent). The following discussion of the fields refers to an example of this type of
+       use, from the ABC Corporation's full account template shown in <link linkend="HDRWQ471">Example uss Templates</link>. For
+       further discussion of how to incorporate the files created in this way into a common source password file, see <link
+       linkend="HDRWQ458">Creating a Common Source Password File</link>.</para>
+ 
+       <programlisting>
+    E /afs/.abc.com/common/etc/newaccts/passwd_$USER 0644 root  \
+       "$USER:X:$UID:11:$NAME:$MTPT:/bin/csh"
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">E</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    E  pathname  mode_bits  owner  "contents"
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">E</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a file creation instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">pathname</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the full pathname of the file to create, including the filename. It can include variables. If it
+               resides in the user's home directory or a subdirectory of it, it is simplest to use the $MTPT variable to specify the
+               home directory pathname. When the $MTPT variable appears in an <emphasis role="bold">E</emphasis> instruction, it
+               takes its value from the preceding <emphasis role="bold">V</emphasis> instruction's mount_point field (this dependency
+               is why an <emphasis role="bold">E</emphasis> instruction must follow the <emphasis role="bold">V</emphasis>
+               instruction.)</para>
+ 
+               <para>Specify the read/write path to the file, to avoid the failure that results when you attempt to create a new file
+               in a read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+               pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). If you use the $MTPT variable
+               in this field, the value in the <emphasis role="bold">V</emphasis> instruction's mount_point field possibly already
+               indicates the read/write path. For further discussion of the concept of read/write and read-only paths through the
+               filespace, see <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+ 
+               <para>The ABC Corporation example writes the file created by the <emphasis role="bold">E</emphasis> instruction to
+               <emphasis role="bold">/afs/.abc.com/common/etc/newaccts</emphasis> directory, naming it after the new user:</para>
+ 
+               <programlisting>
+    /afs/.abc.com/common/etc/newaccts/passwd_$USER
+ </programlisting>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">mode_bits</emphasis></term>
+ 
+             <listitem>
+               <para>Defines the file's UNIX mode bits. Acceptable values are the standard three- or four-digit numbers corresponding
+               to a combination of permissions. Examples: <emphasis role="bold">0755</emphasis> corresponds to <emphasis
+               role="bold">rwxr-xr-x</emphasis>, and <emphasis role="bold">0644</emphasis> to <emphasis
+               role="bold">rw-r--r--</emphasis>.</para>
+ 
+               <para>The ABC Corporation example uses the value <emphasis role="bold">0644</emphasis> to set the mode bits on the
+               <emphasis role="bold">passwd_</emphasis>user file to <emphasis role="bold">r-xr--r--</emphasis>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">owner</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the username or UID of the user to be designated the file's owner in the output from the UNIX
+               <emphasis role="bold">ls -l</emphasis> command.</para>
+ 
+               <para>If the file resides in AFS and is to be owned by the user, place the $UID variable in this field. The Protection
+               Server then automatically assigns an AFS UID unless you provide the <emphasis role="bold">-uid</emphasis> argument to
+               the <emphasis role="bold">uss add</emphasis> command or fill in the uid field in the bulk input file <emphasis
+               role="bold">add</emphasis> instruction. (If you are converting existing UNIX accounts, see the discussion of
+               additional considerations in <link linkend="HDRWQ459">Converting Existing UNIX Accounts with uss</link>.)</para>
+ 
+               <para>If the file resides on the local disk, specify the username or UNIX UID under which you are issuing the
+               <emphasis role="bold">uss</emphasis> command. For a discussion of the complications that arise from designating
+               another user, see <link linkend="HDRWQ470">About Creating Local Disk Directories and Files</link>.</para>
+ 
+               <para>The ABC Corporation example is creating an AFS file intended for incorporation into the common password file,
+               rather than for direct use by the new user. It therefore designates the local superuser <emphasis
+               role="bold">root</emphasis> as the owner of the new file. Designating an alternate owner on an AFS file does not
+               introduce complications: issuing the <emphasis role="bold">chown</emphasis> command on AFS files requires membership
+               in the <emphasis role="bold">system:administrators</emphasis> group, but the issuer of the <emphasis
+               role="bold">uss</emphasis> command is necessarily authenticated as a member of that group.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">contents</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the one-line character string to write into the new file. Surround it with double quotes if it
+               contains one or more spaces. It cannot contain the newline character, but can contain any of the standard variables,
+               which the command interpreter resolves as it creates the file.</para>
+ 
+               <para>The ABC Corporation example has the following value in the contents field, to create a password file
+               entry:</para>
+ 
+               <programlisting>
+    $USER:X:$UID:10:$NAME:$MTPT:/bin/csh
+ </programlisting>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>L instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>S instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss</primary>
+ 
+         <secondary>hard link, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>link (hard or symbolic) with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>hard link</primary>
+ 
+         <secondary>creating with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>L instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>hard link, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss</primary>
+ 
+         <secondary>symbolic link, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>symbolic link</primary>
+ 
+         <secondary>creating with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>S instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>symbolic link, creating</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ477">
+       <title>Creating Links with the L and S Instructions</title>
+ 
+       <para>Each <emphasis role="bold">L</emphasis> instruction in the template file creates a hard link between two files, as
+       achieved by the standard UNIX <emphasis role="bold">ln</emphasis> command. The <emphasis role="bold">S</emphasis> instruction
+       creates a symbolic link between two files, as achieved by the standard UNIX <emphasis role="bold">ln -s</emphasis> command. An
+       explanation of links is beyond the scope of this document, but the basic effect in both cases is to create a second name for
+       an existing file, so that it can be accessed via either name. Creating a link does not create a second copy of the
+       file.</para>
+ 
+       <para>There is no limit on the number of <emphasis role="bold">L</emphasis> or <emphasis role="bold">S</emphasis> instructions
+       in a template file. If the link is in a new user's home directory or a subdirectory of it (the intended use), then it must
+       follow the <emphasis role="bold">V</emphasis> or <emphasis role="bold">D</emphasis> instruction that creates the parent
+       directory, and the <emphasis role="bold">F</emphasis>, <emphasis role="bold">E</emphasis>, or <emphasis
+       role="bold">X</emphasis> instruction that creates the file being linked to. Creating a file on the local disk of the machine
+       where the <emphasis role="bold">uss</emphasis> command runs is not recommended, for the reasons detailed in <link
+       linkend="HDRWQ470">About Creating Local Disk Directories and Files</link>.</para>
+ 
+       <para>Note that AFS allows hard links only between files that reside in the same directory. This restriction is necessary to
+       eliminate the confusion that results from associating two potentially different ACLs (those of the two directories) with the
+       same file. Symbolic links are legal between two files that reside in different directories and even in different volumes. The
+       ACL on the actual file applies to the link as well.</para>
+ 
+       <para>You do not set the owner or mode bits on a link created with an <emphasis role="bold">L</emphasis> or <emphasis
+       role="bold">S</emphasis> instruction, as you do for directories or files. The <emphasis role="bold">uss</emphasis> command
+       interpreter automatically records the UNIX UID of the <emphasis role="bold">uss</emphasis> command's issuer as the owner, and
+       sets the mode bits to <emphasis role="bold">lrwxrwxrwx</emphasis> (777).</para>
+ 
+       <para>The following discussion of the fields in an <emphasis role="bold">L</emphasis> or <emphasis role="bold">S</emphasis>
+       instruction refers to an example in the full account template from <link linkend="HDRWQ471">Example uss Templates</link>,
+       namely</para>
+ 
+       <programlisting>
+    S /afs/abc.com/public/$USER $MTPT/public
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">L</emphasis> and <emphasis role="bold">S</emphasis> instructions' syntax is as follows:</para>
+ 
+       <programlisting>
+    L  existing_file  link
+    S  existing_file  link
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">L</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a hard link creation instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">S</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a symbolic link creation instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">existing_file</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the complete pathname of the existing file. If it resides in the user's home directory or a
+               subdirectory of it, it is simplest to use the $MTPT variable to specify the home directory pathname. When the $MTPT
+               variable appears in an <emphasis role="bold">L</emphasis> or <emphasis role="bold">S</emphasis> instruction, it takes
+               its value from the preceding <emphasis role="bold">V</emphasis> instruction's mount_point field (this dependency is
+               why the instruction must follow the <emphasis role="bold">V</emphasis> instruction).</para>
+ 
+               <para>Do not create a symbolic link to a file whose name begins with the number sign (<emphasis
+               role="bold">#</emphasis>) or percent sign (<emphasis role="bold">%</emphasis>). When the Cache Manager reads a
+               symbolic link whose contents begin with one of those characters, it interprets it as a regular or read/write mount
+               point, respectively.</para>
+ 
+               <para>The ABC Corporation example creates a link to the publicly readable volume created and mounted by a preceding
+               <emphasis role="bold">X</emphasis> instruction, by specifying the path to its mount point:</para>
+ 
+               <programlisting>
+    /afs/abc.com/public/$USER
+ </programlisting>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">link</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the complete pathname of the second name for the file. If it resides in the user's home directory or a
+               subdirectory of it, it is simplest to use the $MTPT variable to specify the home directory pathname.</para>
+ 
+               <para>Specify the read/write path to the link, to avoid the failure that results when you attempt to create a new link
+               in a read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+               pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). If you use the $MTPT variable
+               in this field, the value in the <emphasis role="bold">V</emphasis> instruction's mount_point field possibly already
+               indicates the read/write path. For further discussion of the concept of read/write and read-only paths through the
+               filespace, see <link linkend="HDRWQ208">Mounting Volumes</link>.</para>
+ 
+               <para>The ABC Corporation example creates a link called <emphasis role="bold">public</emphasis> in the user's home
+               directory:</para>
+ 
+               <programlisting>
+    $MTPT/public
+ </programlisting>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>A instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>password/authentication security, setting with A instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>A instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>password/authentication security, setting with A instruction</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ478">
+       <title>Increasing Account Security with the A Instruction</title>
+ 
+       <para>The <emphasis role="bold">A</emphasis> instruction in the template file enhances cell security by imposing the following
+       restrictions on users' password choice and authentication attempts. <itemizedlist>
+           <listitem>
+             <para>Limiting the user's password lifetime. When the lifetime expires, the user can no longer use the password to
+             authenticate and must change it.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Prohibiting the reuse of the user's 20 most-recently used passwords.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Limiting the number of consecutive times that a user can provide an incorrect password during authentication, and
+             for how long the Authentication Server refuses further authentication attempts after the limit is exceeded (referred to
+             as an <emphasis>account lockout</emphasis>). For regular user accounts in most cells, the recommended limit is nine and
+             lockout time is 25 minutes.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The following discussion of the fields in an <emphasis role="bold">A</emphasis> instruction refers to the example in the
+       full account template from <link linkend="HDRWQ471">Example uss Templates</link>, which sets a password lifetime of 250 days,
+       prohibits reuse of passwords, limits the number of failed authentication attempts to nine, and creates a lockout time of 25
+       minutes if the authentication limit is exceeded:</para>
+ 
+       <programlisting>
+    A $USER 250 noreuse 9 25
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">A</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    A  username  password_lifetime  password_reuse  failures  locktime
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">A</emphasis></term>
+ 
+             <listitem>
+               <para>Indicates a security enhancing instruction.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">username</emphasis></term>
+ 
+             <listitem>
+               <para>Names the Authentication Database entry on which to impose security restrictions. Use the $USER variable to read
+               in the username from the <emphasis role="bold">uss add</emphasis> command's <emphasis role="bold">-user</emphasis>
+               argument, or from the username field of an <emphasis role="bold">add</emphasis> instruction in the bulk input file.
+               The ABC Corporation example uses this value.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">password_lifetime</emphasis></term>
+ 
+             <listitem>
+               <para>Sets the number of days after the user's password is changed that it remains valid. When the password becomes
+               invalid (expires), the user is unable to authenticate, but has 30 more days in which to issue the <emphasis
+               role="bold">kpasswd</emphasis> command to change the password (after that, only an administrator can change
+               it).</para>
+ 
+               <para>Specify an integer from the range <emphasis role="bold">1</emphasis> through <emphasis
+               role="bold">254</emphasis> to specify the number of days until expiration, the value <emphasis
+               role="bold">0</emphasis> to indicate that the password never expires, or the value $PWEXPIRES to read in the number of
+               days from the <emphasis role="bold">uss add</emphasis> or <emphasis role="bold">uss bulk</emphasis> command's
+               <emphasis role="bold">-pwexpires</emphasis> argument. If the <emphasis role="bold">A</emphasis> instruction does not
+               appear in the template file, by default the user's password never expires.</para>
+ 
+               <para>The ABC Corporation example sets a password lifetime of 250 days.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">password_reuse</emphasis></term>
+ 
+             <listitem>
+               <para>Determines whether or not the user can change his or her password (using the <emphasis
+               role="bold">kpasswd</emphasis> or <emphasis role="bold">kas setpassword</emphasis> command) to one that is similar to
+               any of his or her last 20 passwords. The acceptable values are <emphasis role="bold">reuse</emphasis> to allow reuse
+               and <emphasis role="bold">noreuse</emphasis> to prohibit it. If the <emphasis role="bold">A</emphasis> instruction
+               does not appear in the template file, the default is to allow password reuse.</para>
+ 
+               <para>The ABC Corporation example prohibits password reuse.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">failures</emphasis></term>
+ 
+             <listitem>
+               <para>Sets the number of consecutive times the user can provide an incorrect password during authentication (using the
+               <emphasis role="bold">klog</emphasis> command or a login utility that grants AFS tokens). When the user exceeds the
+               limit, the Authentication Server rejects further authentication attempts for the amount of time specified in the
+               locktime field.</para>
+ 
+               <para>Specify an integer from the range <emphasis role="bold">1</emphasis> through <emphasis
+               role="bold">254</emphasis> to specify the number of failures permitted, or the value <emphasis
+               role="bold">0</emphasis> to indicate that there is no limit to the number of unsuccessful attempts. If the <emphasis
+               role="bold">A</emphasis> instruction does not appear in the template file, the default is to allow an unlimited number
+               of failures.</para>
+ 
+               <para>The ABC Corporation example sets the limit to nine failed attempts.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">locktime</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies how long the Authentication Server refuses authentication attempts from a user who has exceeded the
+               failure limit set in the failures field.</para>
+ 
+               <para>Specify a number of hours and minutes (hh:mm) or minutes only (mm), from the range <emphasis
+               role="bold">01</emphasis> (one minute) through <emphasis role="bold">36:00</emphasis> (36 hours). The Authentication
+               Server automatically reduces any larger value to <emphasis role="bold">36:00</emphasis> and also rounds up any nonzero
+               value to the next highest multiple of 8.5 minutes. A value of <emphasis role="bold">0</emphasis> (zero) sets an
+               infinite lockout time, in which case an administrator must always issue the <emphasis role="bold">kas
+               unlock</emphasis> command to unlock the account.</para>
+ 
+               <para>The ABC Corporation example sets the lockout time to 25 minutes, which is rounded up to 25 minutes 30 seconds
+               (the next highest multiple of 8.5 minutes).</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>command, executing with X instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>executing</primary>
+ 
+         <secondary>command using uss template line</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>executing from uss template file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>X instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss template file</primary>
+ 
+         <secondary>command, executing with X instruction</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>X instruction</primary>
+ 
+         <secondary>uss template file</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ479">
+       <title>Executing Commands with the X Instruction</title>
+ 
+       <para>The <emphasis role="bold">X</emphasis> instruction in the template file executes a command, which can be a standard UNIX
+       command, a shell script or program, or an AFS command. The command string can include standard template variables, and any
+       number of <emphasis role="bold">X</emphasis> instructions can appear in a template file. If an instruction manipulates an
+       element created by another instruction, it must appear after that instruction.</para>
+ 
+       <para>The following discussion of the field in an <emphasis role="bold">X</emphasis> instruction refers to the example in the
+       full account template from <link linkend="HDRWQ471">Example uss Templates</link>:</para>
+ 
+       <programlisting>
+    X "create_public_vol $USER $1 $2"
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">X</emphasis> instruction's syntax is as follows:</para>
+ 
+       <programlisting>
+    X "command"
+ </programlisting>
+ 
+       <para>where command specifies the command to execute. Surround it with double quotes if it contains spaces. The command string
+       can contain any of the standard variables, which the <emphasis role="bold">uss</emphasis> command interpreter resolves before
+       passing the command on to the appropriate other command interpreter, but it cannot contain newline characters.</para>
+ 
+       <para>The ABC Corporation example invokes a script called <emphasis role="bold">create_public_vol</emphasis>, which creates
+       another volume associated with the new user and mounts it in a publicly readable part of the ABC Corporation's
+       filespace:</para>
+ 
+       <programlisting>
+    "create_public_vol $USER $1 $2"
+ </programlisting>
+ 
+       <para>It uses the $USER variable to read in the username and make it part of both the volume name and mount point name. The
+       <emphasis role="bold">uss</emphasis> command issuer supplies a file server machine name for the $1 variable and a partition
+       name for the $2 variable, to specify the site for the new volume. <indexterm>
+           <primary>creating</primary>
+ 
+           <secondary>user account</secondary>
+ 
+           <tertiary>with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>user</primary>
+ 
+           <secondary>account</secondary>
+ 
+           <see>user account</see>
+         </indexterm> <indexterm>
+           <primary>user account</primary>
+ 
+           <secondary>creating</secondary>
+ 
+           <tertiary>with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>username</primary>
+ 
+           <secondary>assigning</secondary>
+ 
+           <tertiary>with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>creating</primary>
+ 
+           <secondary>Protection Database user entry</secondary>
+ 
+           <tertiary>with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>creating</primary>
+ 
+           <secondary>Authentication Database entry</secondary>
+ 
+           <tertiary>with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>Protection Database</primary>
+ 
+           <secondary>user entry</secondary>
+ 
+           <tertiary>creating with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>Authentication Database</primary>
+ 
+           <secondary>entry</secondary>
+ 
+           <tertiary>creating with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>uss commands</primary>
+ 
+           <secondary>creating individual user account</secondary>
+         </indexterm> <indexterm>
+           <primary>AFS UID</primary>
+ 
+           <secondary>assigning</secondary>
+ 
+           <tertiary>with uss</tertiary>
+         </indexterm> <indexterm>
+           <primary>user</primary>
+ 
+           <secondary>AFS UID, assigning</secondary>
+         </indexterm></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ480">
+     <title>Creating Individual Accounts with the uss add Command</title>
+ 
+     <para>After you have created a template file, you can create an individual account by issuing the <emphasis role="bold">uss
+     add</emphasis> command (for template creation instructions see <link linkend="HDRWQ463">Constructing a uss Template
+     File</link>). When you issue the command, the <emphasis role="bold">uss</emphasis> command interpreter contacts various AFS
+     servers to perform the following actions: <itemizedlist>
+         <listitem>
+           <para>Create a Protection Database entry. By default, the Protection Server assigns an AFS UID which becomes the value of
+           the $UID variable used in the template.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create an Authentication Database entry, recording an encrypted version of the initial password.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the account components defined in the indicated template file, contacting the File Server, Volume Server, and
+           Volume Location (VL) Server as necessary.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>To review which types of instructions to include in a template to create different file system objects, see <link
+     linkend="HDRWQ463">Constructing a uss Template File</link>. If the template is empty, the <emphasis role="bold">uss
+     add</emphasis> command creates an authentication-only account consisting of Protection Database and Authentication Database
+     entries.</para>
+ 
+     <para>When you issue the <emphasis role="bold">uss add</emphasis> command, provide a value for each variable in the template
+     file by including the corresponding command-line argument. If you fail to supply a value for a variable, the <emphasis
+     role="bold">uss</emphasis> command interpreter substitutes a null string, which usually causes the account creation to fail. If
+     you include a command line argument for which the corresponding variable does not appear in the template, it is ignored.</para>
+ 
+     <para><link linkend="TBLWQ481">Table 4</link> summarizes the mappings between variables and the arguments to the <emphasis
+     role="bold">uss add</emphasis> command. It is adapted from <link linkend="TBLWQ466">Table 3</link>, but includes only those
+     variables that take their value from command line arguments.</para>
+ 
+     <table id="TBLWQ481" label="4">
+       <title>Command-line argument sources for uss template variables</title>
+ 
+       <tgroup cols="2">
+         <colspec colwidth="20*" />
+ 
+         <colspec colwidth="80*" />
+ 
+         <thead>
+           <row>
+             <entry><emphasis role="bold">Variable</emphasis></entry>
+ 
+             <entry><emphasis role="bold">Command-line Argument</emphasis></entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>$MTPT</entry>
+ 
+             <entry><emphasis role="bold">-mount</emphasis> (for occurrence in <emphasis role="bold">V</emphasis>
+             instruction)</entry>
+           </row>
+ 
+           <row>
+             <entry>$NAME</entry>
+ 
+             <entry><emphasis role="bold">-realname</emphasis> if provided; otherwise <emphasis role="bold">-user</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>$PART</entry>
+ 
+             <entry><emphasis role="bold">-partition</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>$PWEXPIRES</entry>
+ 
+             <entry><emphasis role="bold">-pwexpires</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>$SERVER</entry>
+ 
+             <entry><emphasis role="bold">-server</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>$UID</entry>
+ 
+             <entry><emphasis role="bold">-uid</emphasis> if provided; otherwise allocated by Protection Server</entry>
+           </row>
+ 
+           <row>
+             <entry>$USER</entry>
+ 
+             <entry><emphasis role="bold">-user</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>$1 through $9</entry>
+ 
+             <entry><emphasis role="bold">-var</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </table>
+ 
+     <sect2 id="HDRWQ483">
+       <title>To create an AFS account with the uss add command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Authenticate as an AFS identity with all of the following privileges. In the conventional configuration, the
+           <emphasis role="bold">admin</emphasis> user account has them, or you possibly have a personal administrative account. (To
+           increase cell security, it is best to create special privileged accounts for use only while performing administrative
+           procedures; for further discussion, see <link linkend="HDRWQ584">An Overview of Administrative Privilege</link>.) If
+           necessary, issue the <emphasis role="bold">klog</emphasis> command to authenticate. <programlisting>
+    % <emphasis role="bold">klog</emphasis> admin_user
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The following list specifies the necessary privileges and indicates how to check that you have them.</para>
+ 
+           <itemizedlist>
+             <listitem>
+               <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+               <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To
+               display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue the <emphasis
+               role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the
+               users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <computeroutput>ADMIN</computeroutput> flag on the Authentication Database entry. However, the
+               Authentication Server always prompts you for a password in order to perform its own authentication. The following
+               instructions direct you to specify the administrative identity on the <emphasis role="bold">uss</emphasis> command
+               line itself.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) and <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions on the ACL of the directory in which
+               you are mounting the user's volume. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which
+               is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+               <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+               role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+             </listitem>
+           </itemizedlist>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Log in as the local superuser <emphasis role="bold">root</emphasis>.
+           This is necessary only if you are creating new files or directories in the local file system and want to designate an
+           alternate owner as the object is created. For a discussion of the issues involved, see <link linkend="HDRWQ470">About
+           Creating Local Disk Directories and Files</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify the location and functionality of the template file you are using. For a description of where the <emphasis
+           role="bold">uss</emphasis> command interpreter expects to find the template, see <link linkend="HDRWQ468">Where to Place
+           Template Files</link>. You can always provide an alternate pathname if you wish. Also note the variables used in the
+           template, to be sure that you provide the corresponding arguments on the <emphasis role="bold">uss</emphasis> command
+           line.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ484" /><emphasis role="bold">(Optional)</emphasis> Change to the directory where the template
+           resides. This affects the type of pathname you must type in Step <link linkend="LIWQ485">6</link>. <programlisting>
+    % <emphasis role="bold">cd</emphasis> template_directory
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Run the <emphasis role="bold">uss add</emphasis> command with the
+           <emphasis role="bold">-dryrun</emphasis> flag to preview the creation of the account. Note any error messages and correct
+           the cause before reissuing the command without the <emphasis role="bold">-dryrun</emphasis> flag. The next step describes
+           the <emphasis role="bold">uss add</emphasis> command's syntax. For more information on the <emphasis
+           role="bold">-dryrun</emphasis> flag, see <link linkend="HDRWQ454">Avoiding and Recovering from Errors and Interrupted
+           Operations</link>. <indexterm>
+               <primary>uss commands</primary>
+ 
+               <secondary>add</secondary>
+             </indexterm><indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>uss add</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ485" />Issue the <emphasis role="bold">uss add</emphasis> command to create the account. Enter the
+           command on a single line; it appears here on multiple lines only for legibility.</para>
+ 
+           <para>The <emphasis role="bold">uss add</emphasis> operation creates an Authentication Database entry. The Authentication
+           Server performs its own authentication rather than accepting your existing AFS token. By default, it authenticates your
+           local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator. Include the <emphasis
+           role="bold">-admin</emphasis> argument to name an identity that has the <computeroutput>ADMIN</computeroutput> flag on its
+           Authentication Database entry. To verify that an entry has the flag, issue the <emphasis role="bold">kas
+           examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">uss add</emphasis> <emphasis role="bold">-user</emphasis> &lt;<replaceable>login name</replaceable>&gt;  <emphasis
+               role="bold">-admin</emphasis> &lt;<replaceable>administrator to authenticate</replaceable>&gt;   \
+              [<emphasis role="bold">-realname</emphasis> &lt;<replaceable>full name in quotes</replaceable>&gt;] [<emphasis
+               role="bold">-pass</emphasis> &lt;<replaceable>initial passwd</replaceable>&gt;]   \
+              [<emphasis role="bold">-pwexpires</emphasis> &lt;<replaceable>password expires in [0..254] days (0 =</replaceable>&gt; never)&gt;]  \
+              [<emphasis role="bold">-server</emphasis> &lt;<replaceable>FileServer for home volume</replaceable>&gt;]  \
+              [<emphasis role="bold">-partition</emphasis> &lt;<replaceable>FileServer's disk partition for home volume</replaceable>&gt;]  \
+              [<emphasis role="bold">-mount</emphasis> &lt;<replaceable>home directory mount point</replaceable>&gt;]  \
+              [<emphasis role="bold">-uid</emphasis> &lt;<replaceable>uid to assign the user</replaceable>&gt;]  \
+              [<emphasis role="bold">-template</emphasis> &lt;<replaceable>pathname of template file</replaceable>&gt;]  \
+              [<emphasis role="bold">-var</emphasis> &lt;<replaceable>auxiliary argument pairs (Numval)</replaceable>&gt;+] [<emphasis
+               role="bold">-dryrun</emphasis>] \
+              [<emphasis role="bold">-overwrite</emphasis>] 
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">ad</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">add</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the user's Authentication Database and Protection Database entries. Because it becomes the username
+                   (the name under which a user logs in), it must obey the restrictions that many operating systems impose on
+                   usernames (usually, to contain no more than eight lowercase letters). Also avoid the following characters: colon
+                   (<emphasis role="bold">:</emphasis>), semicolon (<emphasis role="bold">;</emphasis>), comma (<emphasis
+                   role="bold">,</emphasis>), at sign (<emphasis role="bold">@</emphasis>), space, newline, and the period (<emphasis
+                   role="bold">.</emphasis>), which is conventionally used only in special administrative names.</para>
+ 
+                   <para>This argument provides the value for the $USER variable in the template file. For suggestions on
+                   standardizing usernames, see <link linkend="HDRWQ58">Choosing Usernames and Naming Other Account
+                   Components</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-realname</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the user's actual full name. If it contains spaces or punctuation, surround it with double quotes.
+                   If you do not provide it, it defaults to the username provided with the <emphasis role="bold">-user</emphasis>
+                   argument.</para>
+ 
+                   <para>This argument provides the value for the $NAME variable in the template file. For information about using
+                   this argument and variable as part of an automated process for creating entries in a local password file such as
+                   <emphasis role="bold">/etc/passwd</emphasis>, see <link linkend="HDRWQ458">Creating a Common Source Password
+                   File</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-pass</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the user's initial password. Although the AFS commands that handle passwords accept strings of
+                   virtually unlimited length, it is best to use a password of eight characters or less, which is the maximum length
+                   that many applications and utilities accept.</para>
+ 
+                   <para>Possible choices for initial passwords include the username, a string of digits such as those from a Social
+                   Security number, or a standard string such as <emphasis role="bold">changeme</emphasis>, which is the default if
+                   you do not provide this argument. There is no corresponding variable in the template file.</para>
+ 
+                   <para>Instruct users to change their passwords to a truly secret string as soon as they authenticate with AFS for
+                   the first time. The <emphasis>OpenAFS User Guide</emphasis> explains how to use the <emphasis
+                   role="bold">kpasswd</emphasis> command to change an AFS password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-pwexpires</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the number of days after a user's password is changed that it remains valid. Provide an integer from
+                   the range <emphasis role="bold">1</emphasis> through <emphasis role="bold">254</emphasis> to specify the number of
+                   days until expiration, or the value <emphasis role="bold">0</emphasis> to indicate that the password never expires
+                   (the default if you do not provide this argument). When the password becomes invalid (expires), the user is unable
+                   to authenticate, but has 30 more days in which to issue the <emphasis role="bold">kpasswd</emphasis> command to
+                   change the password; after that, only an administrator can change it.</para>
+ 
+                   <para>This argument provides the value for the $PWEXPIRES variable in the template file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-server</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the file server machine on which to create the new user's home volume. It is best to provide a fully
+                   qualified hostname (for example, <emphasis role="bold">fs1.abc.com</emphasis>), but an abbreviated form is
+                   acceptable provided that the cell's naming service is available to resolve it when you issue the <emphasis
+                   role="bold">uss add</emphasis> command.</para>
+ 
+                   <para>This argument provides the value for the $SERVER variable in the template file. To avoid having to type a
+                   fully qualified hostname on the command line, combine the $SERVER variable with a constant (for example, the
+                   cell's domain name) in the server field of the <emphasis role="bold">V</emphasis> instruction in the template
+                   file. For an example, see <link linkend="HDRWQ473">Creating a Volume with the V Instruction</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-partition</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the partition on which to create the user's home volume; it must be on the file server machine
+                   named by the <emphasis role="bold">-server</emphasis> argument. Identify the partition by its complete name (for
+                   example, <emphasis role="bold">/vicepa</emphasis>), or use one of the abbreviations listed in <link
+                   linkend="HDRWQ615">Rules for Using Abbreviations and Aliases</link>.</para>
+ 
+                   <para>This argument provides the value for the $PART variable in the template file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-mount</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname for the user's home directory in the cell's read/write filespace. Partial pathnames
+                   are interpreted relative to the current working directory.</para>
+ 
+                   <para>This argument provides the value for the $MTPT variable in the template file, but only when it appears in
+                   the <emphasis role="bold">V</emphasis> instruction's mount_point field. When the $MTPT variable appears in any
+                   subsequent instructions, it takes its value from the <emphasis role="bold">V</emphasis> instruction's mount_point
+                   field, rather than directly from this argument. For more details, and for suggestions about how to use this
+                   argument and the $MTPT variable, see <link linkend="HDRWQ473">Creating a Volume with the V
+                   Instruction</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-uid</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a positive integer other than <emphasis role="bold">0</emphasis> (zero) to assign as the user's
+                   AFS UID. It is best to omit this argument and allow the Protection Server to assign an AFS UID that is one greater
+                   than the current value of the <computeroutput>max user id</computeroutput> counter. (To display the counter, use
+                   the <emphasis role="bold">pts listmax</emphasis> command as described in <link linkend="HDRWQ561">To display the
+                   AFS ID counters</link>.)</para>
+ 
+                   <para>If you have a reason to use this argument (perhaps because the user already has a UNIX UID), first use the
+                   <emphasis role="bold">pts examine</emphasis> command to verify that there is no existing account with the desired
+                   AFS UID; if there is, the account creation process terminates with an error.</para>
+ 
+                   <para>This argument provides the value for the $UID variable in the template file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-template</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of the template file. If you omit this argument, the command interpreter searches for
+                   a template file called <emphasis role="bold">uss.template</emphasis> in each of the following directories in turn:
+                   <orderedlist>
+                       <listitem>
+                         <para>The current working directory</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">/afs/</emphasis>cellname<emphasis role="bold">/common/uss</emphasis>, where
+                         cellname names the local cell</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">/etc</emphasis></para>
+                       </listitem>
+                     </orderedlist></para>
+ 
+                   <para>If you specify a filename other than <emphasis role="bold">uss.template</emphasis> but without a pathname,
+                   the command interpreter searches for it in the indicated directories. If you provide a full or partial pathname,
+                   the command interpreter consults the specified file only; it interprets partial pathnames relative to the current
+                   working directory.</para>
+ 
+                   <para>If the specified template file is empty (zero-length), the command creates Protection and Authentication
+                   Database entries only.</para>
+ 
+                   <para>To learn how to construct a template file, see <link linkend="HDRWQ463">Constructing a uss Template
+                   File</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-var</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies values for each of the number variables $1 through $9 that can appear in the template file. You
+                   can use the number variables to assign values to variables in the <emphasis role="bold">uss</emphasis> template
+                   file that are not part of the standard set.</para>
+ 
+                   <para>For each instance of this argument, provide two parts in the indicated order, separated by a space:
+                   <itemizedlist>
+                       <listitem>
+                         <para>The integer from the range <emphasis role="bold">1</emphasis> through <emphasis
+                         role="bold">9</emphasis> that matches the variable in the template file. Do not precede it with a dollar
+                         sign.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>A string of alphanumeric characters to assign as the value of the variable.</para>
+                       </listitem>
+                     </itemizedlist></para>
+ 
+                   <para>To learn about suggested uses for the number variables, see the description of the <emphasis
+                   role="bold">V</emphasis> instruction's quota field in <link linkend="HDRWQ473">Creating a Volume with the V
+                   Instruction</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dryrun</emphasis></term>
+ 
+                 <listitem>
+                   <para>Reports actions that the command interpreter needs to perform to run the command, without actually
+                   performing them.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-overwrite</emphasis></term>
+ 
+                 <listitem>
+                   <para>Overwrites any directories, files, and links that exist in the file system and for which there are
+                   definitions in <emphasis role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>, <emphasis
+                   role="bold">F</emphasis>, <emphasis role="bold">L</emphasis>, or <emphasis role="bold">S</emphasis> instructions
+                   in the template file named by the <emphasis role="bold">-template</emphasis> argument. If you omit this flag, the
+                   command interpreter prompts you once for confirmation that you want to overwrite all such elements.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the new user home directory resides in a replicated volume, use the <emphasis role="bold">vos release</emphasis>
+           command to release the volume, as described in <link linkend="HDRWQ194">To replicate a read/write volume (create a
+           read-only volume)</link>. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <note>
+             <para>This step can be necessary even if the home directory's parent directory is not itself a mount point for a
+             replicated volume (and is easier to overlook in that case). For example, the ABC Corporation template puts the mount
+             points for user volumes in the <emphasis role="bold">/afs/abc.com/usr</emphasis> directory. Because that is a regular
+             directory rather than a mount point, it resides in the <emphasis role="bold">root.cell</emphasis> volume mounted at the
+             <emphasis role="bold">/afs/abc.com</emphasis> directory. That volume is replicated, so after changing it by creating a
+             new mount point the administrator must issue the <emphasis role="bold">vos release</emphasis> command.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para>Create an entry for the new user in the local password file (<emphasis role="bold">/etc/passwd</emphasis> or
+           equivalent) on each AFS client machine that he or she can log into. For suggestions on automating this step, see <link
+           linkend="HDRWQ458">Creating a Common Source Password File</link>.</para>
+ 
+           <para>Even if you do not use the automated method, set the user's UNIX UID to match the AFS UID assigned automatically by
+           the Protection Server or assigned with the <emphasis role="bold">-uid</emphasis> argument. The new user's AFS UID appears
+           in the trace produced by the <emphasis role="bold">uss add</emphasis> output, or you can use the <emphasis role="bold">pts
+           examine</emphasis> command to display it, as described in <link linkend="HDRWQ537">To display a Protection Database
+           entry</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>deleting</primary>
+ 
+         <secondary>user accounts with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>deleting with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>deleting</primary>
+ 
+         <secondary>Protection Database user entry with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>deleting</primary>
+ 
+         <secondary>Authentication Database entry with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>user entry</secondary>
+ 
+         <tertiary>deleting with uss</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Database</primary>
+ 
+         <secondary>entry</secondary>
+ 
+         <tertiary>deleting with uss</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>deleting individual user account</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ486">
+     <title>Deleting Individual Accounts with the uss delete Command</title>
+ 
+     <para>The <emphasis role="bold">uss delete</emphasis> command deletes an AFS user account according to the arguments you provide
+     on the command line; unlike the <emphasis role="bold">uss add</emphasis> command, it does not use a template file. When you
+     issue the command, the <emphasis role="bold">uss</emphasis> command interpreter contacts various AFS servers to perform the
+     following actions: <itemizedlist>
+         <listitem>
+           <para>Remove the mount point for the user's home volume</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Remove the user's home volume and delete the associated VLDB entry, unless you include the <emphasis
+           role="bold">-savevolume</emphasis> flag</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Delete the user's Authentication Database entry</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Delete the user's Protection Database entry</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Before issuing the <emphasis role="bold">uss delete</emphasis> command, you can also perform the following optional tasks:
+     <itemizedlist>
+         <listitem>
+           <para>Copy the user's home volume to tape or another permanent medium and record the username and UID on a reserved list.
+           This information enables you to restore the user's account easily if he or she returns to your cell. For information about
+           using the AFS Backup System to back up volumes, see <link linkend="HDRWQ248">Configuring the AFS Backup System</link> and
+           <link linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the user has exclusive use of any other volumes (such as a volume for storing project-related data), make a
+           backup copy of each one and then remove it and its mount point as instructed in <link linkend="HDRWQ235">Removing Volumes
+           and their Mount Points</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Use the <emphasis role="bold">pts listowned</emphasis> command to display any groups that the user owns;
+           instructions appear in <link linkend="HDRWQ540">To list the groups that a user or group owns</link>. Decide whether to use
+           the <emphasis role="bold">pts delete</emphasis> command to remove the groups or the <emphasis role="bold">pts
+           chown</emphasis> command to transfer ownership to another user or group. Instructions appear in <link
+           linkend="HDRWQ553">To delete Protection Database entries</link> and <link linkend="HDRWQ555">To change a group's
+           owner</link>. Alternatively, you can have the user remove or transfer ownership of the groups before leaving. A group that
+           remains in the Protection Database after its owner is removed is considered orphaned, and only members of the <emphasis
+           role="bold">system:administrators</emphasis> group can administer it.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>You can automate some of these tasks by including <emphasis role="bold">exec</emphasis> instructions in the bulk input
+     file and using the <emphasis role="bold">uss bulk</emphasis> command to delete the account. See <link
+     linkend="HDRWQ488">Creating and Deleting Multiple Accounts with the uss bulk Command</link>.</para>
+ 
+     <sect2 id="HDRWQ487">
+       <title>To delete an AFS account</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Authenticate as an AFS identity with all of the following privileges. In the conventional configuration, the
+           <emphasis role="bold">admin</emphasis> user account has them, or you possibly have a personal administrative account. (To
+           increase cell security, it is best to create special privileged accounts for use only while performing administrative
+           procedures; for further discussion, see <link linkend="HDRWQ584">An Overview of Administrative Privilege</link>.) If
+           necessary, issue the <emphasis role="bold">klog</emphasis> command to authenticate. <programlisting>
+    % <emphasis role="bold">klog</emphasis> admin_user
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The following list specifies the necessary privileges and indicates how to check that you have them.</para>
+ 
+           <itemizedlist>
+             <listitem>
+               <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+               <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To
+               display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue the <emphasis
+               role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the
+               users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <computeroutput>ADMIN</computeroutput> flag on the Authentication Database entry. However, the
+               Authentication Server always prompts you for a password in order to perform its own authentication. The following
+               instructions direct you to specify the administrative identity on the <emphasis role="bold">uss</emphasis> command
+               line itself.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>) permission on the ACL of the
+               directory that houses the user's home directory. If necessary, issue the <emphasis role="bold">fs listacl</emphasis>
+               command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+               <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+               role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+             </listitem>
+           </itemizedlist>
+         </listitem>
+ 
+         <listitem>
+           <para>Consider and resolve the issues discussed in the introduction to this section concerning the continued maintenance
+           of a deleted user's account information, owned groups, and volumes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Run the <emphasis role="bold">uss delete</emphasis> command with the
+           <emphasis role="bold">-dryrun</emphasis> flag to preview the deletion of the account. Note any error messages and correct
+           the cause before reissuing the command without the <emphasis role="bold">-dryrun</emphasis> flag. The next step describes
+           the <emphasis role="bold">uss delete</emphasis> command's syntax. <indexterm>
+               <primary>uss commands</primary>
+ 
+               <secondary>delete</secondary>
+             </indexterm><indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>uss delete</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">uss delete</emphasis> command to delete the account. Enter the command on a single
+           line; it appears here on multiple lines only for legibility.</para>
+ 
+           <para>The delete operation always removes the user's entry from the Authentication Database. The Authentication Server
+           performs its own authentication rather than accepting your existing AFS token. By default, it authenticates your local
+           (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator. Include the <emphasis
+           role="bold">-admin</emphasis> argument to name an identity that has the <computeroutput>ADMIN</computeroutput> flag on its
+           Authentication Database entry. To verify that an entry has the flag, issue the <emphasis role="bold">kas
+           examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">uss delete</emphasis> <emphasis role="bold">-user</emphasis> &lt;<replaceable>login name</replaceable>&gt;  \ 
+                 <emphasis role="bold">-mountpoint</emphasis> &lt;<replaceable>mountpoint for user's volume</replaceable>&gt;  \
+                 [<emphasis role="bold">-savevolume</emphasis>]  <emphasis role="bold">-admin</emphasis>  &lt;<replaceable>administrator to authenticate</replaceable>&gt;  \
+                 [<emphasis role="bold">-dryrun</emphasis>] 
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">d</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">delete</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the entry to delete from the Protection and Authentication Databases.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-mountpoint</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of the mount point to delete (the user's home directory). Unless the <emphasis
+                   role="bold">-savevolume</emphasis> argument is included, the volume mounted there is also deleted from the file
+                   server machine where it resides, as is its record from the VLDB. Partial pathnames are interpreted relative to the
+                   current working directory.</para>
+ 
+                   <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to delete
+                   a mount point from a read-only volume. By convention, you indicate the read/write path by placing a period before
+                   the cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For
+                   further discussion of the concept of read/write and read-only paths through the filespace, see <link
+                   linkend="HDRWQ208">Mounting Volumes</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-savevolume</emphasis></term>
+ 
+                 <listitem>
+                   <para>Retains the user's volume and VLDB entry.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dryrun</emphasis></term>
+ 
+                 <listitem>
+                   <para>Reports actions that the command interpreter needs to perform to run the command, without actually
+                   performing them.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the deleted user home directory resided in a replicated volume, use the <emphasis role="bold">vos
+           release</emphasis> command to release the volume, as described in <link linkend="HDRWQ194">To replicate a read/write
+           volume (create a read-only volume)</link>. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <note>
+             <para>This step can be necessary even if the home directory's parent directory is not itself a mount point for a
+             replicated volume (and is easier to overlook in that case). For example, the ABC Corporation template puts the mount
+             points for user volumes in the <emphasis role="bold">/afs/abc.com/usr</emphasis> directory. Because that is a regular
+             directory rather than a mount point, it resides in the <emphasis role="bold">root.cell</emphasis> volume mounted at the
+             <emphasis role="bold">/afs/abc.com</emphasis> directory. That volume is replicated, so after changing it by deleting a
+             mount point the administrator must issue the <emphasis role="bold">vos release</emphasis> command.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para>Delete the user's entry from the local password file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent) of
+           each client machine. If you use the AFS <emphasis role="bold">package</emphasis> utility, it is sufficient to remove the
+           entry from the common source version of the file. If you intend to reactivate the user's account in the future, it is
+           simpler to comment out the entry or place an asterisk (*) in the password field.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>user accounts in bulk with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user account</primary>
+ 
+         <secondary>creating/deleting many at once</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bulk mode in uss</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>deleting</primary>
+ 
+         <secondary>user accounts in bulk with uss</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>uss commands</primary>
+ 
+         <secondary>creating/deleting user accounts in bulk</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ488">
+     <title>Creating and Deleting Multiple Accounts with the uss bulk Command</title>
+ 
+     <para>The <emphasis role="bold">uss bulk</emphasis> command allows you to create and delete many accounts at once. Before
+     executing the command, you must <itemizedlist>
+         <listitem>
+           <para>Construct a template if you plan to create any accounts, just as you must do before running the <emphasis
+           role="bold">uss add</emphasis> command. The same template applies to all accounts created by a single <emphasis
+           role="bold">uss bulk</emphasis> command.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Construct a bulk input file of instructions that create and delete accounts and execute any related commands, as
+           described in <link linkend="HDRWQ489">Constructing a Bulk Input File</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>rules</primary>
+ 
+       <secondary>for uss bulk input file</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>uss bulk input file</primary>
+ 
+       <secondary>rules for constructing</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ489">
+       <title>Constructing a Bulk Input File</title>
+ 
+       <para>You can include five types of instructions in a bulk input file: <emphasis role="bold">add</emphasis>, <emphasis
+       role="bold">delete</emphasis>, <emphasis role="bold">exec</emphasis>, <emphasis role="bold">savevolume</emphasis>, and
+       <emphasis role="bold">delvolume</emphasis>. The following sections discuss their uses.</para>
+ 
+       <para><emphasis role="bold">Creating a User Account with the add Instruction</emphasis></para>
+ 
+       <para>Each <emphasis role="bold">add</emphasis> instruction creates a single user account, and so is basically the equivalent
+       of issuing one <emphasis role="bold">uss add</emphasis> command. There is no limit to the number of <emphasis
+       role="bold">add</emphasis> instructions in the bulk input file.</para>
+ 
+       <para>As indicated by the following syntax statement, the order of the instruction's fields matches the order of arguments to
+       the <emphasis role="bold">uss add</emphasis> command (though some of the command's arguments do not have a corresponding
+       field). Like the <emphasis role="bold">uss add</emphasis> command's arguments, many of the fields provide a value for a
+       variable in the <emphasis role="bold">uss</emphasis> template file. Each instruction must be a single line in the file (have a
+       newline character only at its end); it appears on multiple lines here only for legibility.</para>
+ 
+       <programlisting><emphasis role="bold">add</emphasis> username[<emphasis role="bold">:</emphasis>full_name][<emphasis
+           role="bold">:</emphasis>initial_password][<emphasis role="bold">:</emphasis>password_expires]
+    [<emphasis role="bold">:</emphasis>file_server][<emphasis role="bold">:</emphasis>partition][<emphasis role="bold">:</emphasis>mount_point][<emphasis
+           role="bold">:</emphasis>uid]
+    [<emphasis role="bold">:</emphasis>var1][<emphasis role="bold">:</emphasis>var2][<emphasis role="bold">:</emphasis>var3][<emphasis
+           role="bold">:</emphasis>var4][<emphasis role="bold">:</emphasis>var5][<emphasis role="bold">:</emphasis>var6][<emphasis
+           role="bold">:</emphasis>var7][<emphasis role="bold">:</emphasis>var8][<emphasis role="bold">:</emphasis>var9][<emphasis
+           role="bold">:</emphasis>]
+ </programlisting>
+ 
+       <para>For a complete description of the acceptable values in each field, see the <emphasis role="bold">uss Bulk Input
+       File</emphasis> reference page in the <emphasis>OpenAFS Administration Reference</emphasis>, or the description of the
+       corresponding arguments to the <emphasis role="bold">uss add</emphasis> command, in <link linkend="HDRWQ483">To create an AFS
+       account with the uss add command</link>. Following are some basic notes: <itemizedlist>
+           <listitem>
+             <para>Begin the line with the string <emphasis role="bold">add</emphasis> only, not <emphasis role="bold">uss
+             add</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Only the first argument, username, is required. It corresponds to the <emphasis role="bold">-user</emphasis>
+             argument to the <emphasis role="bold">uss add</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Do not surround the full_name value with double quotes, even though you must use them around the value for the
+             <emphasis role="bold">-realname</emphasis> argument to the <emphasis role="bold">uss add</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you want to omit a value for an argument, indicate an empty field by using two colons with nothing between
+             them. Leaving a field empty is acceptable if the corresponding command line argument is optional or if the corresponding
+             variable does not appear in the template file. For every field that precedes the last one to which you assign an actual
+             value, you must either provide a value or indicate an empty field. It is acceptable, but not necessary, to indicate
+             empty fields after the last one in which you assign a value.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>After the last field, end the line with either a colon and newline character (<emphasis
+             role="bold">&lt;Return&gt;</emphasis>), or a newline alone.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The final nine fields are for assigning values to the number variables ($1 through $9), with the fields listed in
+             increasing numerical order. Specify the value only, not the variable number.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para><emphasis role="bold">Deleting a User Account with the delete Instruction</emphasis></para>
+ 
+       <para>Each <emphasis role="bold">delete</emphasis> instruction deletes a single user account, and so is basically the
+       equivalent of issuing one <emphasis role="bold">uss delete</emphasis> command. There is no limit to the number of <emphasis
+       role="bold">delete</emphasis> instructions in the bulk input file.</para>
+ 
+       <para>Like all instructions in the bulk input file, each <emphasis role="bold">delete</emphasis> instruction must be a single
+       line in the file (have a newline character only at its end), even though it can cover multiple lines on a display screen. The
+       curly braces (<emphasis role="bold">{ }</emphasis>) indicate two mutually exclusive choices.</para>
+ 
+       <programlisting><emphasis role="bold">delete</emphasis> username<emphasis role="bold">:</emphasis>mount_point_path[:{ <emphasis
+           role="bold">savevolume</emphasis> | <emphasis role="bold">delvolume</emphasis> }][<emphasis role="bold">:</emphasis>]
+ </programlisting>
+ 
+       <para>For a complete description of the acceptable values in each field, see the <emphasis role="bold">uss Bulk Input
+       File</emphasis> reference page in the <emphasis>OpenAFS Administration Reference</emphasis> or the description of the
+       corresponding arguments to the <emphasis role="bold">uss delete</emphasis> command, in <link linkend="HDRWQ487">To delete an
+       AFS account</link>. Following are some basic notes: <itemizedlist>
+           <listitem>
+             <para>Begin the line with the string <emphasis role="bold">delete</emphasis> only, not <emphasis role="bold">uss
+             delete</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The first two arguments, username and mount_point_path, are required. They correspond to the <emphasis
+             role="bold">-user</emphasis> and <emphasis role="bold">-mountpoint</emphasis> arguments to the <emphasis role="bold">uss
+             delete</emphasis> command.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The third field, which is optional, controls whether the user's home volume is removed from the file server where
+             it resides, along with the corresponding VLDB entry. There are three possible values: <itemizedlist>
+                 <listitem>
+                   <para>No value treats the volume and VLDB entry according to the prevailing default, which is established by a
+                   preceding <emphasis role="bold">savevolume</emphasis> or <emphasis role="bold">delvolume</emphasis> instruction in
+                   the template file. See the following discussion of those instructions to learn how the default is set.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The string <emphasis role="bold">savevolume</emphasis> preserves the volume and VLDB entry, overriding the
+                   default.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The string <emphasis role="bold">delvolume</emphasis> removes the volume and VLDB entry, overriding the
+                   default.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>After the last field, end the line with either a colon and newline character (<emphasis
+             role="bold">&lt;Return&gt;</emphasis>), or a newline alone.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para><emphasis role="bold">Running a Command or Script with the exec Instruction</emphasis></para>
+ 
+       <para>The <emphasis role="bold">exec</emphasis> instruction runs the indicated AFS command, compiled program, or UNIX shell
+       script or command. The command processor assumes the AFS and local identities of the issuer of the <emphasis role="bold">uss
+       bulk</emphasis> command, who must have the privileges required to run the command.</para>
+ 
+       <para>The instruction's syntax is as follows:</para>
+ 
+       <programlisting><emphasis role="bold">exec</emphasis> command
+ </programlisting>
+ 
+       <para>It is not necessary to surround the command string with double quotes (" ") or other delimiters.</para>
+ 
+       <para><emphasis role="bold">Setting the Default Treatment of Volumes with the delvolume and savevolume
+       Instructions</emphasis></para>
+ 
+       <para>The <emphasis role="bold">savevolume</emphasis> and <emphasis role="bold">delvolume</emphasis> instructions set the
+       default treatment of volumes referenced by the <emphasis role="bold">delete</emphasis> instructions that follow them in the
+       bulk input file. Their syntax is as follows:</para>
+ 
+       <programlisting>
+         <emphasis role="bold">savevolume</emphasis>
+         <emphasis role="bold">delvolume</emphasis>
+       </programlisting>
+ 
+       <para>Both instructions are optional and take no arguments. If neither appears in the bulk input file, then by default all
+       volumes and VLDB entries referenced by <emphasis role="bold">delete</emphasis> instructions are removed. If the <emphasis
+       role="bold">savevolume</emphasis> instruction appears in the file, it prevents the removal of the volume and VLDB entry
+       referenced by all subsequent <emphasis role="bold">delete</emphasis> instructions in the file. The <emphasis
+       role="bold">delvolume</emphasis> instruction explicitly establishes the default (which is deletion) for subsequent <emphasis
+       role="bold">delete</emphasis> instructions.</para>
+ 
+       <para>The effect of either instruction lasts until the end of the bulk input file, or until its opposite appears. To override
+       the prevailing default for a particular <emphasis role="bold">delete</emphasis> instruction, put the <emphasis
+       role="bold">savevolume</emphasis> or <emphasis role="bold">delvolume</emphasis> string in the instruction's third field. (You
+       can also use multiple instances of the <emphasis role="bold">savevolume</emphasis> and <emphasis
+       role="bold">delvolume</emphasis> instructions to toggle back and forth between default preservation and deletion of
+       volumes.)</para>
+     </sect2>
+ 
+     <sect2 id="Header_570">
+       <title>Example Bulk Input File Instructions</title>
+ 
+       <para>To create an authentication-only account, use an <emphasis role="bold">add</emphasis> instruction like the following
+       example, which includes only the first (username) argument. The user's real name is set to match the username (<emphasis
+       role="bold">anderson</emphasis>) and her initial password is set to the string <emphasis
+       role="bold">changeme</emphasis>.</para>
+ 
+       <programlisting>
+    add anderson 
+ </programlisting>
+ 
+       <para>The following example also creates an authentication-only account, but sets nondefault values for the real name and
+       initial password.</para>
+ 
+       <programlisting>
+    add smith:John Smith:js_pswd
+ </programlisting>
+ 
+       <para>The next two example <emphasis role="bold">add</emphasis> instructions require that the administrator of the ABC
+       Corporation cell (<emphasis role="bold">abc.com</emphasis>) has written a <emphasis role="bold">uss</emphasis> template file
+       with the following <emphasis role="bold">V</emphasis> instruction in it:</para>
+ 
+       <programlisting>
+    V user.$USER $SERVER.abc.com /vicep$PART 10000 /afs/.abc.com/usr/$3/$USER \
+        $UID $USER all
+ </programlisting>
+ 
+       <para>To create accounts for users named John Smith from the Marketing Department and Pat Jones from the Finance Department,
+       the appropriate <emphasis role="bold">add</emphasis> instructions in the bulk input file are as follows:</para>
+ 
+       <programlisting>
+    add smith:John Smith:::fs1:a:::::marketing
+    add jones:Pat Jones:::fs3:c:::::finance
+ </programlisting>
+ 
+       <para>The new account for Smith consists of Protection and Authentication Database entries called <emphasis
+       role="bold">smith</emphasis>. His initial password is the default string <emphasis role="bold">changeme</emphasis>, and the
+       Protection Server generates his AFS UID. His home volume, called <emphasis role="bold">user.smith</emphasis>, has a 10,000 KB
+       quota, resides on partition <emphasis role="bold">/vicepa</emphasis> of file server machine <emphasis
+       role="bold">fs1.abc.com</emphasis>, and is mounted at <emphasis role="bold">/afs/.abc.com/usr/marketing/smith</emphasis>. The
+       final <emphasis role="bold">$UID $USER all</emphasis> part of the <emphasis role="bold">V</emphasis> instruction gives him
+       ownership of his home directory and all permissions on its ACL. The account for <emphasis role="bold">jones</emphasis> is
+       similar, except that it resides on partition <emphasis role="bold">/vicepc</emphasis> of file server machine <emphasis
+       role="bold">fs3.abc.com</emphasis> and is mounted at <emphasis role="bold">/afs/.abc.com/usr/finance/jones</emphasis>.</para>
+ 
+       <para>Notice that the fields corresponding to mount_point, uid, var1, and var2 are empty (between the values
+       <computeroutput>a</computeroutput> and <computeroutput>marketing</computeroutput> on the first example line) because the
+       corresponding variables do not appear in the <emphasis role="bold">V</emphasis> instruction in the template file. The
+       initial_passwd and password_expires fields are also empty.</para>
+ 
+       <para>If you wish, you can specify values or empty fields for all nine number variables in an <emphasis
+       role="bold">add</emphasis> instruction. In that case, the bulk input file instructions are as follows:</para>
+ 
+       <programlisting>
+    add smith:John Smith:::fs1:a:::::marketing::::::
+    add jones:Pat Jones:::fs3:c:::::finance::::::
+ </programlisting>
+ 
+       <para>The following example is a section of a bulk input file with a number of <emphasis role="bold">delete</emphasis>
+       instructions and a <emphasis role="bold">savevolume</emphasis> instruction. Because the first three instructions appear before
+       the <emphasis role="bold">savevolume</emphasis> instruction and their third field is blank, the corresponding volumes and VLDB
+       entries are removed. The <emphasis role="bold">delete</emphasis> instruction for user <emphasis role="bold">terry</emphasis>
+       follows the <emphasis role="bold">savevolume</emphasis> instruction, so her volume is not removed, but the volume for user
+       <emphasis role="bold">johnson</emphasis> is, because the <emphasis role="bold">delvolume</emphasis> string in the third field
+       of the <emphasis role="bold">delete</emphasis> instruction overrides the current default.</para>
+ 
+       <programlisting>
+    delete smith:/afs/abc.com/usr/smith
+    delete pat:/afs/abc.com/usr/pat
+    delete rogers:/afs/abc.com/usr/rogers
+    savevolume
+    delete terry:/afs/abc.com/usr/terry
+    delete johnson:/afs/abc.com/usr/johnson:delvolume
+ </programlisting>
+ 
+       <para>The following example <emphasis role="bold">exec</emphasis> instruction is useful as a separator between a set of
+       <emphasis role="bold">add</emphasis> instructions and a set of <emphasis role="bold">delete</emphasis> instructions. It
+       generates a message on the standard output stream that informs you of the <emphasis role="bold">uss bulk</emphasis> command's
+       progress.</para>
+ 
+       <programlisting>
+    exec echo "Additions completed; beginning deletions..."
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_571">
+       <title>To create and delete multiple AFS user accounts</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Authenticate as an AFS identity with all of the following privileges. In the conventional configuration, the
+           <emphasis role="bold">admin</emphasis> user account has them, or you possibly have a personal administrative account. (To
+           increase cell security, it is best to create special privileged accounts for use only while performing administrative
+           procedures; for further discussion, see <link linkend="HDRWQ584">An Overview of Administrative Privilege</link>.) If
+           necessary, issue the <emphasis role="bold">klog</emphasis> command to authenticate. <programlisting>
+    % <emphasis role="bold">klog</emphasis> admin_user
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The following list specifies the necessary privileges and indicates how to check that you have them.</para>
+ 
+           <itemizedlist>
+             <listitem>
+               <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+               <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To
+               display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue the <emphasis
+               role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the
+               users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <computeroutput>ADMIN</computeroutput> flag on the Authentication Database entry. However, the
+               Authentication Server always prompts you for a password in order to perform its own authentication. The following
+               instructions direct you to specify the administrative identity on the <emphasis role="bold">uss</emphasis> command
+               line itself.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>), <emphasis
+               role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) and <emphasis role="bold">l</emphasis> (<emphasis
+               role="bold">lookup</emphasis>) permissions on the ACL of the parent directory for each volume mount point. If
+               necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully described in <link
+               linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+               <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+               role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+             </listitem>
+           </itemizedlist>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional.)</emphasis> Log in as the local superuser <emphasis role="bold">root</emphasis>.
+           This is necessary only if you are creating new files or directories in the local file system and want to designate an
+           alternate owner as the object is created. For a discussion of the issues involved, see <link linkend="HDRWQ470">About
+           Creating Local Disk Directories and Files</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the bulk input file includes <emphasis role="bold">add</emphasis> instructions, verify the location and
+           functionality of the template you are using. For a description of where the <emphasis role="bold">uss</emphasis> command
+           interpreter expects to find the template, see <link linkend="HDRWQ468">Where to Place Template Files</link>. You can
+           always provide an alternate pathname if you wish. Also note which variables appear in the template, to be sure that you
+           provide the corresponding arguments in the <emphasis role="bold">add</emphasis> instruction or on the <emphasis
+           role="bold">uss bulk</emphasis> command line.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create a bulk input file that complies with the rules listed in <link linkend="HDRWQ489">Constructing a Bulk Input
+           File</link>. It is simplest to put the file in the same directory as the template file you are using.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional.)</emphasis> Change to the directory where the bulk input file and template file
+           reside. <programlisting>
+    % <emphasis role="bold">cd</emphasis> template_directory
+ </programlisting><indexterm>
+               <primary>uss commands</primary>
+ 
+               <secondary>bulk</secondary>
+             </indexterm><indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>uss bulk</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ490" />Issue the <emphasis role="bold">uss bulk</emphasis> command to create or delete accounts, or
+           both. Enter the command on a single line; it appears here on multiple lines only for legibility.</para>
+ 
+           <para>The bulk operation always manipulates user entries in the Authentication Database. The Authentication Server
+           performs its own authentication rather than accepting your existing AFS token. By default, it authenticates your local
+           (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator. Include the <emphasis
+           role="bold">-admin</emphasis> argument to name an identity that has the <computeroutput>ADMIN</computeroutput> flag on its
+           Authentication Database entry. To verify that an entry has the flag, issue the <emphasis role="bold">kas
+           examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">uss bulk</emphasis> &lt;<replaceable>bulk input file</replaceable>&gt;  \
+               [<emphasis role="bold">-template</emphasis> &lt;<replaceable>pathname of template file</replaceable>&gt;]  \
+               <emphasis role="bold">-admin</emphasis> &lt;<replaceable>administrator to authenticate</replaceable>&gt;  \
+               [<emphasis role="bold">-dryrun</emphasis>] [<emphasis role="bold">-overwrite</emphasis>]  \
+               [<emphasis role="bold">-pwexpires</emphasis> &lt;<replaceable>password expires in [0..254] days (0 =</replaceable>&gt; never)&gt;]  \
+               [<emphasis role="bold">-pipe</emphasis>]
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">b</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">bulk</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">bulk input file</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of the bulk input file. Partial pathnames are interpreted relative to the current
+                   working directory. For a discussion of the required file format, see <link linkend="HDRWQ489">Constructing a Bulk
+                   Input File</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-template</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the pathname of the template file for any <emphasis role="bold">uss add</emphasis> commands that
+                   appear in the bulk input file. Partial pathnames are interpreted relative to the current working directory. For a
+                   discussion of the required file format, see <link linkend="HDRWQ463">Constructing a uss Template
+                   File</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as the <emphasis role="bold">admin</emphasis> account. The password prompt
+                   echoes it as admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-dryrun</emphasis></term>
+ 
+                 <listitem>
+                   <para>Reports actions that the command interpreter needs to perform to run the command, without actually
+                   performing them.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-overwrite</emphasis></term>
+ 
+                 <listitem>
+                   <para>Overwrites any directories, files and links that exist in the file system and for which there are also
+                   <emphasis role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>, <emphasis role="bold">F</emphasis>,
+                   <emphasis role="bold">L</emphasis>, or <emphasis role="bold">S</emphasis> instructions in the template file named
+                   by the <emphasis role="bold">-template</emphasis> argument. If this flag is omitted, the command interpreter
+                   prompts, once for each <emphasis role="bold">add</emphasis> instruction in the bulk input file, for confirmation
+                   that it is to overwrite such elements. Do not include this flag if there are no <emphasis
+                   role="bold">add</emphasis> instructions in the bulk input file.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-pwexpires</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the number of days after a user's password is changed that it remains valid, for each user named by an
+                   <emphasis role="bold">add</emphasis> instruction in the bulk input file. Provide an integer from the range
+                   <emphasis role="bold">1</emphasis> through <emphasis role="bold">254</emphasis> to specify the number of days
+                   until expiration, or the value <emphasis role="bold">0</emphasis> to indicate that the password never expires (the
+                   default).</para>
+ 
+                   <para>When the password becomes invalid (expires), the user is unable to authenticate, but has 30 more days in
+                   which to issue the <emphasis role="bold">kpasswd</emphasis> command to change the password (after that, only an
+                   administrator can change it).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-pipe</emphasis></term>
+ 
+                 <listitem>
+                   <para>Suppresses the Authentication Server's prompt for the password of the issuer or the user named by the
+                   <emphasis role="bold">-admin</emphasis> argument (the Authentication Server always separately authenticates the
+                   user who is creating or deleting an entry in the Authentication Database). Instead, the command interpreter
+                   accepts the password as piped input from another program, enabling you to run the <emphasis role="bold">uss
+                   bulk</emphasis> command in unattended batch jobs.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a newly created or deleted user home directory resides in a replicated volume, use the <emphasis role="bold">vos
+           release</emphasis> command to release the volume, as described in <link linkend="HDRWQ194">To replicate a read/write
+           volume (create a read-only volume)</link>. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <note>
+             <para>This step can be necessary even if the home directory's parent directory is not itself a mount point for a
+             replicated volume (and is easier to overlook in that case). For example, the ABC Corporation template puts the mount
+             points for user volumes in the <emphasis role="bold">/afs/abc.com/usr</emphasis> directory. Because that is a regular
+             directory rather than a mount point, it resides in the <emphasis role="bold">root.cell</emphasis> volume mounted at the
+             <emphasis role="bold">/afs/abc.com</emphasis> directory. That volume is replicated, so after changing it by creating or
+             deleting a mount point, the administrator must issue the <emphasis role="bold">vos release</emphasis> command.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para>If you are creating accounts, create an entry for the new user in the local password file (<emphasis
+           role="bold">/etc/passwd</emphasis> or equivalent) on each AFS client machine that he or she can log into. For suggestions
+           on automating this step, see <link linkend="HDRWQ458">Creating a Common Source Password File</link>.</para>
+ 
+           <para>Even if you do not use the automated method, set the user's UNIX UID to match the AFS UID assigned automatically by
+           the Protection Server or assigned with the <emphasis role="bold">-uid</emphasis> argument. The new user's AFS UID appears
+           in the trace produced by the <emphasis role="bold">uss add</emphasis> output or you can use the <emphasis role="bold">pts
+           examine</emphasis> command to display it, as described in <link linkend="HDRWQ537">To display a Protection Database
+           entry</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you are deleting accounts, delete the user's entry from the local password file (<emphasis
+           role="bold">/etc/passwd</emphasis> or equivalent) of each client machine. If you use the AFS <emphasis
+           role="bold">package</emphasis> utility, it is sufficient to remove the entry from the common source version of the file.
+           If you intend to reactivate the user's account in the future, it is simpler to comment out the entry or place an asterisk
+           (*) in the password field.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/AdminGuide/auagd018.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd018.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd018.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,2520 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ491">
+   <title>Administering User Accounts</title>
+ 
+   <para><indexterm>
+       <primary>administering</primary>
+ 
+       <secondary>user accounts</secondary>
+     </indexterm></para>
+ 
+   <para>This chapter explains how to create and maintain user accounts in your cell.</para>
+ 
+   <para>The preferred method for creating user accounts is the <emphasis role="bold">uss</emphasis> program, which enables you to
+   create multiple accounts with a single command. See <link linkend="HDRWQ449">Creating and Deleting User Accounts with the uss
+   Command Suite</link>. If you prefer to create each account component individually, follow the instructions in <link
+   linkend="HDRWQ502">Creating AFS User Accounts</link>.</para>
+ 
+   <sect1 id="HDRWQ492">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="57*" />
+ 
+         <colspec colwidth="43*" />
+ 
+         <tbody>
+           <row>
+             <entry>Create Protection Database entry</entry>
+ 
+             <entry><emphasis role="bold">pts createuser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create Authentication Database entry</entry>
+ 
+             <entry><emphasis role="bold">kas create</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create volume</entry>
+ 
+             <entry><emphasis role="bold">vos create</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Mount volume</entry>
+ 
+             <entry><emphasis role="bold">fs mkmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create entry on ACL</entry>
+ 
+             <entry><emphasis role="bold">fs setacl</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine Protection Database entry</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change directory ownership</entry>
+ 
+             <entry><emphasis role="bold">/etc/chown</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Limit failed authentication attempts</entry>
+ 
+             <entry><emphasis role="bold">kas setfields</emphasis> with <emphasis role="bold">-attempts</emphasis> and <emphasis
+             role="bold">-locktime</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Unlock Authentication Database entry</entry>
+ 
+             <entry><emphasis role="bold">kas unlock</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set password lifetime</entry>
+ 
+             <entry><emphasis role="bold">kas setfields</emphasis> with <emphasis role="bold">-pwexpires</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Prohibit password reuse</entry>
+ 
+             <entry><emphasis role="bold">kas setfields</emphasis> with <emphasis role="bold">-reuse</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change AFS password</entry>
+ 
+             <entry><emphasis role="bold">kas setpassword</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List groups owned by user</entry>
+ 
+             <entry><emphasis role="bold">pts listowned</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Rename Protection Database entry</entry>
+ 
+             <entry><emphasis role="bold">pts rename</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete Authentication Database entry</entry>
+ 
+             <entry><emphasis role="bold">kas delete</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Rename volume</entry>
+ 
+             <entry><emphasis role="bold">vos rename</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove mount point</entry>
+ 
+             <entry><emphasis role="bold">fs rmmount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete Protection Database entry</entry>
+ 
+             <entry><emphasis role="bold">pts delete</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>List volume location</entry>
+ 
+             <entry><emphasis role="bold">vos listvldb</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove volume</entry>
+ 
+             <entry><emphasis role="bold">vos remove</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+ 
+     <indexterm>
+       <primary>local password file</primary>
+ 
+       <secondary>creating entry for AFS user</secondary>
+ 
+       <tertiary>with manual account creation</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ494">
+     <title>The Components of an AFS User Account</title>
+ 
+     <para>The differences between AFS and the UNIX file system imply that a complete AFS user account is not the same as a UNIX user
+     account. The following list describes the components of an AFS account. The same information appears in a corresponding section
+     of <link linkend="HDRWQ449">Creating and Deleting User Accounts with the uss Command Suite</link>, but is repeated here for your
+     convenience. <itemizedlist>
+         <listitem>
+           <para>A <emphasis>Protection Database entry</emphasis> defines the username (the name provided when authenticating with
+           AFS), and maps it to an AFS user ID (AFS UID), a number that the AFS servers use internally when referencing users. The
+           Protection Database also tracks the groups to which the user belongs. For details, see <link
+           linkend="HDRWQ531">Administering the Protection Database</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>An <emphasis>Authentication Database entry</emphasis> records the user's AFS password in a scrambled form suitable
+           for use as an encryption key.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A home <emphasis>volume</emphasis> stores all the files in the user's home directory together on a single partition
+           of a file server machine. The volume has an associated quota that limits its size. For a complete discussion of volumes,
+           see <link linkend="HDRWQ174">Managing Volumes</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>mount point</emphasis> makes the contents of the user's volume visible and accessible in the AFS
+           filespace, and acts as the user's home directory. For more details about mount points, see <link linkend="HDRWQ183">About
+           Mounting Volumes</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Full access permissions on the home directory's <emphasis>access control list (ACL)</emphasis> and ownership of the
+           directory (as displayed by the UNIX <emphasis role="bold">ls -ld</emphasis> command) enable the user to manage his or her
+           files. For details on AFS file protection, see <link linkend="HDRWQ562">Managing Access Control Lists</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>local password file entry</emphasis> (in the <emphasis role="bold">/etc/passwd</emphasis> file or
+           equivalent) of each AFS client machine enables the user to log in and access AFS files through the Cache Manager. A
+           subsequent section in this chapter further discusses local password file entries.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Other optional <emphasis>configuration files</emphasis> make the account more convenient to use. Such files help the
+           user log in and log out more easily, receive electronic mail, print, and so on.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>AFS UID</primary>
+ 
+       <secondary>matching with UNIX UID</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>UNIX UID</primary>
+ 
+       <secondary>matching with AFS UID</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ495">
+     <title>Creating Local Password File Entries</title>
+ 
+     <para>To obtain authenticated access to a cell's AFS filespace, a user must not only have a valid AFS token, but also an entry
+     in the local password file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent) of the machine whose Cache Manager is
+     representing the user. This section discusses why it is important for the user's AFS UID to match to the UNIX UID listed in the
+     local password file, and describes the appropriate value to put in the file's password field.</para>
+ 
+     <para>One reason to use <emphasis role="bold">uss</emphasis> commands is that they enable you to generate local password file
+     entries automatically as part of account creation. See <link linkend="HDRWQ458">Creating a Common Source Password
+     File</link>.</para>
+ 
+     <para>Information similar to the information in this section appears in a corresponding section of <link
+     linkend="HDRWQ449">Creating and Deleting User Accounts with the uss Command Suite</link>, but is repeated here for your
+     convenience</para>
+ 
+     <sect2 id="HDRWQ496">
+       <title>Assigning AFS and UNIX UIDs that Match</title>
+ 
+       <para>A user account is easiest to administer and use if the AFS user ID number (AFS UID) and UNIX UID match. All instructions
+       in the AFS documentation assume that they do.</para>
+ 
+       <para>The most basic reason to make AFS and UNIX UIDs the same is so that the owner name reported by the UNIX <emphasis
+       role="bold">ls -l</emphasis> and <emphasis role="bold">ls -ld</emphasis> commands makes sense for AFS files and directories.
+       Following standard UNIX practice, the File Server records a number rather than a username in an AFS file or directory's owner
+       field: the owner's AFS UID. When you issue the <emphasis role="bold">ls -l</emphasis> command, it translates the UID to a
+       username according to the mapping in the local password file, not the AFS Protection Database. If the AFS and UNIX UIDs do not
+       match, the <emphasis role="bold">ls -l</emphasis> command reports an unexpected (and incorrect) owner. The output can even
+       vary on different client machines if their local password files map the same UNIX UID to different names.</para>
+ 
+       <para>Follow the recommendations in the indicated sections to make AFS and UNIX UIDs match when creating accounts for various
+       types of users: <itemizedlist>
+           <listitem>
+             <para>If creating an AFS account for a user who already has a UNIX UID, see <link linkend="HDRWQ499">Making UNIX and AFS
+             UIDs Match</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If some users in your cell have existing UNIX accounts but the user for whom you are creating an AFS account does
+             not, then it is best to allow the Protection Server to allocate an AFS UID automatically. To avoid overlap of AFS UIDs
+             with existing UNIX UIDs, set the Protection Database's <computeroutput>max user id</computeroutput> counter higher than
+             the largest UNIX UID, using the instructions in <link linkend="HDRWQ560">Displaying and Setting the AFS UID and GID
+             Counters</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If none of your users have existing UNIX accounts, allow the Protection Server to allocate AFS UIDs automatically,
+             starting either at its default or at the value you have set for the <computeroutput>max user id</computeroutput>
+             counter.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>setting in local password file</secondary>
+ 
+         <tertiary>with manual account creation</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>local password file</primary>
+ 
+         <secondary>setting password in</secondary>
+ 
+         <tertiary>with manual account creation</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ497">
+       <title>Specifying Passwords in the Local Password File</title>
+ 
+       <para>Authenticating with AFS is easiest for your users if you install and configure an AFS-modified login utility, which logs
+       a user into the local file system and obtains an AFS token in one step. In this case, the local password file no longer
+       controls a user's ability to login in most circumstances, because the AFS-modified login utility does not consult the local
+       password file if the user provides the correct AFS password. You can nonetheless use a password file entry's password field
+       (usually, the second field) in the following ways to control login and authentication: <itemizedlist>
+           <listitem>
+             <para>To prevent both local login and AFS authentication, place an asterisk ( * ) in the field. This is useful mainly in
+             emergencies, when you want to prevent a certain user from logging into the machine.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To prevent login to the local file system if the user does not provide the correct AFS password, place a character
+             string of any length other than the standard thirteen characters in the field. This is appropriate if you want to allow
+             only people with local AFS accounts to log into to your machines. A single <emphasis role="bold">X</emphasis> or other
+             character is the most easily recognizable way to do this.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To enable a user to log into the local file system even after providing an incorrect AFS password, record a
+             standard UNIX encrypted password in the field by issuing the standard UNIX password-setting command (<emphasis
+             role="bold">passwd</emphasis> or equivalent).</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If you do not use an AFS-modified login utility, you must place a standard UNIX password in the local password file of
+       every client machine the user will use. The user logs into the local file system only, and then must issue the <emphasis
+       role="bold">klog</emphasis> command to authenticate with AFS. It is simplest if the passwords in the local password file and
+       the Authentication Database are the same, but this is not required. <indexterm>
+           <primary>converting</primary>
+ 
+           <secondary>existing UNIX accounts to AFS accounts</secondary>
+ 
+           <tertiary>with manual account creation</tertiary>
+         </indexterm> <indexterm>
+           <primary>user account</primary>
+ 
+           <secondary>converting existing UNIX to AFS</secondary>
+ 
+           <tertiary>with manual account creation</tertiary>
+         </indexterm></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ498">
+     <title>Converting Existing UNIX Accounts</title>
+ 
+     <para>This section discusses the three main issues you need to consider if your cell has existing UNIX accounts that you wish to
+     convert to AFS accounts.</para>
+ 
+     <sect2 id="HDRWQ499">
+       <title>Making UNIX and AFS UIDs Match</title>
+ 
+       <para>As previously mentioned, AFS users must have an entry in the local password file on every client machine from which they
+       access the AFS filespace as an authenticated user. Both administration and use are much simpler if the UNIX UID and AFS UID
+       match. When converting existing UNIX accounts, you have two alternatives: <itemizedlist>
+           <listitem>
+             <para>Make the AFS UIDs match the existing UNIX UIDs. In this case, you need to assign the AFS UID yourself by including
+             the <emphasis role="bold">-id</emphasis> argument to the <emphasis role="bold">pts createuser</emphasis> command as you
+             create the AFS account.</para>
+ 
+             <para>Because you are retaining the user's UNIX UID, you do not need to alter the UID in the local password file entry.
+             However, if you are using an AFS-modified login utility, you possibly need to change the password field in the entry.
+             For a discussion of how the value in the password field affects login with an AFS-modified login utility, see <link
+             linkend="HDRWQ497">Specifying Passwords in the Local Password File</link>.</para>
+ 
+             <para>If now or in the future you need to create AFS accounts for users who do not have an existing UNIX UID, then you
+             must guarantee that new AFS UIDs do not conflict with any existing UNIX UIDs. The simplest way is to set the
+             <computeroutput>max user id</computeroutput> counter in the Protection Database to a value higher than the largest
+             existing UNIX UID. See <link linkend="HDRWQ560">Displaying and Setting the AFS UID and GID Counters</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Change the existing UNIX UIDs to match the new AFS UIDs that the Protection Server assigns automatically.</para>
+ 
+             <para>Allow the Protection Server to allocate the AFS UIDs automatically as you create AFS accounts. You must then alter
+             the user's entry in the local password file on every client machine to include the new UID.</para>
+ 
+             <para>There is one drawback to changing the UNIX UID: any files and directories that the user owned in the local file
+             system before becoming an AFS user still have the former UID in their owner field. If you want the <emphasis
+             role="bold">ls -l</emphasis> and <emphasis role="bold">ls -ld</emphasis> commands to display the correct owner, you must
+             use the <emphasis role="bold">chown</emphasis> command to change the value to the user's new UID, whether you are
+             leaving the file in the local file system or moving it to AFS. See <link linkend="HDRWQ501">Moving Local Files into
+             AFS</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ500">
+       <title>Setting the Password Field Appropriately</title>
+ 
+       <para>Existing UNIX accounts already have an entry in the local password file, probably with a (scrambled) password in the
+       password field. You possibly need to change the value in the field, depending on the type of login utility you use:
+       <itemizedlist>
+           <listitem>
+             <para>If the login utility is not modified for use with AFS, the actual password must appear (in scrambled form) in the
+             local password file entry.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the login utility is modified for use with AFS, choose one of the values discussed in <link
+             linkend="HDRWQ497">Specifying Passwords in the Local Password File</link>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ501">
+       <title>Moving Local Files into AFS</title>
+ 
+       <para>New AFS users with existing UNIX accounts probably already own files and directories stored in a machine's local file
+       system, and it usually makes sense to transfer them into the new home volume. The easiest method is to move them onto the
+       local disk of an AFS client machine, and then use the UNIX <emphasis role="bold">mv</emphasis> command to transfer them into
+       the user's new AFS home directory.</para>
+ 
+       <para>As you move files and directories into AFS, keep in mind that the meaning of their mode bits changes. AFS ignores the
+       second and third sets of mode bits (group and other), and does not use the first set (the owner bits) directly, but only in
+       conjunction with entries on the ACL (for details, see <link linkend="HDRWQ580">How AFS Interprets the UNIX Mode Bits</link>).
+       Be sure that the ACL protects the file or directory at least as securely as the mode bits.</para>
+ 
+       <para>If you have chosen to change a user's UNIX UID to match a new AFS UID, you must change the ownership of UNIX files and
+       directories as well. Only members of the <emphasis role="bold">system:administrators</emphasis> group can issue the <emphasis
+       role="bold">chown</emphasis> command on files and directories once they reside in AFS.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ502">
+     <title>Creating AFS User Accounts</title>
+ 
+     <para>There are two methods for creating user accounts. The preferred method--using the <emphasis role="bold">uss</emphasis>
+     commands--enables you to create multiple accounts with a single command. It uses a template to define standard values for the
+     account components that are the same for each user (such as quota), but provide differing values for more variable components
+     (such as username). See <link linkend="HDRWQ449">Creating and Deleting User Accounts with the uss Command Suite</link>.</para>
+ 
+     <para>The second method involves issuing a separate command to create each component of the account. It is best suited to
+     creation of one account at a time, since some of the commands can create only one instance of the relevant component. To review
+     the function of each component, see <link linkend="HDRWQ494">The Components of an AFS User Account</link>.</para>
+ 
+     <para>Use the following instructions to create any of the three types of user account, which differ in their levels of
+     functionality. For a description of the types, see <link linkend="HDRWQ57">Configuring AFS User Accounts</link>. <itemizedlist>
+         <listitem>
+           <para>To create an authentication-only account, perform Step <link linkend="LIWQ504">1</link> through Step <link
+           linkend="LIWQ507">4</link> and also Step <link linkend="LIWQ514">14</link>. This type of account consists only of entries
+           in the Authentication Database and Protection Database.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To create a basic account, perform Step <link linkend="LIWQ504">1</link> through Step <link
+           linkend="LIWQ510">8</link> and Step <link linkend="LIWQ512">11</link> through Step <link linkend="LIWQ514">14</link>. In
+           addition to Authentication Database and Protection Database entries, this type of account includes a volume mounted at the
+           home directory with owner and ACL set appropriately.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To create a full account, perform all steps in the following instructions. This type of account includes
+           configuration files for basic functions such as logging in, printing, and mail delivery, making it more convenient and
+           useful. For a discussion of some useful types of configuration files, see <link linkend="HDRWQ60">Creating Standard Files
+           in New AFS Accounts</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>user account</secondary>
+ 
+       <tertiary>with individual commands</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user account</primary>
+ 
+       <secondary>creating</secondary>
+ 
+       <tertiary>with individual commands</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>Protection Database user entry</secondary>
+ 
+       <tertiary>with pts createuser command</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>Authentication Database entry</secondary>
+ 
+       <tertiary>with kas create command</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>user entry</secondary>
+ 
+       <tertiary>creating with pts createuser command</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Authentication Database</primary>
+ 
+       <secondary>entry</secondary>
+ 
+       <tertiary>creating with kas create command</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>username</primary>
+ 
+       <secondary>assigning</secondary>
+ 
+       <tertiary>with pts createuser command</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS UID</primary>
+ 
+       <secondary>assigning</secondary>
+ 
+       <tertiary>with pts createuser command</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>AFS UID, assigning</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>assigning</primary>
+ 
+       <secondary>AFS UID to user</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ503">
+       <title>To create one user account with individual commands</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para><anchor id="LIWQ504" />Decide on the value to assign to each of the following account components. If you are
+           creating an authentication-only account, you need to pick only a username, AFS UID, and initial password. <itemizedlist>
+               <listitem>
+                 <para>The username. By convention, the names of many components of the user account incorporate this name. For a
+                 discussion of restrictions and suggested naming schemes, see <link linkend="HDRWQ58">Choosing Usernames and Naming
+                 Other Account Components</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The AFS UID, if you want to assign a specific one. It is generally best to have the Protection Server allocate
+                 one instead, except when you are creating an AFS account for a user who already has an existing UNIX account. In
+                 that case, migrating the user's files into AFS is simplest if you set the AFS UID to match the existing UNIX UID.
+                 See <link linkend="HDRWQ498">Converting Existing UNIX Accounts</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The initial password. Advise the user to change this at the first login, using the password changing
+                 instructions in the <emphasis>OpenAFS User Guide</emphasis>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The name of the user's home volume. The conventional name is <emphasis role="bold">user.</emphasis>username
+                 (for example, <emphasis role="bold">user.smith</emphasis>).</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The volume's site (disk partition on a file server machine). Some cells designate certain machines or
+                 partitions for user volumes only, or it possibly makes sense to place the volume on the emptiest partition that
+                 meets your other criteria. To display the size and available space on a partition, use the <emphasis role="bold">vos
+                 partinfo</emphasis> command, which is fully described in <link linkend="HDRWQ185">Creating Read/write
+                 Volumes</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The name of the user's home directory (the mount point for the home volume). The conventional location is a
+                 directory (or one of a set of directories) directly under the cell directory, such as <emphasis
+                 role="bold">/afs/</emphasis>cellname<emphasis role="bold">/usr</emphasis>. For suggestions on how to avoid the
+                 slowed directory lookup that can result from having large numbers of user home directories in a single <emphasis
+                 role="bold">usr</emphasis> directory, see <link linkend="HDRWQ472">Evenly Distributing User Home Directories with
+                 the G Instruction</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The volume's space quota. Include the <emphasis role="bold">-maxquota</emphasis> argument to the <emphasis
+                 role="bold">vos create</emphasis> command, or accept the default quota of 5000 KB.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The ACL on the home directory. By default, the ACL on every new volume grants all seven permissions to the
+                 <emphasis role="bold">system:administrators</emphasis> group. After volume creation, use the <emphasis
+                 role="bold">fs setacl</emphasis> command to remove the entry if desired, and to grant all seven permissions to the
+                 user.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ505" />Authenticate as an AFS identity with all of the following privileges. In the conventional
+           configuration, the <emphasis role="bold">admin</emphasis> user account has them, or you possibly have a personal
+           administrative account. (To increase cell security, it is best to create special privileged accounts for use only while
+           performing administrative procedures; for further discussion, see <link linkend="HDRWQ584">An Overview of Administrative
+           Privilege</link>.) If necessary, issue the <emphasis role="bold">klog</emphasis> command to authenticate. <programlisting>
+    % <emphasis role="bold">klog</emphasis> admin_user
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The following list specifies the necessary privileges and indicates how to check that you have them.</para>
+ 
+           <itemizedlist>
+             <listitem>
+               <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+               <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To
+               display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue the <emphasis
+               role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the
+               users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <computeroutput>ADMIN</computeroutput> flag on your Authentication Database entry. However, the
+               Authentication Server performs its own authentication, so in Step <link linkend="LIWQ507">4</link> you specify an
+               administrative identity on the <emphasis role="bold">kas</emphasis> command line itself.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) and <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permissions on the ACL of the directory where
+               you are mounting the user's volume. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which
+               is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+               <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+               role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Knowledge of the password for the local superuser <emphasis role="bold">root</emphasis>.</para>
+             </listitem>
+           </itemizedlist>
+ 
+           <indexterm>
+             <primary>pts commands</primary>
+ 
+             <secondary>createuser</secondary>
+ 
+             <tertiary>user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>pts createuser</secondary>
+ 
+             <tertiary>user account</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ506" />Issue the <emphasis role="bold">pts createuser</emphasis> command to create an entry in the
+           Protection Database. For a discussion of setting AFS UIDs, see <link linkend="HDRWQ496">Assigning AFS and UNIX UIDs that
+           Match</link>. If you are converting an existing UNIX account into an AFS account, also see <link
+           linkend="HDRWQ498">Converting Existing UNIX Accounts</link>. <programlisting>
+    % <emphasis role="bold">pts createuser</emphasis> &lt;<replaceable>user name</replaceable>&gt; [&lt;<replaceable>user id</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cu</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">createuser</emphasis> (and <emphasis
+                 role="bold">createu</emphasis> is the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user name</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the user's username (the character string typed at login). It is best to limit the name to eight or
+                 fewer lowercase letters, because many application programs impose that limit. The AFS servers themselves accept
+                 names of up to 63 lowercase letters. Also avoid the following characters: colon (<emphasis
+                 role="bold">:</emphasis>), semicolon (<emphasis role="bold">;</emphasis>), comma (<emphasis
+                 role="bold">,</emphasis>), at sign (<emphasis role="bold">@</emphasis>), space, newline, and the period (<emphasis
+                 role="bold">.</emphasis>), which is conventionally used only in special administrative names.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user id</emphasis></term>
+ 
+               <listitem>
+                 <para>Is optional and appropriate only if the user already has a UNIX UID that the AFS UID must match. If you do not
+                 provide this argument, the Protection Server assigns one automatically based on the counter described in <link
+                 linkend="HDRWQ560">Displaying and Setting the AFS UID and GID Counters</link>. If the ID you specify is less than
+                 <emphasis role="bold">1</emphasis> (one) or is already in use, an error results.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <indexterm>
+             <primary>kas commands</primary>
+ 
+             <secondary>create</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>kas create</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ507" />Issue the <emphasis role="bold">kas create</emphasis> command to create an entry in the
+           Authentication Database. To avoid having the user's temporary initial password echo visibly on the screen, omit the
+           <emphasis role="bold">-initial_password</emphasis> argument; instead enter the password at the prompts that appear when
+           you omit the argument, as shown in the following syntax specification.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas create</emphasis> &lt;<replaceable>name of user</replaceable>&gt; \
+                 <emphasis role="bold">-admin</emphasis>  &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    initial_password: &lt;<replaceable>initial_password</replaceable>&gt;
+    Verifying, please re-enter initial_password: &lt;<replaceable>initial_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">cr</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation for <emphasis role="bold">create</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the same username as in Step <link linkend="LIWQ506">3</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">initial_password</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the initial password as a string of eight characters or less, to comply with the length
+                   restriction that some applications impose. Possible choices for an initial password include the username, a string
+                   of digits from a personal identification number such as the Social Security number, or a standard string such as
+                   <emphasis role="bold">changeme</emphasis>. Instruct the user to change the string to a truly secret password as
+                   soon as possible by using the <emphasis role="bold">kpasswd</emphasis> command as described in the <emphasis>IBM
+                   AFS User Guide</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>create</secondary>
+ 
+             <tertiary>when creating user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos create</secondary>
+ 
+             <tertiary>when creating user account</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ508" />Issue the <emphasis role="bold">vos create</emphasis> command to create the user's volume.
+           <programlisting>
+    % <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt;  \
+                 [<emphasis role="bold">-maxquota</emphasis> &lt;<replaceable>initial quota (KB)</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cr</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">create</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">machine name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the file server machine on which to place the new volume.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">partition name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the partition on which to place the new volume.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the new volume. The name can include up to 22 characters. By convention, user volume names have the form
+                 <emphasis role="bold">user.</emphasis>username, where username is the name assigned in Step <link
+                 linkend="LIWQ506">3</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-maxquota</emphasis></term>
+ 
+               <listitem>
+                 <para>Sets the volume's quota, as a number of kilobyte blocks. If you omit this argument, the default is 5000
+                 KB.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>mkmount</secondary>
+ 
+             <tertiary>when creating user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs mkmount</secondary>
+ 
+             <tertiary>when creating user account</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ509" />Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount the volume in the
+           filespace and create the user's home directory. <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">mk</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation for <emphasis role="bold">mkmount</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">directory</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the mount point to create. A directory of the same name must not already exist. Partial pathnames are
+                 interpreted relative to the current working directory. By convention, user home directories are mounted in a
+                 directory called something like <emphasis role="bold">/afs/.</emphasis>cellname<emphasis
+                 role="bold">/usr</emphasis>, and the home directory name matches the username assigned in Step <link
+                 linkend="LIWQ506">3</link>.</para>
+ 
+                 <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to create
+                 the new mount point in a read-only volume. By convention, you indicate the read/write path by placing a period
+                 before the cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>).
+                 For further discussion of the concept of read/write and read-only paths through the filespace, see <link
+                 linkend="HDRWQ209">The Rules of Mount Point Traversal</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume name</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the name of the volume created in Step <link linkend="LIWQ508">5</link>.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">fs setvol</emphasis> command with the
+           <emphasis role="bold">-offlinemsg</emphasis> argument to record auxiliary information about the volume in its volume
+           header. For example, you can record who owns the volume or where you have mounted it in the filespace. To display the
+           information, use the <emphasis role="bold">fs examine</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs setvol</emphasis> &lt;<replaceable>dir/file path</replaceable>&gt; <emphasis role="bold">-offlinemsg</emphasis> &lt;<replaceable>offline message</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">sv</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">setvol</emphasis> (and <emphasis role="bold">setv</emphasis>
+                 the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the mount point of the volume with which to associate the message. Partial pathnames are interpreted
+                 relative to the current working directory.</para>
+ 
+                 <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to change a
+                 read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+                 pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further discussion of the
+                 concept of read/write and read-only paths through the filespace, see <link linkend="HDRWQ209">The Rules of Mount
+                 Point Traversal</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-offlinemsg</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies up to 128 characters of auxiliary information to record in the volume header.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ510" />Issue the <emphasis role="bold">fs setacl</emphasis> command to set the ACL on the new home
+           directory. At the least, create an entry that grants all permissions to the user, as shown.</para>
+ 
+           <para>You can also use the command to edit or remove the entry that the <emphasis role="bold">vos create</emphasis>
+           command automatically places on the ACL for a new volume's root directory, which grants all permissions to the <emphasis
+           role="bold">system:administrators</emphasis> group. Keep in mind that even if you remove the entry, the members of the
+           group by default have implicit <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by
+           default <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions on every ACL, and can
+           grant themselves other permissions as required.</para>
+ 
+           <para>For detailed instructions for the <emphasis role="bold">fs setacl</emphasis> command, see <link
+           linkend="HDRWQ573">Setting ACL Entries</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">fs setacl</emphasis> &lt;<replaceable>directory</replaceable>&gt; <emphasis role="bold">-acl</emphasis> &lt;<replaceable>user name</replaceable>&gt; <emphasis
+               role="bold">all</emphasis> \
+                [<emphasis role="bold">system:administrators</emphasis> desired_permissions]
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ511" /><emphasis role="bold">(Optional)</emphasis> Create configuration files and subdirectories in
+           the new home directory. Possibilities include <emphasis role="bold">.login</emphasis> and <emphasis
+           role="bold">.logout</emphasis> files, a shell-initialization file such as <emphasis role="bold">.cshrc</emphasis>, files
+           to help with printing and mail delivery, and so on.</para>
+ 
+           <para>If you are converting an existing UNIX account into an AFS account, you possibly wish to move some files and
+           directories into the user's new AFS home directory. See <link linkend="HDRWQ498">Converting Existing UNIX
+           Accounts</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> In the new <emphasis role="bold">.login</emphasis> or shell
+           initialization file, define the user's $PATH environment variable to include the directories where AFS binaries are kept
+           (for example, the <emphasis role="bold">/usr/afsws/bin</emphasis> and <emphasis role="bold">/usr/afsws/etc</emphasis>
+           directories).</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ512" />In Step <link linkend="LIWQ513">12</link> and Step <link linkend="LIWQ514">14</link>, you
+           must know the user's AFS UID. If you had the Protection Server assign it in Step <link linkend="LIWQ506">3</link>, you
+           probably do not know it. If necessary, issue the <emphasis role="bold">pts examine</emphasis> command to display it.
+           <programlisting>
+    % <emphasis role="bold">pts examine</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">e</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the username that you assigned in Step <link linkend="LIWQ506">3</link>.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <para>The first line of the output displays the username and AFS UID. For further discussion and an example of the output,
+           see <link linkend="HDRWQ536">Displaying Information from the Protection Database</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ513" />Designate the user as the owner of the home directory and any files and subdirectories
+           created or moved in Step <link linkend="LIWQ511">9</link>. Specify the owner by the AFS UID you learned in Step <link
+           linkend="LIWQ512">11</link> rather than by username. This is necessary for new accounts because the user does not yet have
+           an entry in your local machine's password file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent). If you are
+           converting an existing UNIX account, an entry possibly already exists, but the UID is possibly incorrect. In that case,
+           specifying a username means that the corresponding (possibly incorrect) UID is recorded as the owner.</para>
+ 
+           <para>Some operating systems allow only the local superuser <emphasis role="bold">root</emphasis> to issue the <emphasis
+           role="bold">chown</emphasis> command. If necessary, issuing the <emphasis role="bold">su</emphasis> command before the
+           <emphasis role="bold">chown</emphasis> command.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">chown</emphasis> new_owner_ID  directory
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">new_owner_ID</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the user's AFS UID, which you learned in Step <link linkend="LIWQ512">11</link>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the home directory you created in Step <link linkend="LIWQ509">6</link>, plus each subdirectory or
+                   file you created in Step <link linkend="LIWQ511">9</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the new user home directory resides in a replicated volume, use the <emphasis role="bold">vos release</emphasis>
+           command to release the volume, as described in <link linkend="HDRWQ194">To replicate a read/write volume (create a
+           read-only volume)</link>. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <note>
+             <para>This step can be necessary even if the home directory's parent directory is not itself a mount point for a
+             replicated volume (and is easier to overlook in that case). Suppose, for example, that the ABC Corporation puts the
+             mount points for user volumes in the <emphasis role="bold">/afs/abc.com/usr</emphasis> directory. Because that is a
+             regular directory rather than a mount point, it resides in the <emphasis role="bold">root.cell</emphasis> volume mounted
+             at the <emphasis role="bold">/afs/abc.com</emphasis> directory. That volume is replicated, so after changing it by
+             creating a new mount point the administrator must issue the <emphasis role="bold">vos release</emphasis> command.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ514" />Create or modify an entry for the new user in the local password file (<emphasis
+           role="bold">/etc/passwd</emphasis> or equivalent) of each machine the user can log onto. Remember to make the UNIX UID the
+           same as the AFS UID you learned in Step <link linkend="LIWQ512">11</link>, and to fill the password field appropriately
+           (for instructions, see <link linkend="HDRWQ497">Specifying Passwords in the Local Password File</link>).</para>
+ 
+           <para>If you use the <emphasis role="bold">package</emphasis> utility to distribute a common version of the password file
+           to all client machines, then you need to make the change only in the common version. See <link
+           linkend="HDRWQ419">Configuring Client Machines with the package Program</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>improving security</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authentication</primary>
+ 
+         <secondary>improving security</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>login</primary>
+ 
+         <secondary>limiting failed attempts</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>klog command</primary>
+ 
+         <secondary>limiting failed attempts</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ515">
+     <title>Improving Password and Authentication Security</title>
+ 
+     <para>AFS provides several optional features than can help to protect your cell's filespace against unauthorized access. The
+     following list summarizes them, and instructions follow. <itemizedlist>
+         <listitem>
+           <para>Limit the number of consecutive failed login attempts.</para>
+ 
+           <para>One of the most common ways for an unauthorized user to access your filespace is to guess an authorized user's
+           password. This method of attack is most dangerous if the attacker can use many login processes in parallel or use the RPC
+           interfaces directly.</para>
+ 
+           <para>To protect against this type of attack, use the <emphasis role="bold">-attempts</emphasis> argument to the <emphasis
+           role="bold">kas setfields</emphasis> command to limit the number of times that a user can consecutively fail to enter the
+           correct password when using either an AFS-modified login utility or the <emphasis role="bold">klog</emphasis> command.
+           When the limit is exceeded, the Authentication Server locks the user's Authentication Database entry (disallows
+           authentication attempts) for a period of time that you define with the <emphasis role="bold">-locktime</emphasis> argument
+           to the <emphasis role="bold">kas setfields</emphasis> command. If desired, system administrators can use the <emphasis
+           role="bold">kas unlock</emphasis> command to unlock the entry before the complete lockout time passes.</para>
+ 
+           <para>In certain circumstances, the mechanism used to enforce the number of failed authentication attempts can cause a
+           lockout even though the number of failed attempts is less than the limit set by the <emphasis
+           role="bold">-attempts</emphasis> argument. Client-side authentication programs such as <emphasis
+           role="bold">klog</emphasis> and an AFS-modified login utility normally choose an Authentication Server at random for each
+           authentication attempt, and in case of a failure are likely to choose a different Authentication Server for the next
+           attempt. The Authentication Servers running on the various database server machines do not communicate with each other
+           about how many times a user has failed to provide the correct password to them. Instead, each Authentication Server
+           maintains its own separate copy of the auxiliary database file <emphasis role="bold">kaserverauxdb</emphasis> (located in
+           the <emphasis role="bold">/usr/afs/local</emphasis> directory by default), which records the number of consecutive
+           authentication failures for each user account and the time of the most recent failure. This implementation means that on
+           average each Authentication Server knows about only a fraction of the total number of failed attempts. The only way to
+           avoid allowing more than the number of attempts set by the <emphasis role="bold">-attempts</emphasis> argument is to have
+           each Authentication Server allow only some fraction of the total. More specifically, if the limit on failed attempts is
+           <emphasis>f</emphasis>, and the number of Authentication Servers is <emphasis>S</emphasis>, then each Authentication
+           Server can only permit a number of attempts equal to <emphasis>f</emphasis> divided by <emphasis>S</emphasis> (the Ubik
+           synchronization site for the Authentication Server tracks any remainder, <emphasis>f mod S</emphasis>).</para>
+ 
+           <para>Normally, this implementation does not reduce the number of allowed attempts to less than the configured limit
+           (<emphasis>f</emphasis>). If one Authentication Server refuses an attempt, the client contacts another instance of the
+           server, continuing until either it successfully authenticates or has contacted all of the servers. However, if one or more
+           of the Authentication Server processes is unavailable, the limit is effectively reduced by a percentage equal to the
+           quantity <emphasis>U</emphasis> divided by <emphasis>S</emphasis>, where <emphasis>U</emphasis> is the number of
+           unavailable servers and <emphasis>S</emphasis> is the number normally available.</para>
+ 
+           <para>To avoid the undesirable consequences of setting a limit on failed authentication attempts, note the following
+           recommendations: <itemizedlist>
+               <listitem>
+                 <para>Do not set the <emphasis role="bold">-attempts</emphasis> argument (the limit on failed authentication
+                 attempts) too low. A limit of nine failed attempts is recommended for regular user accounts, to allow three failed
+                 attempts per Authentication Server in a cell with three database server machines.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Set fairly short lockout times when including the <emphasis role="bold">-locktime</emphasis> argument.
+                 Although guessing passwords is a common method of attack, it is not a very sophisticated one. Setting a lockout time
+                 can help discourage attackers, but excessively long times are likely to be more of a burden to authorized users than
+                 to potential attackers. A lockout time of 25 minutes is recommended for regular user accounts.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Do not assign an infinite lockout time on an account (by setting the <emphasis
+                 role="bold">-locktime</emphasis> argument to <emphasis role="bold">0</emphasis> [zero]) unless there is a highly
+                 compelling reason. Such accounts almost inevitably become locked at some point, because each Authentication Server
+                 never resets the account's failure counter in its copy of the <emphasis role="bold">kaauxdb</emphasis> file (in
+                 contrast, when the lockout time is not infinite, the counter resets after the specified amount of time has passed
+                 since the last failed attempt to that Authentication Server). Furthermore, the only way to unlock an account with an
+                 infinite lockout time is for an administrator to issue the <emphasis role="bold">kas unlock</emphasis> command. It
+                 is especially dangerous to set an infinite lockout time on an administrative account; if all administrative accounts
+                 become locked, the only way to unlock them is to shut down all instances of the Authentication Server and remove the
+                 <emphasis role="bold">kaauxdb</emphasis> file on each.</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>In summary, the recommended limit on authentication attempts is nine and lockout time 25 minutes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Limit password lifetime.</para>
+ 
+           <para>The longer a password is in use, the more time an attacker has to try to learn it. To protect against this type of
+           attack, use the <emphasis role="bold">-pwexpires</emphasis> argument to the <emphasis role="bold">kas setfields</emphasis>
+           command to limit how many days a user's password is valid. The user becomes unable to authenticate with AFS after the
+           password expires, but has up to 30 days to use the <emphasis role="bold">kpasswd</emphasis> command to set a new password.
+           After the 30 days pass, only an administrator who has the <computeroutput>ADMIN</computeroutput> flag on the
+           Authentication Database entry can change the password.</para>
+ 
+           <para>If you set a password lifetime, many AFS-modified login utilities (but not the <emphasis role="bold">klog</emphasis>
+           command) set the PASSWORD_EXPIRES environment variable to the number of days remaining until the password expires. A
+           setting of zero means that the password expires today. If desired, you can customize your users' login scripts to display
+           the number of days remaining before expiration and even prompt for a password change when a small number of days remain
+           before expiration.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Prohibit reuse of passwords.</para>
+ 
+           <para>Forcing users to select new passwords periodically is not effective if they simply set the new password to the
+           current value. To prevent a user from setting a new password to a string similar to any of the last 20 passwords, use the
+           <emphasis role="bold">-reuse</emphasis> argument to the <emphasis role="bold">kas setfields</emphasis> command.</para>
+ 
+           <para>If you prohibit password reuse and the user specifies an excessively similar password, the Authentication Server
+           generates the following message to reject it:</para>
+ 
+           <programlisting>
+    Password was not changed because it seems like a reused password
+ </programlisting>
+ 
+           <para>A persistent user can try to bypass this restriction by changing the password 20 times in quick succession (or
+           running a script to do so). If you believe this is likely to be a problem, you can include the <emphasis
+           role="bold">-minhours</emphasis> argument to the <emphasis role="bold">kaserver</emphasis> initialization command (for
+           details, see the command's reference page in the <emphasis>OpenAFS Administration Reference</emphasis>. If the user
+           attempts to change passwords too frequently, the following message appears.</para>
+ 
+           <programlisting>
+    Password was not changed because you changed it too recently; see 
+    your systems administrator
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Check the quality of new passwords.</para>
+ 
+           <para>You can impose a minimum quality standard on passwords by writing a script or program called <emphasis
+           role="bold">kpwvalid</emphasis>. If the <emphasis role="bold">kpwvalid</emphasis> file exists, the <emphasis
+           role="bold">kpasswd</emphasis> and <emphasis role="bold">kas setpassword</emphasis> command interpreters invoke it to
+           check a new password. If the password does not comply with the quality standard, the <emphasis
+           role="bold">kpwvalid</emphasis> program returns an appropriate code and the command interpreter rejects the
+           password.</para>
+ 
+           <para>The <emphasis role="bold">kpwvalid</emphasis> file must be executable, must reside in the same AFS directory as the
+           <emphasis role="bold">kpasswd</emphasis> and <emphasis role="bold">kas</emphasis> binaries, and its directory's ACL must
+           grant the <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) permission only to the <emphasis
+           role="bold">system:administrators</emphasis> group.</para>
+ 
+           <para>If you choose to write a <emphasis role="bold">kpwvalid</emphasis> program, consider imposing standards such as the
+           following. <itemizedlist>
+               <listitem>
+                 <para>A minimum length</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Words found in the dictionary are prohibited</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Numbers, punctuation, or both must appear along with letters</para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>The AFS distribution includes an example <emphasis role="bold">kpwvalid</emphasis> program. See the <emphasis
+           role="bold">kpwvalid</emphasis> reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>kas commands</primary>
+ 
+       <secondary>setfields</secondary>
+ 
+       <tertiary>limiting failed authentication attempts</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>kas setfields</secondary>
+ 
+       <tertiary>limiting failed authentication attempts</tertiary>
+     </indexterm>
+ 
+     <sect2 id="Header_585">
+       <title>To limit the number of consecutive failed authentication attempts</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas setfields</emphasis> command with the <emphasis role="bold">-attempts</emphasis>
+           and <emphasis role="bold">-locktime</emphasis> arguments.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas setfields</emphasis> &lt;<replaceable>name of user</replaceable>&gt;  \
+                    <emphasis role="bold">-admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  \
+                    <emphasis role="bold">-attempts</emphasis> &lt;<replaceable>maximum successive failed login tries ([0..254])</replaceable>&gt;  \
+                    <emphasis role="bold">-locktime</emphasis> &lt;<replaceable>failure penalty [hh:mm or minutes]</replaceable>&gt;
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the Authentication Database entry to edit.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as the <emphasis role="bold">admin</emphasis> account. The password prompt
+                   echoes it as admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-attempts</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the maximum consecutive number of times that a user can fail to provide the correct password
+                   during authentication (via the <emphasis role="bold">klog</emphasis> command or an AFS-modified login utility)
+                   before the Authentication Server refuses further attempts for the amount of time specified by the <emphasis
+                   role="bold">-locktime</emphasis> argument. The range of valid values is <emphasis role="bold">0</emphasis> (zero)
+                   through <emphasis role="bold">254</emphasis>. If you omit this argument or specify <emphasis
+                   role="bold">0</emphasis>, the Authentication Server allows an unlimited number of failures.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-locktime</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies how long the Authentication Server refuses authentication attempts after the user exceeds the
+                   failure limit specified by the <emphasis role="bold">-attempts</emphasis> argument.</para>
+ 
+                   <para>Specify a time in either hours and minutes (hh:mm) or minutes only (mm), from the range <emphasis
+                   role="bold">01</emphasis> (one minute) through <emphasis role="bold">36:00</emphasis> (36 hours). The <emphasis
+                   role="bold">kas</emphasis> command interpreter automatically reduces any larger value to 36:00 and also rounds up
+                   each nonzero value to the next-higher multiple of 8.5 minutes.</para>
+ 
+                   <para>It is best not to provide a value of <emphasis role="bold">0</emphasis> (zero), especially on administrative
+                   accounts, because it sets an infinite lockout time. An administrator must always issue the <emphasis
+                   role="bold">kas unlock</emphasis> command to unlock such an account.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_586">
+       <title>To unlock a locked user account</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas</emphasis> command to enter interactive mode.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas -admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    ka&gt;
+ </programlisting>
+ 
+           <para>where <emphasis role="bold">-admin</emphasis> names an administrative account that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry, such as <emphasis
+           role="bold">admin</emphasis>. The password prompt echoes it as admin_user. Enter the appropriate password as
+           admin_password.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(kas) examine</emphasis> command to verify that the user's account is in fact
+           locked, as indicated by the message shown: <programlisting>
+    ka&gt; <emphasis role="bold">examine</emphasis> &lt;<replaceable>name of user</replaceable>&gt;
+    User is locked until time
+ </programlisting> <indexterm>
+               <primary>kas commands</primary>
+ 
+               <secondary>unlock</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>kas unlock</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(kas) unlock</emphasis> command to unlock the account. <programlisting>
+    ka&gt; <emphasis role="bold">unlock</emphasis> &lt;<replaceable>authentication ID</replaceable>&gt; 
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">u</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">unlock</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">authentication ID</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the Authentication Database entry to unlock.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setfields</secondary>
+ 
+         <tertiary>setting password lifetime</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setfields</secondary>
+ 
+         <tertiary>setting password lifetime</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Database</primary>
+ 
+         <secondary>password lifetime, setting</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_587">
+       <title>To set password lifetime</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas setfields</emphasis> command with the <emphasis
+           role="bold">-pwexpires</emphasis> argument.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas setfields</emphasis> &lt;<replaceable>name of user</replaceable>&gt;  \
+                    <emphasis role="bold">-pwexpires</emphasis> &lt;<replaceable>number days password is valid  [0..254])</replaceable>&gt;  \
+                    <emphasis role="bold">-admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt; 
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the Authentication Database entry on which to impose a password expiration.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-pwexpires</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets the number of days after the user's password was last changed that it remains valid. Provide an integer
+                   from the range <emphasis role="bold">1</emphasis> through <emphasis role="bold">254</emphasis> to specify the
+                   number of days until expiration.</para>
+ 
+                   <para>When the password becomes invalid (expires), the user is unable to authenticate, but has 30 more days in
+                   which to issue the <emphasis role="bold">kpasswd</emphasis> or <emphasis role="bold">kas setpassword</emphasis>
+                   command to change the password (after that, only an administrator can change it). Note that the clock starts at
+                   the time the password was last changed, not when the <emphasis role="bold">kas setfields</emphasis> command is
+                   issued. To avoid retroactive expiration, have the user change the password just before issuing the command.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setfields</secondary>
+ 
+         <tertiary>prohibiting password reuse</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setfields</secondary>
+ 
+         <tertiary>prohibiting password reuse</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_588">
+       <title>To prohibit reuse of passwords</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas setfields</emphasis> command with the <emphasis role="bold">-reuse</emphasis>
+           argument.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas setfields</emphasis> &lt;<replaceable>name of user</replaceable>&gt; <emphasis role="bold">-reuse</emphasis> &lt;<replaceable> permit password reuse (yes/no)</replaceable>&gt;  \
+                    <emphasis role="bold">-admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt; 
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the Authentication Database entry for which to set the password reuse policy.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-reuse</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies whether the Authentication Server allows reuse of passwords similar to any of the user's last 20
+                   passwords. Specify the value <emphasis role="bold">no</emphasis> to prohibit reuse, or the value <emphasis
+                   role="bold">yes</emphasis> to reinstate the default of allowing password reuse.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>password</primary>
+ 
+         <secondary>setting in Authentication Database</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>password</secondary>
+ 
+         <tertiary>in Authentication Database</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Authentication Database</primary>
+ 
+         <secondary>password</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ516">
+     <title>Changing AFS Passwords</title>
+ 
+     <para>After setting an initial password during account creation, you normally do not need to change user passwords, since they
+     can use the <emphasis role="bold">kpasswd</emphasis> command themselves by following the instructions in the <emphasis>OpenAFS
+     User Guide</emphasis>. In the rare event that a user forgets the password or otherwise cannot log in, you can use the <emphasis
+     role="bold">kas setpassword</emphasis> command to set a new password.</para>
+ 
+     <para>If entries in the local password file (<emphasis role="bold">/etc/passwd</emphasis> or equivalent) have actual scrambled
+     passwords in their password field, remember to change the password there also. For further discussion, see <link
+     linkend="HDRWQ497">Specifying Passwords in the Local Password File</link>. <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setpassword</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setpassword</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_590">
+       <title>To change an AFS password</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas setpassword</emphasis> command to change the password. To avoid having the new
+           password echo visibly on the screen, omit the <emphasis role="bold">-new_password</emphasis> argument; instead enter the
+           password at the prompts that appear when you omit the argument, as shown.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas setpassword</emphasis> &lt;<replaceable>name of user</replaceable>&gt;  \
+                      <emphasis role="bold">-admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt; 
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    new_password: &lt;<replaceable>new_password</replaceable>&gt;
+    Verifying, please re-enter new_password: &lt;<replaceable>new_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sp</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an acceptable alias for <emphasis role="bold">setpassword</emphasis> (<emphasis
+                   role="bold">setp</emphasis> is the shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the Authentication Database entry for which to set the password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">new_password</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the user's new password. It is subject to the restrictions imposed by the <emphasis
+                   role="bold">kpwvalid</emphasis> program, if you use it.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ517">
+     <title>Displaying and Setting the Quota on User Volumes</title>
+ 
+     <para>User volumes are like all other volumes with respect to quota. Each new AFS volume has a default quota of 5000 KB, unless
+     you use the <emphasis role="bold">-maxquota</emphasis> argument to the <emphasis role="bold">vos create</emphasis> command to
+     set a different quota. You can also use either of the following commands to change quota at any time: <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">fs setquota</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">fs setvol</emphasis></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>You can use any of the three following commands to display a volume's quota: <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">fs quota</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">fs listquota</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">fs examine</emphasis></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>For instructions, see <link linkend="HDRWQ234">Setting and Displaying Volume Quota and Current Size</link>. <indexterm>
+         <primary>username</primary>
+ 
+         <secondary>changing</secondary>
+       </indexterm> <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>username</secondary>
+       </indexterm> <indexterm>
+         <primary>renaming</primary>
+ 
+         <secondary>user account components</secondary>
+       </indexterm> <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>changing username</secondary>
+       </indexterm> <indexterm>
+         <primary>Authentication Database</primary>
+ 
+         <secondary>changing username</secondary>
+       </indexterm></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ518">
+     <title>Changing Usernames</title>
+ 
+     <para>By convention, many components of a user account incorporate the username, including the Protection and Authentication
+     Database entries, the volume name and the home directory name. When changing a username, it is best to maintain consistency by
+     changing the names of all components, so the procedure for changing a username has almost as many steps as the procedure for
+     creating a new user account.</para>
+ 
+     <sect2 id="Header_593">
+       <title>To change a username</title>
+ 
+       <orderedlist>
+         <indexterm>
+           <primary>pts commands</primary>
+ 
+           <secondary>rename</secondary>
+ 
+           <tertiary>username</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>pts rename</secondary>
+ 
+           <tertiary>username</tertiary>
+         </indexterm>
+ 
+         <listitem>
+           <para>Authenticate as an AFS identity with all of the following privileges. In the conventional configuration, the
+           <emphasis role="bold">admin</emphasis> user account has them, or you possibly have a personal administrative account. (To
+           increase cell security, it is best to create special privileged accounts for use only while performing administrative
+           procedures; for further discussion, see <link linkend="HDRWQ584">An Overview of Administrative Privilege</link>.) If
+           necessary, issue the <emphasis role="bold">klog</emphasis> command to authenticate. <programlisting>
+    % <emphasis role="bold">klog</emphasis> admin_user
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The following list specifies the necessary privileges and indicates how to check that you have them.</para>
+ 
+           <itemizedlist>
+             <listitem>
+               <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+               <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To
+               display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue the <emphasis
+               role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the
+               users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <computeroutput>ADMIN</computeroutput> flag on the Authentication Database entry. However, the
+               Authentication Server performs its own authentication, so the following instructions direct you to specify an
+               administrative identity on the <emphasis role="bold">kas</emphasis> command line itself.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>), <emphasis
+               role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>), and <emphasis role="bold">i</emphasis> (<emphasis
+               role="bold">insert</emphasis>) permissions on the ACL of the directory where you are removing the current mount point
+               and creating a new one. If necessary, issue the <emphasis role="bold">fs listacl</emphasis> command, which is fully
+               described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+               <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+               role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+             </listitem>
+           </itemizedlist>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ519" />Issue the <emphasis role="bold">pts listowned</emphasis> command to display the names of the
+           groups the user owns. After you change the username in the Protection Database in Step <link linkend="LIWQ520">3</link>,
+           you must issue the <emphasis role="bold">pts rename</emphasis> command to change each group's owner prefix to match the
+           new name, because the Protection Server does not automatically make this change. For a complete description of the
+           <emphasis role="bold">pts listowned</emphasis> command, see <link linkend="HDRWQ536">Displaying Information from the
+           Protection Database</link>. <programlisting>
+    % <emphasis role="bold">pts listowned</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ520" />Issue the <emphasis role="bold">pts rename</emphasis> command to change the user's name in
+           the Protection Database. <programlisting>
+    % <emphasis role="bold">pts rename</emphasis> &lt;<replaceable>old name</replaceable>&gt; &lt;<replaceable>new name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts rename</emphasis> command to change the group names you noted in Step <link
+           linkend="LIWQ519">2</link>, so that their owner prefix (the part of the group name before the colon) accurately reflects
+           the owner's new name.</para>
+ 
+           <para>Repeat the command for each group. Step <link linkend="LIWQ520">3</link> details its syntax.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">pts rename</emphasis> &lt;<replaceable>old name</replaceable>&gt; &lt;<replaceable>new name</replaceable>&gt;
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas</emphasis> command to enter interactive mode.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas -admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    ka&gt;
+ </programlisting>
+ 
+           <para>where <emphasis role="bold">-admin</emphasis> names an administrative account that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry, such as <emphasis
+           role="bold">admin</emphasis>. The password prompt echoes it as admin_user. Enter the appropriate password as
+           admin_password. <indexterm>
+               <primary>kas commands</primary>
+ 
+               <secondary>delete</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>kas delete</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(kas) delete</emphasis> command to delete the user's existing Authentication
+           Database entry. <programlisting>
+    ka&gt; <emphasis role="bold">delete</emphasis> &lt;<replaceable>name of user</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">del</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation for <emphasis role="bold">delete</emphasis>, or you can use the alias
+                 <emphasis role="bold">rm</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">name of user</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the Authentication Database entry to delete.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <indexterm>
+             <primary>kas commands</primary>
+ 
+             <secondary>create</secondary>
+ 
+             <tertiary>when changing username</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>kas create</secondary>
+ 
+             <tertiary>when changing username</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">(kas) create</emphasis> command to create an Authentication Database entry for the
+           new username. To avoid having the user's password echo visibly on the screen, do not include the <emphasis
+           role="bold">-initial_password</emphasis> argument; instead enter the password at the prompts that appear in that case, as
+           shown in the following syntax specification. <programlisting>
+    ka&gt; <emphasis role="bold">create</emphasis>  &lt;<replaceable>name of user</replaceable>&gt;
+    initial_password: &lt;<replaceable>password</replaceable>&gt;
+    Verifying, please re-enter initial_password: &lt;<replaceable>password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cr</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation for <emphasis role="bold">create</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">name of user</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the new username.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">password</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the password for the new user account. If the user is willing to tell you his or her current
+                 password, you can retain it. Otherwise, provide a string of eight characters or less to comply with the length
+                 restriction that some applications impose. Possible choices for an initial password include the username, a string
+                 of digits from a personal identification number such as the Social Security number, or a standard string such as
+                 <emphasis role="bold">changeme</emphasis>. Instruct the user to change the string to a truly secret password as soon
+                 as possible by using the <emphasis role="bold">kpasswd</emphasis> command as instructed in the <emphasis>OpenAFS
+                 User Guide</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">quit</emphasis> command to leave interactive mode. <programlisting>
+    ka&gt; <emphasis role="bold">quit</emphasis>
+ </programlisting> <indexterm>
+               <primary>vos commands</primary>
+ 
+               <secondary>rename</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>vos rename</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm> <indexterm>
+               <primary>volume name</primary>
+ 
+               <secondary>changing</secondary>
+ 
+               <tertiary>when renaming user</tertiary>
+             </indexterm> <indexterm>
+               <primary>renaming</primary>
+ 
+               <secondary>volume when changing username</secondary>
+             </indexterm> <indexterm>
+               <primary>changing</primary>
+ 
+               <secondary>volume name when renaming user</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ521" />Issue the <emphasis role="bold">vos rename</emphasis> command to change the name of the
+           user's volume. For complete syntax, see <link linkend="HDRWQ246">To rename a volume</link>. <programlisting>
+    % <emphasis role="bold">vos rename</emphasis>  &lt;<replaceable>old volume name</replaceable>&gt;  &lt;<replaceable>new volume name</replaceable>&gt;
+ </programlisting><indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>rmmount</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm><indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs rmmount</secondary>
+             </indexterm><indexterm>
+               <primary>mount point</primary>
+ 
+               <secondary>changing when renaming user</secondary>
+             </indexterm><indexterm>
+               <primary>removing</primary>
+ 
+               <secondary>mount point</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm><indexterm>
+               <primary>changing</primary>
+ 
+               <secondary>mount point when renaming user</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ522" />Issue the <emphasis role="bold">fs rmmount</emphasis> command to remove the existing mount
+           point. For the directory argument, specify the read/write path to the mount point, to avoid the failure that results when
+           you attempt to delete a mount point from a read-only volume. <programlisting>
+    % <emphasis role="bold">fs rmmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting><indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>mkmount</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm><indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs mkmount</secondary>
+ 
+               <tertiary>when changing username</tertiary>
+             </indexterm><indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>mount point when changing username</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ523" />Issue the <emphasis role="bold">fs mkmount</emphasis> command to create a mount point for the
+           volume's new name. Specify the read/write path to the mount point for the directory argument, as in the previous step. For
+           complete syntax, see Step <link linkend="LIWQ509">6</link> in <link linkend="HDRWQ503">To create one user account with
+           individual commands</link>. <programlisting>
+    % <emphasis role="bold">fs mkmount</emphasis> &lt;<replaceable>directory</replaceable>&gt; &lt;<replaceable>volume name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the changes you made in Step <link linkend="LIWQ522">10</link> and Step <link linkend="LIWQ523">11</link> are to
+           a mount point that resides in a replicated volume, use the <emphasis role="bold">vos release</emphasis> command to release
+           the volume, as described in <link linkend="HDRWQ194">To replicate a read/write volume (create a read-only volume)</link>.
+           <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <note>
+             <para>This step can be necessary even if the home directory's parent directory is not itself a mount point for a
+             replicated volume (and is easier to overlook in that case). For example, the ABC Corporation template puts the mount
+             points for user volumes in the <emphasis role="bold">/afs/abc.com/usr</emphasis> directory. Because that is a regular
+             directory rather than a mount point, it resides in the <emphasis role="bold">root.cell</emphasis> volume mounted at the
+             <emphasis role="bold">/afs/abc.com</emphasis> directory. That volume is replicated, so after changing it the
+             administrator must issue the <emphasis role="bold">vos release</emphasis> command.</para>
+           </note>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ524">
+     <title>Removing a User Account</title>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>user account components</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user account</primary>
+ 
+       <secondary>removing from system</secondary>
+     </indexterm>
+ 
+     <para>Before removing an account, it is best to make a backup copy of the user's home volume on a permanent storage medium such
+     as tape. If you need to remove several accounts, it is probably more efficient to use the <emphasis role="bold">uss
+     delete</emphasis> command instead; see <link linkend="HDRWQ486">Deleting Individual Accounts with the uss delete
+     Command</link>.</para>
+ 
+     <sect2 id="Header_595">
+       <title>To remove a user account</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Authenticate as an AFS identity with all of the following privileges. In the conventional configuration, the
+           <emphasis role="bold">admin</emphasis> user account has them, or you possibly have a personal administrative account. (To
+           increase cell security, it is best to create special privileged accounts for use only while performing administrative
+           procedures; for further discussion, see <link linkend="HDRWQ584">An Overview of Administrative Privilege</link>.) If
+           necessary, issue the <emphasis role="bold">klog</emphasis> command to authenticate. <programlisting>
+    % <emphasis role="bold">klog</emphasis> admin_user
+    Password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>The following list specifies the necessary privileges and indicates how to check that you have them.</para>
+ 
+           <itemizedlist>
+             <listitem>
+               <para>Membership in the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+               <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To
+               display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Inclusion in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If necessary, issue the <emphasis
+               role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the
+               users in the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <computeroutput>ADMIN</computeroutput> flag on the Authentication Database entry. However, the
+               Authentication Server performs its own authentication, so the following instructions direct you to specify an
+               administrative identity on the <emphasis role="bold">kas</emphasis> command line itself.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>) permission on the ACL of the
+               directory where you are removing the user volume's mount point. If necessary, issue the <emphasis role="bold">fs
+               listacl</emphasis> command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>.
+               <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+ 
+               <para>Members of the <emphasis role="bold">system:administrators</emphasis> group always implicitly have the <emphasis
+               role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default also the <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on every ACL and can use the <emphasis
+               role="bold">fs setacl</emphasis> command to grant other rights as necessary.</para>
+             </listitem>
+           </itemizedlist>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If it is possible you need to restore the user's account someday, note
+           the username and AFS UID, possibly in a file designated for that purpose. You can later restore the account with its
+           original AFS UID.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Copy the contents of the user's volume to tape. You can use the
+           <emphasis role="bold">vos dump</emphasis> command as described in <link linkend="HDRWQ240">Dumping and Restoring
+           Volumes</link> or the AFS Backup System as described in <link linkend="HDRWQ296">Backing Up Data</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ525" /><emphasis role="bold">(Optional)</emphasis> If you intend to remove groups that the user owns
+           from the Protection Database after removing the user's entry, issue the <emphasis role="bold">pts listowned</emphasis>
+           command to display them. For complete instructions, see <link linkend="HDRWQ536">Displaying Information from the
+           Protection Database</link>. <programlisting>
+    % <emphasis role="bold">pts listowned</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ526" />(<emphasis role="bold">Optional)</emphasis> Issue the <emphasis role="bold">pts
+           delete</emphasis> command to remove the groups the user owns. However, if it is likely that other users have placed the
+           groups on the ACLs of directories they own, it is best not to remove them. <programlisting>
+    % <emphasis role="bold">pts delete</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">del</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation for <emphasis role="bold">delete</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name or AFS UID of each group displayed in the output from Step <link
+                 linkend="LIWQ525">4</link>.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <indexterm>
+             <primary>kas commands</primary>
+ 
+             <secondary>delete</secondary>
+ 
+             <tertiary>when removing user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>kas delete</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Authentication Database</primary>
+ 
+             <secondary>entry</secondary>
+ 
+             <tertiary>removing</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas delete</emphasis> command to remove the user's Authentication Database
+           entry.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas delete</emphasis> &lt;<replaceable>name of user</replaceable>&gt;  \
+                 <emphasis role="bold">-admin</emphasis>  &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">d</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation for <emphasis role="bold">delete</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the Authentication Database entry to delete.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account that has the <computeroutput>ADMIN</computeroutput> flag on its
+                   Authentication Database entry, such as <emphasis role="bold">admin</emphasis>. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ527" />Issue the <emphasis role="bold">vos listvldb</emphasis> command to display the site of the
+           user's home volume in preparation for removing it. By convention, user volumes are named <emphasis
+           role="bold">user</emphasis>.username. <programlisting>
+    % <emphasis role="bold">vos listvldb</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">listvl</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listvldb</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the volume's name or volume ID number.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>remove</secondary>
+ 
+             <tertiary>when removing user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos remove</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume</primary>
+ 
+             <secondary>removing</secondary>
+ 
+             <tertiary>when removing user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>removing</primary>
+ 
+             <secondary>volume when removing user account</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ528" />Issue the <emphasis role="bold">vos remove</emphasis> command to remove the user's volume. It
+           automatically removes the backup version of the volume, if it exists. It is not conventional to replicate user volumes, so
+           the command usually also completely removes the volume's entry from the Volume Location Database (VLDB). If there are
+           ReadOnly replicas of the volume, you must repeat the <emphasis role="bold">vos remove</emphasis> command to remove each
+           one individually. <programlisting>
+    % <emphasis role="bold">vos remove</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">remo</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">remove</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">machine name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the file server machine that houses the volume, as specified in the output from Step <link
+                 linkend="LIWQ527">7</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">partition name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the partition that houses the volume, as specified in the output from Step <link
+                 linkend="LIWQ527">7</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">volume name or ID</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the volume's name or ID number.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>rmmount</secondary>
+ 
+             <tertiary>when removing user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs rmmount</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>mount point</primary>
+ 
+             <secondary>removing when removing user account</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>removing</primary>
+ 
+             <secondary>mount point when removing user account</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ529" />Issue the <emphasis role="bold">fs rmmount</emphasis> command to remove the volume's mount
+           point.</para>
+ 
+           <para>If you mounted the user's backup volume as a subdirectory of the home directory, then this command is sufficient to
+           unmount the backup version as well. If you mounted the backup version at an unrelated location in the filespace, repeat
+           the <emphasis role="bold">fs rmmount</emphasis> command for it.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">fs rmmount</emphasis> &lt;<replaceable>directory</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">rmm</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">rmmount</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">directory</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the mount point for the volume's previous name (the former home directory). Partial pathnames are
+                   interpreted relative to the current working directory.</para>
+ 
+                   <para>Specify the read/write path to the mount point, to avoid the failure that results when you attempt to delete
+                   a mount point from a read-only volume. By convention, you indicate the read/write path by placing a period before
+                   the cell name at the pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For
+                   further discussion of the concept of read/write and read-only paths through the filespace, see <link
+                   linkend="HDRWQ208">Mounting Volumes</link>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <indexterm>
+             <primary>pts commands</primary>
+ 
+             <secondary>delete</secondary>
+ 
+             <tertiary>when removing user account</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>pts delete</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Protection Database</primary>
+ 
+             <secondary>user entry</secondary>
+ 
+             <tertiary>deleting</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>removing</primary>
+ 
+             <secondary>Protection Database entry</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ530" />Issue the <emphasis role="bold">pts delete</emphasis> command to remove the user's Protection
+           Database entry. A complete description of this command appears in Step <link linkend="LIWQ526">5</link>. <programlisting>
+    % <emphasis role="bold">pts delete</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the deleted user home directory resided in a replicated volume, use the <emphasis role="bold">vos
+           release</emphasis> command to release the volume, as described in <link linkend="HDRWQ194">To replicate a read/write
+           volume (create a read-only volume)</link>. <programlisting>
+    % <emphasis role="bold">vos release</emphasis> &lt;<replaceable>volume name or ID</replaceable>&gt;
+ </programlisting></para>
+ 
+           <note>
+             <para>This step can be necessary even if the home directory's parent directory is not itself a mount point for a
+             replicated volume (and is easier to overlook in that case). For example, the ABC Corporation template puts the mount
+             points for user volumes in the <emphasis role="bold">/afs/abc.com/usr</emphasis> directory. Because that is a regular
+             directory rather than a mount point, it resides in the <emphasis role="bold">root.cell</emphasis> volume mounted at the
+             <emphasis role="bold">/afs/abc.com</emphasis> directory. That volume is replicated, so after changing it by deleting a
+             mount point the administrator must issue the <emphasis role="bold">vos release</emphasis> command.</para>
+           </note>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd019.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd019.xml:1.1.10.2
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd019.xml	Mon May 11 11:11:10 2009
***************
*** 0 ****
--- 1,3136 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ531">
+   <title>Administering the Protection Database</title>
+ 
+   <para>This chapter explains how to create and maintain user, machine, and group entries in the Protection Database.</para>
+ 
+   <sect1 id="HDRWQ532">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Display Protection Database entry</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Map user, machine or group name to AFS ID</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display entry's owner or creator</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display number of users or machines belonging to group</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display number of groups user or machine belongs to</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display group-creation quota</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display entry's privacy flags</entry>
+ 
+             <entry><emphasis role="bold">pts examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display members of group, or groups that user or machine belongs to</entry>
+ 
+             <entry><emphasis role="bold">pts membership</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display groups that user or group owns</entry>
+ 
+             <entry><emphasis role="bold">pts listowned</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display all entries in Protection Database</entry>
+ 
+             <entry><emphasis role="bold">pts listentries</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create machine entry</entry>
+ 
+             <entry><emphasis role="bold">pts createuser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Create group entry</entry>
+ 
+             <entry><emphasis role="bold">pts creategroup</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Add users and machines to groups</entry>
+ 
+             <entry><emphasis role="bold">pts adduser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove users and machines from groups</entry>
+ 
+             <entry><emphasis role="bold">pts removeuser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Delete machine or group entry</entry>
+ 
+             <entry><emphasis role="bold">pts delete</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change a group's owner</entry>
+ 
+             <entry><emphasis role="bold">pts chown</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Change an entry's name</entry>
+ 
+             <entry><emphasis role="bold">pts rename</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set group creation quota</entry>
+ 
+             <entry><emphasis role="bold">pts setfields</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set entry's privacy flags</entry>
+ 
+             <entry><emphasis role="bold">pts setfields</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display AFS ID counters</entry>
+ 
+             <entry><emphasis role="bold">pts listmax</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set AFS ID counters</entry>
+ 
+             <entry><emphasis role="bold">pts setmax</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+ 
+     <indexterm>
+       <primary>current protection subgroup</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CPS</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Server</primary>
+ 
+       <secondary>building CPS</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>File Server</primary>
+ 
+       <secondary>CPS requested from Protection Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>user entry, described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>Protection Database entry, described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>machine</primary>
+ 
+       <secondary>Protection Database entry, described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>machine entry, described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>Protection Database entry, described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>group entry</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ534">
+     <title>About the Protection Database</title>
+ 
+     <para>The Protection Database stores information about AFS users, client machines, and groups which the File Server process uses
+     to determine whether clients are authorized to access AFS data.</para>
+ 
+     <para>To obtain authenticated access to an AFS cell, a user must have an entry in the cell's Protection Database. The first time
+     that a user requests access to the data stored on a file server machine, the File Server on that machine contacts the Protection
+     Server to request the user's <emphasis>current protection subgroup</emphasis> (<emphasis>CPS</emphasis>), which lists all the
+     groups to which the user belongs. The File Server scans the access control list (ACL) of the directory that houses the data,
+     looking for groups on the CPS. It grants access in accordance with the permissions that the ACL extends to those groups or to
+     the user individually. (The File Server stores the CPS and uses it as long as the user has the same tokens. When a user's group
+     membership changes, he or she must reauthenticate for the File Server to recognize the change.)</para>
+ 
+     <para>Only administrators who belong to the cell's <emphasis role="bold">system:administrators</emphasis> group can create user
+     entries (the group is itself defined in the Protection Database, as discussed in <link linkend="HDRWQ535">The System
+     Groups</link>). Members of the <emphasis role="bold">system:administrators</emphasis> group can also create machine entries,
+     which can then be used to control access based on the machine from which the access request originates. After creating a machine
+     entry, add it to a Protection Database group and place the group on ACLs (a machine cannot appear on ACLs directly). A machine
+     entry can represent a single machine or multiple machines with consecutive IP addresses as specified by a wildcard notation. For
+     instructions, see <link linkend="HDRWQ542">Creating User and Machine Entries</link>. Because all replicas of a volume share the
+     same ACL (the one on the volume's root directory mount point), machine entries enable you to replicate the volume that houses a
+     program's binary file while still complying with a machine-based license agreement as required by the program's manufacturer.
+     See <link linkend="HDRWQ542">Creating User and Machine Entries</link>.</para>
+ 
+     <para>A group entry is a list of user entries, machine entries, or both (groups cannot belong to other groups). Putting a group
+     on an ACL is a convenient way to extend or deny access to a set of users without listing them on the ACL individually.
+     Similarly, adding users to a group automatically grants them access to all files and directories for which the associated ACL
+     lists that group. Both administrators and regular users can create groups. <indexterm>
+         <primary>system groups</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm> <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>system</secondary>
+       </indexterm> <indexterm>
+         <primary>membership</primary>
+ 
+         <secondary>system groups</secondary>
+       </indexterm> <indexterm>
+         <primary>system:anyuser group</primary>
+       </indexterm> <indexterm>
+         <primary>system:authuser group</primary>
+       </indexterm> <indexterm>
+         <primary>system:administrators group</primary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ535">
+       <title>The System Groups</title>
+ 
+       <para>In addition to the groups that users and administrators can create, AFS defines the following three system groups. The
+       Protection Server creates them automatically when it builds the first version of a cell's Protection Database, and always
+       assigns them the same AFS GIDs. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">system:anyuser</emphasis></term>
+ 
+             <listitem>
+               <para>Represents all users able to access the cell's filespace from the local and foreign cells, authenticated or not.
+               Its AFS GID is <emphasis role="bold">-101</emphasis>. The group has no stable membership listed in the Protection
+               Database. Accordingly, the <emphasis role="bold">pts examine</emphasis> command displays <emphasis
+               role="bold">0</emphasis> in its <computeroutput>membership</computeroutput> field, and the <emphasis role="bold">pts
+               membership</emphasis> command does not list any members for it.</para>
+ 
+               <para>Placing this group on an ACL is a convenient way to extend access to all users. The File Server automatically
+               places this group on the CPS of any user who requests access to data stored on a file server machine. (Every
+               unauthenticated user is assigned the identity <emphasis role="bold">anonymous</emphasis> and this group is the only
+               entry on the CPS for <emphasis role="bold">anonymous</emphasis>.)</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">system:authuser</emphasis></term>
+ 
+             <listitem>
+               <para>Represents all users who are able to access the cell's filespace from the local and foreign cells and who have
+               successfully obtained an AFS token in the local cell (are authenticated). Its AFS GID is <emphasis
+               role="bold">-102</emphasis>. Like the <emphasis role="bold">system:anyuser</emphasis> group, it has no stable
+               membership listed in the Protection Database. Accordingly, the <emphasis role="bold">pts examine</emphasis> command
+               displays <emphasis role="bold">0</emphasis> in its <computeroutput>membership</computeroutput> field, and the
+               <emphasis role="bold">pts membership</emphasis> command does not list any members for it.</para>
+ 
+               <para>Placing this group on an ACL is therefore a convenient way to extend access to all authenticated users. The File
+               Server automatically places this group on the CPS of any authenticated user who requests access to data stored on a
+               file server machine.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">system:administrators</emphasis></term>
+ 
+             <listitem>
+               <para>Represents the small number of cell administrators authorized to issue privileged <emphasis
+               role="bold">pts</emphasis> commands and the <emphasis role="bold">fs</emphasis> commands that set quota. The ACL on
+               the root directory of every newly created volume grants all permissions to the group. Even if you remove that entry,
+               the group implicitly retains the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>), and
+               by default also the <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>), permission on every
+               ACL. Its AFS GID is <emphasis role="bold">-204</emphasis>. For instructions on administering this group, see <link
+               linkend="HDRWQ586">Administering the system:administrators Group</link>.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ536">
+     <title>Displaying Information from the Protection Database</title>
+ 
+     <para>This section describes the commands you can use to display Protection Database entries and associated information. In
+     addition to name and AFS ID, the Protection Database stores the following information about each user, machine, or group entry.
+     <itemizedlist>
+         <listitem>
+           <para>The entry's owner, which is the user or group of users who can administer the entry</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The entry's creator, which serves mostly as an audit trail</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A membership count, which indicates how many groups a user or machine belongs to, or how many members belong to a
+           group</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A set of privacy flags, which control which users can administer or display information about the entry</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A group-creation quota, which defines how many groups a user can create</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A list of the groups to which a user or machine belongs, or of the users and machines that belong to a group</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A list of the groups that a user or group owns</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>owner of Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>creator of Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>privacy flags on Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>membership count in Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>group-creation quota in Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>membership count</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>group entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>machine entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>user entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>owner of entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>creator of entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>privacy flags</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>group creation quota</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mapping</primary>
+ 
+       <secondary>AFS ID to group, machine, or username</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mapping</primary>
+ 
+       <secondary>username to AFS UID</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mapping</primary>
+ 
+       <secondary>machine name to AFS UID</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mapping</primary>
+ 
+       <secondary>group name to AFS GID</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS UID</primary>
+ 
+       <secondary>displaying</secondary>
+ 
+       <tertiary>for one user or machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS GID</primary>
+ 
+       <secondary>displaying</secondary>
+ 
+       <tertiary>for one group</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>owner</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creator</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>members</primary>
+ 
+       <secondary>group, displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privacy flags on Protection Database entry</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>owner</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>creation quota</secondary>
+ 
+       <see>quota</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>privacy flags on Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>machine</primary>
+ 
+       <secondary>group memberships</secondary>
+ 
+       <tertiary>displaying number</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>machine</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>machine</primary>
+ 
+       <secondary>privacy flags on Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>quota</primary>
+ 
+       <secondary>group-creation</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>group-creation quota</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>privacy flags on Protection Database entry</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>group memberships</secondary>
+ 
+       <tertiary>displaying number</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>examine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pts examine</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ537">
+       <title>To display a Protection Database entry</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group, which enables you to
+           display an entry regardless of the setting of its first (<emphasis role="bold">s</emphasis>) privacy flag. By default, any
+           user can display a Protection Database entry. If necessary, issue the <emphasis role="bold">pts membership</emphasis>
+           command, which is fully described in <link linkend="HDRWQ587">To display the members of the system:administrators
+           group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts examine</emphasis> command to display one or more Protection Database entries.
+           <programlisting>
+    % <emphasis role="bold">pts examine</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">e</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis> (and <emphasis
+                 role="bold">check</emphasis> is an alias).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name or AFS ID of each entry to display. Precede any AFS GID with a hyphen (<emphasis
+                 role="bold">-</emphasis>) because it is a negative integer.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output includes the following fields. Examples follow. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Name</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the entry's name. <itemizedlist>
+                   <listitem>
+                     <para>For a user, this is the name used when authenticating with AFS and the name that appears on ACL
+                     entries.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>For a machine, this is the IP address of a single machine, or a wildcard notation that represents a group
+                     of machines with consecutive IP addresses, as described in <link linkend="HDRWQ542">Creating User and Machine
+                     Entries</link>.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>For a group, this is the name that appears on ACL entries and in the list of groups output by the
+                     <emphasis role="bold">pts membership</emphasis> command. The names of <emphasis>regular</emphasis> groups have
+                     two parts, separated by a colon (<emphasis role="bold">:</emphasis>). The part before the colon indicates the
+                     group's owner, and the part after is the unique name. A <emphasis>prefix-less</emphasis> group's name does not
+                     have the owner prefix; only members of the <emphasis role="bold">system:administrators</emphasis> group can
+                     create prefix-less groups. For further discussion of group names, see <link linkend="HDRWQ544">Creating
+                     Groups</link>.</para>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <indexterm>
+                 <primary>AFS UID</primary>
+ 
+                 <secondary>definition</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>AFS GID</primary>
+ 
+                 <secondary>definition</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>UNIX UID</primary>
+ 
+                 <secondary>difference from AFS UID</secondary>
+               </indexterm>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>id</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the entry's unique AFS identification number. For user and machine entries, the AFS user ID (AFS UID)
+               is a positive integer; for groups, the AFS group ID (AFS GID) is a negative integer. AFS UIDs and GIDs have the same
+               function as their counterparts in the UNIX file system, but are used by the AFS servers and the Cache Manager
+               only.</para>
+ 
+               <para>Normally, the Protection Server assigns an AFS UID or GID automatically when you create Protection Database
+               entries. Members of the <emphasis role="bold">system:administrators</emphasis> group can specify an ID if desired. For
+               further discussion, see <link linkend="HDRWQ542">Creating User and Machine Entries</link> and <link
+               linkend="HDRWQ544">Creating Groups</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>owner</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Names the user or group who owns the entry and therefore can administer it (for more information about a group
+               owning another group, see <link linkend="HDRWQ545">Using Groups Effectively</link>). Other users possibly have
+               administrative privileges, too, depending on the setting of the entry's privacy flags. For instructions on changing
+               the owner, see <link linkend="HDRWQ554">Changing a Group's Owner</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>creator</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Names the user who created the entry, and serves as an audit trail. If the entry is deleted from the Protection
+               Database, the creator's group creation quota increases by one, even if the creator no longer owns the entry; see <link
+               linkend="HDRWQ558">Setting Group-Creation Quota</link>.</para>
+ 
+               <para>The value <computeroutput>anonymous</computeroutput> in this field generally indicates that the entry was
+               created when the Protection Server was running in no-authentication mode, probably during initial configuration of the
+               cell's first file server machine. For a description of no-authentication mode, see <link linkend="HDRWQ123">Managing
+               Authentication and Authorization Requirements</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>membership</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the number of groups to which the user or machine belongs, or the number of users or machines that
+               belong to the group.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>flags</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies who can display or change information in a Protection Database entry. The five flags, each
+               representing a different capability, always appear in the same order. <itemizedlist>
+                   <listitem>
+                     <para>For user entries, the default value is <computeroutput>S----</computeroutput>, which indicates that anyone
+                     can issue the <emphasis role="bold">pts examine</emphasis> command on the entry, but only the user and members
+                     of the <emphasis role="bold">system:administrators</emphasis> group can perform any other action.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>For machine entries, the default value is <computeroutput>S----</computeroutput>, which indicates that
+                     anyone can issue the <emphasis role="bold">pts examine</emphasis> command on the entry, but only members of the
+                     <emphasis role="bold">system:administrators</emphasis> group can perform any other action.</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>For group entries, the default value is <computeroutput>S-M--</computeroutput>, which indicates that
+                     anyone can issue the <emphasis role="bold">pts examine</emphasis> and <emphasis role="bold">pts
+                     membership</emphasis> commands on the entry, but only the group's owner and members of the <emphasis
+                     role="bold">system:administrators</emphasis> group can perform any other action.</para>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <para>For a complete description of possible values for the flags, see <link linkend="HDRWQ559">Setting the Privacy
+               Flags on Database Entries</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>group quota</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies how many more groups a user can create in the Protection Database. The value for a newly created user
+               entry is 20, but members of the <emphasis role="bold">system:administrators</emphasis> group can issue the <emphasis
+               role="bold">pts setfields</emphasis> command at any time to change the value; see <link linkend="HDRWQ558">Setting
+               Group-Creation Quota</link>.</para>
+ 
+               <para>Group creation quota has no meaning for a machine or group entry: the Protection Server recognizes the issuer of
+               the <emphasis role="bold">pts creategroup</emphasis> command only as an authenticated user or as the <emphasis
+               role="bold">anonymous</emphasis> user, never as a machine or group. The default value for group entries is 0 (zero),
+               and there is no reason to change it.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>The following examples show the output for a user called <emphasis role="bold">pat</emphasis>, a machine with IP address
+       <emphasis role="bold">192.12.108.133</emphasis> and a group called <emphasis role="bold">terry:friends</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts examine pat</emphasis>
+    Name: pat, id: 1020, owner: system:administrators, creator: admin,
+      membership: 12, flags: S----, group quota: 15.
+    % <emphasis role="bold">pts ex 192.12.108.133</emphasis>
+    Name: 192.12.108.133, id: 5151, owner: system:administrators, creator: admin,
+      membership: 1, flags: S----, group quota: 20.
+    % <emphasis role="bold">pts examine terry:friends</emphasis>
+    Name: terry:friends, id: -567, owner: terry, creator: terry,
+      membership: 12, flags: SOm--, group quota: 0.
+ </programlisting>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>groups to which user or machine belongs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>members of group</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>members, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>membership of machine or user, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>group memberships, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>group memberships, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>members</primary>
+ 
+         <secondary>group, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>membership</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts membership</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ538">
+       <title>To display group membership</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group, which enables you to
+           display an entry's group membership information regardless of the setting of its third (<emphasis
+           role="bold">m</emphasis>) privacy flag. By default the owner and the user can display group membership for a user entry,
+           the owner for a machine entry, and anyone for a group entry. If necessary, issue the <emphasis role="bold">pts
+           membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display the members of the
+           system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ539" />Issue the <emphasis role="bold">pts membership</emphasis> command to display the list of
+           groups to which a user or machine belongs, or the list of users and machines that belong to a group. <programlisting>
+    % <emphasis role="bold">pts membership</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">m</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">membership</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name or AFS UID of each user or machine for which to list the groups it belongs to, or the name
+                 or AFS GID of each group for which to list the members.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>For user and machine entries, the output begins with the following string, and then each group appears on its own
+       line:</para>
+ 
+       <programlisting>
+    Groups user_or_machine (id: AFS_UID) is a member of:
+ </programlisting>
+ 
+       <para>For group entries, the output begins with the following string, and then each member appears on its own line:</para>
+ 
+       <programlisting>
+    Members of group (id: AFS_GID) are:
+ </programlisting>
+ 
+       <para>For the system groups <emphasis role="bold">system:anyuser</emphasis> and <emphasis
+       role="bold">system:authuser</emphasis>, the output includes the initial header string only, because these groups do not have a
+       stable membership listed in their Protection Database entry. See <link linkend="HDRWQ535">The System Groups</link>.</para>
+ 
+       <para>The following examples show the output for a user called <emphasis role="bold">terry</emphasis> and a group called
+       <emphasis role="bold">terry:friends</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts mem terry</emphasis>
+    Groups terry (id: 5347) is a member of:
+      pat:friends
+      sales
+      acctg:general
+    % <emphasis role="bold">pts mem terry:friends</emphasis>
+    Members of terry:friends (id: -567) are:
+      pat
+      smith
+      johnson
+ </programlisting>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>groups owned, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>groups owned by a user or group</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>orphaned, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>orphaned group</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>groups owned, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>owned by user or group, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>listowned</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts listowned</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ540">
+       <title>To list the groups that a user or group owns</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group, which enables you to
+           display an entry's group ownership information regardless of the setting of its second (<emphasis
+           role="bold">o</emphasis>) privacy flag. By default the owner can list the groups owned by group, and a user the groups he
+           or she owns. If necessary, issue the <emphasis role="bold">pts membership</emphasis> command, which is fully described in
+           <link linkend="HDRWQ587">To display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts listowned</emphasis> command to list the groups owned by each user or group.
+           <programlisting>
+    % <emphasis role="bold">pts listowned</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">listo</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listowned</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name or AFS UID of each user, or the name or AFS GID or each group, for which to list the groups
+                 owned.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output begins with the following string, and then each group appears on its own line:</para>
+ 
+       <programlisting>
+    Groups owned by user_or_group (id: AFS_ID) are:
+ </programlisting>
+ 
+       <para>The following examples show the output for a user called <emphasis role="bold">terry</emphasis> and a group called
+       <emphasis role="bold">terry:friends</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts listo terry</emphasis> 
+    Groups owned by terry (id: 5347) are:  
+      terry:friends   
+      terry:co-workers
+    % <emphasis role="bold">pts listo terry:friends</emphasis>
+    Groups owned by terry:friends (id: -567) are:
+      terry:pals
+      terry:buddies
+ </programlisting>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>Protection Database entries (all)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>owner of Protection Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>creator of Protection Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>group entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>machine entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>user entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>owner of entry</secondary>
+ 
+         <tertiary>displaying for all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>creator of entry</secondary>
+ 
+         <tertiary>displaying for all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>for all users and machines in Protection Database</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS GID</primary>
+ 
+         <secondary>displaying</secondary>
+ 
+         <tertiary>for all groups in Protection Database</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>owner</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creator</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>owner</secondary>
+ 
+         <tertiary>displaying for all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>displaying all</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>listentries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts listentries</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ541">
+       <title>To display all Protection Database entries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts listentries</emphasis> command to display all Protection Database entries.
+           <programlisting>
+    % <emphasis role="bold">pts listentries</emphasis> [<emphasis role="bold">-users</emphasis>] [<emphasis role="bold">-groups</emphasis>]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">liste</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listentries</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-users</emphasis></term>
+ 
+               <listitem>
+                 <para>Displays user and machine entries. The same output results if you omit both this flag and the <emphasis
+                 role="bold">-groups</emphasis> flag.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-groups</emphasis></term>
+ 
+               <listitem>
+                 <para>Displays group entries.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output is a table that includes the following columns. Examples follow. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Name</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the entry's name.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>ID</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the entry's AFS identification number. For user and machine entries, the AFS user ID (AFS UID) is a
+               positive integer; for groups, the AFS group ID (AFS GID) is a negative integer.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Owner</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the AFS ID of the user or group who owns the entry and therefore can administer it.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>Creator</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Specifies the AFS UID of the user who created the entry.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>The following example is from the ABC Corporation cell. The issuer provides no options, so the output includes user and
+       machine entries.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts listentries</emphasis>
+    Name                          ID  Owner Creator
+    anonymous                  32766   -204    -204 
+    admin                          1   -204   32766 
+    pat                         1000   -204       1 
+    terry                       1001   -204       1 
+    smith                       1003   -204       1 
+    jones                       1004   -204       1 
+    192.12.105.33               2000   -204       1 
+    192.12.105.46               2001   -204       1 
+ </programlisting>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>Protection Database machine entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>machine entry, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>assigning</primary>
+ 
+         <secondary>AFS UID to machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>Protection Database entry, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>AFS UID, assigning</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ542">
+     <title>Creating User and Machine Entries</title>
+ 
+     <para>An entry in the Protection Database is one of the two required components of every AFS user account, along with an entry
+     in the Authentication Database. It is best to create a Protection Database user entry only in the context of creating a complete
+     user account, by using the <emphasis role="bold">uss add</emphasis> or <emphasis role="bold">uss bulk</emphasis> command as
+     described in <link linkend="HDRWQ449">Creating and Deleting User Accounts with the uss Command Suite</link>, or the <emphasis
+     role="bold">pts createuser</emphasis> command as described in <link linkend="HDRWQ502">Creating AFS User Accounts</link>.</para>
+ 
+     <para>You can also use the <emphasis role="bold">pts createuser</emphasis> command to create Protection Database machine
+     entries, which can then be used to control access based on the machine from which the access request originates. After creating
+     a machine entry, add it to a Protection Database group and place the group on ACLs ( a machine cannot appear on ACLs directly).
+     Because all replicas of a volume share the same ACL (the one on the volume's root directory mount point), you can replicate the
+     volume that houses a program's binary file while still complying with a machine-based license agreement as required by the
+     program's manufacturer. If you do not place any other entries on the ACL, then only users working on the designated machines can
+     access the file.</para>
+ 
+     <para>Keep in mind that creating an ACL entry for a group with machine entries in it extends access to both authenticated and
+     unauthenticated users working on the machine. However, you can deny access to unauthenticated users by omitting an entry for the
+     <emphasis role="bold">system:anyuser</emphasis> group from the ACLs of the parent directories in the file's pathname.
+     Conversely, if you want to enable unauthenticated users on the machine to access a file, then the ACL on every directory leading
+     to it must include an entry for either the <emphasis role="bold">system:anyuser</emphasis> group or a group to which the machine
+     entry belongs. For more information on the <emphasis role="bold">system:anyuser</emphasis> group, see <link
+     linkend="HDRWQ535">The System Groups</link>.</para>
+ 
+     <para>Because a machine entry can include unauthenticated users, it is best not to add both machine entries and user entries to
+     the same group. In general, it is easier to use and administer nonmixed groups. A machine entry can represent a single machine,
+     or multiple machines with consecutive IP addresses (that is, all machines on a network or subnet) specified by a wildcard
+     notation. See the instructions in <link linkend="HDRWQ543">To create machine entries in the Protection Database</link>.</para>
+ 
+     <para>By default, the Protection Server assigns the next available AFS UID to a new user or machine entry. It is best to allow
+     this, especially for machine entries. For user entries, it makes sense to assign an AFS UID only if the user already has a UNIX
+     UID that the AFS UID needs to match (see <link linkend="HDRWQ496">Assigning AFS and UNIX UIDs that Match</link>). When
+     automatically allocating an AFS UID, the Protection Server increments the <computeroutput>max user id</computeroutput> counter
+     by one and assigns the result to the new entry. Use the <emphasis role="bold">pts listmax</emphasis> command to display the
+     counter, as described in <link linkend="HDRWQ560">Displaying and Setting the AFS UID and GID Counters</link>. <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>reusing, about</secondary>
+       </indexterm></para>
+ 
+     <para>Do not reuse the AFS UIDs of users who have left your cell permanently or machine entries you have removed, even though
+     doing so seems to avoid the apparent waste of IDs. When you remove a user or machine entry from the Protection Database, the
+     <emphasis role="bold">fs listacl</emphasis> command displays the AFS UID associated with the former entry, rather than the name.
+     If you then assign the AFS UID to a new user or machine, the new user or machine automatically inherits permissions that were
+     granted to the previous possessor of the ID. To remove obsolete AFS UIDs from ACLs, use the <emphasis role="bold">fs
+     cleanacl</emphasis> command described in <link linkend="HDRWQ579">Removing Obsolete AFS IDs from ACLs</link>.</para>
+ 
+     <para>In addition to the name and AFS UID, the Protection Server records the following values in the indicated fields of a new
+     user or machine's entry. For more information and instructions on displaying an entry, see <link linkend="HDRWQ537">To display a
+     Protection Database entry</link>. <itemizedlist>
+         <listitem>
+           <para>It sets the <computeroutput>owner</computeroutput> field to the <emphasis
+           role="bold">system:administrators</emphasis> group, indicating that the group's members administer the entry.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>creator</computeroutput> field to the username of the user who issued the <emphasis
+           role="bold">pts createuser</emphasis> command (or the <emphasis role="bold">uss add</emphasis> or <emphasis
+           role="bold">uss bulk</emphasis> command).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>membership</computeroutput> field to <emphasis role="bold">0</emphasis> (zero), because
+           the new entry does not yet belong to any groups.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>flags</computeroutput> field to <emphasis role="bold">S----</emphasis>; for explanation,
+           see <link linkend="HDRWQ559">Setting the Privacy Flags on Database Entries</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>group quota</computeroutput> field to <emphasis role="bold">20</emphasis>, meaning that
+           the new user can create 20 groups. This field has no meaning for machine entries. For further discussion, see <link
+           linkend="HDRWQ558">Setting Group-Creation Quota</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>createuser</secondary>
+ 
+       <tertiary>machine entry</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pts createuser</secondary>
+ 
+       <tertiary>machine entry</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ543">
+       <title>To create machine entries in the Protection Database</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts createuser</emphasis> command to create one or more machine entries.
+           <programlisting>
+    % <emphasis role="bold">pts createuser -name</emphasis> &lt;<replaceable>user name</replaceable>&gt;+ 
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cu</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an alias for <emphasis role="bold">createuser</emphasis> (and <emphasis role="bold">createu</emphasis> is
+                 the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-name</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies an IP address in dotted-decimal notation for each machine entry. An entry can represent a single
+                 machine or a set of several machines with consecutive IP addresses, using the wildcard notation described in the
+                 following list. The letters <emphasis role="bold">W</emphasis>, <emphasis role="bold">X</emphasis>, <emphasis
+                 role="bold">Y</emphasis>, and <emphasis role="bold">Z</emphasis> each represent an actual number value in the field:
+                 <itemizedlist>
+                     <listitem>
+                       <para><emphasis role="bold">W.X.Y.Z</emphasis> represents a single machine, for example <emphasis
+                       role="bold">192.12.108.240</emphasis>.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para><emphasis role="bold">W.X.Y.0</emphasis> matches all machines whose IP addresses start with the first
+                       three numbers. For example, <emphasis role="bold">192.12.108.0</emphasis> matches both <emphasis
+                       role="bold">192.12.108.119</emphasis> and <emphasis role="bold">192.12.108.120</emphasis>, but does not match
+                       <emphasis role="bold">192.12.105.144</emphasis>.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para><emphasis role="bold">W.X.0.0</emphasis> matches all machines whose IP addresses start with the first
+                       two numbers. For example, the address <emphasis role="bold">192.12.0.0</emphasis> matches both <emphasis
+                       role="bold">192.12.106.23</emphasis> and <emphasis role="bold">192.12.108.120</emphasis>, but does not match
+                       <emphasis role="bold">192.5.30.95</emphasis>.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para><emphasis role="bold">W.0.0.0</emphasis> matches all machines whose IP addresses start with the first
+                       number in the specified address. For example, the address <emphasis role="bold">192.0.0.0</emphasis> matches
+                       both <emphasis role="bold">192.5.30.95</emphasis> and <emphasis role="bold">192.12.108.120</emphasis>, but
+                       does not match <emphasis role="bold">138.255.63.52</emphasis>.</para>
+                     </listitem>
+                   </itemizedlist></para>
+ 
+                 <para>Do not define a machine entry with the name <emphasis role="bold">0.0.0.0</emphasis> to match every machine.
+                 The <emphasis role="bold">system:anyuser</emphasis> group is equivalent.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example creates a machine entry that includes all of the machines in the <emphasis
+       role="bold">192.12</emphasis> network.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts cu 192.12.0.0</emphasis>
+ </programlisting>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>Protection Database group entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>group entry, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>assigning</primary>
+ 
+         <secondary>AFS GID to group</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>Protection Database entry, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>AFS GID, assigning</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>name, assigning</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>regular and prefix-less, defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>regular group</primary>
+ 
+         <secondary></secondary>
+ 
+         <see>group</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>prefix-less group</primary>
+ 
+         <secondary></secondary>
+ 
+         <see>group</see>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ544">
+     <title>Creating Groups</title>
+ 
+     <para>Before you can add members to a group, you must create the group entry itself. The instructions in this section explain
+     how to create both regular and prefix-less groups: <itemizedlist>
+         <listitem>
+           <para>A <emphasis>regular group</emphasis>'s name is preceded by a prefix that indicates who owns the group, in the
+           following format:</para>
+ 
+           <para>owner_name<emphasis role="bold">:</emphasis>group_name</para>
+ 
+           <para>Any user can create a regular group. Group names must always be typed in full, so a short group_name that indicates
+           the group's purpose or its members' common interest is practical. Groups with names like <emphasis
+           role="bold">terry:1</emphasis> and <emphasis role="bold">terry:2</emphasis> are less useful because their purpose is
+           unclear. For more details on the required format for regular group names, see the instructions in <link
+           linkend="HDRWQ546">To create groups</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A <emphasis>prefix-less group</emphasis>, as its name suggests, has only one field in its name, equivalent to a
+           regular group's group_name field.</para>
+ 
+           <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can create prefix-less groups. For
+           a discussion of their purpose, see <link linkend="HDRWQ548">Using Prefix-Less Groups</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>By default, the Protection Server assigns the next available AFS GID to a new group entry, and it is best to allow this.
+     When automatically allocating an AFS GID (which is a negative integer), the Protection Server decrements the <computeroutput>max
+     group id</computeroutput> counter by one and assigns the result to the new group. Use the <emphasis role="bold">pts
+     listmax</emphasis> command to display the counter, as described in <link linkend="HDRWQ560">Displaying and Setting the AFS UID
+     and GID Counters</link>.</para>
+ 
+     <para>In addition to the name and AFS GID, the Protection Server records the following values in the indicated fields of a new
+     group's entry. See <link linkend="HDRWQ537">To display a Protection Database entry</link>. <itemizedlist>
+         <listitem>
+           <para>It sets the <computeroutput>owner</computeroutput> field to the issuer of the <emphasis role="bold">pts
+           creategroup</emphasis> command, or to the user or group specified by the <emphasis role="bold">-owner</emphasis>
+           argument.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>creator</computeroutput> field to the username of the user who issued the <emphasis
+           role="bold">pts creategroup</emphasis> command.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>membership</computeroutput> field to <emphasis role="bold">0</emphasis> (zero), because
+           the group currently has no members.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>flags</computeroutput> field to <emphasis role="bold">S-M--</emphasis>; for explanation,
+           see <link linkend="HDRWQ559">Setting the Privacy Flags on Database Entries</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It sets the <computeroutput>group quota</computeroutput> field to <emphasis role="bold">0</emphasis>, because this
+           field has no meaning for group entries.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>using effectively</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>private use of group</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>private use</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>shared use of group</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>shared use</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group use of group</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>group use</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>self-owned group</primary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ545">
+       <title>Using Groups Effectively</title>
+ 
+       <para>The main reason to create groups is to place them on ACLs, which enables you to control access for multiple users
+       without having to list them individually on the ACL. There are three basic ways to use groups, each suited to a different
+       purpose: <itemizedlist>
+           <listitem>
+             <para><emphasis>Private use</emphasis>: you create a group and place it on the ACL of directories you own, without
+             necessarily informing the group's members that they belong to it. Members notice only that they can or cannot access the
+             directory in a certain way. You retain sole administrative control over the group, since you are the owner.</para>
+ 
+             <para>The existence of the group and the identity of its members is not necessarily secret. Other users can use the
+             <emphasis role="bold">fs listacl</emphasis> command and see the group's name on a directory's ACL, or use the <emphasis
+             role="bold">pts membership</emphasis> command to list the groups they themselves belong to. You can set the group's
+             third privacy flag to limit who can use the <emphasis role="bold">pts membership</emphasis> command to list the group's
+             membership, but a member of the <emphasis role="bold">system:administrators</emphasis> group always can; see <link
+             linkend="HDRWQ559">Setting the Privacy Flags on Database Entries</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis>Shared use</emphasis>: you inform the group's members that they belong to the group, but you still
+             remain the sole administrator. For example, the manager of a work group can create a group of all the members in the
+             work group, and encourage them to use it on the ACLs of directories that house information they want to share with other
+             members of the group.</para>
+ 
+             <note>
+               <para>If you place a group owned by someone else on your ACLs, the group's owner can change the group's membership
+               without informing you. Someone new can gain or lose access in a way you did not intend and without your
+               knowledge.</para>
+             </note>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis>Group use</emphasis>: you create a group and then use the <emphasis role="bold">pts chown</emphasis>
+             command to assign ownership to a group, either another group or the group itself (the latter type is a self-owned
+             group). You inform the members of the owning group that they all can administer the owned group.</para>
+ 
+             <para>The main advantage of designating a group as an owner is that it spreads responsibility for administering a group
+             among several people. A single person does not have to perform all administrative tasks, and if the original creator
+             leaves the group, ownership does not have to be transferred.</para>
+ 
+             <para>However, everyone in the owner group can make changes that affect others negatively, such as adding or removing
+             people from the group inappropriately or changing the group's ownership to themselves exclusively. These problems can be
+             particularly sensitive in a <emphasis>self-owned</emphasis> group. Using an owner group works best if all the members
+             know and trust each other; it is probably wise to keep the number of people in an owner group small.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>creategroup</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts creategroup</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ546">
+       <title>To create groups</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>If creating a prefix-less group, verify that you belong to the <emphasis
+           role="bold">system:administrators</emphasis> group. If necessary, issue the <emphasis role="bold">pts
+           membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display the members of the
+           system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts creategroup</emphasis> command to create each group. All of the groups have the
+           same owner. <programlisting>
+    % <emphasis role="bold">pts creategroup  -name</emphasis> &lt;<replaceable>group name</replaceable>&gt;+ [<emphasis role="bold">-owner</emphasis> &lt;<replaceable>owner of the group</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cg</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an alias for <emphasis role="bold">creategroup</emphasis> (and <emphasis role="bold">createg</emphasis> is
+                 the shortest acceptable abbreviation). <indexterm>
+                     <primary>owner</primary>
+ 
+                     <secondary>Protection Database entry</secondary>
+ 
+                     <tertiary>rules for assigning</tertiary>
+                   </indexterm> <indexterm>
+                     <primary>rules</primary>
+ 
+                     <secondary>group names, assigning</secondary>
+                   </indexterm> <indexterm>
+                     <primary>group</primary>
+ 
+                     <secondary>rules for naming</secondary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names each group to create. The name can include up to 63 lowercase letters or numbers, but it is best not to
+                 include punctuation characters, especially those that have a special meaning to the shell.</para>
+ 
+                 <para>A prefix-less group name cannot include the colon (<emphasis role="bold">:</emphasis>), because it is used to
+                 separate the two parts of a regular group name:</para>
+ 
+                 <para>owner_name<emphasis role="bold">:</emphasis>group_name</para>
+ 
+                 <para>The Protection Server requires that the owner_name prefix of a regular group name accurately indicate the
+                 group's owner. By default, you are recorded as the owner, and the owner_name must be your AFS username. You can
+                 include the <emphasis role="bold">-owner</emphasis> argument to designate another AFS user, a regular group, or a
+                 prefix-less group as the owner, providing the required value in the owner_name field: <itemizedlist>
+                     <listitem>
+                       <para>If the owner is a user, it must be the AFS username.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>If the owner is another regular group, it must match the owning group's owner_name field. For example,
+                       if the owner is the group <emphasis role="bold">terry:associates</emphasis>, the owner field must be <emphasis
+                       role="bold">terry</emphasis>.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>If the owner is a prefix-less group, it must be the owning group's name.</para>
+                     </listitem>
+                   </itemizedlist></para>
+ 
+                 <para>(For a discussion of why it is useful for a group to own another group, see <link linkend="HDRWQ545">Using
+                 Groups Effectively</link>.)</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-owner</emphasis></term>
+ 
+               <listitem>
+                 <para>Is optional and designates an owner other than the issuer of the command. Specify either an AFS username or
+                 the name of a regular or prefix-less group that already has at least one member. Do not include this argument if you
+                 want to make the group self-owned as described in <link linkend="HDRWQ545">Using Groups Effectively</link>. For
+                 instructions, see <link linkend="HDRWQ547">To create a self-owned group</link>.</para>
+ 
+                 <para>Do not designate a machine as a group's owner. Because a machine cannot authenticate, there is no way for a
+                 machine to administer the group.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>self-owned, creating</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>group, self-owned</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>group ownership to self-owned</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ547">
+       <title>To create a self-owned group</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts creategroup</emphasis> command to create a group. Do not include the <emphasis
+           role="bold">-owner</emphasis> argument, because you must own a group to reassign ownership. For complete instructions, see
+           <link linkend="HDRWQ546">To create groups</link>. <programlisting>
+    % <emphasis role="bold">pts creategroup</emphasis>  &lt;<replaceable>group name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts adduser</emphasis> command to add one or more members to the group (a group must
+           already have at least one member before owning another group). For complete instructions, see <link
+           linkend="HDRWQ549">Adding and Removing Group Members</link>. <programlisting>
+    % <emphasis role="bold">pts adduser -user</emphasis> &lt;<replaceable>user name</replaceable>&gt;+ <emphasis role="bold">-group</emphasis> &lt;<replaceable>group name</replaceable>&gt;+
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts chown</emphasis> command to assign group ownership to the group itself. For
+           complete instructions, see <link linkend="HDRWQ555">To change a group's owner</link>. <programlisting>
+    % <emphasis role="bold">pts chown</emphasis> &lt;<replaceable>group name</replaceable>&gt; &lt;<replaceable>new owner</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ548">
+       <title>Using Prefix-Less Groups</title>
+ 
+       <para>Members of the <emphasis role="bold">system:administrators</emphasis> group can create prefix-less groups, which are
+       particularly suitable for <emphasis>group use</emphasis>, which is described in <link linkend="HDRWQ545">Using Groups
+       Effectively</link>.</para>
+ 
+       <para>Suppose, for example, that the manager of the ABC Corporation's Accounting Department, user <emphasis
+       role="bold">smith</emphasis>, creates a group that includes all of the corporation's accountants and places the group on the
+       ACLs of directories that house departmental records. Using a prefix-less group rather than a regular group is appropriate for
+       the following reasons: <itemizedlist>
+           <listitem>
+             <para>The fact that <emphasis role="bold">smith</emphasis> created and owns the group is irrelevant, and a regular group
+             must be called <emphasis role="bold">smith:acctg</emphasis>. A prefix-less name like <emphasis
+             role="bold">acctg</emphasis> is more appropriate.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If another user (say <emphasis role="bold">jones</emphasis>) ever replaces <emphasis role="bold">smith</emphasis>
+             as manager of the Accounting Department, <emphasis role="bold">jones</emphasis> needs to become the new owner of the
+             group. If the group is a regular one, its owner_name prefix automatically changes to <emphasis
+             role="bold">jones</emphasis>, but the change in the owner_name prefix does not propagate to any regular groups owned by
+             the group. Someone must use the <emphasis role="bold">pts rename</emphasis> command to change each one's owner_name
+             prefix from <emphasis role="bold">smith</emphasis> to <emphasis role="bold">jones</emphasis>.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>A possible solution is to create an authentication account for a fictional user called <emphasis
+       role="bold">acctg</emphasis> and make it the owner of regular groups which have <emphasis role="bold">acctg</emphasis> as
+       their owner_name prefix. However, if the <emphasis role="bold">acctg</emphasis> account is also used for other purposes, then
+       the number of people who need to know user <emphasis role="bold">acctg</emphasis>'s password is possibly larger than the
+       number of people who need to administer the groups it owns.</para>
+ 
+       <para>A prefix-less group called <emphasis role="bold">acctg</emphasis> solves the problem of inappropriate owner names. The
+       groups that it owns have <emphasis role="bold">acctg</emphasis> as their owner_name prefix, which more accurately reflects
+       their purpose than having the manager's name there. Prefix-less groups are also more accountable than dummy authentication
+       accounts. Belonging to the group enables individuals to exercise the permissions granted to the group on ACLs, but users
+       continue to perform tasks under their own names rather than under the dummy username. Even if the group owns itself, only a
+       finite number of people can administer the group entry.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ549">
+     <title>Adding and Removing Group Members</title>
+ 
+     <para>Users and machines can be members of groups; groups cannot belong to other groups. Newly created groups have no members at
+     all. To add them, use the <emphasis role="bold">pts adduser</emphasis> command; to remove them, use the <emphasis
+     role="bold">pts removeuser</emphasis> command. <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>members to groups</secondary>
+       </indexterm> <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>members, adding</secondary>
+       </indexterm> <indexterm>
+         <primary>members</primary>
+ 
+         <secondary>group, adding</secondary>
+       </indexterm> <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>adding to group</secondary>
+       </indexterm> <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>adding to group</secondary>
+       </indexterm> <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>adduser</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts adduser</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ550">
+       <title>To add users and machines to groups</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group, which enables you to add
+           members to a group regardless of the setting of its fourth (<emphasis role="bold">a</emphasis>) privacy flag. By default
+           the group's owner also has the necessary privilege. If necessary, issue the <emphasis role="bold">pts
+           membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display the members of the
+           system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts adduser</emphasis> command to add one or more members to one or more groups.
+           <programlisting>
+    % <emphasis role="bold">pts adduser -user</emphasis> &lt;<replaceable>user name</replaceable>&gt;+ <emphasis role="bold">-group</emphasis> &lt;<replaceable>group name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">ad</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">adduser</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-user</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies each username or machine IP address to add as a member of each group named by the <emphasis
+                 role="bold">-group</emphasis> argument. A group cannot belong to another group.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">group name</emphasis></term>
+ 
+               <listitem>
+                 <para>Names each group to which to add the new members.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>group members</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>members, removing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>members</primary>
+ 
+         <secondary>group, removing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>removing from group</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>removing from group</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>removeuser</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts removeuser</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ551">
+       <title>To remove users and machines from groups</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group, which enables you to
+           remove members from a group regardless of the setting of its fifth (<emphasis role="bold">r</emphasis>) privacy flag. By
+           default the group's owner also has the necessary privilege. If necessary, issue the <emphasis role="bold">pts
+           membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display the members of the
+           system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts removeuser</emphasis> command to remove one or more members from one or more
+           groups. <programlisting>
+    % <emphasis role="bold">pts removeuser -user</emphasis>  &lt;<replaceable>user name</replaceable>&gt;+  <emphasis role="bold">-group</emphasis> &lt;<replaceable>group name</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">rem</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">removeuser</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-user</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies each user or machine IP address to remove from each group named by the <emphasis
+                 role="bold">-group</emphasis> argument.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-group</emphasis></term>
+ 
+               <listitem>
+                 <para>Names each group from which to remove members.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ552">
+     <title>Deleting Protection Database Entries</title>
+ 
+     <para>It is best to delete a Protection Database user entry only if you are removing the complete user account. Use either the
+     <emphasis role="bold">uss delete</emphasis> command as described in <link linkend="HDRWQ486">Deleting Individual Accounts with
+     the uss delete Command</link>, or the <emphasis role="bold">pts delete</emphasis> command as described in <link
+     linkend="HDRWQ524">Removing a User Account</link>.</para>
+ 
+     <para>To remove machine and group entries, use the <emphasis role="bold">pts delete</emphasis> command as described in this
+     section. The operation has the following results: <itemizedlist>
+         <listitem>
+           <para>When you delete a machine entry, its name (IP address wildcard) is removed from groups.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>When you delete a group entry, its AFS GID appears on ACLs instead of the name. The <emphasis>group-creation
+           quota</emphasis> of the user who created the group increases by one, even if the user no longer owns the group.</para>
+ 
+           <para>To remove obsolete AFS IDs from ACLs, use the <emphasis role="bold">fs cleanacl</emphasis> command as described in
+           <link linkend="HDRWQ579">Removing Obsolete AFS IDs from ACLs</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Database</primary>
+ 
+       <secondary>entry, deleting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>group</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>deleting</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>user</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>deleting</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>machine</primary>
+ 
+       <secondary>Protection Database entry</secondary>
+ 
+       <tertiary>deleting</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>delete</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pts delete</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ553">
+       <title>To delete Protection Database entries</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group or own the group you are
+           deleting. If necessary, issue the <emphasis role="bold">pts membership</emphasis> command, which is fully described in
+           <link linkend="HDRWQ587">To display the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts delete</emphasis> command to delete one or more entries from the Protection
+           Database. <programlisting>
+    % <emphasis role="bold">pts delete</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">del</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">delete</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the IP address or AFS UID of each machine or the name or AFS GID or each group to remove.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>owner</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>owner</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ554">
+     <title>Changing a Group's Owner</title>
+ 
+     <para>For user and machine entries, the Protection Server automatically assigns ownership to the <emphasis
+     role="bold">system:administrators</emphasis> group at creation time, and this cannot be changed. For group entries, you can
+     change ownership. This transfers administrative responsibility for it to another user or group (for information on group
+     ownership of other groups, see <link linkend="HDRWQ545">Using Groups Effectively</link>).</para>
+ 
+     <para>When you create a regular group, its owner_name prefix must accurately reflect its owner, as described in <link
+     linkend="HDRWQ546">To create groups</link>: <itemizedlist>
+         <listitem>
+           <para>If the owner is a user, owner_name is the username.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the owner is a regular group, owner_name is the owning group's owner_name prefix.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the owner is a prefix-less group, owner_name is the owner group's name.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>When you change a regular group's owner, the Protection Server automatically changes its owner_name prefix appropriately.
+     For example, if the user <emphasis role="bold">pat</emphasis> becomes the new owner of the group <emphasis
+     role="bold">terry:friends</emphasis>, its name automatically changes to <emphasis role="bold">pat:friends</emphasis>, both in
+     the Protection Database and on ACLs.</para>
+ 
+     <para>However, the Protection Server does not automatically change the owner_name prefix of any regular groups that the group
+     owns. To continue with the previous example, suppose that the group <emphasis role="bold">terry:friends</emphasis> owns the
+     group <emphasis role="bold">terry:pals</emphasis>. When <emphasis role="bold">pat</emphasis> becomes the new owner of <emphasis
+     role="bold">terry:friends</emphasis>, the name <emphasis role="bold">terry:pals</emphasis> does not change. To change the
+     owner_name prefix of a regular group that is owned by another group (in the example, to change the group's name to <emphasis
+     role="bold">pat:pals</emphasis>), use the <emphasis role="bold">pts rename</emphasis> command as described in <link
+     linkend="HDRWQ556">Changing a Protection Database Entry's Name</link>. <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>owner of entry</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts chown</secondary>
+       </indexterm> <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>chown</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ555">
+       <title>To change a group's owner</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group or own the group for
+           which you are changing the owner. If necessary, issue the <emphasis role="bold">pts membership</emphasis> command, which
+           is fully described in <link linkend="HDRWQ587">To display the members of the system:administrators group</link>.
+           <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If you are changing the group's owner to another group (or to itself)
+           and want to retain administrative privilege on the owned group, verify that you belong to the new owner group. If
+           necessary, issue the <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link
+           linkend="HDRWQ538">To display group membership</link>. <programlisting>
+    % <emphasis role="bold">pts membership</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>Use the <emphasis role="bold">pts adduser</emphasis> command to add yourself if necessary, as fully described in
+           <link linkend="HDRWQ550">To add users and machines to groups</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">pts adduser</emphasis> &lt;<replaceable>user name</replaceable>&gt; &lt;<replaceable>group name</replaceable>&gt;
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts chown</emphasis> command to change the group's owner. <programlisting>
+    % <emphasis role="bold">pts chown</emphasis> &lt;<replaceable>group name</replaceable>&gt; &lt;<replaceable>new owner</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cho</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">chown</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">group name</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the current name of the group.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">new owner</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the user or group to become the group's owner.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">pts listowned</emphasis> command to
+           display any groups that the group owns. As discussed in the introduction to this section, the <emphasis role="bold">pts
+           chown</emphasis> command does not automatically change the owner_name prefix of any regular groups that a group owns.
+           <programlisting>
+    % <emphasis role="bold">pts listowned</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>If you want to change their names to match the new owning group, use the <emphasis role="bold">pts rename</emphasis>
+           command on each one, as described in <link linkend="HDRWQ557">To change the name of a machine or group
+           entry</link>.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">pts rename</emphasis> &lt;<replaceable>old name</replaceable>&gt; &lt;<replaceable>new name</replaceable>&gt;
+ </programlisting>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>name</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>name</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>entry name</secondary>
+ 
+         <tertiary>changing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>name, changing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>Protection Database entry</secondary>
+ 
+         <tertiary>name, changing</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ556">
+     <title>Changing a Protection Database Entry's Name</title>
+ 
+     <para>To change the name of a Protection Database entry, use the <emphasis role="bold">pts rename</emphasis> command. It is best
+     to change a user entry's name only when renaming the entire user account, since so many components of the account
+     (Authentication Database entry, volume name, home directory mount point, and so on) share the name. For instructions, see <link
+     linkend="HDRWQ518">Changing Usernames</link>. A machine entry's name maps to the actual IP address of one or more machine, so
+     changing the entry's name is appropriate only if the IP addresses have changed.</para>
+ 
+     <para>It is likely, then, that most often you need to change group names. The following types of name changes are possible:
+     <itemizedlist>
+         <listitem>
+           <para>Changing a regular group's name to another regular group name. The most common reason for this type of change is
+           that you have used the <emphasis role="bold">pts chown</emphasis> command to change the owner of the group. That operation
+           does not change the owner_name prefix of a regular group owned by the group whose name has been changed. Therefore, you
+           must use the <emphasis role="bold">pts rename</emphasis> command to change it appropriately. For example, when user
+           <emphasis role="bold">pat</emphasis> becomes the owner of the <emphasis role="bold">terry:friends</emphasis> group, its
+           name changes automatically to <emphasis role="bold">pat:friends</emphasis>, but the name of a group it owns, <emphasis
+           role="bold">terry:pals</emphasis>, does not change. Use the <emphasis role="bold">pts rename</emphasis> command to rename
+           <emphasis role="bold">terry:pals</emphasis> to <emphasis role="bold">pat:pals</emphasis>. The Protection Server does not
+           accept changes to the owner_name prefix that do not reflect the true ownership (changing <emphasis
+           role="bold">terry:pals</emphasis> to <emphasis role="bold">smith:pals</emphasis> is not possible).</para>
+ 
+           <para>You can also use the <emphasis role="bold">pts rename</emphasis> command to change the group_name portion of a
+           regular group name, with or without changing the owner_name prefix.</para>
+ 
+           <para>Both the group's owner and the members of the <emphasis role="bold">system:administrators</emphasis> group can
+           change its name to another regular group name.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Changing a regular group's name to a prefix-less name. If you change a group's name in this way, you must also use
+           the <emphasis role="bold">pts rename</emphasis> command to change the name of any regular group that the group owns. Only
+           members of the <emphasis role="bold">system:administrators</emphasis> group can make this type of name change.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Changing a prefix-less name to another prefix-less name. As with other name changes, the owner_name prefix of any
+           regular groups that the prefix-less group owns does not change automatically. You must issue the <emphasis role="bold">pts
+           rename</emphasis> command on them to maintain consistency.</para>
+ 
+           <para>Both the group's owner and the members of the <emphasis role="bold">system:administrators</emphasis> group can
+           change its name to another prefix-less name.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Changing a prefix-less name to a regular name. The owner_name prefix on the new name must accurately reflect the
+           group's ownership. As with other name changes, the owner_name prefix of any regular groups that the prefix-less group owns
+           does not change automatically. You must issue the <emphasis role="bold">pts rename</emphasis> command on them to maintain
+           consistency.</para>
+ 
+           <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can make this type of name
+           change.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pts rename</secondary>
+ 
+       <tertiary>machine or group name</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>rename</secondary>
+ 
+       <tertiary>machine or group name</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ557">
+       <title>To change the name of a machine or group entry</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts rename</emphasis> command to change the entry's name. <programlisting>
+    % <emphasis role="bold">pts rename</emphasis> &lt;<replaceable>old name</replaceable>&gt; &lt;<replaceable>new name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">ren</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">rename</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">old name</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the entry's current name.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">new name</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the new name. If the new name is for a regular group, the owner_name prefix must correctly indicate
+                 the owner.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>group-creation quota in Protection Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>quota</primary>
+ 
+         <secondary>group-creation</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>group creation quota</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>group-creation quota</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>changing</primary>
+ 
+         <secondary>group-creation quota</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ558">
+     <title>Setting Group-Creation Quota</title>
+ 
+     <para>To prevent abuse of system resources, the Protection Server imposes a group-creation quota that limits how many more
+     groups a user can create. When a new user entry is created, the quota is set to 20, but members of the <emphasis
+     role="bold">system:administrators</emphasis> group can use the <emphasis role="bold">pts setfields</emphasis> command to
+     increase or decrease it at any time.</para>
+ 
+     <para>It is pointless to change group-creation quota for machine or group entries. It is not possible to authenticate as a group
+     or machine and then create groups.</para>
+ 
+     <para>To display the group-creation quota, use the <emphasis role="bold">pts examine</emphasis> command to display a user
+     entry's <computeroutput>group quota field</computeroutput>, as described in <link linkend="HDRWQ537">To display a Protection
+     Database entry</link>. <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>setfields</secondary>
+ 
+         <tertiary>setting group creation quota</tertiary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts setfields</secondary>
+ 
+         <tertiary>setting group creation quota</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_622">
+       <title>To set group-creation quota</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts setfields</emphasis> command to specify how many more groups each of one or more
+           users can create. <programlisting>
+   % <emphasis role="bold">pts setfields -nameorid</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+  \
+                   <emphasis role="bold">-groupquota</emphasis> &lt;<replaceable>set limit on group creation</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">setf</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setfields</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-nameorid</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name or AFS UID of each user for which to set group-creation quota.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-groupquota</emphasis></term>
+ 
+               <listitem>
+                 <para>Defines how many groups each user can create in addition to existing groups (in other words, groups that
+                 already exist do not count against the quota). The value you specify overwrites the current value, rather than
+                 incrementing it.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>privacy flags on Protection Database entry</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>user</primary>
+ 
+         <secondary>privacy flags on Protection Database entry</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>machine</primary>
+ 
+         <secondary>privacy flags on Protection Database entry</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>privacy flags on Protection Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>privacy flags on Protection Database entry</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>privacy flags</secondary>
+ 
+         <tertiary>setting</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ559">
+     <title>Setting the Privacy Flags on Database Entries</title>
+ 
+     <para>Members of the <emphasis role="bold">system:administrators</emphasis> group can always display and administer Protection
+     Database entries in any way, and regular users can display and administer their own entries and any group entries they own. The
+     <emphasis>privacy flags</emphasis> on a Protection Database entry determine who else can display certain information from the
+     entry, and who can add and remove members in a group.</para>
+ 
+     <para>To display the flags, use the <emphasis role="bold">pts examine</emphasis> command as described in <link
+     linkend="HDRWQ537">To display a Protection Database entry</link>. The flags appear in the output's
+     <computeroutput>flags</computeroutput> field. To set the flags, include the <emphasis role="bold">-access</emphasis> argument to
+     the <emphasis role="bold">pts setfields</emphasis> command.</para>
+ 
+     <para>The five flags always appear, and always must be set, in the following order:</para>
+ 
+     <variablelist>
+       <varlistentry>
+         <term><emphasis role="bold">s</emphasis></term>
+ 
+         <listitem>
+           <para>Controls who can issue the <emphasis role="bold">pts examine</emphasis> command to display the entry.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term><emphasis role="bold">o</emphasis></term>
+ 
+         <listitem>
+           <para>Controls who can issue the <emphasis role="bold">pts listowned</emphasis> command to display the groups that a user
+           or group owns.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term><emphasis role="bold">m</emphasis></term>
+ 
+         <listitem>
+           <para>Controls who can issue the <emphasis role="bold">pts membership</emphasis> command to display the groups a user or
+           machine belongs to, or which users or machines belong to a group.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term><emphasis role="bold">a</emphasis></term>
+ 
+         <listitem>
+           <para>Controls who can issue the <emphasis role="bold">pts adduser</emphasis> command to add a user or machine to a group.
+           It is meaningful only for groups, but a value must always be set for it even on user and machine entries.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
+         <term><emphasis role="bold">r</emphasis></term>
+ 
+         <listitem>
+           <para>Controls who can issue the <emphasis role="bold">pts removeuser</emphasis> command to remove a user or machine from
+           a group. It is meaningful only for groups, but a value must always be set for it even on user and machine entries.</para>
+         </listitem>
+       </varlistentry>
+     </variablelist>
+ 
+     <para>Each flag can take three possible types of values to enable a different set of users to issue the corresponding command:
+     <itemizedlist>
+         <listitem>
+           <para>A hyphen (<emphasis role="bold">-</emphasis>) designates the members of the <emphasis
+           role="bold">system:administrators</emphasis> group and the entry's owner. For user entries, it designates the user in
+           addition.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The lowercase version of the letter applies meaningfully to groups only, and designates members of the group in
+           addition to the individuals designated by the hyphen.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The uppercase version of the letter designates everyone.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>For example, the flags <computeroutput>SOmar</computeroutput> on a group entry indicate that anyone can examine the
+     group's entry and display the groups that it owns, and that only the group's members can display, add, or remove its
+     members.</para>
+ 
+     <para>The default privacy flags for user and machine entries are <computeroutput>S----</computeroutput>, meaning that anyone can
+     display the entry. The ability to perform any other functions is restricted to members of the <emphasis
+     role="bold">system:administrators</emphasis> group and the entry's owner (as well as the user for a user entry).</para>
+ 
+     <para>The default privacy flags for group entries are <computeroutput>S-M--</computeroutput>, meaning that all users can display
+     the entry and the members of the group, but only the entry owner and members of the <emphasis
+     role="bold">system:administrators</emphasis> group can perform other functions. <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>setfields</secondary>
+ 
+         <tertiary>setting privacy flags</tertiary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts setfields</secondary>
+ 
+         <tertiary>setting privacy flags</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_624">
+       <title>To set a Protection Database entry's privacy flags</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts setfields</emphasis> command to set the privacy flags. <programlisting>
+    % <emphasis role="bold">pts setfields</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;+ <emphasis
+                 role="bold">-access</emphasis> &lt;<replaceable>set privacy flags</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">setf</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setfields</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">user or group name or id</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the name or AFS UID of each user, the IP address or AFS UID of each machine, or the name or AFS GID
+                 of each group for which to set the privacy flags.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-access</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies the set of privacy flags to associate with each entry. Provide a value for each of the five flags,
+                 observing the following constraints: <itemizedlist>
+                     <listitem>
+                       <para>Provide a value for all five flags, even though the fourth and fifth flags are not meaningful for user
+                       and machine entries.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>For self-owned groups, the hyphen is equivalent to a lowercase letter, because all the members of a
+                       self-owned group own it.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>Set the first flag to lowercase <emphasis role="bold">s</emphasis> or uppercase <emphasis
+                       role="bold">S</emphasis> only. For user and machine entries, the Protection Server interprets the lowercase
+                       <emphasis role="bold">s</emphasis> as equivalent to the hyphen.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>Set the second flag to the hyphen (<emphasis role="bold">-</emphasis>) or uppercase <emphasis
+                       role="bold">O</emphasis> only. For groups, the Protection Server interprets the hyphen as equivalent to
+                       lowercase <emphasis role="bold">o</emphasis> (that is, members of a group can always list the groups that it
+                       owns).</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>Set the third flag to the hyphen (<emphasis role="bold">-</emphasis>), lowercase <emphasis
+                       role="bold">m</emphasis>, or uppercase <emphasis role="bold">M</emphasis>. For user and machine entries, the
+                       lowercase <emphasis role="bold">m</emphasis> does not have a meaningful interpretation, because they have no
+                       members.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>Set the fourth flag to the hyphen (<emphasis role="bold">-</emphasis>), lowercase <emphasis
+                       role="bold">a</emphasis>, or uppercase <emphasis role="bold">A</emphasis>. Although this flag does not have a
+                       meaningful interpretation for user and machine entries (because they have no members), it must be set,
+                       preferably to the hyphen.</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>Set the fifth flag to the hyphen (<emphasis role="bold">-</emphasis>) or lowercase <emphasis
+                       role="bold">r</emphasis> only. Although this flag does not have a meaningful interpretation for user and
+                       machine entries (because they have no members), it must be set, preferably to the hyphen.</para>
+                     </listitem>
+                   </itemizedlist></para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>counter</primary>
+ 
+         <secondary>Protection Database (max user id, max group id)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>max user id and max group id counters, displaying and setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>counter for automatic allocation, displaying and setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS GID</primary>
+ 
+         <secondary>counter for automatic allocation, displaying and setting</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ560">
+     <title>Displaying and Setting the AFS UID and GID Counters</title>
+ 
+     <para>When you use the <emphasis role="bold">pts createuser</emphasis> command to create a user or machine entry in the
+     Protection Database, the Protection Server by default automatically allocates an AFS user ID (AFS UID) for it; similarly, it
+     allocates an AFS group ID (AFS GID) for each group entry you create with the <emphasis role="bold">pts creategroup</emphasis>
+     command. It tracks the next available AFS UID (which is a positive integer) and AFS GID (which is a negative integer) with the
+     <computeroutput>max user id</computeroutput> and <computeroutput>max group id</computeroutput> counters, respectively.</para>
+ 
+     <para>Members of the <emphasis role="bold">system:administrators</emphasis> group can include the <emphasis
+     role="bold">-id</emphasis> argument to either <emphasis role="bold">pts</emphasis> creation command to assign a specific ID to a
+     new user, machine, or group. It often makes sense to assign AFS UIDs explicitly when creating AFS accounts for users with
+     existing UNIX accounts, as discussed in <link linkend="HDRWQ456">Assigning AFS and UNIX UIDs that Match</link>. It is also
+     useful if you want to establish ranges of IDs that correspond to departmental affiliations (for example, assigning AFS UIDs from
+     300 to 399 to members of one department, AFS UIDs from 400 to 499 to another department, and so on).</para>
+ 
+     <para>To display the current value of the counters, use the <emphasis role="bold">pts listmax</emphasis> command. When you next
+     create a user or machine entry and do not specify its AFS UID, the Protection Server increments the <computeroutput>max user
+     id</computeroutput> counter by one and assigns that number to the new entry. When you create a new group and do not specify its
+     AFS GID, the Protection Server decrements the <computeroutput>max group id</computeroutput> counter by one (makes it more
+     negative), and assigns that number to the new group.</para>
+ 
+     <para>You can change the value of either counter, or both, in one of two ways:</para>
+ 
+     <itemizedlist>
+       <listitem>
+         <para>Directly, using the <emphasis role="bold">pts setmax</emphasis> command.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Indirectly, by using the <emphasis role="bold">-id</emphasis> argument to the <emphasis role="bold">pts
+         createuser</emphasis> command to assign an AFS UID that is larger than the <computeroutput>max user id</computeroutput>
+         counter, or by using the <emphasis role="bold">-id</emphasis> to the <emphasis role="bold">pts creategroup</emphasis>
+         command to assign an AFS GID that is less (more negative) than the max group id counter. In either case, the Protection
+         Server changes the counter to the value of the <emphasis role="bold">-id</emphasis> argument. The Protection Server does not
+         use the IDs between the previous value of the counter and the new one when allocating IDs automatically, unless you use the
+         <emphasis role="bold">pts setmax</emphasis> command to move the counter back to its old value.</para>
+ 
+         <para>If the value you specify with the <emphasis role="bold">-id</emphasis> argument is less than the <computeroutput>max
+         user id</computeroutput> counter or greater (less negative) than the <computeroutput>max group id</computeroutput> counter,
+         then the counter does not change.</para>
+       </listitem>
+     </itemizedlist>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>listmax</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pts listmax</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>max user id counter (Protection Database)</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>max group id counter (Protection Database)</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>counters for AFS UID and AFS GID</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>AFS user id and max group id counters</secondary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ561">
+       <title>To display the AFS ID counters</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts listmax</emphasis> command to display the counters. <programlisting>
+    % <emphasis role="bold">pts listmax</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">listm</emphasis> is an acceptable abbreviation of <emphasis
+           role="bold">listmax</emphasis>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example illustrates the output's format. In this case, the next automatically assigned AFS UID is 5439 and
+       AFS GID is -469.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts listmax</emphasis>
+    Max user id is 5438 and max group id is -468.
+ </programlisting>
+ 
+       <indexterm>
+         <primary>max user id counter (Protection Database)</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>max group id counter (Protection Database)</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>counters for AFS UID and AFS GID</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>AFS user id and max group id counters</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>ID counters, setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>AFS UID and AFS GID counters</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Protection Database</primary>
+ 
+         <secondary>setting</secondary>
+ 
+         <tertiary>counters for AFS UIDs</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>setting counters for automatic allocation</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>AFS UID counters</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>setmax</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts setmax</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_627">
+       <title>To set the AFS ID counters</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts setmax</emphasis> command to set the <computeroutput>max user
+           id</computeroutput> counter, the <computeroutput>max group id</computeroutput> counter, or both. <programlisting>
+    % <emphasis role="bold">pts setmax</emphasis> [<emphasis role="bold">-group</emphasis> &lt;<replaceable>group max</replaceable>&gt;] [<emphasis
+                 role="bold">-user</emphasis> &lt;<replaceable>user max</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">setm</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">setmax</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-group</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies an integer one greater (less negative) than the AFS GID that the Protection Server is to assign to
+                 the next group entry. Because the value is a negative integer, precede it with a hyphen (<emphasis
+                 role="bold">-</emphasis>).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-user</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies an integer one less than the AFS UID that the Protection Server is to assign to the next user or
+                 machine entry.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd020.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd020.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd020.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,1704 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ562">
+   <title>Managing Access Control Lists</title>
+ 
+   <para>To control access to a directory and all of the files in it, AFS associates an <emphasis>access control list</emphasis>
+   (<emphasis>ACL</emphasis>) with it, rather than the mode bits that the UNIX file system (UFS) associates with individual files or
+   directories. AFS ACLs provide more refined access control because there are seven access permissions rather than UFS's three, and
+   there is room for approximately 20 user or group entries on an ACL, rather than just the three UFS entries (<emphasis
+   role="bold">owner</emphasis>, <emphasis role="bold">group</emphasis>, and <emphasis role="bold">other</emphasis>).</para>
+ 
+   <sect1 id="HDRWQ563">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="57*" />
+ 
+         <colspec colwidth="43*" />
+ 
+         <tbody>
+           <row>
+             <entry>Examine access control list</entry>
+ 
+             <entry><emphasis role="bold">fs listacl</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Edit ACL's normal permissions section</entry>
+ 
+             <entry><emphasis role="bold">fs setacl</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Edit ACL's negative permissions section</entry>
+ 
+             <entry><emphasis role="bold">fs setacl</emphasis> with <emphasis role="bold">-negative</emphasis> flag</entry>
+           </row>
+ 
+           <row>
+             <entry>Replace an ACL</entry>
+ 
+             <entry><emphasis role="bold">fs setacl</emphasis> with <emphasis role="bold">-clear</emphasis> flag</entry>
+           </row>
+ 
+           <row>
+             <entry>Copy an ACL</entry>
+ 
+             <entry><emphasis role="bold">fs copyacl</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove obsolete AFS UIDs</entry>
+ 
+             <entry><emphasis role="bold">fs cleanacl</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ565">
+     <title>Protecting Data in AFS</title>
+ 
+     <indexterm>
+       <primary>protection of file data</primary>
+ 
+       <secondary>see also: <emphasis>ACL</emphasis></secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>protection of file data</primary>
+ 
+       <secondary>AFS compared to UFS<emphasis>ACL</emphasis></secondary>
+     </indexterm>
+ 
+     <para>This section describes the main differences between the AFS and UFS file protection systems, discusses the implications of
+     directory-level protections, and describes the seven access permissions.</para>
+ 
+     <sect2 id="HDRWQ566">
+       <title>Differences Between UFS and AFS Data Protection</title>
+ 
+       <indexterm>
+         <primary>UFS</primary>
+ 
+         <secondary>file protection compared to AFS</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>protection of file data</primary>
+ 
+         <secondary>AFS compared to UFS<emphasis>ACL</emphasis></secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>compared to UNIX protection</secondary>
+       </indexterm>
+ 
+       <para>The UFS mode bits data protection system and the AFS ACL system differ in the following ways: <itemizedlist>
+           <listitem>
+             <para>Protection at the file level (UFS) versus the directory level (AFS)</para>
+ 
+             <para>UFS associates a set of nine mode bits with each file element, three (<emphasis role="bold">rwx</emphasis>) for
+             each of the element's owner, owning group, and all other users. A similar set of mode bits on the file's directory
+             applies to the file only in an oblique way.</para>
+ 
+             <para>An AFS ACL instead protects all files in a directory in the same way. If a certain file is more sensitive than
+             others, store it in a directory with a more restrictive ACL.</para>
+ 
+             <para>Defining access at the directory level has important consequences: <indexterm>
+                 <primary>directory-level data protection</primary>
+ 
+                 <secondary>implications</secondary>
+               </indexterm> <itemizedlist>
+                 <listitem>
+                   <para>The permissions on a directory's ACL apply to all of the files in the directory. When you move a file to a
+                   different directory, you effectively change the access permissions that apply to it to those on its new
+                   directory's ACL. Changing a directory's ACL changes the protection on all the files in it.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>When you create a subdirectory, its initial ACL is created as a copy of its parent directory's ACL. You can
+                   then change the subdirectory's ACL independently. However, the parent directory's ACL continues to control access
+                   to the subdirectory in the following way: the parent directory's ACL must grant the <emphasis
+                   role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission to a user (or a group the user
+                   belongs to) in order for the user to access the subdirectory at all.</para>
+ 
+                   <para>In general, then, it is best to assign fairly liberal access permissions to high-level directories
+                   (including user home directories). In particular, it often makes sense to grant at least the <emphasis
+                   role="bold">l</emphasis> permission to the <emphasis role="bold">system:anyuser</emphasis> or <emphasis
+                   role="bold">system:authuser</emphasis> group on high-level directories. For further discussion, see <link
+                   linkend="HDRWQ571">Using Groups on ACLs</link>.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>How the mode bits are interpreted</para>
+ 
+             <para>Mode bits are the only file-protection system in UFS. AFS allows you to set the UNIX mode bits on a file in
+             addition to the ACL on its directory, but it interprets them differently. See <link linkend="HDRWQ580">How AFS
+             Interprets the UNIX Mode Bits</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Three access permissions (UFS) versus seven (AFS)</para>
+ 
+             <para>UFS defines three access permissions in the form of mode bits: <emphasis role="bold">r</emphasis> (<emphasis
+             role="bold">read</emphasis>), <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>), and <emphasis
+             role="bold">x</emphasis> (<emphasis role="bold">execute</emphasis>). AFS defines seven permissions, which makes access
+             control more precise. For detailed descriptions, see <link linkend="HDRWQ567">The AFS ACL Permissions</link>.
+             <simplelist>
+                 <member><emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>)</member>
+ 
+                 <member><emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>)</member>
+ 
+                 <member><emphasis role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>)</member>
+ 
+                 <member><emphasis role="bold">k</emphasis> (<emphasis role="bold">lock</emphasis>)</member>
+ 
+                 <member><emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>)</member>
+ 
+                 <member><emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>)</member>
+ 
+                 <member><emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>)</member>
+               </simplelist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Three defined users and groups (UFS) versus many (AFS)</para>
+ 
+             <para>UFS controls access for one user and two groups by providing a set of mode bits for each: the user who owns the
+             file or directory, a single defined group, and everyone who has an account on the system.</para>
+ 
+             <para>AFS, in contrast, allows you to place many entries (individual users or groups) on an ACL, granting a different
+             set of access permissions to each one. The number of possible entries is about 20, and depends on how much space each
+             entry occupies in the memory allocated for the ACL itself.</para>
+ 
+             <para>AFS defines two system groups, <emphasis role="bold">system:anyuser</emphasis> and <emphasis
+             role="bold">system:authuser</emphasis>, which represent all users and all authenticated users, respectively; for further
+             discussion, see <link linkend="HDRWQ571">Using Groups on ACLs</link>. In addition, users can define their own groups in
+             the Protection Database, consisting of individual users or machine IP addresses. Users who have the <emphasis
+             role="bold">a</emphasis> permission on an ACL can create entries for the system groups as well as groups defined by
+             themselves or other users. For information on defining groups, see <link linkend="HDRWQ531">Administering the Protection
+             Database</link>.</para>
+ 
+             <para>When a user requests access to a file or directory, the File Server sums together all of the permissions that the
+             relevant ACL extends to the user and to groups to which the user belongs. Placing group entries on ACLs therefore can
+             control access for many more users than the ACL can accommodate as individual entries.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ567">
+       <title>The AFS ACL Permissions</title>
+ 
+       <indexterm>
+         <primary>access</primary>
+ 
+         <secondary>permissions on ACL (see entries: <emphasis>permissions on ACL</emphasis>, <emphasis>ACL</emphasis>)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>permissions on ACL</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>permissions defined</secondary>
+       </indexterm>
+ 
+       <para>Functionally, the seven standard ACL permissions fall into two groups: one that applies to the directory itself and one
+       that applies to the files it contains.</para>
+ 
+       <sect3 id="HDRWQ568">
+         <title>The Four Directory Permissions</title>
+ 
+         <para>The four permissions in this group are meaningful with respect to the directory itself. For example, the <emphasis
+         role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) permission does not control addition of data to a file,
+         but rather creation of a new file or subdirectory. <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">The l (lookup) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission functions as something of a gate keeper for access to the directory and its files, because a
+                 user must have it in order to exercise any other permissions. In particular, a user must have this permission to
+                 access anything in the directory's subdirectories, even if the ACL on a subdirectory grants extensive permissions.
+                 <indexterm>
+                     <primary>lookup ACL permission</primary>
+ 
+                     <secondary></secondary>
+ 
+                     <see>l ACL permission</see>
+                   </indexterm> <indexterm>
+                     <primary>l ACL permission</primary>
+                   </indexterm></para>
+ 
+                 <para>This permission enables a user to issue the following commands: <itemizedlist>
+                     <listitem>
+                       <para>The <emphasis role="bold">ls</emphasis> command to list the names of the files and subdirectories in the
+                       directory</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>The <emphasis role="bold">ls -ld</emphasis> command to obtain complete status information for the
+                       directory element itself</para>
+                     </listitem>
+ 
+                     <listitem>
+                       <para>The <emphasis role="bold">fs listacl</emphasis> command to examine the directory's ACL</para>
+                     </listitem>
+                   </itemizedlist></para>
+ 
+                 <para>This permission does not enable a user to read the contents of a file in the directory, to issue the <emphasis
+                 role="bold">ls -l</emphasis> command on a file in the directory, or to issue the <emphasis role="bold">fs
+                 listacl</emphasis> command with the filename as the <emphasis role="bold">-path</emphasis> argument. Those
+                 operations require the <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permission which
+                 is described in <link linkend="HDRWQ569">The Three File Permissions</link>.</para>
+ 
+                 <para>Similarly, this permission does not enable a user to issue the <emphasis role="bold">ls</emphasis>, <emphasis
+                 role="bold">ls -l</emphasis>, <emphasis role="bold">ls -ld</emphasis>, or <emphasis role="bold">fs
+                 listacl</emphasis> commands against a subdirectory of the directory. Those operations require the <emphasis
+                 role="bold">l</emphasis> permission on the ACL of the subdirectory itself.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">The i (insert) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission enables a user to add new files to the directory, either by creating or copying, and to create
+                 new subdirectories. It does not extend into any subdirectories, which are protected by their own ACLs. <indexterm>
+                     <primary>insert ACL permission</primary>
+ 
+                     <secondary></secondary>
+ 
+                     <see>i ACL permission</see>
+                   </indexterm> <indexterm>
+                     <primary>i ACL permission</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">The d (delete) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission enables a user to remove files and subdirectories from the directory or move them into other
+                 directories (assuming that the user has the <emphasis role="bold">i</emphasis> permission on the ACL of the other
+                 directories). <indexterm>
+                     <primary>delete ACL permission</primary>
+ 
+                     <secondary></secondary>
+ 
+                     <see>d ACL permission</see>
+                   </indexterm> <indexterm>
+                     <primary>d ACL permission</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">The a (administer) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission enables a user to change the directory's ACL. Members of the <emphasis
+                 role="bold">system:administrators</emphasis> group implicitly have this permission on every directory (that is, even
+                 if that group does not appear on the ACL). Similarly, the owner of a directory implicitly has this permission on its
+                 ACL and those of all directories below it that he or she owns. <indexterm>
+                     <primary>administer ACL permission</primary>
+ 
+                     <secondary></secondary>
+ 
+                     <see>a ACL permission</see>
+                   </indexterm> <indexterm>
+                     <primary>a ACL permission</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ569">
+         <title>The Three File Permissions</title>
+ 
+         <para>The three permissions in this group are meaningful with respect to files in a directory, rather than the directory
+         itself or its subdirectories. <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">The r (read) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission enables a user to read the contents of files in the directory and to issue the <emphasis
+                 role="bold">ls -l</emphasis> command to stat the file elements. <indexterm>
+                     <primary>read</primary>
+ 
+                     <secondary>ACL permission</secondary>
+ 
+                     <see>r ACL permission)</see>
+                   </indexterm> <indexterm>
+                     <primary>r ACL permission</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">The w (write) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission enables a user to modify the contents of files in the directory and to issue the <emphasis
+                 role="bold">chmod</emphasis> command to change their UNIX mode bits. <indexterm>
+                     <primary>write</primary>
+ 
+                     <secondary>ACL permission</secondary>
+ 
+                     <see>write ACL permission</see>
+                   </indexterm> <indexterm>
+                     <primary>w ACL permission</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">The k (lock) permission</emphasis></term>
+ 
+               <listitem>
+                 <para>This permission enables the user to run programs that issue system calls to lock files in the directory.
+                 <indexterm>
+                     <primary>lock ACL permission</primary>
+ 
+                     <secondary></secondary>
+ 
+                     <see>k ACL permission</see>
+                   </indexterm> <indexterm>
+                     <primary>k ACL permission</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+       </sect3>
+ 
+       <sect3 id="Header_635">
+         <title>The Eight Auxiliary Permissions</title>
+ 
+         <indexterm>
+           <primary>undefined ACL permissions</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>auxiliary ACL permissions</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>ACL</primary>
+ 
+           <secondary>auxiliary permissions</secondary>
+         </indexterm>
+ 
+         <para>AFS provides eight additional permissions that do not have a defined meaning, denoted by the uppercase letters
+         <emphasis role="bold">A</emphasis>, <emphasis role="bold">B</emphasis>, <emphasis role="bold">C</emphasis>, <emphasis
+         role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>, <emphasis role="bold">F</emphasis>, <emphasis
+         role="bold">G</emphasis>, and <emphasis role="bold">H</emphasis>.</para>
+ 
+         <para>You can write application programs that assign a meaning to one or more of the permissions, and then place them on
+         ACLs to control file access by those programs. For example, you can modify a print program to recognize and interpret the
+         permissions, and then place them on directories that house files that the program accesses. Use the <emphasis role="bold">fs
+         listacl</emphasis> and <emphasis role="bold">fs setacl</emphasis> commands to display and set the auxiliary permissions on
+         ACLs just like the standard seven.</para>
+       </sect3>
+ 
+       <sect3 id="Header_636">
+         <title>Shorthand Notation for Sets of Permissions</title>
+ 
+         <indexterm>
+           <primary>ACL</primary>
+ 
+           <secondary>shorthand notation for grouping permissions</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>shorthand notation</primary>
+ 
+           <secondary>ACL permissions</secondary>
+         </indexterm>
+ 
+         <para>You can combine the seven permissions in any way in an ACL entry, but certain combinations are more useful than
+         others. Four of the more common combinations have corresponding shorthand forms. When using the <emphasis role="bold">fs
+         setacl</emphasis> command to define ACL entries, you can provide either one or more of the individual letters that represent
+         the permissions, or one of the following shorthand forms: <variablelist>
+             <indexterm>
+               <primary>all shorthand for ACL permissions</primary>
+             </indexterm>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">all</emphasis></term>
+ 
+               <listitem>
+                 <para>Represents all seven standard permissions (<emphasis role="bold">rlidwka</emphasis>). <indexterm>
+                     <primary>none shorthand for ACL permissions</primary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">none</emphasis></term>
+ 
+               <listitem>
+                 <para>Removes the entry from the ACL, leaving the user or group with no permissions. <indexterm>
+                     <primary>read</primary>
+ 
+                     <secondary>shorthand for ACL permissions</secondary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">read</emphasis></term>
+ 
+               <listitem>
+                 <para>Represents the <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) and <emphasis
+                 role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions. <indexterm>
+                     <primary>write</primary>
+ 
+                     <secondary>shorthand for ACL permissions</secondary>
+                   </indexterm></para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">write</emphasis></term>
+ 
+               <listitem>
+                 <para>Represents all permissions except <emphasis role="bold">a</emphasis> (<emphasis
+                 role="bold">administer</emphasis>): <emphasis role="bold">rlidwk</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist></para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ570">
+       <title>Using Normal and Negative Permissions</title>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>normal vs. negative permissions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>normal ACL permissions</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>negative ACL permissions</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <para>ACLs enable you both to grant and to deny access to a directory and the files in it. To grant access, use the <emphasis
+       role="bold">fs setacl</emphasis> command to create an ACL entry that associates a set of permissions with a user or group, as
+       described in <link linkend="HDRWQ573">Setting ACL Entries</link>. When you use the <emphasis role="bold">fs listacl</emphasis>
+       command to display an ACL (as described in <link linkend="HDRWQ572">Displaying ACLs</link>), such entries appear underneath
+       the following header, which uses the term <emphasis>rights</emphasis> to refer to permissions:</para>
+ 
+       <programlisting>
+    Normal rights
+ </programlisting>
+ 
+       <para>There are two ways to deny access: <orderedlist>
+           <listitem>
+             <para>The recommended method is simply to omit an entry for the user or group from the ACL, or to omit the appropriate
+             permissions from the entry. Use the <emphasis role="bold">fs setacl</emphasis> command to remove or edit an existing
+             entry, using the instructions in <link linkend="HDRWQ574">To add, remove, or edit normal ACL permissions</link>. In most
+             circumstances, this method is enough to prevent access of certain kinds or by certain users. You must take care,
+             however, not to grant the undesired permissions to any groups to which such users belong.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The more explicit method for denying access is to use the <emphasis role="bold">-negative</emphasis> flag to the
+             <emphasis role="bold">fs setacl</emphasis> command to create an entry that associates <emphasis>negative
+             permissions</emphasis> with the user or group; for instructions, see <link linkend="HDRWQ575">To add, remove, or edit
+             negative ACL permissions</link>. The output from the <emphasis role="bold">fs listacl</emphasis> command lists negative
+             entries underneath the following header: <programlisting>
+    Negative rights
+ </programlisting></para>
+ 
+             <para>When determining what type of access to grant to a user, the File Server first compiles a set of permissions by
+             examining all of the entries in the <computeroutput>Normal rights</computeroutput> section of the ACL. It then subtracts
+             any permissions associated with the user (or with groups to which the user belongs) on the <computeroutput>Negative
+             rights</computeroutput> section of the ACL. Therefore, negative permissions always cancel out normal permissions.</para>
+ 
+             <para>Using negative permissions reverses the usual semantics of the <emphasis role="bold">fs setacl</emphasis> command,
+             introducing the potential for confusion. In particular, combining the <emphasis role="bold">none</emphasis> shorthand
+             and the <emphasis role="bold">-negative</emphasis> flag constitutes a double negative: by removing an entry from the
+             <computeroutput>Negative rights</computeroutput> section of the ACL, you enable a user once again to obtain permissions
+             via entries in the <computeroutput>Normal rights</computeroutput> section. Combining the <emphasis
+             role="bold">all</emphasis> shorthand with the <emphasis role="bold">-negative</emphasis> flag explicitly denies all
+             permissions.</para>
+ 
+             <para>Note also that it is pointless to create an entry in the <computeroutput>Negative rights</computeroutput> section
+             if an entry in the <computeroutput>Normal rights</computeroutput> section grants the denied permissions to the <emphasis
+             role="bold">system:anyuser</emphasis> group. In this case, users can obtain the permissions simply by using the
+             <emphasis role="bold">unlog</emphasis> command to discard their tokens. When they do so, the File Server recognizes them
+             as the <emphasis role="bold">anonymous</emphasis> user, who belongs to the <emphasis
+             role="bold">system:anyuser</emphasis> group but does not match the entries on the <computeroutput>Negative
+             rights</computeroutput> section of the ACL.</para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ571">
+       <title>Using Groups on ACLs</title>
+ 
+       <indexterm>
+         <primary>group</primary>
+ 
+         <secondary>ACL entry, usefulness of</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>group entries, usefulness</secondary>
+       </indexterm>
+ 
+       <para>As previously mentioned, placing a group entry on an ACL enables you to control access for many users at once. You can
+       grant a new user access to many files and directories simply by adding the user to a group that appears on the relevant ACLs.
+       You can also create groups of machines, in which case any user logged on to the machine obtains the access that is granted to
+       the group. On directories where they have the <emphasis role="bold">a</emphasis> permission on the ACL, users can define their
+       own groups and can create ACL entries for any groups, not just groups that they create or own themselves. For instructions on
+       creating groups of users or machines, and a discussion of the most effective ways to use different types of groups, see <link
+       linkend="HDRWQ531">Administering the Protection Database</link>. <indexterm>
+           <primary>system groups</primary>
+ 
+           <secondary>using on ACLs</secondary>
+         </indexterm> <indexterm>
+           <primary>group</primary>
+ 
+           <secondary>system-defined on ACLs</secondary>
+         </indexterm> <indexterm>
+           <primary>ACL</primary>
+ 
+           <secondary>system groups on</secondary>
+         </indexterm> <indexterm>
+           <primary>system:anyuser group</primary>
+ 
+           <secondary>using on ACLs</secondary>
+         </indexterm> <indexterm>
+           <primary>system:authuser group</primary>
+ 
+           <secondary>using on ACLs</secondary>
+         </indexterm></para>
+ 
+       <para>AFS also defines the following two system groups, which can be very useful on ACLs because they potentially represent a
+       large group of people. For more information about these groups, see <link linkend="HDRWQ535">The System Groups</link>.
+       <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">system:anyuser</emphasis></term>
+ 
+             <listitem>
+               <para>Includes anyone who can access the cell's file tree, including users who have logged in as the local superuser
+               <emphasis role="bold">root</emphasis>, have connected to a local machine from somewhere outside the cell, and AFS
+               users who belong to a foreign cell. This group includes users who do not have tokens that are valid for the local AFS
+               servers; the servers recognize them as the user <emphasis role="bold">anonymous</emphasis>.</para>
+ 
+               <para>Note that creating an ACL entry for this group is the only way to extend access to AFS users from foreign cells,
+               unless you create local authentication accounts for them. <indexterm>
+                   <primary>ACL</primary>
+ 
+                   <secondary>foreign users on</secondary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">system:authuser</emphasis></term>
+ 
+             <listitem>
+               <para>Includes all users who have a valid AFS token obtained from the local cell's authentication service.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>It is particularly useful to grant the <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>)
+       permission to the <emphasis role="bold">system:anyuser</emphasis> group on the ACL of most directories in the file system,
+       especially at the upper levels. This permission enables users only to learn the names of files and subdirectories in a
+       directory, but without it they cannot traverse their way through the directories in the path to a target file.</para>
+ 
+       <para>A slightly more restrictive alternative is to grant the <emphasis role="bold">l</emphasis> permission to the <emphasis
+       role="bold">system:authuser</emphasis> group. If that is still not restrictive enough, you can grant the <emphasis
+       role="bold">l</emphasis> to specific users or groups, which cannot exceed about 20 in number on a given ACL.</para>
+ 
+       <para>Another reason to grant certain permissions to the <emphasis role="bold">system:anyuser</emphasis> group is to enable
+       the correct operation of processes that provide services such as printing and mail delivery. For example, in addition to the
+       <emphasis role="bold">l</emphasis> permission, a print process possibly needs the <emphasis role="bold">r</emphasis>
+       (<emphasis role="bold">read</emphasis>) permission in order to access the contents of files, and a mail delivery process
+       possibly requires the <emphasis role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) permission to deliver new
+       pieces of mail.</para>
+ 
+       <para>The ACL on the root directory of every newly created volume grants all permissions to the <emphasis
+       role="bold">system:administrators</emphasis> group. You can remove this entry if you wish, but members of the <emphasis
+       role="bold">system:administrators</emphasis> group always implicitly have the <emphasis role="bold">a</emphasis> (<emphasis
+       role="bold">administer</emphasis>), and by default also the <emphasis role="bold">l</emphasis>, permission on every
+       directory's ACL. The <emphasis role="bold">a</emphasis> permission enables them to grant themselves other permissions
+       explicitly when necessary. To learn about changing this default set of permissions, see <link linkend="HDRWQ586">Administering
+       the system:administrators Group</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ572">
+     <title>Displaying ACLs</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>ACL entries</secondary>
+     </indexterm>
+ 
+     <para>To display the ACL associated with a file, directory or symbolic link, issue the <emphasis role="bold">fs
+     listacl</emphasis> command. The output for a symbolic link displays the ACL that applies to its target file or directory, rather
+     than the ACL on the directory that houses the symbolic link.</para>
+ 
+     <para><emphasis role="bold">Note for AFS/DFS Migration Toolkit users:</emphasis> If the machine on which you issue the <emphasis
+     role="bold">fs listacl</emphasis> command is configured to access a DCE cell's DFS filespace via the AFS/DFS Migration Toolkit,
+     you can use the command to display the ACL on DFS files and directories. To display a DFS directory's Initial Container and
+     Initial Object ACL instead of the regular one, include the <emphasis role="bold">fs listacl</emphasis> command's <emphasis
+     role="bold">-id</emphasis> or <emphasis role="bold">-if</emphasis> flag. For instructions, see the <emphasis>OpenAFS/DFS
+     Migration Toolkit Administration Guide and Reference</emphasis>. The <emphasis role="bold">fs</emphasis> command interpreter
+     ignores the <emphasis role="bold">-id</emphasis> and <emphasis role="bold">-if</emphasis> flags if you include them when
+     displaying an AFS ACL. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>listacl</secondary>
+       </indexterm><indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs listacl</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_640">
+       <title>To display an ACL</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs listacl</emphasis> command. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">la</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">listacl</emphasis> (and <emphasis
+                 role="bold">lista</emphasis> is the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+               <listitem>
+                 <para>Names one or more files or directories for which to display the ACL. For files, the output displays the ACL
+                 for its directory. If you omit this argument, the output is for the current working directory. Partial pathnames are
+                 interpreted relative to the current working directory. You can also use the following notation on its own or as part
+                 of a pathname: <variablelist>
+                     <varlistentry>
+                       <term><emphasis role="bold">.</emphasis></term>
+ 
+                       <listitem>
+                         <para>(A single period). Specifies the current working directory.</para>
+                       </listitem>
+                     </varlistentry>
+ 
+                     <varlistentry>
+                       <term><emphasis role="bold">..</emphasis></term>
+ 
+                       <listitem>
+                         <para>(Two periods). Specifies the current working directory's parent directory.</para>
+                       </listitem>
+                     </varlistentry>
+ 
+                     <varlistentry>
+                       <term><emphasis role="bold">*</emphasis></term>
+ 
+                       <listitem>
+                         <para>(The asterisk). Specifies each file and subdirectory in the current working directory. The ACL
+                         displayed for a file is always the same as for its directory, but the ACL for each subdirectory can
+                         differ.</para>
+                       </listitem>
+                     </varlistentry>
+                   </variablelist></para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following error message indicates that you do not have the permissions needed to display an ACL. To specify a
+       directory name as the dir/file path argument, you must have the <emphasis role="bold">l</emphasis> (<emphasis
+       role="bold">lookup</emphasis>) permission on the ACL. To specify a filename, you must also have the <emphasis
+       role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permission on its directory's ACL.</para>
+ 
+       <programlisting>
+    fs: You don't have the required access permissions on 'dir/file path'
+ </programlisting>
+ 
+       <para>Members of the <emphasis role="bold">system:administrators</emphasis> group and the directory's owner (as reported by
+       the <emphasis role="bold">ls -ld</emphasis> command) implicitly have the <emphasis role="bold">a</emphasis> (<emphasis
+       role="bold">administer</emphasis>) permission on every directory's ACL, and can use the <emphasis role="bold">fs
+       setacl</emphasis> command to grant themselves the required permissions; for instructions, see <link linkend="HDRWQ573">Setting
+       ACL Entries</link>.</para>
+ 
+       <para>The output for each file or directory specified as dir/file path begins with the following header to identify it:</para>
+ 
+       <programlisting>
+    Access list for  dir/file path is
+ </programlisting>
+ 
+       <para>The <computeroutput>Normal rights</computeroutput> header appears on the next line, followed by lines that each pair a
+       user or group name and a set of permissions. The permissions appear as the single letters defined in <link
+       linkend="HDRWQ567">The AFS ACL Permissions</link>, and always in the order <emphasis role="bold">rlidwka</emphasis>. If there
+       are any negative permissions, the <computeroutput>Negative rights</computeroutput> header appears next, followed by pairs of
+       negative permissions.</para>
+ 
+       <para>The following example displays the ACL on user <emphasis role="bold">terry</emphasis>'s home directory in the ABC
+       Corporation cell:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs la /afs/abc.com/usr/terry</emphasis>
+    Access list for /afs/abc.com/usr/terry is
+    Normal permissions:
+       system:authuser rl
+       pat rlw
+       terry rlidwka
+    Negative permissions:
+       terry:other-dept rl
+       jones rl
+ </programlisting>
+ 
+       <para>where <emphasis role="bold">pat</emphasis>, <emphasis role="bold">terry</emphasis>, and <emphasis
+       role="bold">jones</emphasis> are individual users, <emphasis role="bold">system:authuser</emphasis> is a system group, and
+       <emphasis role="bold">terry:other-dept</emphasis> is a group that <emphasis role="bold">terry</emphasis> owns. The list of
+       normal permissions grants all permissions to <emphasis role="bold">terry</emphasis>, the <emphasis role="bold">r</emphasis>
+       (<emphasis role="bold">read</emphasis>), <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>), and
+       <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>) permissions to <emphasis
+       role="bold">pat</emphasis>, and the <emphasis role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions to
+       the members of the <emphasis role="bold">system:authuser</emphasis> group.</para>
+ 
+       <para>The list of negative permissions denies the <emphasis role="bold">r</emphasis> and <emphasis role="bold">l</emphasis>
+       permissions to <emphasis role="bold">jones</emphasis> and the members of the <emphasis role="bold">terry:other-dept</emphasis>
+       group. These entries effectively prevent them from accessing <emphasis role="bold">terry</emphasis>'s home directory in any
+       way, because they cancel out the <emphasis role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions
+       extended to the <emphasis role="bold">system:authuser</emphasis> group, which is the only entry on the <computeroutput>Normal
+       rights</computeroutput> section of the ACL that possibly applies to them.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ573">
+     <title>Setting ACL Entries</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>setting entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>editing entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>adding entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>removing entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>changing</primary>
+ 
+       <secondary>ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>file access by setting ACL</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>ACL entry</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>adding</primary>
+ 
+       <secondary>ACL entry</secondary>
+ 
+       <tertiary>normal permissions</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>ACL entry</secondary>
+     </indexterm>
+ 
+     <para>To add, remove, or edit ACL entries, use the <emphasis role="bold">fs setacl</emphasis> command. By default, the command
+     manipulates entries on the normal permissions section of the ACL. To manipulate entries on the negative permissions section,
+     include the <emphasis role="bold">-negative</emphasis> flag.</para>
+ 
+     <para>You must have the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission on an ACL to
+     edit it. The owner of a directory (as reported by the <emphasis role="bold">ls -ld</emphasis>) command and members of the
+     <emphasis role="bold">system:administrators</emphasis> group always implicitly have it on every ACL. By default, members of the
+     <emphasis role="bold">system:administrators</emphasis> group also implicitly have the <emphasis role="bold">l</emphasis>
+     (<emphasis role="bold">lookup</emphasis>) permission.</para>
+ 
+     <para><emphasis role="bold">Note for AFS/DFS Migration Toolkit users:</emphasis> If the machine on which you issue the <emphasis
+     role="bold">fs setacl</emphasis> command is configured to access a DCE cell's DFS filespace via the AFS/DFS Migration Toolkit,
+     you can use the command to set the ACL on DFS files and directories. To set a DFS directory's Initial Container and Initial
+     Object ACL instead of the regular one, include the <emphasis role="bold">fs setacl</emphasis> command's <emphasis
+     role="bold">-id</emphasis> or <emphasis role="bold">-if</emphasis> flag. For instructions, see the <emphasis>OpenAFS/DFS
+     Migration Toolkit Administration Guide and Reference</emphasis>. The <emphasis role="bold">fs</emphasis> command interpreter
+     ignores the <emphasis role="bold">-id</emphasis> and <emphasis role="bold">-if</emphasis> flags if you include them when setting
+     an AFS ACL. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setacl</secondary>
+       </indexterm><indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setacl</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ574">
+       <title>To add, remove, or edit normal ACL permissions</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission
+           on each directory for which you are editing the ACL. If necessary, issue the <emphasis role="bold">fs listacl</emphasis>
+           command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setacl</emphasis> command to edit entries in the normal permissions section of
+           the ACL. To remove an entry, specify the <emphasis role="bold">none</emphasis> shorthand as the permissions. If an ACL
+           entry already exists, the permissions you specify completely replace those in the existing entry. <programlisting>
+    % <emphasis role="bold">fs setacl  -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;+ <emphasis role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">sa</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">setacl</emphasis> (and <emphasis role="bold">seta</emphasis>
+                 is the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-dir</emphasis></term>
+ 
+               <listitem>
+                 <para>Names one or more directories to which to apply the ACL entries defined by the <emphasis
+                 role="bold">-acl</emphasis> argument. Partial pathnames are interpreted relative to the current working
+                 directory.</para>
+ 
+                 <para>Specify the read/write path to each directory, to avoid the failure that results when you attempt to change a
+                 read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+                 pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further discussion of the
+                 concept of read/write and read-only paths through the filespace, see <link linkend="HDRWQ209">The Rules of Mount
+                 Point Traversal</link>.</para>
+ 
+                 <para>You can also use the following notation on its own or as part of a pathname:</para>
+ 
+                 <variablelist>
+                   <varlistentry>
+                     <term><emphasis role="bold">.</emphasis></term>
+ 
+                     <listitem>
+                       <para>(A single period). If used by itself, sets the ACL on the current working directory.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">..</emphasis></term>
+ 
+                     <listitem>
+                       <para>(Two periods). If used by itself, sets the ACL on the current working directory's parent
+                       directory.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">*</emphasis></term>
+ 
+                     <listitem>
+                       <para>(The asterisk). Sets the ACL on each of the subdirectories in the current working directory. You must
+                       precede it with the <emphasis role="bold">-dir</emphasis> switch, since it potentially designates multiple
+                       directories. The <emphasis role="bold">fs</emphasis> command interpreter generates the following error message
+                       for each file in the directory: <programlisting>
+    fs: 'filename': Not a directory
+ </programlisting></para>
+                     </listitem>
+                   </varlistentry>
+                 </variablelist>
+ 
+                 <para>If you specify only one directory or file name, you can omit the <emphasis role="bold">-dir</emphasis> and
+                 <emphasis role="bold">-acl</emphasis> switches.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-acl</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies one or more ACL entries, each of which pairs a user or group name and a set of permissions. Separate
+                 the pairs, and the two parts of each pair, with one or more spaces.</para>
+ 
+                 <para>To define the permissions, provide either:</para>
+ 
+                 <itemizedlist>
+                   <listitem>
+                     <para>One or more of the letters that represent the standard or auxiliary permissions (<emphasis
+                     role="bold">rlidwka</emphasis> and <emphasis role="bold">ABCDEFGH</emphasis>), in any order</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>One of the four shorthand notations: <itemizedlist>
+                         <listitem>
+                           <para><emphasis role="bold">all</emphasis> (equals <emphasis role="bold">rlidwka</emphasis>)</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para><emphasis role="bold">none</emphasis> (removes the entry)</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para><emphasis role="bold">read</emphasis> (equals <emphasis role="bold">rl</emphasis>)</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para><emphasis role="bold">write</emphasis> (equals <emphasis role="bold">rlidwk</emphasis>)</para>
+                         </listitem>
+                       </itemizedlist></para>
+                   </listitem>
+                 </itemizedlist>
+ 
+                 <para>For a more detailed description of the permissions and shorthand notations, see <link linkend="HDRWQ567">The
+                 AFS ACL Permissions</link>.</para>
+ 
+                 <para>On a single command line, you can combine user and group entries. You can also use individual letters in some
+                 pairs and the shorthand notations in other pairs, but cannot combine letters and shorthand notation within a single
+                 pair.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>Either of the following examples grants user <emphasis role="bold">pat</emphasis> the <emphasis role="bold">r</emphasis>
+       (<emphasis role="bold">read</emphasis>) and <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>)
+       permissions on the ACL of the <emphasis role="bold">notes</emphasis> subdirectory in the issuer's home directory. They
+       illustrate how it is possible to omit the <emphasis role="bold">-dir</emphasis> and <emphasis role="bold">-acl</emphasis>
+       switches when you name only one directory.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs sa ~/notes pat rl</emphasis>
+    % <emphasis role="bold">fs sa ~/notes pat read</emphasis>
+ </programlisting>
+ 
+       <para>The following example edits the ACL for the current working directory. It removes the entry for the <emphasis
+       role="bold">system:anyuser</emphasis> group, and adds two entries: one grants all permissions except <emphasis
+       role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) to the members of the <emphasis
+       role="bold">terry:colleagues</emphasis> group and the other grants the <emphasis role="bold">r</emphasis> (<emphasis
+       role="bold">read</emphasis>) and <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions to
+       the <emphasis role="bold">system:authuser</emphasis> group. The command appears on two lines here only for legibility.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs  sa  -dir . -acl  system:anyuser  none  terry:colleagues  write  \
+            system:authuser  rl</emphasis>
+ </programlisting>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setacl</secondary>
+ 
+         <tertiary>with -negative flag</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setacl</secondary>
+ 
+         <tertiary>with -negative flag</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>ACL entry in negative permissions section</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>ACL entry</secondary>
+ 
+         <tertiary>negative permissions</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>denying</primary>
+ 
+         <secondary>file access with negative ACL entry</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ575">
+       <title>To add, remove, or edit negative ACL permissions</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission
+           on each directory for which you are editing the ACL. If necessary, issue the <emphasis role="bold">fs listacl</emphasis>
+           command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setacl</emphasis> command with the <emphasis role="bold">-negative</emphasis>
+           flag to edit entries in the negative permissions section of the ACL. To remove an entry, specify the <emphasis
+           role="bold">none</emphasis> shorthand as the permissions. If an ACL entry already exists for a user or group, the
+           permissions you specify completely replace those in the existing entry. <programlisting>
+    % <emphasis role="bold">fs setacl -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;+ <emphasis role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;+  <emphasis
+                 role="bold">-negative</emphasis> 
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">sa</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">setacl</emphasis> (and <emphasis role="bold">seta</emphasis>
+                 is the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-dir</emphasis></term>
+ 
+               <listitem>
+                 <para>Names one or more directories to which to apply the negative ACL entries defined by the <emphasis
+                 role="bold">-acl</emphasis> argument. Specify the read/write path to each directory, to avoid the failure that
+                 results when you attempt to change a read-only volume. For a detailed description of acceptable values, see <link
+                 linkend="HDRWQ574">To add, remove, or edit normal ACL permissions</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-acl</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies one or more ACL entries, each of which pairs a user or group name and a set of permissions. Separate
+                 the pairs, and the two parts of each pair, with one or more spaces. For a detailed description of acceptable values,
+                 see <link linkend="HDRWQ574">To add, remove, or edit normal ACL permissions</link>. Keep in mind that the usual
+                 meaning of each permission is reversed.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-negative</emphasis></term>
+ 
+               <listitem>
+                 <para>Places the entries defined by the <emphasis role="bold">-acl</emphasis> argument on the negative permissions
+                 section of the ACL for each directory named by the <emphasis role="bold">-dir</emphasis> argument.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example denies user <emphasis role="bold">pat</emphasis> the <emphasis role="bold">w</emphasis> (<emphasis
+       role="bold">write</emphasis>) and <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>) permissions for
+       the <emphasis role="bold">project</emphasis> subdirectory of the current working directory.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs sa project pat wd -neg</emphasis>
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ576">
+     <title>Completely Replacing an ACL</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>replacing all entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>clearing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replacing</primary>
+ 
+       <secondary>all entries on ACL</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>erasing</primary>
+ 
+       <secondary>all ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>clearing</primary>
+ 
+       <secondary>all ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>all ACL entries</secondary>
+     </indexterm>
+ 
+     <para>It is sometimes simplest to clear an ACL completely before defining new permissions on it, for instance if the mix of
+     normal and negative permissions makes it difficult to understand how their interaction affects a user's access to the directory.
+     To clear an ACL completely while you define new entries, include the <emphasis role="bold">-clear</emphasis> flag on the
+     <emphasis role="bold">fs setacl</emphasis> command. When you include this flag, you can create entries on either the normal
+     permissions or the negative permissions section of the ACL, but not on both at once.</para>
+ 
+     <para>Remember to create an entry that grants appropriate permissions to the directory's owner. The owner implicitly has the
+     <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission required to replace a deleted entry,
+     but the effects of a missing ACL entry (particularly the lack of the <emphasis role="bold">lookup</emphasis> permission) can be
+     so confusing that it becomes difficult for the owner to realize that the missing entry is causing the problems. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setacl</secondary>
+ 
+         <tertiary>with -clear flag</tertiary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setacl</secondary>
+ 
+         <tertiary>with -clear flag</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_645">
+       <title>To replace an ACL completely</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission
+           on each directory for which you are editing the ACL. If necessary, issue the <emphasis role="bold">fs listacl</emphasis>
+           command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setacl</emphasis> command with the <emphasis role="bold">-clear</emphasis> flag
+           to clear the ACL completely before setting either normal or negative permissions. Because you need to grant the owner of
+           the directory all permissions, it is better in most cases to set normal permissions at this point. <programlisting>
+    % <emphasis role="bold">fs setacl -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;+ <emphasis role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;+ <emphasis
+                 role="bold">-clear</emphasis>  \
+                [<emphasis role="bold">-negative</emphasis>] 
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">sa</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">setacl</emphasis> (and <emphasis role="bold">seta</emphasis>
+                 is the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-dir</emphasis></term>
+ 
+               <listitem>
+                 <para>Names one or more directories to which to apply the negative ACL entries defined by the <emphasis
+                 role="bold">-acl</emphasis> argument. Specify the read/write path to each directory, to avoid the failure that
+                 results when you attempt to change a read-only volume. For a detailed description of acceptable values, see <link
+                 linkend="HDRWQ574">To add, remove, or edit normal ACL permissions</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-acl</emphasis></term>
+ 
+               <listitem>
+                 <para>Specifies one or more ACL entries, each of which pairs a user or group name and a set of permissions. Separate
+                 the pairs, and the two parts of each pair, with one or more spaces. Remember to grant all permissions to the owner
+                 of the directory. For a detailed description of acceptable values, see <link linkend="HDRWQ574">To add, remove, or
+                 edit normal ACL permissions</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-clear</emphasis></term>
+ 
+               <listitem>
+                 <para>Removes all entries from each ACL before creating the entries indicated by the <emphasis
+                 role="bold">-acl</emphasis> argument.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-negative</emphasis></term>
+ 
+               <listitem>
+                 <para>Places the entries defined by the <emphasis role="bold">-acl</emphasis> argument on the negative permissions
+                 section of each ACL.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ577">
+     <title>Copying ACLs Between Directories</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>copying between directories</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>ACL as copy of another</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>copying</primary>
+ 
+       <secondary>ACL between directories</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">fs copyacl</emphasis> command copies a source directory's ACL to one or more destination
+     directories. It does not affect the source ACL at all, but changes each destination ACL as follows: <itemizedlist>
+         <listitem>
+           <para>If an entry on the source ACL does not exist on the destination ACL, the command copies it to the destination
+           ACL.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If an entry on the destination ACL does not also exist on the source ACL, the command does not remove it unless you
+           include the <emphasis role="bold">-clear</emphasis> flag to overwrite the destination ACL completely.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If an entry is on both ACLs, the command changes the permissions on the destination ACL entry to match the source
+           ACL entry.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para><emphasis role="bold">Note for AFS/DFS Migration Toolkit users:</emphasis> If the machine is configured to enable AFS
+     users to access a DCE cell's DFS filespace via the AFS/DFS Migration Toolkit, then you can use the <emphasis role="bold">fs
+     copyacl</emphasis> command to copy ACLs between DFS files and directories also. The command includes <emphasis
+     role="bold">-id</emphasis> and <emphasis role="bold">-if</emphasis> flags for altering a DFS directory's Initial Container and
+     Initial Object ACLs as well as its regular ACL; see the <emphasis>OpenAFS/DFS Migration Toolkit Administration Guide and
+     Reference</emphasis>. You cannot copy ACLs between AFS and DFS directories, because they use different ACL formats. The
+     <emphasis role="bold">fs</emphasis> command interpreter ignores the <emphasis role="bold">-id</emphasis> and <emphasis
+     role="bold">-if</emphasis> flags if you include them when copying AFS ACLs. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>copyacl</secondary>
+       </indexterm><indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs copyacl</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_647">
+       <title>To copy an ACL between directories</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on
+           the source ACL and the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission on each
+           destination ACL. To identify the source directory by naming a file in it, you must also have the <emphasis
+           role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permission on the source ACL. If necessary, issue the
+           <emphasis role="bold">fs listacl</emphasis> command, which is fully described in <link linkend="HDRWQ572">Displaying
+           ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ578" />Issue the <emphasis role="bold">fs copyacl</emphasis> command to copy a source ACL to the ACL
+           on one or more destination directories. (The command appears here on two lines only for legibility.) <programlisting>
+    % <emphasis role="bold">fs copyacl -fromdir</emphasis> &lt;<replaceable>source directory</replaceable>&gt; <emphasis role="bold">-todir</emphasis> &lt;<replaceable>destination directory</replaceable>&gt;+  \
+                 [<emphasis role="bold">-clear</emphasis>]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">co</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation for <emphasis role="bold">copyacl</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-fromdir</emphasis></term>
+ 
+               <listitem>
+                 <para>Names the source directory from which to copy the ACL. Partial pathnames are interpreted relative to the
+                 current working directory. If this argument names a file, the ACL is copied from its directory.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-todir</emphasis></term>
+ 
+               <listitem>
+                 <para>Names each destination directory to which to copy the source ACL. Partial pathnames are interpreted relative
+                 to the current working directory. Filenames are not acceptable.</para>
+ 
+                 <para>Specify the read/write path to each directory, to avoid the failure that results when you attempt to change a
+                 read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+                 pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further discussion of the
+                 concept of read/write and read-only paths through the filespace, see <link linkend="HDRWQ209">The Rules of Mount
+                 Point Traversal</link>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">-clear</emphasis></term>
+ 
+               <listitem>
+                 <para>Completely overwrites each destination directory's ACL with the source ACL.</para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The following example copies the ACL from the current working directory's <emphasis role="bold">notes</emphasis>
+       subdirectory to the <emphasis role="bold">plans</emphasis> subdirectory. The issuer does not include the <emphasis
+       role="bold">-clear</emphasis> flag, so the entry for user <emphasis role="bold">pat</emphasis> remains on the <emphasis
+       role="bold">plans</emphasis> directory's ACL although there is no corresponding entry on the <emphasis
+       role="bold">notes</emphasis> directory's ACL.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs la notes plans</emphasis>
+    Access list for notes is
+    Normal permissions:
+       terry rlidwka
+       smith rl
+       jones rl
+    Access list for plans is
+    Normal permissions:
+       terry rlidwk
+       pat rlidwk
+    % <emphasis role="bold">fs copyacl notes plans</emphasis>
+    % <emphasis role="bold">fs la notes plans</emphasis>
+    Access list for notes is
+    Normal permissions:
+       terry rlidwka
+       smith rl
+       jones rl
+    Access list for plans is
+    Normal permissions:
+       terry rlidwka
+       pat rlidwk
+       smith rl
+       jones rl
+ </programlisting>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>removing obsolete AFS IDs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>obsolete AFS IDs from ACL</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS UID</primary>
+ 
+         <secondary>removing obsolete from ACL</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS GID</primary>
+ 
+         <secondary>removing obsolete from ACL</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>cleaning</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ579">
+     <title>Removing Obsolete AFS IDs from ACLs</title>
+ 
+     <para>When you remove a user or group entry from the Protection Database, the <emphasis role="bold">fs listacl</emphasis>
+     command displays the user's AFS UID (or group's AFS GID) in ACL entries, rather than the name. In the following example, user
+     <emphasis role="bold">terry</emphasis> has an ACL entry for the group <emphasis role="bold">terry:friends</emphasis> (AFS GID
+     -567) on her home directory in the ABC Corporation cell, and then removes the group from the Protection Database.</para>
+ 
+     <programlisting>
+    % <emphasis role="bold">fs listacl /afs/abc.com/usr/terry</emphasis>
+    Access list for /afs/abc.com/usr/terry is
+    Normal permissions:
+      terry:friends rlik
+      system:anyuser l
+      terry rlidwka
+    % <emphasis role="bold">pts delete terry:friends</emphasis>
+    % <emphasis role="bold">fs listacl /afs/abc.com/usr/terry</emphasis>
+    Access list for /afs/abc.com/usr/terry is
+    Normal permissions:
+      -567 rlik
+      system:anyuser l
+      terry rlidwka
+ </programlisting>
+ 
+     <para>Leaving AFS IDs on ACLs serves no function, because the ID no longer corresponds to an active user or group. Furthermore,
+     if the ID is ever assigned to a new user or group, then the new possessor of the ID gains access that the owner of the directory
+     actually intended for the previous possessor. (Reusing AFS IDs is not recommended precisely for this reason.)</para>
+ 
+     <para>To remove obsolete AFS UIDs from ACLs, use the <emphasis role="bold">fs cleanacl</emphasis> command. <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs cleanacl</secondary>
+       </indexterm> <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>cleanacl</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_649">
+       <title>To clean obsolete AFS IDs from an ACL</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you have the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission
+           on each directory for which you are cleaning the ACL. If necessary, issue the <emphasis role="bold">fs listacl</emphasis>
+           command, which is fully described in <link linkend="HDRWQ572">Displaying ACLs</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;]
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs cleanacl</emphasis> command to remove entries for obsolete AFS IDs.
+           <programlisting>
+    % <emphasis role="bold">fs cleanacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;+]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">cl</emphasis></term>
+ 
+               <listitem>
+                 <para>Is the shortest acceptable abbreviation of <emphasis role="bold">cleanacl</emphasis>.</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold">dir/file path</emphasis></term>
+ 
+               <listitem>
+                 <para>Names each directory for which to clean the ACL. If this argument names a file, its directory's ACL is
+                 cleaned. Omit this argument to clean the current working directory's ACL.</para>
+ 
+                 <para>Specify the read/write path to each directory, to avoid the failure that results when you attempt to change a
+                 read-only volume. By convention, you indicate the read/write path by placing a period before the cell name at the
+                 pathname's second level (for example, <emphasis role="bold">/afs/.abc.com</emphasis>). For further discussion of the
+                 concept of read/write and read-only paths through the filespace, see <link linkend="HDRWQ209">The Rules of Mount
+                 Point Traversal</link>.</para>
+ 
+                 <para>You can also use the following notation on its own or as part of a pathname:</para>
+ 
+                 <variablelist>
+                   <varlistentry>
+                     <term><emphasis role="bold">.</emphasis></term>
+ 
+                     <listitem>
+                       <para>(A single period). If used by itself, cleans the current working directory's ACL.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">..</emphasis></term>
+ 
+                     <listitem>
+                       <para>(Two periods). If used by itself, cleans the ACL on the current working directory's parent
+                       directory.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">*</emphasis></term>
+ 
+                     <listitem>
+                       <para>(The asterisk). Cleans the ACL of each of the subdirectories in the current working directory. However,
+                       if you use the asterisk and there are obsolete AFS IDs on any directory's ACL, the following error message
+                       appears for every file in the directory: <programlisting>
+    fs: 'filename': Not a directory
+ </programlisting></para>
+                     </listitem>
+                   </varlistentry>
+                 </variablelist>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>If there are obsolete AFS IDs on a directory, the command interpreter displays its cleaned ACL under the following
+       header.</para>
+ 
+       <programlisting>
+    Access list for directory is now
+ </programlisting>
+ 
+       <para>If a directory's ACL has no obsolete AFS IDs on it, the following message appears for each.</para>
+ 
+       <programlisting>
+    Access list for directory is fine.
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ580">
+     <title>How AFS Interprets the UNIX Mode Bits</title>
+ 
+     <indexterm>
+       <primary>UNIX</primary>
+ 
+       <secondary>mode bits, interpretation in AFS</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>UFS</primary>
+ 
+       <secondary>mode bits, interpretation in AFS</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mode bits (UNIX)</primary>
+ 
+       <secondary>interpretation in AFS</secondary>
+     </indexterm>
+ 
+     <para>Although AFS uses ACLs to protect file data rather than the mode bits that UFS uses, it does not ignore the mode bits
+     entirely. When you issue the <emphasis role="bold">chmod</emphasis> command on an AFS file or directory, AFS changes the bits
+     appropriately. To change a file's mode bits, you must have the AFS <emphasis role="bold">w</emphasis> (<emphasis
+     role="bold">write</emphasis>) permission on the ACL of the file's directory. To change a directory's mode bits, you must have
+     the <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>), <emphasis role="bold">i</emphasis> (<emphasis
+     role="bold">insert</emphasis>), and <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions on
+     its ACL.</para>
+ 
+     <para>AFS also uses the UNIX mode bits as follows:</para>
+ 
+     <itemizedlist>
+       <listitem>
+         <para>It uses the initial bit to determine the element's type. This is the bit that appears first in the output from the
+         <emphasis role="bold">ls -l</emphasis> command and shows the hyphen (<emphasis role="bold">-</emphasis>) for a file or the
+         letter <emphasis role="bold">d</emphasis> for a directory.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>It does not use any of the mode bits on a directory.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>For a file, the first (owner) set of bits interacts with the ACL entries that apply to the file in the following way:
+         <itemizedlist>
+             <listitem>
+               <para>If the first <emphasis role="bold">r</emphasis> mode bit is not set, no one (including the owner) can read the
+               file, no matter what permissions they have on the ACL. If the bit is set, users also need the <emphasis
+               role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) and <emphasis role="bold">l</emphasis> permissions on
+               the ACL of the file's directory to read the file.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>If the first <emphasis role="bold">w</emphasis> mode bit is not set, no one (including the owner) can modify the
+               file. If the <emphasis role="bold">w</emphasis> bit is set, users also need the <emphasis role="bold">w</emphasis> and
+               <emphasis role="bold">l</emphasis> permissions on the ACL of the file's directory to modify the file.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>There is no ACL permission directly corresponding to the <emphasis role="bold">x</emphasis> mode bit, but to
+               execute a file stored in AFS, the user must also have the <emphasis role="bold">r</emphasis> and <emphasis
+               role="bold">l</emphasis> permissions on the ACL of the file's directory.</para>
+             </listitem>
+           </itemizedlist></para>
+       </listitem>
+     </itemizedlist>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd021.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd021.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd021.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,934 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ581">
+   <title>Managing Administrative Privilege</title>
+ 
+   <para>This chapter explains how to enable system administrators and operators to perform privileged AFS operations.</para>
+ 
+   <sect1 id="HDRWQ582">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Display members of <emphasis role="bold">system:administrators</emphasis> group</entry>
+ 
+             <entry><emphasis role="bold">pts membership</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Add user to <emphasis role="bold">system:administrators</emphasis> group</entry>
+ 
+             <entry><emphasis role="bold">pts adduser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove user from <emphasis role="bold">system:administrators</emphasis> group</entry>
+ 
+             <entry><emphasis role="bold">pts removeuser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display <computeroutput>ADMIN</computeroutput> flag in Authentication Database entry</entry>
+ 
+             <entry><emphasis role="bold">kas examine</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Set or remove <computeroutput>ADMIN</computeroutput> flag on Authentication Database entry</entry>
+ 
+             <entry><emphasis role="bold">kas setfields</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Display users in <emphasis role="bold">UserList</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">bos listusers</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Add user to <emphasis role="bold">UserList</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">bos adduser</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Remove user from <emphasis role="bold">UserList</emphasis> file</entry>
+ 
+             <entry><emphasis role="bold">bos removeuser</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ584">
+     <title>An Overview of Administrative Privilege</title>
+ 
+     <indexterm>
+       <primary>administrative privilege</primary>
+ 
+       <secondary>three types</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privilege</primary>
+ 
+       <secondary></secondary>
+ 
+       <see>administrative privilege</see>
+     </indexterm>
+ 
+     <para>A fully privileged AFS system administrator has the following characteristics: <itemizedlist>
+         <listitem>
+           <para>Membership in the cell's <emphasis role="bold">system:administrators</emphasis> group. See <link
+           linkend="HDRWQ586">Administering the system:administrators Group</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <computeroutput>ADMIN</computeroutput> flag on his or her entry in the cell's Authentication Database. See <link
+           linkend="HDRWQ589">Granting Privilege for kas Commands: the ADMIN Flag</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Inclusion in the file <emphasis role="bold">/usr/afs/etc/UserList</emphasis> on the local disk of each AFS server
+           machine in the cell. See <link linkend="HDRWQ592">Administering the UserList File</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>This section describes the three privileges and explains why more than one privilege is necessary.</para>
+ 
+     <note>
+       <para>Never grant any administrative privilege to the user <emphasis role="bold">anonymous</emphasis>, even when a server
+       outage makes it impossible to mutually authenticate. If you grant such privilege, then any user who can access a machine in
+       your cell can issue privileged commands. The alternative solution is to put the affected server machine into no-authentication
+       mode and use the <emphasis role="bold">-noauth</emphasis> flag available on many commands to prevent mutual authentication
+       attempts. For further discussion, see <link linkend="HDRWQ123">Managing Authentication and Authorization
+       Requirements</link>.</para>
+     </note>
+ 
+     <sect2 id="HDRWQ585">
+       <title>The Reason for Separate Privileges</title>
+ 
+       <para>Often, a cell's administrators require full administrative privileges to perform their jobs effectively. However,
+       separating the three types of privilege makes it possible to grant only the minimum set of privileges that a given
+       administrator needs to complete his or her work.</para>
+ 
+       <para>The <emphasis role="bold">system:administrators</emphasis> group privilege is perhaps the most basic, and most
+       frequently used during normal operation (when all the servers are running normally). When the Protection Database is
+       unavailable due to machine or server outage, it is not possible to issue commands that require this type of privilege.</para>
+ 
+       <para>The <computeroutput>ADMIN</computeroutput> flag privilege is separate because of the extreme sensitivity of the
+       information in the Authentication Database, especially the server encryption key in the <emphasis role="bold">afs</emphasis>
+       entry. When the Authentication Database is unavailable due to machine or server outage, it is not possible to issue commands
+       that require this type of privilege.</para>
+ 
+       <para>The ability to issue privileged <emphasis role="bold">bos</emphasis> and <emphasis role="bold">vos</emphasis> command is
+       recorded in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file on the local disk of each AFS server machine
+       rather than in a database, so that in case of serious server or network problems administrators can still log onto server
+       machines and use those commands while solving the problem.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ586">
+     <title>Administering the system:administrators Group</title>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>granting privilege for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>fs commands</primary>
+ 
+       <secondary>granting privilege for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privilege</primary>
+ 
+       <secondary>granting for pts commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privilege</primary>
+ 
+       <secondary>granting for fs commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>privilege for fs commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>privilege for pts commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>system:administrators group</primary>
+ 
+       <secondary>privileges resulting</secondary>
+     </indexterm>
+ 
+     <para>The first type of AFS administrative privilege is membership . Members of the <emphasis
+     role="bold">system:administrators</emphasis> group in the Protection Database have the following privileges: <itemizedlist>
+         <listitem>
+           <para>Permission to issue all <emphasis role="bold">pts</emphasis> commands, which are used to administer the Protection
+           Database. See <link linkend="HDRWQ531">Administering the Protection Database</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Permission to issue the <emphasis role="bold">fs setvol</emphasis> and <emphasis role="bold">fs setquota</emphasis>
+           commands, which set the space quota on volumes as described in <link linkend="HDRWQ234">Setting and Displaying Volume
+           Quota and Current Size</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Implicit <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) and by default <emphasis
+           role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions on the access control list (ACL) on every
+           directory in the cell's AFS filespace. Members of the group can use the <emphasis role="bold">fs setacl</emphasis> command
+           to grant themselves any other permissions they require, as described in <link linkend="HDRWQ573">Setting ACL
+           Entries</link>.</para>
+ 
+           <para>You can change the ACL permissions that the File Server on a given file server machine implicitly grants to the
+           members of the <emphasis role="bold">system:administrators</emphasis> group for the data in volumes that it houses. When
+           you issue the <emphasis role="bold">bos create</emphasis> command to create and start the <emphasis
+           role="bold">fs</emphasis> process on the machine, include the <emphasis role="bold">-implicit</emphasis> argument to the
+           <emphasis role="bold">fileserver</emphasis> initialization command. For syntax details, see the <emphasis
+           role="bold">fileserver</emphasis> reference page in the <emphasis>OpenAFS Administration Reference</emphasis>. You can
+           grant additional permissions, or remove the <emphasis role="bold">l</emphasis> permission. However, the File Server always
+           implicitly grants the <emphasis role="bold">a</emphasis> permission to members of the group, even if you set the value of
+           the <emphasis role="bold">-implicit</emphasis> argument to <emphasis role="bold">none</emphasis>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>system:administrators group</primary>
+ 
+       <secondary>members</secondary>
+ 
+       <tertiary>displaying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>system:administrators group members</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>pts commands</primary>
+ 
+       <secondary>membership</secondary>
+ 
+       <tertiary>displaying system:administrators group</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>pts membership</secondary>
+ 
+       <tertiary>displaying system:administrators group</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ587">
+       <title>To display the members of the system:administrators group</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts membership</emphasis> command to display the <emphasis
+           role="bold">system:administrators</emphasis> group's list of members. Any user can issue this command as long as the first
+           privacy flag on the <emphasis role="bold">system:administrators</emphasis> group's Protection Database entry is not
+           changed from the default value of uppercase <computeroutput>S</computeroutput>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+ 
+           <para>where <emphasis role="bold">m</emphasis> is the shortest acceptable abbreviation of <emphasis
+           role="bold">membership</emphasis>.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_657">
+       <title>To add users to the system:administrators group</title>
+ 
+       <indexterm>
+         <primary>system:administrators group</primary>
+ 
+         <secondary>members</secondary>
+ 
+         <tertiary>adding</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>system:administrators group members</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>adduser</secondary>
+ 
+         <tertiary>for system:administrators group</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts adduser</secondary>
+ 
+         <tertiary>for system:administrators group</tertiary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts adduser</emphasis> group to add one or more users. <programlisting>
+    % <emphasis role="bold">pts adduser -user</emphasis> &lt;<replaceable>user name</replaceable>&gt;+ <emphasis role="bold">-group system:administrators</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">ad</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">adduser</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each user to add to the <emphasis role="bold">system:administrators</emphasis> group.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ588">
+       <title>To remove users from the system:administrators group</title>
+ 
+       <indexterm>
+         <primary>system:administrators group</primary>
+ 
+         <secondary>members</secondary>
+ 
+         <tertiary>removing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>system:administrators group members</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>removeuser</secondary>
+ 
+         <tertiary>for system:administrators group</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts removeuser</secondary>
+ 
+         <tertiary>for system:administrators group</tertiary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify that you belong to the <emphasis role="bold">system:administrators</emphasis> group. If necessary, issue the
+           <emphasis role="bold">pts membership</emphasis> command, which is fully described in <link linkend="HDRWQ587">To display
+           the members of the system:administrators group</link>. <programlisting>
+    % <emphasis role="bold">pts membership system:administrators</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts removeuser</emphasis> command to remove one or more users. <programlisting>
+    % <emphasis role="bold">pts removeuser -user</emphasis> &lt;<replaceable>user name</replaceable>&gt;+ <emphasis role="bold">-group system:administrators</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">rem</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">removeuser</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names each user to remove from the <emphasis role="bold">system:administrators</emphasis> group.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ589">
+     <title>Granting Privilege for kas Commands: the ADMIN Flag</title>
+ 
+     <indexterm>
+       <primary>ADMIN flag in Authentication Database entry</primary>
+ 
+       <secondary>privileges resulting</secondary>
+     </indexterm>
+ 
+     <para>Administrators who have the <computeroutput>ADMIN</computeroutput> flag on their Authentication Database entry can issue
+     all <emphasis role="bold">kas</emphasis> commands, which enable them to administer the Authentication Database. <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>granting privilege for</secondary>
+       </indexterm> <indexterm>
+         <primary>privilege</primary>
+ 
+         <secondary>granting for kas commands</secondary>
+       </indexterm> <indexterm>
+         <primary>granting</primary>
+ 
+         <secondary>privilege for kas commands</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ590">
+       <title>To check if the ADMIN flag is set</title>
+ 
+       <indexterm>
+         <primary>ADMIN flag in Authentication Database entry</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>ADMIN flag in Authentication Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>examine</secondary>
+ 
+         <tertiary>to display ADMIN flag</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas examine</secondary>
+ 
+         <tertiary>to display ADMIN flag</tertiary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para><anchor id="LIWQ591" />Issue the <emphasis role="bold">kas examine</emphasis> command to display an entry from the
+           Authentication Database.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UFS) identity, which possibly does not correspond to an AFS-privileged administrator. Include
+           the <emphasis role="bold">-admin_username</emphasis> argument (here abbreviated to <emphasis
+           role="bold">-admin</emphasis>) to name a user identity that has the <computeroutput>ADMIN</computeroutput> flag on its
+           Authentication Database entry.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">kas examine</emphasis> &lt;<replaceable>name of user</replaceable>&gt;   \
+                  <emphasis role="bold">-admin</emphasis>  &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;
+    Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">e</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">examine</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the entry to display.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account with the <computeroutput>ADMIN</computeroutput> flag on its Authentication
+                   Database entry, such as the <emphasis role="bold">admin</emphasis> account. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+ 
+       <para>If the <computeroutput>ADMIN</computeroutput> flag is turned on, it appears on the first line, as in this
+       example:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">kas e terry -admin admin</emphasis>
+    Administrator's (admin) password: &lt;<replaceable>admin_password</replaceable>&gt;
+    User data for terry (ADMIN)
+      key version is 0, etc...
+ </programlisting>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>kas setfields</secondary>
+ 
+         <tertiary>setting ADMIN flag</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>kas commands</primary>
+ 
+         <secondary>setfields</secondary>
+ 
+         <tertiary>setting ADMIN flag</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ADMIN flag in Authentication Database entry</primary>
+ 
+         <secondary>setting or removing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>ADMIN flag to Authentication Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>ADMIN flag in Authentication Database entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>ADMIN flag from Authentication Database entry</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_661">
+       <title>To set or remove the ADMIN flag</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kas setfields</emphasis> command to turn on the
+           <computeroutput>ADMIN</computeroutput> flag in an Authentication Database entry.</para>
+ 
+           <para>The Authentication Server performs its own authentication rather than accepting your existing AFS token. By default,
+           it authenticates your local (UNIX) identity, which possibly does not correspond to an AFS-privileged administrator.
+           Include the <emphasis role="bold">-admin</emphasis> argument to name an identity that has the
+           <computeroutput>ADMIN</computeroutput> flag on its Authentication Database entry. To verify that an entry has the flag,
+           issue the <emphasis role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ590">To check if the
+           ADMIN flag is set</link>.</para>
+ 
+           <para>The following command appears on two lines only for legibility.</para>
+ 
+           <programlisting>
+     % <emphasis role="bold">kas setfields</emphasis> &lt;<replaceable>name of user</replaceable>&gt;  {<emphasis role="bold">ADMIN</emphasis> |  <emphasis
+               role="bold">NOADMIN</emphasis>} \  
+                    <emphasis role="bold">-admin</emphasis> &lt;<replaceable>admin principal to use for authentication</replaceable>&gt;  
+     Administrator's (admin_user) password: &lt;<replaceable>admin_password</replaceable>&gt;
+ </programlisting>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">sf</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is an alias for <emphasis role="bold">setfields</emphasis> (and <emphasis role="bold">setf</emphasis> is the
+                   shortest acceptable abbreviation).</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">name of user</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the entry for which to set or remove the <computeroutput>ADMIN</computeroutput> flag.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">ADMIN | NOADMIN</emphasis></term>
+ 
+                 <listitem>
+                   <para>Sets or removes the <computeroutput>ADMIN</computeroutput> flag, respectively.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-admin</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an administrative account with the <computeroutput>ADMIN</computeroutput> flag on its Authentication
+                   Database entry, such as the <emphasis role="bold">admin</emphasis> account. The password prompt echoes it as
+                   admin_user. Enter the appropriate password as admin_password.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ592">
+     <title>Administering the UserList File</title>
+ 
+     <indexterm>
+       <primary>UserList file</primary>
+ 
+       <secondary>privileges resulting</secondary>
+     </indexterm>
+ 
+     <para>Inclusion in the file <emphasis role="bold">/usr/afs/etc/UserList</emphasis> on the local disk of each AFS server machine
+     enables an administrator to issue commands from the indicated suites. <itemizedlist>
+         <listitem>
+           <para>The <emphasis role="bold">bos</emphasis> commands enable the administrator to manage server processes and the server
+           configuration files that define the cell's database server machines, server encryption keys, and privileged users. See
+           <link linkend="HDRWQ80">Administering Server Machines</link> and <link linkend="HDRWQ142">Monitoring and Controlling
+           Server Processes</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">vos</emphasis> commands enable the administrator to manage volumes and the Volume Location
+           Database (VLDB). See <link linkend="HDRWQ174">Managing Volumes</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">backup</emphasis> commands enable the administrator to use the AFS Backup System to copy
+           data to permanent storage. See <link linkend="HDRWQ248">Configuring the AFS Backup System</link> and <link
+           linkend="HDRWQ283">Backing Up and Restoring AFS Data</link>.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>privilege for kas commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>granting privilege for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>vos commands</primary>
+ 
+       <secondary>granting privilege for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>backup commands</primary>
+ 
+       <secondary>granting privilege for</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privilege</primary>
+ 
+       <secondary>granting for bos commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privilege</primary>
+ 
+       <secondary>granting for vos commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privilege</primary>
+ 
+       <secondary>granting for backup commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>privilege for bos commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>privilege for vos commands</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>granting</primary>
+ 
+       <secondary>privilege for backup commands</secondary>
+     </indexterm>
+ 
+     <para>Although each AFS server machine maintains a separate copy of the file on its local disk, it is conventional to keep all
+     copies the same. It can be confusing for an administrator to have the privilege on some machines but not others. <indexterm>
+         <primary>system control machine</primary>
+ 
+         <secondary>as distributor of UserList file</secondary>
+       </indexterm></para>
+ 
+     <para>If your cell runs the United States edition of AFS and uses the Update Server to distribute the contents of the system
+     control machine's <emphasis role="bold">/usr/afs/etc</emphasis> directory, then edit only the copy of the <emphasis
+     role="bold">UserList</emphasis> file stored on the system control machine. If you have forgotten which machine is the system
+     control machine, see <link linkend="HDRWQ90">The Four Roles for File Server Machines</link>.</para>
+ 
+     <para>If your cell runs the international edition of AFS, or does not use a system control machine, then you must edit the
+     <emphasis role="bold">UserList</emphasis> file on each server machine individually.</para>
+ 
+     <para>To avoid making formatting errors that can result in performance problems, never edit the <emphasis
+     role="bold">UserList</emphasis> file directly. Instead, use the <emphasis role="bold">bos adduser</emphasis> or <emphasis
+     role="bold">bos removeuser</emphasis> commands as described in this section. <indexterm>
+         <primary>UserList file</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm> <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>UserList file</secondary>
+       </indexterm> <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>listusers</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos listusers</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ593">
+       <title>To display the users in the UserList file</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos listusers</emphasis> command to display the contents of the <emphasis
+           role="bold">/usr/afs/etc/UserList</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">listu</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">listusers</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names an AFS server machine. In the normal case, any machine is acceptable because the file is the same on
+                   all of them.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ594">
+       <title>To add users to the UserList file</title>
+ 
+       <indexterm>
+         <primary>UserList file</primary>
+ 
+         <secondary>adding users</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>UserList file users</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>adduser</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos adduser</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If not, you must have a
+           qualified administrator add you before you can add entries to it yourself. If necessary, issue the <emphasis
+           role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the users in
+           the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos adduser</emphasis> command to add one or more users to the <emphasis
+           role="bold">UserList</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos adduser</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>user names</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">addu</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">adduser</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the system control machine if you use the Update Server to distribute the contents of the <emphasis
+                   role="bold">/usr/afs/etc</emphasis> directory (possible only in cells running the United States edition of AFS).
+                   By default, it can take up to five minutes for the Update Server to distribute the changes, so newly added users
+                   must wait that long before attempting to issue privileged commands.</para>
+ 
+                   <para>If you are running the international edition of AFS, or do not use the Update Server, repeat the command,
+                   substituting the name of each AFS server machine for machine name in turn.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">user names</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the username of each administrator to add to the <emphasis role="bold">UserList</emphasis>
+                   file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+ 
+     <sect2 id="Header_665">
+       <title>To remove users from the UserList file</title>
+ 
+       <indexterm>
+         <primary>UserList file</primary>
+ 
+         <secondary>removing users</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>UserList file users</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>removeuser</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos removeuser</secondary>
+       </indexterm>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Verify you are listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. If not, you must have a
+           qualified administrator add you before you can remove entries from it yourself. If necessary, issue the <emphasis
+           role="bold">bos listusers</emphasis> command, which is fully described in <link linkend="HDRWQ593">To display the users in
+           the UserList file</link>. <programlisting>
+    % <emphasis role="bold">bos listusers</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos removeuser</emphasis> command to remove one or more users from the <emphasis
+           role="bold">UserList</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos removeuser</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>user names</replaceable>&gt;+
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">removeu</emphasis></term>
+ 
+                 <listitem>
+                   <para>Is the shortest acceptable abbreviation of <emphasis role="bold">removeuser</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">machine name</emphasis></term>
+ 
+                 <listitem>
+                   <para>Names the system control machine if you use the Update Server to distribute the contents of the <emphasis
+                   role="bold">/usr/afs/etc</emphasis> directory (possible only in cells running the United States edition of AFS).
+                   By default, it can take up to five minutes for the Update Server to distribute the change, so newly removed users
+                   can continue to issue privileged commands during that time.</para>
+ 
+                   <para>If you are running the international edition of AFS, or do not use the Update Server, repeat the command,
+                   substituting the name of each AFS server machine for machine name in turn.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">user names</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the username of each administrator to add to the <emphasis role="bold">UserList</emphasis>
+                   file.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd022.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd022.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:01 2009
--- openafs/doc/xml/AdminGuide/auagd022.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,1172 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <appendix id="HDRWQ595">
+   <title>Managing the NFS/AFS Translator</title>
+ 
+   <indexterm>
+     <primary>NFS/AFS Translator</primary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>translator</primary>
+ 
+     <secondary>NFS/AFS</secondary>
+   </indexterm>
+ 
+   <para>The NFS(R)/AFS(R) Translator enables users working on NFS client machines to access, create and remove files stored in AFS.
+   This chapter assumes familiarity with both NFS and AFS.</para>
+ 
+   <sect1 id="HDRWQ596">
+     <title>Summary of Instructions</title>
+ 
+     <para>This chapter explains how to perform the following tasks by using the indicated commands:</para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="70*" />
+ 
+         <colspec colwidth="30*" />
+ 
+         <tbody>
+           <row>
+             <entry>Mount directory on translator machine</entry>
+ 
+             <entry><emphasis role="bold">mount</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Examine value of <emphasis role="bold">@sys</emphasis> variable</entry>
+ 
+             <entry><emphasis role="bold">fs sysname</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Enable/disable reexport of AFS, set other parameters</entry>
+ 
+             <entry><emphasis role="bold">fs exportafs</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry>Assign AFS tokens to user on NFS client machine</entry>
+ 
+             <entry><emphasis role="bold">knfs</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ598">
+     <title>Overview</title>
+ 
+     <para>The NFS/AFS Translator enables users on NFS client machines to access the AFS filespace as if they are working on an AFS
+     client machine, which facilitates collaboration with other AFS users.</para>
+ 
+     <para>An <emphasis>NFS/AFS translator machine</emphasis> (or simply <emphasis>ltranslator machine</emphasis>) is a machine
+     configured as both an AFS client and an NFS server: <itemizedlist>
+         <listitem>
+           <para>Its AFS client functionality enables it to access the AFS filespace. The Cache Manager requests and caches files
+           from AFS file server machines, and can even maintain tokens for NFS users, if you have made the configuration changes that
+           enable NFS users to authenticate with AFS.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Its NFS server functionality makes it possible for the translator machine to export the AFS filespace to NFS client
+           machines. When a user on an NFS client machine mounts the translator machine's <emphasis role="bold">/afs</emphasis>
+           directory (or one of its subdirectories, if that feature is enabled), access to AFS is immediate and transparent. The NFS
+           client machine does not need to run any AFS software.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="HDRWQ599">
+       <title>Enabling Unauthenticated or Authenticated AFS Access</title>
+ 
+       <para>By configuring the translation environment appropriately, you can provide either unauthenticated or authenticated access
+       to AFS from NFS client machines. The sections of this chapter on configuring translator machines, NFS client machines, and AFS
+       user accounts explain how to configure the translation environment appropriately. <itemizedlist>
+           <listitem>
+             <para>If you configure the environment for unauthenticated access, the AFS File Server considers the NFS users to be the
+             user <emphasis role="bold">anonymous</emphasis>. They can access only those AFS files and directories for which the
+             access control list (ACL) extends the required permissions to the <emphasis role="bold">system:anyuser</emphasis> group.
+             They can issue only those AFS commands that do not require privilege, and then only if their NFS client machine is a
+             system type for which AFS binaries are available and accessible by the <emphasis role="bold">system:anyuser</emphasis>
+             group. Such users presumably do not have AFS accounts.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you configure the environment for authenticated access, you must create entries in the AFS Authentication and
+             Protection Databases for the NFS users. The authentication procedure they use depends on whether the NFS client machine
+             is a supported system type (one for which AFS binaries are available): <itemizedlist>
+                 <listitem>
+                   <para>If AFS binaries are available for the NFS client machine, NFS users can issue the <emphasis
+                   role="bold">klog</emphasis> command on the NFS client machine. They can access the filespace and issue AFS
+                   commands to the same extent as authenticated users working on AFS client machines.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If AFS binaries are not available for the NFS client machine, NFS users must establish a connection with the
+                   translator machine (using the <emphasis role="bold">telnet</emphasis> utility, for example) and then issue the
+                   <emphasis role="bold">klog</emphasis> and <emphasis role="bold">knfs</emphasis> commands on the translator machine
+                   to make its Cache Manager use the tokens correctly while users work on the NFS client. They can access the AFS
+                   filespace as authenticated users, but cannot issue AFS commands. For instructions, see <link
+                   linkend="HDRWQ612">Authenticating on Unsupported NFS Client Machines</link>.</para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ600">
+       <title>Setting the AFSSERVER and AFSCONF Environment Variables</title>
+ 
+       <para>If you wish to enable your NFS users to issue AFS commands, you must define the AFSSERVER and AFSCONF environment
+       variables in their command shell. This section explains the variables' function and outlines the various methods for setting
+       them.</para>
+ 
+       <para>Issuing AFS commands also requires that the NFS client machine is a supported system type (one for which AFS binaries
+       are available and accessible). Users working on NFS client machines of unsupported system types can access AFS as
+       authenticated users, but they cannot issue AFS commands. It is not necessary to define the AFSSERVER and AFSCONF variables for
+       such users. For instructions on using the <emphasis role="bold">knfs</emphasis> command to obtain authenticated access on
+       unsupported system types, see <link linkend="HDRWQ612">Authenticating on Unsupported NFS Client Machines</link>. <indexterm>
+           <primary>AFSSERVER environment variable (NFS/AFS Translator)</primary>
+         </indexterm></para>
+ 
+       <sect3 id="HDRWQ601">
+         <title>The AFSSERVER Variable</title>
+ 
+         <para>The AFSSERVER variable designates the AFS client machine that performs two functions for NFS clients: <itemizedlist>
+             <listitem>
+               <para>It acts as the NFS client's <emphasis>remote executor</emphasis> by executing AFS-specific system calls on its
+               behalf, such as those invoked by the <emphasis role="bold">klog</emphasis> and <emphasis role="bold">tokens</emphasis>
+               commands and by many commands in the AFS suites.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Its stores the tokens that NFS users obtain when they authenticate with AFS. This implies that the remote
+               executor machine and the translator machine must be the same if the user needs authenticated access to AFS.</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <para>The choice of remote executor most directly affects commands that display or change Cache Manager configuration, such
+         as the <emphasis role="bold">fs getcacheparms</emphasis>, <emphasis role="bold">fs getcellstatus</emphasis>, and <emphasis
+         role="bold">fs setcell</emphasis> commands. When issued on an NFS client, these commands affect the Cache Manager on the
+         designated remote executor machine. (Note, however, that several such commands require the issuer to be logged into the
+         remote executor's local file system as the local superuser <emphasis role="bold">root</emphasis>. The ability of NFS client
+         users to log in as <emphasis role="bold">root</emphasis> is controlled by NFS, not by the NFS/AFS Translator, so setting the
+         remote executor properly does not necessarily enable users on the NFS client to issue such commands.)</para>
+ 
+         <para>The choice of remote executor is also relevant for AFS commands that do not concern Cache Manager configuration but
+         rather have the same result on every machine, such as the <emphasis role="bold">fs</emphasis> commands that display or set
+         ACLs and volume quota. These commands take an AFS path as one of their arguments. If the Cache Manager on the remote
+         executor machine mounts the AFS filespace at the <emphasis role="bold">/afs</emphasis> directory, as is conventional for AFS
+         clients, then the pathname specified on the NFS client must begin with the string <emphasis role="bold">/afs</emphasis> for
+         the Cache Manager to understand it. This implies that the remote executor must be the NFS client's primary translator
+         machine (the one whose <emphasis role="bold">/afs</emphasis> directory is mounted at <emphasis role="bold">/afs</emphasis>
+         on the NFS client). <indexterm>
+             <primary>NFS/AFS Translator</primary>
+ 
+             <secondary>AFSCONF environment variable</secondary>
+           </indexterm> <indexterm>
+             <primary>AFSCONF environment variable (NFS/AFS Translator)</primary>
+           </indexterm></para>
+       </sect3>
+ 
+       <sect3 id="Header_672">
+         <title>The AFSCONF Variable</title>
+ 
+         <para>The AFSCONF environment variable names the directory that houses the <emphasis role="bold">ThisCell</emphasis> and
+         <emphasis role="bold">CellServDB</emphasis> files to use when running AFS commands issued on the NFS client machine. As on
+         an AFS client, these files determine the default cell for command execution.</para>
+ 
+         <para>For predictable performance, it is best that the files in the directory named by the AFSCONF variable match those in
+         the <emphasis role="bold">/usr/vice/etc</emphasis> directory on the translator machine. If your cell has an AFS directory
+         that serves as the central update source for files in the <emphasis role="bold">/usr/vice/etc</emphasis> directory, it is
+         simplest to set the AFSCONF variable to refer to it. In the conventional configuration, this directory is called <emphasis
+         role="bold">/afs/</emphasis>cellname<emphasis role="bold">/common/etc</emphasis>.</para>
+       </sect3>
+ 
+       <sect3 id="Header_673">
+         <title>Setting Values for the Variables</title>
+ 
+         <para>To learn the values of the AFSSERVER and AFSCONF variables, AFS command interpreters consult the following three
+         sources in sequence: <orderedlist>
+             <listitem>
+               <para>The current command shell's environment variable definitions</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">.AFSSERVER</emphasis> or <emphasis role="bold">.AFSCONF</emphasis> file in the
+               issuer's home directory</para>
+             </listitem>
+ 
+             <listitem>
+               <para>The <emphasis role="bold">/.AFSSERVER</emphasis> or <emphasis role="bold">/.AFSCONF</emphasis> file in the NFS
+               client machine's root (<emphasis>/</emphasis>) directory. If the client machine is diskless, its root directory can
+               reside on an NFS server machine.</para>
+             </listitem>
+           </orderedlist></para>
+ 
+         <para>(Actually, before consulting these sources, the NFS client looks for the <emphasis role="bold">CellServDB</emphasis>
+         and <emphasis role="bold">ThisCell</emphasis> files in its own <emphasis role="bold">/usr/vice/etc</emphasis> directory. If
+         the directory exists, the NFS client does not use the value of the AFSCONF variable. However, the <emphasis
+         role="bold">/usr/vice/etc</emphasis> directory usually exists only on AFS clients, not NFS clients.)</para>
+ 
+         <para>As previously detailed, correct performance generally requires that the remote executor machine be the NFS client's
+         primary translator machine (the one whose <emphasis role="bold">/afs</emphasis> directory is mounted at the <emphasis
+         role="bold">/afs</emphasis> directory on the NFS client). The requirement holds for all users accessing AFS from the NFS
+         client, so it is usually simplest to create the <emphasis role="bold">.AFSSERVER</emphasis> file in the NFS client's root
+         directory. The main reason to create the file in a user's home directory or to set the AFSSERVER environment variable in the
+         current command shell is that the user needs to switch to a different translator machine, perhaps because the original one
+         has become inaccessible.</para>
+ 
+         <para>Similarly, it generally makes sense to create the <emphasis role="bold">.AFSCONF</emphasis> file in the NFS client's
+         root directory. Creating it in the user's home directory or setting the AFSCONF environment variable in the current command
+         shell is useful mostly when there is a reason to specify a different set of database server machines for the cell, perhaps
+         in a testing situation.</para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ602">
+       <title>Delayed Writes for Files Saved on NFS Client Machines</title>
+ 
+       <indexterm>
+         <primary>asynchrony</primary>
+ 
+         <secondary>when AFS files saved on NFS clients</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>synchrony</primary>
+ 
+         <secondary>when AFS files saved on NFS clients</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>delayed write operations</primary>
+ 
+         <secondary>when AFS files saved on NFS clients</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>write</primary>
+ 
+         <secondary>operations delayed from NFS clients</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>write</primary>
+ 
+         <secondary>system call for files saved on NFS client</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fsync system call</primary>
+ 
+         <secondary>for files saved on NFS client</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>close system call</primary>
+ 
+         <secondary>for files saved on NFS client</secondary>
+       </indexterm>
+ 
+       <para>When an application running on an AFS client machine issues the <emphasis role="bold">close</emphasis> or <emphasis
+       role="bold">fsync</emphasis> system call on a file, the Cache Manager by default performs a synchronous write of the data to
+       the File Server. (For further discussion, see <link linkend="HDRWQ33">AFS Implements Save on Close</link> and <link
+       linkend="HDRWQ418">Enabling Asynchronous Writes</link>.)</para>
+ 
+       <para>To avoid degrading performance for the AFS users working on a translator machine, AFS does not perform synchronous
+       writes for applications running on the translator machine's NFS clients. Instead, one of the Cache Manager daemons (the
+       maintenance daemon) checks every 60 seconds for chunks in the cache that contain data saved on NFS clients, and writes their
+       contents to the File Server. This does not guarantee that data saved on NFS clients is written to the File Server within 60
+       seconds, but only that the <emphasis>maintenance daemon</emphasis> checks for and begins the write of data at that
+       interval.</para>
+ 
+       <para>Furthermore, AFS always ignores the <emphasis role="bold">fsync</emphasis> system call as issued on an NFS client. The
+       call requires an immediate and possibly time-consuming response from the File Server, which potentially causes delays for
+       other AFS clients of the File Server. NFS version 3 automatically issues the <emphasis role="bold">fsync</emphasis> system
+       call directly after the <emphasis role="bold">close</emphasis> call, but the Cache Manager ignores it and handles the
+       operation just like a regular <emphasis role="bold">close</emphasis>.</para>
+ 
+       <para>The delayed write mechanism means that there is usually a delay between the time when an NFS application issues the
+       <emphasis role="bold">close</emphasis> or <emphasis role="bold">fsync</emphasis> system call on a file and the time when the
+       changes are recorded at the File Server, which is when they become visible to users working on other AFS client machines
+       (either directly or on its NFS clients). The delay is likely to be longer than for files saved by users working directly on an
+       AFS client machine.</para>
+ 
+       <para>The exact amount of delay is difficult to predict. The NFS protocol itself allows a standard delay before saved data
+       must be transferred from the NFS client to the NFS server (the translator machine). The modified data remains in the
+       translator machine's AFS client cache until the maintenance daemon's next scheduled check for such data, and it takes
+       additional time to transfer the data to the File Server. The maintenance daemon uses a single thread, so there can be
+       additional delay if it takes more than 60 seconds to write out all of the modified NFS data. That is, if the maintenance
+       daemon is still writing data at the time of the next scheduled check, it cannot notice any additional modified data until the
+       scheduled time after it completes the long write operation.</para>
+ 
+       <para>The Cache Manager's response to the <emphasis role="bold">write</emphasis> system call is the same whether it is issued
+       on an AFS client machine or on an NFS client of a translator machine: it records the modifications in the local AFS client
+       cache only.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ603">
+     <title>Configuring NFS/AFS Translator Machines</title>
+ 
+     <para>To act as an NFS/AFS translator machine, a machine must configured as follows: <itemizedlist>
+         <listitem>
+           <para>It must be an AFS client. Many system types supported as AFS clients can be translator machines. To learn about
+           possible restrictions in a specific release of AFS, see the <emphasis>OpenAFS Release Notes</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It must be an NFS server. The appropriate number of NFS server daemons (<emphasis role="bold">nfsd</emphasis> and
+           others) depends on the anticipated NFS client load.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It must export the local directory on which the AFS filespace is mounted, <emphasis role="bold">/afs</emphasis> by
+           convention.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>If users on a translator machine's NFS clients are to issue AFS commands, the translator machine must also meet the
+     requirements discussed in <link linkend="HDRRMTSYS">Configuring the Translator Machine to Accept AFS Commands</link>.</para>
+ 
+     <sect2 id="Header_676">
+       <title>Loading NFS and AFS Kernel Extensions</title>
+ 
+       <para>The AFS distribution for system types that can act as NFS/AFS Translator machines usually includes two versions of the
+       AFS kernel extensions file, one for machines where the kernel supports NFS server functionality, and one for machines not
+       using NFS (the latter AFS kernel extensions file generally has the string <emphasis role="bold">nonfs</emphasis> in its name).
+       A translator machine must use the NFS-enabled version of the AFS extensions file. On some system types, you select the
+       appropriate file by moving it to a certain location, whereas on other system types you set a variable that results in
+       automatic selection of the correct file. See the instructions in the <emphasis>OpenAFS Quick Beginnings</emphasis> for
+       incorporating AFS into the kernel on each system type.</para>
+ 
+       <para>On many system types, NFS is included in the kernel by default, so it is not necessary to load NFS kernel extensions
+       explicitly. On system types where you must load NFS extensions, then in general you must load them before loading the AFS
+       kernel extensions. The <emphasis>OpenAFS Quick Beginnings</emphasis> describes how to incorporate the AFS initialization
+       script into a machine's startup sequence so that it is ordered correctly with respect to the script that handles NFS.</para>
+ 
+       <para>In addition, the AFS extensions must be loaded into the kernel before the <emphasis role="bold">afsd</emphasis> command
+       runs. The AFS initialization script included in the AFS distribution correctly orders the loading and <emphasis
+       role="bold">afsd</emphasis> commands.</para>
+     </sect2>
+ 
+     <sect2 id="HDRRMTSYS">
+       <title>Configuring the Translator Machine to Accept AFS Commands</title>
+ 
+       <para>For users working on a translator machine's NFS clients to issue AFS commands, the <emphasis
+       role="bold">-rmtsys</emphasis> flag must be included on the <emphasis role="bold">afsd</emphasis> command which initializes
+       the translator machine's Cache Manager. The flag starts an additional daemon (the <emphasis>remote executor</emphasis>
+       daemon), which executes AFS-specific system calls on behalf of NFS clients. For a discussion of the implications of NFS users
+       issuing AFS commands, see <link linkend="HDRWQ600">Setting the AFSSERVER and AFSCONF Environment Variables</link>.</para>
+ 
+       <para>The instructions in the OpenAFS Quick Beginnings for configuring the Cache Manager explain how to add options such as
+       the <emphasis role="bold">-rmtsys</emphasis> flag to the <emphasis role="bold">afsd</emphasis> command in the AFS
+       initialization script. On many system types, it is simplest to list the flag on the line in the script that defines the
+       OPTIONS variable. The <emphasis>remote executor daemon</emphasis> does not consume many resources, so it is simplest to add it
+       to the <emphasis role="bold">afsd</emphasis> command on every translator machine, even if not all users on the machine's NFS
+       clients issue AFS commands.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ604">
+       <title>Controlling Optional Translator Features</title>
+ 
+       <para>After an AFS client machine is configured as a translator machine, it by default exports the AFS filespace to NFS
+       clients. You can disable and reenable translator functionality by using the <emphasis role="bold">fs exportafs</emphasis>
+       command's <emphasis role="bold">-start</emphasis> argument. The command's other arguments control other aspects of translator
+       behavior. <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">-convert</emphasis> argument controls whether the second and third (<emphasis
+             role="bold">group</emphasis> and <emphasis role="bold">other</emphasis>) sets of UNIX mode bits on an AFS file or
+             directory being exported to NFS are set to match the first (<emphasis role="bold">owner</emphasis>) mode bits. By
+             default, the mode bits are set to match.</para>
+ 
+             <para>Unlike AFS, NFS uses all three sets of mode bits when determining whether a user can read or write a file, even
+             one stored in AFS. Some AFS files possibly do not have any <emphasis role="bold">group</emphasis> and <emphasis
+             role="bold">other</emphasis> mode bits turned on, because AFS uses only the <emphasis role="bold">owner</emphasis> bits
+             in combination with the ACL on the file's directory. If only the <emphasis role="bold">owner</emphasis> mode bits are
+             set, NFS allows only the file's owner of the file to read or write it. Setting the <emphasis
+             role="bold">-convert</emphasis> argument to the value <emphasis role="bold">on</emphasis> enables other users to access
+             the file in the same manner as the owner. Setting the value <emphasis role="bold">off</emphasis> preserves the mode bits
+             set on the file as stored in AFS.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">-uidcheck</emphasis> argument controls whether tokens can be assigned to an NFS user
+             whose local UID on the NFS client machine differs from the local UID associated with the tokens on the translator
+             machine. By default, this is possible.</para>
+ 
+             <para>If you turn on UID checking by setting the value <emphasis role="bold">on</emphasis>, then tokens can be assigned
+             only to an NFS user whose local UID matches the local UID of the process on the translator machine that is assigning the
+             tokens. One consequence is that there is no point in including the <emphasis role="bold">-id</emphasis> argument to the
+             <emphasis role="bold">knfs</emphasis> command: the only acceptable value is the local UID of the command's issuer, which
+             is the value used when the <emphasis role="bold">-id</emphasis> argument is omitted. Requiring matching UIDs in this way
+             is effective only when users have the same local UID on the translator machine as on NFS client machines. In that case,
+             it guarantees that users assign their tokens only to their own NFS sessions. For instructions, see <link
+             linkend="HDRWQ612">Authenticating on Unsupported NFS Client Machines</link>.</para>
+ 
+             <note>
+               <para>Turning on UID checking also prevents users on supported NFS clients from using the <emphasis
+               role="bold">klog</emphasis> command to authenticate on the NFS client directly. They must authenticated and use the
+               <emphasis role="bold">knfs</emphasis> command on the translator machine instead. This is because after the <emphasis
+               role="bold">klog</emphasis> command interpreter obtains the token on the NFS client, it passes it to the Cache
+               Manager's remote executor daemon, which makes the system call that stores the token in a credential structure on the
+               translator machine. The remote executor generally runs as the local superuser <emphasis role="bold">root</emphasis>,
+               so in most cases its local UID (normally zero) does not match the local UID of the user who issued the <emphasis
+               role="bold">klog</emphasis> command on the NFS client machine.</para>
+ 
+               <para>On the other hand, although using the <emphasis role="bold">knfs</emphasis> command instead of the <emphasis
+               role="bold">klog</emphasis> command is possibly less convenient for users, it eliminates a security exposure: the
+               <emphasis role="bold">klog</emphasis> command interpreter passes the token across the network to the remote executor
+               daemon in clear text mode.</para>
+             </note>
+ 
+             <para>If you disable UID checking by assigning the value <emphasis role="bold">off</emphasis> , the issuer of the
+             <emphasis role="bold">knfs</emphasis> command can assign tokens to a user who has a different local UID on the NFS
+             client machine, such as the local superuser <emphasis role="bold">root</emphasis>. Indeed, more than one issuer of the
+             <emphasis role="bold">knfs</emphasis> command can assign tokens to the same user on the NFS client machine. Each time a
+             different user issues the <emphasis role="bold">knfs</emphasis> command with the same value for the <emphasis
+             role="bold">-id</emphasis> argument, that user's tokens overwrite the existing ones. This can result in unpredictable
+             access for the NFS user.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">-submounts</emphasis> argument controls whether users on the NFS client can mount AFS
+             directories other than the top-level <emphasis role="bold">/afs</emphasis> directory. By default, the translator does
+             not permit these submounts.</para>
+ 
+             <para>Submounts can be useful in a couple of circumstances. If, for example, NFS users need to access their own AFS home
+             directories only, then creating a submount to it eliminates the need for them to know or enter the complete path.
+             Similarly, you can use a submount to prevent users from accessing parts of the filespace higher in the AFS hierarchy
+             than the submount.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_679">
+       <title>To configure an NFS/AFS translator machine</title>
+ 
+       <para>The following instructions configure the translator to enable users to issue AFS commands. Omit Step <link
+       linkend="LIWQ605">6</link> if you do not want to enable this functionality. <orderedlist>
+           <listitem>
+             <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by
+             issuing the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Configure the NFS/AFS translator machine as an NFS server, if it is not already. Follow the instructions provided
+             by your NFS supplier. The appropriate number of NFS server daemons (such as <emphasis role="bold">nfsd</emphasis>)
+             depends on the number of potential NFS clients.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Configure the NFS/AFS translator machine as an AFS client, if it is not already. For the most predictable
+             performance, the translator machine's local copies of the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> and
+             <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> files must be the same as on other client machines in the
+             cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LITRANS-MOUNTFILE" />Modify the file that controls mounting of directories on the machine by remote
+             NFS clients. <itemizedlist>
+                 <indexterm>
+                   <primary>etc/exports file</primary>
+                 </indexterm>
+ 
+                 <indexterm>
+                   <primary>files</primary>
+ 
+                   <secondary>exports</secondary>
+                 </indexterm>
+ 
+                 <listitem>
+                   <para>On systems that use the <emphasis role="bold">/etc/exports</emphasis> file, edit it to enable export of the
+                   <emphasis role="bold">/afs</emphasis> directory to NFS clients. You can list the names of specific NFS client
+                   machines if you want to provide access only to certain users. For a description of the file's format, see the NFS
+                   manual page for <emphasis role="bold">exports(5)</emphasis>.</para>
+ 
+                   <para>The following example enables any NFS client machine to mount the machine's <emphasis
+                   role="bold">/afs</emphasis>, <emphasis role="bold">/usr</emphasis>, and <emphasis role="bold">/usr2</emphasis>
+                   directories:</para>
+ 
+                   <programlisting>
+    /afs
+    /usr
+    /usr2
+ </programlisting>
+ 
+                   <indexterm>
+                     <primary>share command</primary>
+                   </indexterm>
+ 
+                   <indexterm>
+                     <primary>commands</primary>
+ 
+                     <secondary>share</secondary>
+                   </indexterm>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>On system types that use the <emphasis role="bold">share</emphasis> command, edit the <emphasis
+                   role="bold">/etc/dfs/dfstab</emphasis> file or equivalent to include <emphasis role="bold">share</emphasis>
+                   instructions that enable remote mounts of the <emphasis role="bold">/afs</emphasis> directory. Most distributions
+                   include the binary as <emphasis role="bold">/usr/sbin/share</emphasis>. The following example commands enable
+                   remote mounts of the root ( <emphasis role="bold">/</emphasis> ) and <emphasis role="bold">/afs</emphasis>
+                   directories. To verify the correct syntax, consult the manual page for the <emphasis role="bold">share</emphasis>
+                   command. <programlisting>
+    share -F nfs -o rw -d "root" /
+    share -F nfs -o rw -d "afs gateway" /afs
+ </programlisting></para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the machine's AFS initialization file to invoke the standard UNIX <emphasis role="bold">exportfs</emphasis>
+             command after the <emphasis role="bold">afsd</emphasis> program runs. On some system types, the modifications you made
+             in Step <link linkend="LITRANS-MOUNTFILE">4</link> are not enough to enable exporting the AFS filespace via the
+             <emphasis role="bold">/afs</emphasis> directory, because the resulting configuration changes are made before the
+             <emphasis role="bold">afsd</emphasis> program runs during machine initialization. Only after the <emphasis
+             role="bold">afsd</emphasis> program runs does the <emphasis role="bold">/afs</emphasis> directory become the mount point
+             for the entire AFS filespace; before, it is a local directory like any other.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ605" />Modify the <emphasis role="bold">afsd</emphasis> command in the AFS initialization file to
+             include the <emphasis role="bold">-rmtsys</emphasis> flag.</para>
+ 
+             <para>For system types other than IRIX, the instructions in the <emphasis>OpenAFS Quick Beginnings</emphasis> for
+             configuring the Cache Manager explain how to add the <emphasis role="bold">-rmtsys</emphasis> flag, for example by
+             adding it to the line in the script that defines the value for the OPTIONS variable.</para>
+ 
+             <para>On IRIX systems, the AFS initialization script automatically adds the <emphasis role="bold">-rmtsys</emphasis>
+             flag if you have activated the <emphasis role="bold">afsxnfs</emphasis> configuration variable as instructed in the
+             <emphasis>OpenAFS Quick Beginnings</emphasis> instructions for incorporating AFS extensions into the kernel. If the
+             variable is not already activated, issue the following command.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/chkconfig  -f  afsxnfs  on</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> Depending on the number of NFS clients you expect this machine to
+             serve, it can be beneficial to add other arguments to the <emphasis role="bold">afsd</emphasis> command in the machine's
+             initialization file, such as the <emphasis role="bold">-daemons</emphasis> argument to set the number of background
+             daemons. See <link linkend="HDRWQ387">Administering Client Machines and the Cache Manager</link> and the <emphasis
+             role="bold">afsd</emphasis> reference page in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Reboot the machine. On many system types, the appropriate command is <emphasis role="bold">shutdown</emphasis>;
+             consult your operating system administrator's guide. <programlisting>
+    # <emphasis role="bold">shutdown</emphasis> appropriate_options
+ </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>exportafs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs exportafs</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_680">
+       <title>To disable or enable Translator functionality, or set optional features</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs exportafs</emphasis> command. <programlisting>
+    # <emphasis role="bold">fs exportafs nfs</emphasis> [<emphasis role="bold">-start</emphasis> {<emphasis role="bold">on</emphasis> | <emphasis
+                 role="bold">off</emphasis>}} ]  [<emphasis role="bold">-convert</emphasis> {<emphasis role="bold">on</emphasis> | <emphasis
+                 role="bold">off</emphasis>}]   
+                       [<emphasis role="bold">-uidcheck</emphasis> {<emphasis role="bold">on</emphasis> | <emphasis role="bold">off</emphasis>}]   [<emphasis
+                 role="bold">-submounts</emphasis> {<emphasis role="bold">on</emphasis> | <emphasis role="bold">off</emphasis>}] 
+ </programlisting> <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-start</emphasis></term>
+ 
+                 <listitem>
+                   <para>Disables translator functionality if the value is <emphasis role="bold">off</emphasis> or reenables it if
+                   the value is <emphasis role="bold">on</emphasis>. Omit this argument to display the current setting of all
+                   parameters set by this command.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-convert</emphasis></term>
+ 
+                 <listitem>
+                   <para>Controls the setting of the second and third (<emphasis role="bold">group</emphasis> and <emphasis
+                   role="bold">other</emphasis>) sets of UNIX mode bits on AFS files and directories as exported to NFS clients If
+                   the value is <emphasis role="bold">on</emphasis>, they are set to match the <emphasis role="bold">owner</emphasis>
+                   mode bits. If the value is <emphasis role="bold">off</emphasis>, the bits are not changed. If this argument is
+                   omitted, the default value is <emphasis role="bold">on</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-uidcheck</emphasis></term>
+ 
+                 <listitem>
+                   <para>Controls whether issuers of the <emphasis role="bold">knfs</emphasis> command can specify a value for its
+                   <emphasis role="bold">-id</emphasis> argument that does not match their AFS UID: <itemizedlist>
+                       <listitem>
+                         <para>If the value is <emphasis role="bold">on</emphasis>, the value of the <emphasis
+                         role="bold">-id</emphasis> argument must match the issuer's local UID.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>If the value is <emphasis role="bold">off</emphasis>, the issuer of the <emphasis
+                         role="bold">knfs</emphasis> command can use the <emphasis role="bold">-id</emphasis> argument to assign
+                         tokens to a user who has a different local UID on the NFS client machine, such as the local superuser
+                         <emphasis role="bold">root</emphasis>.</para>
+                       </listitem>
+                     </itemizedlist></para>
+ 
+                   <para>If this argument is omitted, the default value is <emphasis role="bold">off</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-submounts</emphasis></term>
+ 
+                 <listitem>
+                   <para>Controls whether the translator services an NFS mount of any directory in the AFS filespace other than the
+                   top-level <emphasis role="bold">/afs</emphasis> directory. If the value is <emphasis role="bold">on</emphasis>,
+                   such submounts are allowed. If the value is off, only mounts of the <emphasis role="bold">/afs</emphasis>
+                   directory are allowed. If this argument is omitted, the default value is <emphasis
+                   role="bold">off</emphasis>.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ606">
+     <title>Configuring NFS Client Machines</title>
+ 
+     <para>Any NFS client machine that meets the following requirements can access files in AFS via the NFS/AFS Translator. It does
+     not need to be configured as an AFS client machine. <itemizedlist>
+         <listitem>
+           <para>It must NFS-mount a translator machine's <emphasis role="bold">/afs</emphasis> directory on a local directory, which
+           by convention is also called <emphasis role="bold">/afs</emphasis>. The following instructions explain how to add the
+           <emphasis role="bold">mount</emphasis> command to the NFS client machine's <emphasis role="bold">/etc/fstab</emphasis>
+           file or equivalent.</para>
+ 
+           <para>The directory on which an NFS client mounts the translator's machine's <emphasis role="bold">/afs</emphasis>
+           directory can be called something other than <emphasis role="bold">/afs</emphasis>. For instance, to make it easy to
+           switch to another translator machine if the original one becomes inaccessible, you can mount more than one translator
+           machine's <emphasis role="bold">/afs</emphasis> directory. Name the mount <emphasis role="bold">/afs</emphasis> for the
+           translator machine that you normally use, and use a different name the mount to each alternate translator machine.</para>
+ 
+           <para>Mounting the AFS filespace on a directory other than <emphasis role="bold">/afs</emphasis> introduces another
+           requirement, however: when issuing a command that takes an AFS pathname argument, you must specify the full pathname,
+           starting with <emphasis role="bold">/afs</emphasis>, rather than a relative pathname. Suppose, for example, that a
+           translator machine's AFS filespace is mounted at <emphasis role="bold">/afs2</emphasis> on an NFS client machine and you
+           issue the following command to display the ACL on the current working directory, which is in AFS:</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">fs listacl .</emphasis>
+ </programlisting>
+ 
+           <para>The <emphasis role="bold">fs</emphasis> command interpreter on the NFS client must construct a full pathname before
+           passing the request to the Cache Manager on the translator machine. The AFS filespace is mounted at <emphasis
+           role="bold">/afs2</emphasis>, so the full pathname starts with that string. However, the Cache Manager on the translator
+           cannot find a directory called <emphasis role="bold">/afs2</emphasis>, because its mount of the AFS filespace is called
+           <emphasis role="bold">/afs</emphasis>. The command fails. To prevent the failure, provide the file's complete pathname,
+           starting with the string <emphasis role="bold">/afs</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It must run an appropriate number of NFS client <emphasis role="bold">biod</emphasis> daemons, which improve
+           performance by handling pre-reading and delayed writing. Most NFS vendors recommend running four such daemons, and most
+           NFS initialization scripts start them automatically. Consult your NFS documentation.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>To enable users to issue AFS commands, the NFS client machine must also be a supported system type (one for which AFS
+     binaries are available) and able to access the AFS command binaries. The <emphasis>OpenAFS Release Notes</emphasis> list the
+     supported system types in each release.</para>
+ 
+     <para>In addition, the AFSSERVER and AFSCONF environment variables must be set appropriately, as discussed in <link
+     linkend="HDRWQ600">Setting the AFSSERVER and AFSCONF Environment Variables</link>.</para>
+ 
+     <sect2 id="Header_682">
+       <title>To configure an NFS client machine to access AFS</title>
+ 
+       <note>
+         <para>The following instructions enable NFS users to issue AFS commands. Omit Step <link linkend="LIWQ608">5</link> and Step
+         <link linkend="LIWQ609">6</link> if you do not want to enable this functionality.</para>
+       </note>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Become the local superuser <emphasis role="bold">root</emphasis> on the machine, if you are not already, by issuing
+           the <emphasis role="bold">su</emphasis> command. <programlisting>
+    % <emphasis role="bold">su root</emphasis>
+    Password: &lt;<replaceable>root_password</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configure the machine as an NFS client machine, if it is not already. Follow the instructions provided by your NFS
+           vendor. The number of NFS client (<emphasis role="bold">biod</emphasis>) daemons needs to be appropriate for the expected
+           load on this machine. The usual recommended number is four.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create a directory called <emphasis role="bold">/afs</emphasis> on the machine, if one does not already exist, to
+           act as the mount point for the translator machine's <emphasis role="bold">/afs</emphasis> directory. It is acceptable to
+           use other names, but doing so introduces the limitation discussed in the introduction to this section. <programlisting>
+    # <emphasis role="bold">mkdir /afs</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>mount</secondary>
+             </indexterm> <indexterm>
+               <primary>mount command</primary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ607" />Modify the machine's file systems registry file (<emphasis role="bold">/etc/fstab</emphasis>
+           or equivalent) to include a command that mounts a translator machine's <emphasis role="bold">/afs</emphasis> directory. To
+           verify the correct syntax of the <emphasis role="bold">mount</emphasis> command, see the operating system's <emphasis
+           role="bold">mount(5)</emphasis> manual page. The following example includes options that are appropriate on many system
+           types. <programlisting>
+    mount -o hard,intr,timeo=300  translator_machine:/afs /afs
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><computeroutput>hard</computeroutput></term>
+ 
+                 <listitem>
+                   <para>Indicates that the NFS client retries NFS requests until the NFS server (translator machine) responds. When
+                   using the translator, file operations possibly take longer than with NFS alone, because they must also pass
+                   through the AFS Cache Manager. With a soft mount, a delayed response from the translator machine can cause the
+                   request to abort. Many NFS versions use hard mounts by default; if your version does not, it is best to add this
+                   option.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><computeroutput>intr</computeroutput></term>
+ 
+                 <listitem>
+                   <para>Enables the user to use a keyboard interrupt signal (such as &lt;<emphasis
+                   role="bold">Ctrl-c</emphasis>&gt;) to break the mount when the translator machine is inaccessible. Include this
+                   option only if the <computeroutput>hard</computeroutput> option is used, in which case the connection does not
+                   automatically break off when a translator machine goes down.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><computeroutput>timeo</computeroutput></term>
+ 
+                 <listitem>
+                   <para>Sets the maximum time (in tenths of seconds) the translator can take to respond to the NFS client's request
+                   before the client considers the request timed out. With a hard mount, setting this option to a high number like
+                   300 reduces the number of error messages like the following, which are generated when the translator does not
+                   respond immediately. <programlisting>
+    NFS server translator is not responding, still trying
+ </programlisting></para>
+ 
+                   <para>With a soft mount, it reduces the number of actual errors returned on timed-out requests.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><replaceable>translator_machine</replaceable></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully-qualified hostname of the translator machine whose <emphasis role="bold">/afs</emphasis>
+                   directory is to be mounted on the client machine's <emphasis role="bold">/afs</emphasis> directory.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <note>
+             <para>To mount the translator machine's <emphasis role="bold">/afs</emphasis> directory onto a directory on the NFS
+             client other than <emphasis role="bold">/afs</emphasis>, substitute the alternate directory name for the second instance
+             of <computeroutput>/afs</computeroutput> in the <emphasis role="bold">mount</emphasis> command.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ608" /><emphasis role="bold">(Optional)</emphasis> If appropriate, create the <emphasis
+           role="bold">/.AFSSERVER</emphasis> file to set the AFSSERVER environment variable for all of the machine's users. For a
+           discussion, see <link linkend="HDRWQ600">Setting the AFSSERVER and AFSCONF Environment Variables</link>. Place a single
+           line in the file, specifying the fully-qualified hostname of the translator machine that is to serve as the remote
+           executor. To enable users to issue commands that handle tokens, it must be the machine named as translator_machine in Step
+           <link linkend="LIWQ607">4</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ609" /><emphasis role="bold">(Optional)</emphasis> If appropriate, create the <emphasis
+           role="bold">/.AFSCONF</emphasis> file to set the AFSCONF environment variable for all of the machine's users. For a
+           discussion, see <link linkend="HDRWQ600">Setting the AFSSERVER and AFSCONF Environment Variables</link>. Place a single
+           line in the file, specifying the name of the directory where the <emphasis role="bold">CellServDB</emphasis> and <emphasis
+           role="bold">ThisCell</emphasis> files reside. If you use a central update source for these files (by convention, <emphasis
+           role="bold">/afs/</emphasis>cellname<emphasis role="bold">/common/etc</emphasis>), name it here.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ610">
+     <title>Configuring User Accounts</title>
+ 
+     <para>There are no requirements for NFS users to access AFS as unauthenticated users. To take advantage of more AFS
+     functionality, however, they must meet the indicated requirements. <itemizedlist>
+         <listitem>
+           <para>To access AFS as authenticated users, they must of course authenticate with AFS, which requires an entry in the
+           Protection and Authentication Databases.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To create and store files, they need the required ACL permissions. If you are providing a home directory for storage
+           of personal files, it is conventional to create a dedicated volume and mount it at the user's home directory location in
+           the AFS filespace.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>To issue AFS commands, they must meet several additional requirements: <itemizedlist>
+               <listitem>
+                 <para>They must be working on an NFS client machine of a supported system type and from which the AFS command
+                 binaries are accessible.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Their command shell must define values for the AFSSERVER and AFSCONF environment variables, as described in
+                 <link linkend="HDRWQ600">Setting the AFSSERVER and AFSCONF Environment Variables</link>. It is often simplest to
+                 define the variables by creating <emphasis role="bold">/.AFSSERVER</emphasis> and <emphasis
+                 role="bold">/.AFSCONF</emphasis> file in the NFS client machine's root directory, but you can also either set the
+                 variables in each user's shell initialization file (<emphasis role="bold">.cshrc</emphasis> or equivalent), or
+                 create files called <emphasis role="bold">.AFSSERVER</emphasis> and <emphasis role="bold">.AFSCONF</emphasis> in
+                 each user's home directory.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>They must have an entry in the AFS Protection and Authentication Databases, so that they can authenticate if
+                 the command requires AFS privilege. Other commands instead require assuming the local <emphasis
+                 role="bold">root</emphasis> identity on the translator machine; for further discussion, see <link
+                 linkend="HDRWQ601">The AFSSERVER Variable</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Their PATH environment variable must include the pathname to the appropriate AFS binaries. If a user works on
+                 NFS client machines of different system types, include the <emphasis role="bold">@sys</emphasis> variable in the
+                 pathname rather than an actual system type name.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <sect2 id="Header_684">
+       <title>To configure a user account for issuing AFS commands</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Create entries for the user in the Protection and Authentication Databases, or create a complete AFS account. See
+           the instructions for account creation in <link linkend="HDRWQ449">Creating and Deleting User Accounts with the uss Command
+           Suite</link> or <link linkend="HDRWQ491">Administering User Accounts</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ611" />Modify the user's PATH environment variable to include the pathname of AFS binaries, such as
+           <emphasis role="bold">/afs/</emphasis>cellname<emphasis role="bold">/</emphasis>sysname<emphasis
+           role="bold">/usr/afsws/bin</emphasis>. If the user works on NFS client machines of different system types, considering
+           replacing the specific sysname value with the <emphasis role="bold">@sys</emphasis> variable. The PATH variable is
+           commonly defined in a login or shell initialization file (such as the <emphasis role="bold">.login</emphasis> or <emphasis
+           role="bold">.cshrc</emphasis> file).</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Set the AFSSERVER and AFSCONF environment variables if appropriate. This
+           is required if the NFS client machines on which the user works do not have the <emphasis
+           role="bold">/.AFSSERVER</emphasis> and <emphasis role="bold">/.AFSCONF</emphasis> files in their root directories, or if
+           you want user-specific values to override those settings.</para>
+ 
+           <para>Either define the variables in the user's login or shell initialization file, or create the files <emphasis
+           role="bold">.AFSSERVER</emphasis> and <emphasis role="bold">.AFSCONF</emphasis> files in the user's home directory.</para>
+ 
+           <para>For the AFSSERVER variable, specify the fully-qualified hostname of the translator machine that is to serve as the
+           remote executor. For the AFSCONF variable, specify the name of the directory where the <emphasis
+           role="bold">CellServDB</emphasis> and <emphasis role="bold">ThisCell</emphasis> files reside. If you use a central update
+           source for these files (by convention, <emphasis role="bold">/afs/</emphasis>cellname<emphasis
+           role="bold">/common/etc</emphasis>), name it here.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the pathname you defined in Step <link linkend="LIWQ611">2</link> includes the <emphasis
+           role="bold">@sys</emphasis> variable, instruct users to check that their system name is defined correctly before they
+           issue AFS commands. They issue the following command: <programlisting>
+    % <emphasis role="bold">fs sysname</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ612">
+     <title>Authenticating on Unsupported NFS Client Machines</title>
+ 
+     <para>The <emphasis role="bold">knfs</emphasis> command enables users to authenticate with AFS when they are working on NFS
+     clients of unsupported system types (those for which AFS binaries are not available). This enables such users to access the AFS
+     file tree to the same extent as any other AFS user. They cannot, however, issue AFS commands, which is possible only on NFS
+     client machines of supported system types.</para>
+ 
+     <para>To authenticate on an unsupported system type, establish a connection to the translator machine (using a facility such as
+     <emphasis role="bold">telnet</emphasis>), and issue the <emphasis role="bold">klog</emphasis> command to obtain tokens for all
+     the cells you wish to contact during the upcoming NFS session. Then issue the <emphasis role="bold">knfs</emphasis> command,
+     which stores the tokens in a credential structure associated with your NFS session. The Cache Manager uses the tokens when
+     performing AFS access requests that originate from your NFS session.</para>
+ 
+     <para>More specifically, the credential structure is identified by a process authentication group (PAG) number associated with a
+     particular local UID on a specific NFS client machine. By default, the NFS UID recorded in the credential structure is the same
+     as your local UID on the translator machine. You can include the <emphasis role="bold">-id</emphasis> argument to specify an
+     alternate NFS UID, unless the translator machine's administrator has used the <emphasis role="bold">fs exportafs</emphasis>
+     command's <emphasis role="bold">-uidcheck</emphasis> argument to enable UID checking. In that case, the value of the <emphasis
+     role="bold">-id</emphasis> argument must match your local UID on the translator machine (so there is not point to including the
+     <emphasis role="bold">-id</emphasis> argument). Enforcing matching UIDs prevents someone else from placing their tokens in your
+     credential structure, either accidentally or on purpose. However, it means that your cell's administrators must set your local
+     UID on the NFS client to match your local UID on the translator machine. It also makes it impossible to authenticate by issuing
+     the <emphasis role="bold">klog</emphasis> command on supported NFS clients, meaning that all NFS users must use the <emphasis
+     role="bold">knfs</emphasis> command. See <link linkend="HDRWQ604">Controlling Optional Translator Features</link>.</para>
+ 
+     <para>After issuing the <emphasis role="bold">knfs</emphasis> command, you can begin working on the NFS client with
+     authenticated access to AFS. When you are finished working, it is a good policy to destroy your tokens by issuing the <emphasis
+     role="bold">knfs</emphasis> command on the translator machine again, this time with the <emphasis role="bold">-unlog</emphasis>
+     flag. This is simpler if you have left the connection to the translator machine open, but you can always establish a new
+     connection if you closed the original one.</para>
+ 
+     <para>If your NFS client machine is a supported system type and you wish to issue AFS commands on it, include the <emphasis
+     role="bold">-sysname</emphasis> argument to the <emphasis role="bold">knfs</emphasis> command. The remote executor daemon on the
+     translator machine substitutes its value for the <emphasis role="bold">@sys</emphasis> variable in pathnames when executing AFS
+     commands that you issue on the NFS client machine. If your PATH environment variable uses the <emphasis
+     role="bold">@sys</emphasis> variable in the pathnames for directories that house AFS binaries (as recommended), then setting
+     this argument enables the remote executor daemon to access the AFS binaries appropriate for your NFS client machine even if its
+     system type differs from the translator machine's.</para>
+ 
+     <para>If you do not issue the <emphasis role="bold">knfs</emphasis> command (or the <emphasis role="bold">klog</emphasis>
+     command on the NFS client machine itself, if it is a supported system type), then you are not authenticated with AFS. For a
+     description of unauthenticated access, see <link linkend="HDRWQ599">Enabling Unauthenticated or Authenticated AFS Access</link>.
+     <indexterm>
+         <primary>knfs command</primary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>knfs</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_686">
+       <title>To authenticate using the knfs command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Log on to the relevant translator machine, either on the console or remotely by using a program such as <emphasis
+           role="bold">telnet</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Obtain tokens for every cell you wish to access while working on the NFS client. AFS-modified login utilities
+           acquire a token for the translator machine's local cell by default; use <emphasis role="bold">klog</emphasis> command to
+           obtain tokens for other cells if desired.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">knfs</emphasis> command to create a credential structure in the translator machine's
+           kernel memory for storing the tokens obtained in the previous step. Include the <emphasis role="bold">-id</emphasis>
+           argument to associate the structure with a UID on the NFS client that differs from your local UID on the translator
+           machine. This is possible unless the translator machine's administrator has enabled UID checking on the translator
+           machine; see <link linkend="HDRWQ604">Controlling Optional Translator Features</link>. If the NFS client machine is a
+           supported system type and you wish to issue AFS commands on it, include the <emphasis role="bold">-sysname</emphasis>
+           argument to specify its system type. <programlisting>
+    % <emphasis role="bold">knfs -host</emphasis> &lt;<replaceable>host name</replaceable>&gt;  [<emphasis role="bold">-id</emphasis> &lt;<replaceable>user ID (decimal)</replaceable>&gt;]  \
+                 [<emphasis role="bold">-sysname</emphasis>  &lt;<replaceable>host's '@sys' value</replaceable>&gt;]
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-host</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully-qualified hostname of the NFS client machine on which you are working.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-id</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies a local UID number on the NFS client machine with which to associate the tokens, if different from
+                   your local UID on the translator machine. If this argument is omitted, the tokens are associated with an NFS UID
+                   that matches your local UID on the translator machine. In both cases, the NFS client software marks your AFS
+                   access requests with the NFS UID when it forwards them to the Cache Manager on the translator machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-sysname</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the value that the local machine's remote executor daemon substitutes for the <emphasis
+                   role="bold">@sys</emphasis> variable in pathnames when executing AFS commands issued on the NFS client machine
+                   (which must be a supported system type).</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+ 
+           <para>The following error message indicates that the translator machine's administrator has enabled UID checking and you
+           have provided a value that differs from your local UID on the translator machine.</para>
+ 
+           <programlisting>
+    knfs: Translator in 'passwd sync' mode; remote uid must be the same as local uid
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Close the connection to the translator machine (if desired) and work on the NFS client machine.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>displaying with knfs command</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_687">
+       <title>To display tokens using the knfs command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Log on to the relevant translator machine, either on the console or remotely by using a program such as <emphasis
+           role="bold">telnet</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">knfs</emphasis> command with the <emphasis role="bold">-tokens</emphasis> flag to
+           display the tokens associated with either the NFS UID that matches your local UID on the translator machine or the NFS UID
+           specified by the <emphasis role="bold">-id</emphasis> argument. <programlisting>
+    % <emphasis role="bold">knfs -host</emphasis> &lt;<replaceable>host name</replaceable>&gt;  [<emphasis role="bold">-id</emphasis> &lt;<replaceable>user ID (decimal)</replaceable>&gt;] <emphasis
+                 role="bold">-tokens</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-host</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully-qualified hostname of the NFS client machine on which you are working.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-id</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the local UID on the NFS client machine for which to display tokens, if different from your local
+                   UID on the translator machine. If this argument is omitted, the tokens are for the NFS UID that matches your local
+                   UID on the translator machine.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-tokens</emphasis></term>
+ 
+                 <listitem>
+                   <para>Displays the tokens.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Close the connection to the translator machine if desired.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>tokens</primary>
+ 
+         <secondary>discarding with knfs command</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_688">
+       <title>To discard tokens using the knfs command</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>If you closed your connection to the translator machine after issuing the <emphasis role="bold">knfs</emphasis>
+           command, reopen it.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">knfs</emphasis> command with the <emphasis role="bold">-unlog</emphasis> flag.
+           <programlisting>
+    % <emphasis role="bold">knfs -host</emphasis>  &lt;<replaceable>host name</replaceable>&gt;  [<emphasis role="bold">-id</emphasis> &lt;<replaceable>user ID (decimal)</replaceable>&gt;]  <emphasis
+                 role="bold">-unlog</emphasis>
+ </programlisting></para>
+ 
+           <para>where <variablelist>
+               <varlistentry>
+                 <term><emphasis role="bold">-host</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the fully-qualified hostname of the NFS client machine you are working on.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-id</emphasis></term>
+ 
+                 <listitem>
+                   <para>Specifies the local UID number on the NFS client machine for which to discard the associated tokens, if
+                   different from your local UID on the translator machine. If this argument is omitted, the tokens associated with
+                   an NFS UID that matches your local UID on the translator machine are discarded.</para>
+                 </listitem>
+               </varlistentry>
+ 
+               <varlistentry>
+                 <term><emphasis role="bold">-unlog</emphasis></term>
+ 
+                 <listitem>
+                   <para>Discards the tokens.</para>
+                 </listitem>
+               </varlistentry>
+             </variablelist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If desired, close the connection to the translator machine.</para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </appendix>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd023.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd023.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/AdminGuide/auagd023.xml	Wed May 13 22:26:40 2009
***************
*** 0 ****
--- 1,457 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <appendix id="HDRCOMMANDS">
+   <title>Using AFS Commands</title>
+ 
+   <para>This section describes the components of AFS commands and how to make entering commands more efficient by using shortened
+   forms. It has the following sections: <simplelist>
+       <member><link linkend="HDRWQ613">AFS Command Syntax</link></member>
+ 
+       <member><link linkend="HDRWQ614">Rules for Entering AFS Commands</link></member>
+ 
+       <member><link linkend="HDRWQ615">Rules for Using Abbreviations and Aliases</link></member>
+ 
+       <member><link linkend="HDRWQ616">Displaying Online Help for AFS Commands</link></member>
+     </simplelist></para>
+ 
+   <sect1 id="HDRWQ613">
+     <title>AFS Command Syntax</title>
+ 
+     <para>AFS commands that belong to suites have the following structure:</para>
+ 
+     <programlisting><emphasis role="bold">command_suite operation_code</emphasis><emphasis role="bold">-switch</emphasis> <replaceable>&lt;value&gt;</replaceable>[+]  [<emphasis
+         role="bold">-flag</emphasis>]
+ </programlisting>
+ 
+     <sect2 id="Header_691">
+       <title>Command Names</title>
+ 
+       <para>Together, the <emphasis role="bold">command_suite</emphasis> and <emphasis role="bold">operation_code</emphasis> make up
+       the <emphasis>command name</emphasis>.</para>
+ 
+       <para>The <emphasis role="bold">command_suite</emphasis> specifies the group of related commands to which the command belongs,
+       and indicates which command interpreter and server process perform the command. AFS has several command suites, including
+       <emphasis role="bold">bos</emphasis>, <emphasis role="bold">fs</emphasis>, <emphasis role="bold">kas</emphasis>, <emphasis
+       role="bold">package</emphasis>, <emphasis role="bold">pts</emphasis>, <emphasis role="bold">scout</emphasis>, <emphasis
+       role="bold">uss</emphasis> and <emphasis role="bold">vos</emphasis>. Some of these suites have an interactive mode in which
+       the issuer omits the <emphasis role="bold">command_suite</emphasis> portion of the command name.</para>
+ 
+       <para>The <emphasis role="bold">operation_code</emphasis> tells the command interpreter and server process which action to
+       perform. Most command suites include several operation codes. The <emphasis>OpenAFS Administration Reference</emphasis>
+       describes each operation code in detail, and the <emphasis>OpenAFS Administration Guide</emphasis> describes how to use them
+       in the context of performing administrative tasks.</para>
+ 
+       <para>Several AFS commands do not belong to a suite and so their names do not have a <emphasis
+       role="bold">command_suite</emphasis> portion. Their structure is otherwise similar to the commands in the suites.</para>
+     </sect2>
+ 
+     <sect2 id="Header_692">
+       <title>Options</title>
+ 
+       <para>The term <emphasis>option</emphasis> refers to both arguments and flags, which are described in the following
+       sections.</para>
+     </sect2>
+ 
+     <sect2 id="Header_693">
+       <title>Arguments</title>
+ 
+       <para>One or more arguments can follow the command name. Arguments specify the entities on which to act while performing the
+       command (for example, which server machine, server process, or file). To minimize the potential for error, provide a command's
+       arguments in the order prescribed in its syntax definition.</para>
+ 
+       <para>Each argument has two parts, which appear in the indicated order: <itemizedlist>
+           <listitem>
+             <para>The <emphasis>switch</emphasis> specifies the argument's type and is preceded by a hyphen ( <emphasis
+             role="bold">-</emphasis> ). For instance, the switch <emphasis role="bold">-server</emphasis> usually indicates that the
+             argument names a server machine. Switches can often be omitted, subject to the rules outlined in <link
+             linkend="HDRNOSWITCH">Conditions for Omitting Switches</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis>value</emphasis> names a particular entity of the type specified by the preceding switch. For
+             example, the proper value for a <emphasis role="bold">-server</emphasis> switch is a server machine name like <emphasis
+             role="bold">fs3.abc.com</emphasis>. Unlike switches (which have a required form), values vary depending on what the
+             issuer wants to accomplish. Values appear surrounded by angle brackets (<emphasis role="bold">&lt; &gt;</emphasis>) in
+             command descriptions and the online help to show that they are user-supplied variable information.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Some arguments accept multiple values, as indicated by trailing plus sign ( <emphasis role="bold">+</emphasis> ) in the
+       command descriptions and online help. How many of a command's arguments take multiple values, and their ordering with respect
+       to other arguments, determine when it is acceptable to omit switches. See <link linkend="HDRNOSWITCH">Conditions for Omitting
+       Switches</link>.</para>
+ 
+       <para>Some commands have optional as well as required arguments; the command descriptions and online help show optional
+       arguments in square brackets ([ ]).</para>
+     </sect2>
+ 
+     <sect2 id="Header_694">
+       <title>Flags</title>
+ 
+       <para>Some commands have one or more flags, which specify the manner in which the command interpreter and server process
+       perform the command, or what kind of output it produces. Flags are preceded by hyphens like switches, but they take no values.
+       Although the command descriptions and online help generally list a command's flags after its arguments, there is no prescribed
+       order for flags. They can appear anywhere on the command line following the operation code, except in between the parts of an
+       argument. Flags are always optional.</para>
+     </sect2>
+ 
+     <sect2 id="HDRCOMMAND-EX">
+       <title>An Example Command</title>
+ 
+       <para>The following example illustrates the different parts of a command that belongs to an AFS command suite.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">bos getdate -server fs1.abc.com -file ptserver kaserver</emphasis>
+ </programlisting>
+ 
+       <para>where <itemizedlist>
+           <listitem>
+             <para><emphasis role="bold">bos</emphasis> is the command suite. The BOS Server executes most of the commands in this
+             suite.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">getdate</emphasis> is the operation code. It tells the BOS Server on the specified server
+             machine (in this case <emphasis role="bold">fs1.abc.com</emphasis>) to report the modification dates of binary files in
+             the local <emphasis role="bold">/usr/afs/bin</emphasis> directory.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-server fs1.abc.com</emphasis> is one argument, with <emphasis
+             role="bold">-server</emphasis> as the switch and <emphasis role="bold">fs1.abc.com</emphasis> as the value. This
+             argument specifies the server machine on which BOS Server is to collect and report binary dates.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">-file ptserver kaserver</emphasis> is an argument that takes multiple values. The switch is
+             <emphasis role="bold">-file</emphasis> and the values are <emphasis role="bold">ptserver</emphasis> and <emphasis
+             role="bold">kaserver</emphasis>. This argument tells the BOS Server to report the modification dates on the files
+             <emphasis role="bold">/usr/afs/bin/kaserver</emphasis> and <emphasis
+             role="bold">/usr/afs/bin/ptserver</emphasis>.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ614">
+       <title>Rules for Entering AFS Commands</title>
+ 
+       <para>Enter each AFS command on a single line (press <emphasis role="bold">&lt;Return&gt;</emphasis> only at the end of the
+       command). Some commands in this document appear broken across multiple lines, but that is for legibility only.</para>
+ 
+       <para>Use a space to separate each element on a command line from its neighbors. Spaces rather than commas also separate
+       multiple values of an argument.</para>
+ 
+       <para>In many cases, the issuer of a command can reduce the amount of typing necessary by using one or both of the following
+       methods: <itemizedlist>
+           <listitem>
+             <para>Omitting switches</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Using accepted abbreviations for operation codes, switches (if they are included at all), and some types of
+             values</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>The following sections explain the conditions for omitting or shortening parts of the command line. It is always
+       acceptable to type a command in full, with all of its switches and no abbreviations.</para>
+ 
+       <sect3 id="HDRNOSWITCH">
+         <title>Conditions for Omitting Switches</title>
+ 
+         <para>It is always acceptable to type the switch part of an argument, but in many cases it is not necessary. Specifically,
+         switches can be omitted if the following conditions are met. <itemizedlist>
+             <listitem>
+               <para>All of the command's required arguments appear in the order prescribed by the syntax statement</para>
+             </listitem>
+ 
+             <listitem>
+               <para>No switch is provided for any argument</para>
+             </listitem>
+ 
+             <listitem>
+               <para>There is only one value for each argument (but note the important exception discussed in the following
+               paragraph)</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <para>Omitting switches is possible only because there is a prescribed order for each command's arguments. When the issuer
+         does not include switches, the command interpreter relies instead on the order of arguments; it assumes that the first
+         element after the operation code is the command's first argument, the next element is the command's second argument, and so
+         on. The important exception is when a command's final required argument accepts multiple values. In this case, the command
+         interpreter assumes that the issuer has correctly provided one value for each argument up through the final one, so any
+         additional values at the end belong to the final argument.</para>
+ 
+         <para>The following list describes the rules for omitting switches from the opposite perspective: an argument's switch must
+         be provided when any of the following conditions apply. <itemizedlist>
+             <listitem>
+               <para>The command's arguments do not appear in the prescribed order</para>
+             </listitem>
+ 
+             <listitem>
+               <para>An optional argument is omitted but a subsequent optional argument is provided</para>
+             </listitem>
+ 
+             <listitem>
+               <para>A switch is provided for a preceding argument</para>
+             </listitem>
+ 
+             <listitem>
+               <para>More than one value is supplied for a preceding argument (which must take multiple values, of course); without a
+               switch on the current argument, the command interpreter assumes that the current argument is another value for the
+               preceding argument</para>
+             </listitem>
+           </itemizedlist></para>
+       </sect3>
+ 
+       <sect3 id="Header_698">
+         <title>An Example of Omitting Switches</title>
+ 
+         <para>Consider again the example command from <link linkend="HDRCOMMAND-EX">An Example Command</link>.</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">bos getdate -server fs1.abc.com -file ptserver kaserver</emphasis>
+ </programlisting>
+ 
+         <para>This command has two required arguments: the server machine name (identified by the <emphasis
+         role="bold">-server</emphasis> switch) and binary file name (identified by the <emphasis role="bold">-file</emphasis>
+         switch). The second argument accepts multiple values. By complying with all three conditions, the issuer can omit the
+         switches:</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">bos getdate fs1.abc.com ptserver kaserver</emphasis>
+ </programlisting>
+ 
+         <para>Because there are no switches, the <emphasis role="bold">bos</emphasis> command interpreter relies on the order of
+         arguments. It assumes that the first element following the operation code, <emphasis role="bold">fs1.abc.com</emphasis>, is
+         the server machine name, and that the next argument, <emphasis role="bold">ptserver</emphasis>, is a binary file name. Then,
+         because the command's second (and last) argument accepts multiple values, the command interpreter correctly interprets
+         <emphasis role="bold">kaserver</emphasis> as an additional value for it.</para>
+ 
+         <para>On the other hand, the following is not acceptable because it violates the first two conditions in <link
+         linkend="HDRNOSWITCH">Conditions for Omitting Switches</link>: even though there is only one value per argument, the
+         arguments do not appear in the prescribed order, and a switch is provided for one argument but not the other.</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">bos getdate ptserver -server fs1.abc.com</emphasis>
+ </programlisting>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ615">
+       <title>Rules for Using Abbreviations and Aliases</title>
+ 
+       <para>This section explains how to abbreviate operation codes, option names, server machine names, partition names, and cell
+       names. It is not possible to abbreviate other types of values.</para>
+ 
+       <sect3 id="Header_700">
+         <title>Abbreviating Operation Codes</title>
+ 
+         <para>It is acceptable to abbreviate an operation code to the shortest form that still distinguishes it from the other
+         operation codes in its suite.</para>
+ 
+         <para>For example, it is acceptable to shorten <emphasis role="bold">bos install</emphasis> to <emphasis role="bold">bos
+         i</emphasis> because there are no other operation codes in the <emphasis role="bold">bos</emphasis> command suite that begin
+         with the letter <emphasis role="bold">i</emphasis>. In contrast, there are several <emphasis role="bold">bos</emphasis>
+         operation codes that start with the letter <emphasis role="bold">s</emphasis>, so the abbreviations must be longer to remain
+         unambiguous: <simplelist>
+             <member><emphasis role="bold">bos sa</emphasis> for <emphasis role="bold">bos salvage</emphasis></member>
+ 
+             <member><emphasis role="bold">bos seta</emphasis> for <emphasis role="bold">bos setauth</emphasis></member>
+ 
+             <member><emphasis role="bold">bos setc</emphasis> for <emphasis role="bold">bos setcellname</emphasis></member>
+ 
+             <member><emphasis role="bold">bos setr</emphasis> for <emphasis role="bold">bos setrestart</emphasis></member>
+ 
+             <member><emphasis role="bold">bos sh</emphasis> for <emphasis role="bold">bos shutdown</emphasis></member>
+ 
+             <member><emphasis role="bold">bos start</emphasis> for <emphasis role="bold">bos start</emphasis></member>
+ 
+             <member><emphasis role="bold">bos startu</emphasis> for <emphasis role="bold">bos startup</emphasis></member>
+ 
+             <member><emphasis role="bold">bos stat</emphasis> for <emphasis role="bold">bos status</emphasis></member>
+ 
+             <member><emphasis role="bold">bos sto</emphasis> for <emphasis role="bold">bos stop</emphasis></member>
+           </simplelist></para>
+ 
+         <para>In addition to abbreviations, some operation codes have an <emphasis>alias</emphasis>, a short form that is not
+         derived by abbreviating the operation code to its shortest unambiguous form. For example, the alias for the <emphasis
+         role="bold">fs setacl</emphasis> command is <emphasis role="bold">fs sa</emphasis>, whereas the shortest unambiguous
+         abbreviation is <emphasis role="bold">fs seta</emphasis>.</para>
+ 
+         <para>There are two usual reasons an operation code has an alias: <itemizedlist>
+             <listitem>
+               <para>Because the command is frequently issued, it is convenient to have a form shorter than the one derived by
+               abbreviating. The <emphasis role="bold">fs setacl</emphasis> command is an example.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Because the command's name has changed, but users of previous versions of AFS know the former name. For example,
+               <emphasis role="bold">bos listhosts</emphasis> has the alias <emphasis role="bold">bos getcell</emphasis>, its former
+               name. It is acceptable to abbreviate aliases to their shortest unambiguous form (for example, <emphasis
+               role="bold">bos getcell</emphasis> to <emphasis role="bold">bos getc</emphasis>).</para>
+             </listitem>
+           </itemizedlist></para>
+ 
+         <para>Even if an operation code has an alias, it is still acceptable to use the shortest unambiguous form. Thus, the
+         <emphasis role="bold">fs setacl</emphasis> command has three acceptable forms: <emphasis role="bold">fs setacl</emphasis>
+         (the full form), <emphasis role="bold">fs seta</emphasis> (the shortest abbreviation), and <emphasis role="bold">fs
+         sa</emphasis> (the alias).</para>
+       </sect3>
+ 
+       <sect3 id="Header_701">
+         <title>Abbreviating Switches and Flags</title>
+ 
+         <para>It is acceptable to shorten a switch or flag to the shortest form that distinguishes it from the other switches and
+         flags for its operation code. It is often possible to omit switches entirely, subject to the conditions listed in <link
+         linkend="HDRNOSWITCH">Conditions for Omitting Switches</link>.</para>
+       </sect3>
+ 
+       <sect3 id="HDRFMSABBREV">
+         <title>Abbreviating Server Machine Names</title>
+ 
+         <para>AFS server machines must have fully-qualified Internet-style host names (for example, <emphasis
+         role="bold">fs1.abc.com</emphasis>), but it is not always necessary to type the full name on the command line. AFS commands
+         accept unambiguous shortened forms, but depend on the cell's name service (such as the Domain Name Service) or a local host
+         table to resolve a shortened name to the fully-qualified equivalent when the command is issued.</para>
+ 
+         <para>Most commands also accept the dotted decimal form of the machine's IP address as an identifier.</para>
+       </sect3>
+ 
+       <sect3 id="HDRPARTABBREV">
+         <title>Abbreviating Partition Names</title>
+ 
+         <para>Partitions that house AFS volumes must have names of the form <emphasis
+         role="bold">/vicep</emphasis><replaceable>x</replaceable> or <emphasis
+         role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where the variable final portion is one or two lowercase
+         letters. By convention, the first server partition created on a file server machine is called <emphasis
+         role="bold">/vicepa</emphasis>, the second <emphasis role="bold">/vicepb</emphasis>, and so on. The <emphasis>OpenAFS Quick
+         Beginnings</emphasis> explains how to configure and name a file server machine's partitions in preparation for storing AFS
+         volumes on them.</para>
+ 
+         <para>When issuing AFS commands, you can abbreviate a partition name using any of the following forms:</para>
+ 
+         <programlisting>
+ <emphasis role="bold">/vicepa</emphasis>     =     <emphasis role="bold">vicepa</emphasis>      =      <emphasis role="bold">a</emphasis>      =      <emphasis
+             role="bold">0</emphasis>
+ <emphasis role="bold">/vicepb</emphasis>     =     <emphasis role="bold">vicepb</emphasis>      =      <emphasis role="bold">b</emphasis>      =      <emphasis
+             role="bold">1</emphasis>
+ </programlisting>
+ 
+         <para>After <emphasis role="bold">/vicepz</emphasis> (for which the index is 25) comes</para>
+ 
+         <programlisting>
+ <emphasis role="bold">/vicepaa</emphasis>    =     <emphasis role="bold">vicepaa</emphasis>     =      <emphasis role="bold">aa</emphasis>     =      <emphasis
+             role="bold">26</emphasis>
+ <emphasis role="bold">/vicepab</emphasis>    =     <emphasis role="bold">vicepab</emphasis>     =      <emphasis role="bold">ab</emphasis>     =      <emphasis
+             role="bold">27</emphasis>
+ </programlisting>
+ 
+         <para>and so on through</para>
+ 
+         <programlisting>
+ <emphasis role="bold">/vicepiv</emphasis>    =     <emphasis role="bold">vicepiv</emphasis>     =      <emphasis role="bold">iv</emphasis>     =      <emphasis
+             role="bold">255</emphasis>
+ </programlisting>
+       </sect3>
+ 
+       <sect3 id="HDRCELLABBREV">
+         <title>Abbreviating Cell Names</title>
+ 
+         <para>A cell's full name usually matches its Internet domain name (such as <emphasis role="bold">stateu.edu</emphasis> for
+         the State University or <emphasis role="bold">abc.com</emphasis> for ABC Corporation). Some AFS commands accept unambiguous
+         shortened forms, usually with respect to the local <emphasis role="bold">/usr/vice/etc/CellServDB file</emphasis> but
+         sometimes depending on the ability of the local name service to resolve the corresponding domain name.</para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ616">
+       <title>Displaying Online Help for AFS Commands</title>
+ 
+       <para>To display online help for AFS commands that belong to suites, use the <emphasis role="bold">help</emphasis> and
+       <emphasis role="bold">apropos</emphasis> operation codes. A <emphasis role="bold">-help</emphasis> flag is also available on
+       every almost every AFS command.</para>
+ 
+       <para>The online help entry for a command consists of two or three lines: <itemizedlist>
+           <listitem>
+             <para>The first line names the command and briefly describes what it does</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the command has aliases, they appear on the next line</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The final line, which begins with the string <computeroutput>Usage:</computeroutput>, lists the command's options
+             in the prescribed order; online help entries use the same typographical symbols (brackets and so on) as this
+             documentation.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>If no operation code is specified, the <emphasis role="bold">help</emphasis> operation code displays the first line
+       (short description) for every operation code in the suite:</para>
+ 
+       <programlisting>
+    % <replaceable>command_suite</replaceable> <emphasis role="bold">help</emphasis>
+ </programlisting>
+ 
+       <para>If the issuer specifies one or more operation codes, the <emphasis role="bold">help</emphasis> operation code displays
+       each command's complete online entry (short description, alias if any, and syntax):</para>
+ 
+       <programlisting>
+    % <replaceable>command_suite</replaceable> <emphasis role="bold">help</emphasis> <replaceable>operation_code</replaceable>+
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">-help</emphasis> flag displays a command's syntax but not the short description or
+       alias:</para>
+ 
+       <programlisting>
+    % <replaceable>command_name</replaceable> <emphasis role="bold">-help</emphasis>
+ </programlisting>
+ 
+       <para>The <emphasis role="bold">apropos</emphasis> operation code displays the short description of any command in a suite
+       whose operation code or short description includes the specified keyword:</para>
+ 
+       <programlisting>
+    % <replaceable>command_suite</replaceable> <emphasis role="bold">apropos</emphasis> <replaceable>"&lt;help string&gt;"</replaceable>
+ </programlisting>
+ 
+       <para>The following example command displays the complete online help entry for the <emphasis role="bold">fs setacl</emphasis>
+       command:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs help setacl</emphasis>
+    fs setacl: set access control list
+    aliases: sa
+    Usage: fs setacl -dir &lt;<replaceable>directory</replaceable>&gt;+ -acl &lt;<replaceable>access list entries</replaceable>&gt;+
+    [-clear] [-negative] [-id] [-if] [-help]
+ </programlisting>
+ 
+       <para>To see only the syntax statement, use the <emphasis role="bold">-help</emphasis> flag:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl -help</emphasis>
+    Usage: fs setacl -dir &lt;<replaceable>directory</replaceable>&gt;+ -acl &lt;<replaceable>access list entries</replaceable>&gt;+
+    [-clear] [-negative] [-id] [-if] [-help]
+ </programlisting>
+ 
+       <para>In the following example, a user wants to display the quota for her home volume. She knows that the relevant command
+       belongs to the <emphasis role="bold">fs</emphasis> suite, but cannot remember the operation code. She uses <emphasis
+       role="bold">quota</emphasis> as the keyword:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs apropos quota</emphasis>
+    listquota: list volume quota
+    quota: show volume quota usage
+    setquota: set volume quota
+ </programlisting>
+ 
+       <para>The following illustrates the error message that results if no command name or short description contains the
+       keyword:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs apropos "list quota"</emphasis>
+    Sorry, no commands found
+ </programlisting>
+     </sect2>
+   </sect1>
+ </appendix>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd024.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd024.xml:1.1.10.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/AdminGuide/auagd024.xml	Mon May 11 11:11:10 2009
***************
*** 0 ****
--- 1,3561 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <appendix id="HDRWQ617">
+   <title>The afsmonitor Program Statistics</title>
+ 
+   <para>This appendix lists the statistics you can gather with the <emphasis role="bold">afsmonitor</emphasis> program, grouping
+   them by category and section, and briefly describing each field, group, and section. For instructions on using the <emphasis
+   role="bold">afsmonitor</emphasis> program, see <link linkend="HDRWQ323">Monitoring and Auditing AFS Performance</link> <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>available statistics</secondary>
+     </indexterm></para>
+ 
+   <sect1 id="HDRWQ618">
+     <title>The Cache Manager Statistics</title>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>Cache Manager statistics</secondary>
+     </indexterm>
+ 
+     <para>Cache Manager statistics fields are classified into the following sections and groups: <itemizedlist>
+         <listitem>
+           <para>PerfStats_section - Performance Statistics Section. <itemizedlist>
+               <listitem>
+                 <para>PerfStats_group - Performance Statistics Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>misc_group - Miscellaneous Group.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Server_UpDown_section - Server Up/Down Statistics Section. <itemizedlist>
+               <listitem>
+                 <para>FS_upDown_SC_group - File Server Up/Down Statistics in Same Cell Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>FS_upDown_OC_group - File Server Up/Down Statistics in Other Cells Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>VL_upDown_SC_group - VL Server Up/Down Statistics in Same Cell Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>VL_upDown_OC_group - VL Server Up/Down Statistics in Other Cells Group.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>RPCop_section - RPC Operation Measurements Section. <itemizedlist>
+               <listitem>
+                 <para>FS_RPCopTimes_group - File Server RPC Operation Timings Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>FS_RPCopErrors_group - File Server RPC Operation Errors Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>FS_RPCopBytes_group - File Server RPC Transfer Timings Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>CM_RPCopTimes_group - Cache Manager RPC Operation Timings Group.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Auth_Access_section - Authentication and Replicated File Access Section. <itemizedlist>
+               <listitem>
+                 <para>Auth_Stats_group - Authentication Information for Cache Manager Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Access_Stats_group - Unreplicated File Access Group.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>All Cache Manager variables categorized under these sections and groups names are listed below.</para>
+ 
+     <sect2 id="Header_708">
+       <title>Performance Statistics Section (PerfStats_section)</title>
+ 
+       <para>Performance Statistics Group (PerfStats_group) <itemizedlist>
+           <listitem>
+             <para>dlocalAccesses: Number of data accesses to files within local cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vlocalAccesses: Number of stat accesses to files within local cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>dremoteAccesses: Number of data accesses to files outside of local cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vremoteAccesses: Number of stat accesses to files outside of local cell.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheNumEntries: Number of cache entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheBlocksTotal: Number of (1K) blocks configured for cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheBlocksInUse: Number of cache blocks actively in use.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheBlocksOrig: Number of cache blocks at bootup.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheMaxDirtyChunks: Maximum number of dirty cache chunks tolerated.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheCurrDirtyChunks: Current number of dirty cache chunks.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>dcacheHits: Number of data files found in local cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcacheHits: Number of stat entries found in local cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>dcacheMisses: Number of data files <emphasis role="bold">not</emphasis> found in local cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcacheMisses: Number of stat entries <emphasis role="bold">not</emphasis> found in local cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheFlushes: Number of files flushed from cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>cacheFilesReused: Number of cache files reused.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>dcacheXAllocs: Additionally allocated dcaches.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcacheXAllocs: Additionally allocated vcaches.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>bufAlloced: Number of buffers allocated by AFS.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>bufHits: Number of pages found on buffer cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>bufMisses: Number of pages <emphasis role="bold">not</emphasis> found on buffer cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>bufFlushDirty: Number of cached dirty buffers flushed because all were busy.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>LargeBlocksActive: Number of currently used large free pool entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>LargeBlocksAlloced: Number of allocated large free pool entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SmallBlocksActive: Number of currently used small free pool entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SmallBlocksAlloced: Number of allocated used small free pool entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>OutStandingMemUsage: Amount of allocated memory.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>OutStandingAllocs: Outstanding osi_allocs (no osi_frees yet).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBackAlloced: Number of callback structures allocated.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBackFlushes: Number of callback flush operations performed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>srvRecords: Number of servers currently on record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>srvRecordsHWM: Server record high water mark.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>srvNumBuckets: Number of server hash chain buckets.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>srvMaxChainLength: Maximum server hash chain length.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>srvMaxChainLengthHWM: Server hash chain high water mark.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>sysName_ID: Sysname ID for host hardware.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Miscellaneous Group (misc_group) <itemizedlist>
+           <listitem>
+             <para>numPerfCalls: Number of performance calls received.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>epoch: Cache Manager epoch time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>numCellsVisible: Number of cells we know about.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>numCellsContacted: Number of cells contacted.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_709">
+       <title>Server Up/Down Statistics Section (Server_UpDown_section)</title>
+ 
+       <para>File Server Up/Down Statistics in Same Cell Group (FS_upDown_SC_group) <note>
+           <para>The <emphasis>records</emphasis> referred to in this section are the internal records kept by the <emphasis
+           role="bold">afsmonitor</emphasis> program to track the processes from which data is being gathered.</para>
+         </note> <itemizedlist>
+           <listitem>
+             <para>fs_sc_numTtlRecords: Number of fileserver records, active or inactive.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_numUpRecords: Number of (active) fileserver records currently marked up.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_numDownRecords: Number of (active) fileserver records currently marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_sumOfRecordAges: Sum of fileserver record lifetimes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_ageOfYoungestRecord: Age of youngest fileserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_ageOfOldestRecord: Age of oldest fileserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_numDowntimeIncidents: Number of (completed) downtime incidents.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_numRecordsNeverDown: Number of fileserver records never marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_maxDowntimesInARecord: Maximum downtimes seen by any fileserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_sumOfDowntimes: Sum of all (completed) downtimes, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_shortestDowntime: Shortest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_longestDowntime: Longest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_0_10_min: Down time incidents: 0-10 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_10_30_min: Down time incidents: 10-30 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_half_1_hr: Down time incidents: 30-60 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_1_2_hr: Down time incidents: 1-2 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_2_4_hr: Down time incidents: 2-4 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_4_8_hr: Down time incidents: 4-8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_down_more_8_hr: Down time incidents: more than 8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_downDst_0: Down time incidents: 0 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_downDst_1: Down time incidents: 1 time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_downDst_2_5: Down time incidents: 2-5 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_downDst_6_10: Down time incidents: 6-10 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_downDst_10_50: Down time incidents: 10-50 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_sc_downDst_more_50: Down time incidents: more than 50 times.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>File Server Up/Down Statistics in Other Cells Group (FS_upDown_OC_group) <itemizedlist>
+           <listitem>
+             <para>fs_oc_numTtlRecords: Number of fileserver records, active or inactive.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_numUpRecords: Number of (active) fileserver records currently marked up.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_numDownRecords: Number of (active) fileserver records currently marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_sumOfRecordAges: Sum of server record lifetimes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_ageOfYoungestRecord: Age of youngest fileserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_ageOfOldestRecord: Age of oldest fileserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_numDowntimeIncidents: Number of (completed) downtime incidents.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_numRecordsNeverDown: Number of fileserver records never marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_maxDowntimesInARecord: Maximum downtimes seen by any fileserver.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_sumOfDowntimes: Sum of all (completed) downtimes, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_shortestDowntime: Shortest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_longestDowntime: Longest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_0_10_min: Down time incidents: 0-10 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_10_30_min: Down time incidents: 10-30 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_half_1_hr: Down time incidents: 30-60 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_1_2_hr: Down time incidents: 1-2 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_2_4_hr: Down time incidents: 2-4 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_4_8_hr: Down time incidents: 4-8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_down_more_8_hr: Down time incidents: more than 8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_downDst_0: Down time incidents: 0 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_downDst_1: Down time incidents: 1 time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_downDst_2_5: Down time incidents: 2-5 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_downDst_6_10: Down time incidents: 6-10 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_downDst_10_50: Down time incidents: 10-50 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>fs_oc_downDst_more_50: Down time incidents: more than 50 times.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>VL Server Up/Down Statistics in Same Cell Group (VL_upDown_SC_group) <itemizedlist>
+           <listitem>
+             <para>vl_sc_numTtlRecords: Number of vlserver records, active or inactive.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_numUpRecords: Number of (active) vlserver records currently marked up.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_numDownRecords: Number of (active) vlserver records currently marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_sumOfRecordAges: Sum of vlserver record lifetimes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_ageOfYoungestRecord: Age of youngest vlserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_ageOfOldestRecord: Age of oldest vlserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_numDowntimeIncidents: Number of (completed) downtime incidents.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_numRecordsNeverDown: Number of vlserver records never marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_maxDowntimesInARecord: Maximum downtimes seen by any vlserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_sumOfDowntimes: Sum of all (completed) downtimes, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_shortestDowntime: Shortest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_longestDowntime: Longest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_0_10_min: Down time incidents: 0-10 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_10_30_min: Down time incidents: 10-30 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_half_1_hr: Down time incidents: 30-60 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_1_2_hr: Down time incidents: 1-2 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_2_4_hr: Down time incidents: 2-4 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_4_8_hr: Down time incidents: 4-8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_down_more_8_hr: Down time incidents: more than 8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_downDst_0: Down time incidents: 0 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_downDst_1: Down time incidents: 1 time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_downDst_2_5: Down time incidents: 2-5 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_downDst_6_10: Down time incidents: 6-10 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_downDst_10_50: Down time incidents: 10-50 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_sc_downDst_more_50: Down time incidents: more than 50 times.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>VL Server Up/Down Statistics in Other Cells Group (VL_upDown_DC_group) <itemizedlist>
+           <listitem>
+             <para>vl_oc_numTtlRecords: Number of vlserver records, active or inactive.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_numUpRecords: Number of (active) vlserver records currently marked up.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_numDownRecords: Number of (active) vlserver records currently marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_sumOfRecordAges: Sum of vlserver record lifetimes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_ageOfYoungestRecord: Age of youngest vlserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_ageOfOldestRecord: Age of oldest vlserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_numDowntimeIncidents: Number of (completed) downtime incidents.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_numRecordsNeverDown: Number of vlserver records never marked down.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_maxDowntimesInARecord: Maximum downtimes seen by any vlserver record.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_sumOfDowntimes: Sum of all (completed) downtimes, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_shortestDowntime: Shortest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_longestDowntime: Longest downtime, in seconds.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_0_10_min: Down time incidents: 0-10 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_10_30_min: Down time incidents: 10-30 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_half_1_hr: Down time incidents: 30-60 minutes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_1_2_hr: Down time incidents: 1-2 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_2_4_hr: Down time incidents: 2-4 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_4_8_hr: Down time incidents: 4-8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_down_more_8_hr: Down time incidents: more than 8 hours.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_downDst_0: Down time incidents: 0 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_downDst_1: Down time incidents: 1 time.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_downDst_2_5: Down time incidents: 2-5 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_downDst_6_10: Down time incidents: 6-10 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_downDst_10_50: Down time incidents: 10-50 times.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vl_oc_downDst_more_50: Down time incidents: more than 50 times.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_710">
+       <title>RPC Operation Measurements Section (RPCop_section)</title>
+ 
+       <para>File Server RPC Operation Timings Group (FS_RPCopTimes_group) <itemizedlist>
+           <listitem>
+             <para>FetchData_ops: Number of FetchData operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_ops_ok: Number of successful FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_sum: Sum of timings for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_sqr: Sum of squares of sample timings for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_min: Minimum execution time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_max: Maximum execution time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_ops: Number of FetchACL operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_ops_ok: Number of successful FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_sum: Sum of timings for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_sqr: Sum of squares of sample timings for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_min: Minimum execution time observed for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_max: Maximum execution time observed for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_ops: Number of FetchStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_ops_ok: Number of successful FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_sum: Sum of timings for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_sqr: Sum of squares of sample timings for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_min: Minimum execution time observed for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_max: Maximum execution time observed for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_ops: Number of StoreData operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_ops_ok: Number of successful StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_sum: Sum of timings for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_sqr: Sum of squares of sample timings for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_min: Minimum execution time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_max: Maximum execution time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_ops: Number of StoreACL operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_ops_ok: Number of successful StoreACL operation.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_sum: Sum of timings for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_sqr: Sum of squares of sample timings for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_min: Minimum execution time observed for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_max: Maximum execution time observed for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_ops: Number of StoreStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_ops_ok: Number of successful StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_sum: Sum of timings for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_sqr: Sum of squares of sample timings for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_min: Minimum execution time observed for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_max: Maximum execution time observed for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_ops: Number of RemoveFile operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_ops_ok: Number of successful RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_sum: Sum of timings for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_sqr: Sum of squares of sample timings for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_min: Minimum execution time observed for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_max: Maximum execution time observed for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_ops: Number of CreateFile operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_ops_ok: Number of successful CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_sum: Sum of timings for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_sqr: Sum of squares of sample timings for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_min: Minimum execution time observed for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_max: Maximum execution time observed for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_ops: Number of Rename operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_ops_ok: Number of successful Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_sum: Sum of timings for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_sqr: Sum of squares of sample timings for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_min: Minimum execution time observed for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_max: Maximum execution time observed for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_ops: Number of Symlink operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_ops_ok: Number of successful Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_sum: Sum of timings for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_sqr: Sum of squares of sample timings for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_min: Minimum execution time observed for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_max: Maximum execution time observed for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_ops: Number of Link operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_ops_ok: Number of successful Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_sum: Sum of timings for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_sqr: Sum of squares of sample timings for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_min: Minimum execution time observed for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_max: Maximum execution time observed for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_ops: Number of MakeDir operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_ops_ok: Number of successful MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_sum: Sum of timings for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_sqr: Sum of squares of sample timings for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_min: Minimum execution time observed for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_max: Maximum execution time observed for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_ops: Number of RemoveDir operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_ops_ok: Number of successful RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_sum: Sum of timings for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_sqr: Sum of squares of sample timings for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_min: Minimum execution time observed for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_max: Maximum execution time observed for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_ops: Number of SetLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_ops_ok: Number of successful SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_sum: Sum of timings for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_sqr: Sum of squares of sample timings for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_min: Minimum execution time observed for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_max: Maximum execution time observed for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_ops: Number of ExtendLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_ops_ok: Number of successful ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_sum: Sum of timings for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_sqr: Sum of squares of sample timings for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_min: Minimum execution time observed for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_max: Maximum execution time observed for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_ops: Number of ReleaseLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_ops_ok: Number of successful ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_sum: Sum of timings for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_sqr: Sum of squares of sample timings for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_min: Minimum execution time observed for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_max: Maximum execution time observed for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_ops: Number of GetStatistics operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_ops_ok: Number of successful GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_sum: Sum of timings for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_sqr: Sum of squares of sample timings for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_min: Minimum execution time observed for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_max: Maximum execution time observed for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_ops: Number of GiveUpCallbacks operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_ops_ok: Number of successful GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_sum: Sum of timings for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_sqr: Sum of squares of sample timings for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_min: Minimum execution time observed for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_max: Maximum execution time observed for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_ops: Number of GetVolumeInfo operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_ops_ok: Number of successful GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_sum: Sum of timings for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_sqr: Sum of squares of sample timings for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_min: Minimum execution time observed for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_max: Maximum execution time observed for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_ops: Number of GetVolumeStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_ops_ok: Number of successful GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_sum: Sum of timings for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_sqr: Sum of squares of sample timings for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_min: Minimum execution time observed for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_max: Maximum execution time observed for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_ops: Number of SetVolumeStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_ops_ok: Number of successful SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_sum: Sum of timings for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_sqr: Sum of squares of sample timings for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_min: Minimum execution time observed for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_max: Maximum execution time observed for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_ops: Number of GetRootVolume operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_ops_ok: Number of successful GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_sum: Sum of timings for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_sqr: Sum of squares of sample timings for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_min: Minimum execution time observed for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_max: Maximum execution time observed for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_ops: Number of CheckToken operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_ops_ok: Number of successful CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_sum: Sum of timings for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_sqr: Sum of squares of sample timings for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_min: Minimum execution time observed for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_max: Maximum execution time observed for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_ops: Number of GetTime operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_ops_ok: Number of successful GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_sum: Sum of timings for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_sqr: Sum of squares of sample timings for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_min: Minimum execution time observed for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_max: Maximum execution time observed for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_ops: Number of NGetVolumeInfo operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_ops_ok: Number of successful NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_sum: Sum of timings for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_sqr: Sum of squares of sample timings for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_min: Minimum execution time observed for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_max: Maximum execution time observed for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_ops: Number of BulkStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_ops_ok: Number of successful BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_sum: Sum of timings for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_sqr: Sum of squares of sample timings for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_min: Minimum execution time observed for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_max: Maximum execution time observed for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_ops: Number of XStatsVersion operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_ops_ok: Number of successful XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_sum: Sum of timings for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_sqr: Sum of squares of sample timings for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_min: Minimum execution time observed for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_max: Maximum execution time observed for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_ops: Number of GetXStats operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_ops_ok: Number of successful GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_sum: Sum of timings for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXstats_sqr: Sum of squares of sample timings for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_min: Minimum execution time observed for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_max: Maximum execution time observed for GetXStats operations.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>File Server RPC Operation Errors Group (FS_RPCopErrors_group) <itemizedlist>
+           <listitem>
+             <para>FetchData_srv_err: Number of server-down errors during FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_net_err: Number of network errors during FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_prot_err_err: Number of protection violations during FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_vol_err: Number of volume related errors during FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_busy_err: Number of volume busy conditions during FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_other_err: Number of miscellaneous other errors during FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_srv_err: Number of server-down errors during FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_net_err: Number of network errors during FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_prot_err: Number of protection violations during FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_vol_err: Number of volume related errors during FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_busy_err: Number of volume busy conditions encountered during FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_other_err: Number of miscellaneous other errors during FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_srv_err: Number of server-down errors during FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_net_err: Number of network errors during FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_prot_err: Number of protection violations during FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_vol_err: Number of volume related errors during FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_busy_err: Number of volume busy conditions encountered during FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_other_err: Number of miscellaneous other errors during FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_srv_err: Number of server-down errors during StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_net_err: Number of network errors during StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_prot_err: Number of protection violations during StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_vol_err: Number of volume related errors during StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_busy_err: Number of volume busy conditions encountered during StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_other_err: Number of miscellaneous other errors during StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_srv_err: Number of server-down errors during StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_net_err: Number of network errors during StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_prot_err: Number of protection violations during StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_vol_err: Number of volume related errors during StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_busy_err: Number of volume busy conditions encountered during StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_other_err: Number of miscellaneous other errors during StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_srv_err: Number of server-down errors during StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_net_err: Number of network errors during StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_prot_err: Number of protection violations during StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_vol_err: Number of volume related errors during StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_busy_err: Number of volume busy conditions encountered during StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_other_err: Number of miscellaneous other errors during StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_srv_err: Number of server-down errors during RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_net_err: Number of network errors during RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_prot_err: Number of protection violations during RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_vol_err: Number of volume related errors during RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_busy_err: Number of volume busy conditions encountered during RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_other_err: Number of miscellaneous other errors during RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_srv_err: Number of server-down errors during CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_net_err: Number of network errors during CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_prot_err: Number of protection violations during CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_vol_err: Number of volume related errors during CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_busy_err: Number of volume busy conditions encountered during CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_other_err: Number of miscellaneous other errors during CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_srv_err: Number of server-down errors during Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_net_err: Number of network errors during Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_prot_err: Number of protection violations during Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_vol_err: Number of volume related errors during Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_busy_err: Number of volume busy conditions encountered during Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_other_err: Number of miscellaneous other errors during Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_srv_err: Number of server-down errors during Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_net_err: Number of network errors during Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_prot_err: Number of protection violations during Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_vol_err: Number of volume related errors during Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_busy_err: Number of volume busy conditions encountered during Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_other_err: Number of miscellaneous other errors during Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_srv_err: Number of server-down errors during Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_net_err: Number of network errors during Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_prot_err: Number of protection violations during Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_vol_err: Number of volume related errors during Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_busy_err: Number of volume busy conditions encountered during Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_other_err: Number of miscellaneous other errors during Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_srv_err: Number of server-down errors during MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_net_err: Number of network errors during MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_prot_err: Number of protection violations during MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_vol_err: Number of volume related errors during MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_busy_err: Number of volume busy conditions encountered during MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_other_err: Number of miscellaneous other errors during MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_srv_err: Number of server-down errors during RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_net_err: Number of network errors during RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_prot_err: Number of protection violations during RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_vol_err: Number of volume related errors during RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_busy_err: Number of volume busy conditions encountered during RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_other_err: Number of miscellaneous other errors during RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_srv_err: Number of server-down errors during SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_net_err: Number of network errors during SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_prot_err: Number of protection violations during SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_vol_err: Number of volume related errors during SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_busy_err: Number of volume busy conditions encountered during SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_other_err: Number of miscellaneous other errors during SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_srv_err: Number of server-down errors during ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_net_err: Number of network errors during ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_prot_err: Number of protection violations during ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_vol_err: Number of volume related errors during ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_busy_err: Number of volume busy conditions encountered during ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_other_err: Number of miscellaneous other errors during ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_srv_err: Number of server-down errors during ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_net_err: Number of network errors during ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_prot_err: Number of protection violations during ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_vol_err: Number of volume related errors during ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_busy_err: Number of volume busy conditions encountered during ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_other_err: Number of miscellaneous other errors during ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_srv_err: Number of server-down errors during GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_net_err: Number of network errors during GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_prot_err: Number of protection violations during GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_vol_err: Number of volume related errors during GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_busy_err: Number of volume busy conditions encountered during GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_other_err: Number of miscellaneous other errors during GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_srv_err: Number of server-down errors during GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_net_err: Number of network errors during GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_prot_err: Number of protection violations during GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_vol_err: Number of volume related errors during GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_busy_err: Number of volume busy conditions encountered during GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_other_err: Number of miscellaneous other errors during GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_srv_err: Number of server-down errors during GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_net_err: Number of network errors during GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_prot_err: Number of protection violations during GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_vol_err: Number of volume related errors during GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_busy_err: Number of volume busy conditions encountered during GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_other_err: Number of miscellaneous other errors during GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_srv_err: Number of server-down errors during GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_net_err: Number of network errors during GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_prot_err: Number of protection violations during GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_vol_err: Number of volume related errors during GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_busy_err: Number of volume busy conditions encountered during GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_other_err: Number of miscellaneous other errors during GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_srv_err : Number of server-down errors during SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_net_err: Number of network errors during SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_prot_err: Number of protection violations during SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_vol_err: Number of volume related errors during SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_busy_err: Number of volume busy conditions encountered during SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_other_err: Number of miscellaneous other errors during SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_srv_err: Number of server-down errors during GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_net_err: Number of network errors during GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_prot_err: Number of protection violations during GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_vol_err: Number of volume related errors during GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_busy_err: Number of volume busy conditions encountered during GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_other_err: Number of miscellaneous other errors during GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_srv_err: Number of server-down errors during CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_net_err: Number of network errors during CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_prot_err: Number of protection violations during CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_vol_err: Number of volume related errors during CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_busy_err: Number of volume busy conditions encountered during CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_other_err: Number of miscellaneous other errors during CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_srv_err: Number of server-down errors during GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_net_err: Number of network errors during GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_prot_err: Number of protection violations during GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_vol_err: Number of volume related errors during GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_busy_err: Number of volume busy conditions encountered during GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_other_err: Number of miscellaneous other errors during GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_srv_err: Number of server-down errors during NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_net_err: Number of network errors during NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_prot_err: Number of protection violations during NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_vol_err: Number of volume related errors during NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_busy_err: Number of volume busy conditions encountered during NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_other_err: Number of miscellaneous other errors during NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_srv_err: Number of server-down errors during BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_net_err: Number of network errors during BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_prot_err: Number of protection violations during BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_vol_err: Number of volume related errors during BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_busy_err: Number of volume busy conditions encountered during BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_other_err: Number of miscellaneous other errors during BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_srv_err: Number of server-down errors during XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_net_err: Number of network errors during XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_prot_err: Number of protection violations during XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_vol_err: Number of volume related errors during XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_busy_err: Number of volume busy conditions encountered during XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_other_err: Number of miscellaneous other errors during XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_srv_err: Number of server-down errors during GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_net_err: Number of network errors during GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_prot_err: Number of protection violations during GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_vol_err: Number of volume related errors during GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_busy_err: Number of volume busy conditions encountered during GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_other_err: Number of miscellaneous other errors during GetXStats operations.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>File Server RPC Transfer Timings Group (FS_RPCopBytes_group) <itemizedlist>
+           <listitem>
+             <para>FetchData_xfers: Number of FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_ok: Number of successful FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_sum: Sum of timing values for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_sqr: Sum of squares of sample timings for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_min: Minimum transfer time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_max: Maximum transfer time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bytes_sum: Sum of bytes transferred for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bytes_min: Minimum byte transfer observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bytes_max: Maximum byte transfer observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket0: Tally in bucket0 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket1: Tally in bucket1 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket2: Tally in bucket2 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket3: Tally in bucket3 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket4: Tally in bucket4 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket5: Tally in bucket5 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket6: Tally in bucket6 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket7: Tally in bucket7 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket8: Tally in bucket8 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers: Number of StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_ok: Number of successful StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_sum: Sum of timing values for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_sqr: Sum of squares of sample timings for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_min: Minimum transfer time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_max: Maximum transfer time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bytes_sum: Sum of bytes transferred for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bytes_min: Minimum byte transfer observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bytes_max: Maximum byte transfer observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket0: Tally in bucket0 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket1: Tally in bucket1 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket2: Tally in bucket2 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket3: Tally in bucket3 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket4: Tally in bucket4 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket5: Tally in bucket5 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket6: Tally in bucket6 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket7: Tally in bucket7 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket8: Tally in bucket8 for StoreData operations.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Cache Manager RPC Operation Timings Group (CM_RPCopTimes_group) <itemizedlist>
+           <listitem>
+             <para>CallBack_ops: Number of CallBack operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBack_ops_ok: Number of successful CallBack operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBack_ops_sum: Sum of timings for CallBack operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBack_ops_min: Minimum execution time observed for CallBack operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBack_ops_max: Maximum execution time observed for CallBack operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CallBack_ops_sqr: Sum of the square of CallBack operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>InitCallBackState_ops: Number of InitCallBackState operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>InitCallBackState_ops_ok: Number of successful InitCallBackState operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>InitCallBackState_ops_sum: Sum of timings for InitCallBackState operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>InitCallBackState_ops_min: Minimum execution time observed for InitCallBackState operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>InitCallBackState_ops_max: Maximum execution time observed for InitCallBackState operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>InitCallBackState_ops_sqr: Sum of squares of timings for InitCallBackState operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Probe_ops: Number of Probe operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Probe_ops_ok: Number of successful Probe operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Probe_ops_sum: Sum of timings for Probe operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Probe_ops_min: Minimum execution time observed for Probe operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Probe_ops_max: Maximum execution time observed for Probe operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Probe_ops_sqr: Sum of squares of timings for Probe operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetLock_ops: Number of GetLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetLock_ops_ok: Number of successful GetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetLock_ops_sum: Sum of timings for GetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetLock_ops_min: Minimum execution time observed for GetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetLock_ops_max: Maximum execution time observed for GetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetLock_ops_sqr: Sum of squares of timings for GetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetCE_ops: Number of GetCE operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetCE_ops_ok: Number of successful GetCE operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetCE_ops_sum: Sum of timings for GetCE operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetCE_ops_min: Minimum execution time observed for GetCE operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetCE_ops_max: Maximum execution time observed for GetCE operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetCE_ops_sqr: Sum of squares of timings for GetCE operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_CM_ops: Number of XStatsVersion operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_CM_ops_ok: Number of successful XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_CM_ops_sum: Sum of timings for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_CM_ops_min: Minimum execution time observed for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_CM_ops_max: Maximum execution time observed for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_CM_ops_sqr: Sum of squares of timings for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_CM_ops: Number of GetXStats operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_CM_ops_ok: Number of successful GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_CM_ops_sum: Sum of timings for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_CM_ops_min: Minimum execution time observed for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_CM_ops_max: Maximum execution time observed for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_CM_ops_sqr: Sum of squares of timings for GetXStats operations.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_711">
+       <title>Authentication and Replicated File Access Section (Auth_Access_section)</title>
+ 
+       <para>Authentication Information for Cache Manager Group (Auth_Stats_group) <itemizedlist>
+           <listitem>
+             <para>curr_PAGs: Current number of PAGs.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>curr_Records: Current number of records in table.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>curr_AuthRecords: Current number of of authenticated records (with valid ticket).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>curr_UnauthRecords: Current number of of unauthenticated records (without any ticket at all).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>curr_MaxRecordsInPAG: Maximum records for a single PAG.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>curr_LongestChain: Length of longest current hash chain.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>PAGCreations: Number of PAG creations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>TicketUpdates: Number of ticket additions/refreshes.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>HWM_PAGS: High water mark - number of PAGs.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>HWM_Records: High water mark - number of records.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>HWM_MaxRecordsInPAG: High water mark - maximum records for a single PAG.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>HWM_LongestChain: High water mark - longest hash chain.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Unreplicated File Access Group (Access_Stats_group) <itemizedlist>
+           <listitem>
+             <para>unreplicatedRefs: Number of references to unreplicated data.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>replicatedRefs: Number of references to replicated data.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>numReplicasAccessed: Number of replicas accessed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>maxReplicasPerRef: Maximum number of replicas accessed per reference.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>refFirstReplicaOK: Number of references satisfied by 1st replica.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ619">
+     <title>The File Server Statistics</title>
+ 
+     <indexterm>
+       <primary>afsmonitor program</primary>
+ 
+       <secondary>file server statistics</secondary>
+     </indexterm>
+ 
+     <para>File Server statistics are classified into the following sections and groups: <itemizedlist>
+         <listitem>
+           <para>PerfStats_section: Performance Statistics Section. <itemizedlist>
+               <listitem>
+                 <para>VnodeCache_group: Vnode Cache Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Directory_group: Directory Package Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Rx_group: Rx Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>HostModule_group: Host Module Fields Group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>misc_group: Miscellaneous Variables Group.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>RPCop_section: RPC Operations Section. <itemizedlist>
+               <listitem>
+                 <para>RPCopTimes_group: Individual RPC Operation Timings.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>RPCopBytes_group: Byte Information for Certain RPC Operations.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>All File Server variables categorized under the above sections and groups names are listed below.</para>
+ 
+     <sect2 id="Header_713">
+       <title>Performance Statistics Section (PerfStats_section)</title>
+ 
+       <para>Vnode Cache Group (VnodeCache_group) <itemizedlist>
+           <listitem>
+             <para>vcache_L_Entries: Number of entries in LARGE vnode cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_L_Allocs: Number of allocs (large).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_L_Gets: Number of gets (large).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_L_Reads: Number of reads (large).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_L_Writes: Number of writes (large).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_S_Entries: Number of entries in SMALL vnode cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_S_Allocs: Number of allocs (small).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_S_Gets: Number of gets (small).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_S_Reads: Number of reads (small).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_S_Writes: Number of writes (small).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_H_Entries: Number of entries in HEADER vnode cache.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_H_Gets: Number of gets (header)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>vcache_H_Replacements: Number of replacements (header)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Directory Package Group (Directory_group) <itemizedlist>
+           <listitem>
+             <para>dir_Buffers: Number of buffers in use.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>dir_Calls: Number of read calls made.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>dir_IOs: I/O operations performed.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Rx Group (Rx_group) <itemizedlist>
+           <listitem>
+             <para>rx_packetRequests: Packet allocation requests.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_noPackets_RcvClass: Failed packet requests (receive class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_noPackets_SendClass: Failed packet requests (send class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_noPackets_SpecialClass: Failed packet requests (special class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_socketGreedy: Did SO_GREEDY succeed?</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_bogusPacketOnRead: Short packets received.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_bogusHost: Host address from bogus packets.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_noPacketOnRead: Read packets with no packet there.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_noPacketBuffersOnRead: Packets dropped due to buffer shortage.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_selects: Selects waiting on packet or timeout.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_sendSelects: Selects forced upon sends.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_packetsRead_RcvClass: Packets read (receive class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_packetsRead_SendClass: Packets read (send class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_packetsRead_SpecialClass: Packets read (special class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_dataPacketsRead: Unique data packets read off wire.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_ackPacketsRead: ACK packets read.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_dupPacketsRead: Duplicate data packets read.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_spuriousPacketsRead: Inappropriate packets read.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_packetsSent_RcvClass: Packets sent (receive class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_packetsSent_SendClass: Packets sent (send class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_packetsSent_SpecialClass: Packets sent (special class).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_ackPacketsSent: ACK packets sent.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_pingPacketsSent: Ping packets sent.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_abortPacketsSent: Abort packets sent.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_busyPacketsSent: Busy packets sent.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_dataPacketsSent: Unique data packets sent.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_dataPacketsReSent: Retransmissions sent.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_dataPacketsPushed: Retransmissions pushed by NACK.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_ignoreAckedPacket: Packets with ACKed flag on rxi_Start.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_totalRtt_Sec and rx_totalRtt_Usec: Total round trip time (in seconds and milliseconds).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_minRtt_Sec and rx_minRtt_Usec: Minimum round trip time (in seconds and milliseconds).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_maxRtt_Sec and rx_maxRtt_Usec: Maximum round trip time (in seconds and milliseconds).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_nRttSamples: Round trip samples.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_nServerConns: Total server connections.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_nClientConns: Total client connections.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_nPeerStructs: Total peer structures.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_nCallStructs: Total call structures.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>rx_nFreeCallStructs: Total free call structures.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Host Module Fields Group (HostModule_group) <itemizedlist>
+           <listitem>
+             <para>host_NumHostEntries: Number of host entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_HostBlocks: Blocks in use for hosts.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_NonDeletedHosts: Non-deleted hosts.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_HostsInSameNetOrSubnet: Hosts in same subnet as server.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_HostsInDiffSubnet: Hosts in different subnet than server.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_HostsInDiffNetwork: Hosts in different network than server.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_NumClients: Number of client entries.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>host_ClientBlocks: Blocks in use for clients.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Miscellaneous Variables Group (misc_group) <itemizedlist>
+           <listitem>
+             <para>numPerfCalls: Number of performance calls received.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_714">
+       <title>RPC Operations Section (RPCop_section)</title>
+ 
+       <para>Individual RPC Operation Timings Group (RPCopTimes_group) <itemizedlist>
+           <listitem>
+             <para>epoch: Time when data collection began.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_ops: Number of FetchData operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_ops_ok: Number of successful FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_sum: Sum of timings for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_sqr: Sum of squares of sample timings for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_min: Minimum execution time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_max: Maximum execution time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_ops: Number of FetchACL operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_ops_ok: Number of successful FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_sum: Sum of timings for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_sqr: Sum of squares of sample timings for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_min: Minimum execution time observed for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchACL_max: Maximum execution time observed for FetchACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_ops: Number of FetchStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_ops_ok: Number of successful FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_sum: Sum of timings for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_sqr: Sum of squares of sample timings for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_min: Minimum execution time observed for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchStatus_max: Maximum execution time observed for FetchStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_ops: Number of StoreData operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_ops_ok: Number of successful StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_sum: Sum of timings for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_sqr: Sum of squares of sample timings for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_min: Minimum execution time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_max: Maximum execution time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_ops: Number of StoreACL operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_ops_ok: Number of successful StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_sum: Sum of timings for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_sqr: Sum of squares of sample timings for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_min: Minimum execution time observed for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreACL_max: Maximum execution time observed for StoreACL operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_ops: Number of StoreStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_ops_ok: Number of successful StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_sum: Sum of timings for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_sqr: Sum of squares of sample timings for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_min: Minimum execution time observed for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreStatus_max: Maximum execution time observed for StoreStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_ops: Number of RemoveFile operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_ops_ok: Number of successful RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_sum: Sum of timings for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_sqr: Sum of squares of sample timings for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_min: Minimum execution time observed for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveFile_max: Maximum execution time observed for RemoveFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_ops: Number of CreateFile operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_ops_ok: Number of successful CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_sum: Sum of timings for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_sqr: Sum of squares of sample timings for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_min: Minimum execution time observed for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CreateFile_max: Maximum execution time observed for CreateFile operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_ops: Number of Rename operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_ops_ok: Number of successful Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_sum: Sum of timings for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_sqr: Sum of squares of sample timings for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_min: Minimum execution time observed for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Rename_max: Maximum execution time observed for Rename operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_ops: Number of Symlink operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_ops_ok: Number of successful Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_sum: Sum of timings for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_sqr: Sum of squares of sample timings for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_min: Minimum execution time observed for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Symlink_max: Maximum execution time observed for Symlink operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_ops: Number of Link operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_ops_ok: Number of successful Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_sum: Sum of timings for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_sqr: Sum of squares of sample timings for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_min: Minimum execution time observed for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Link_max: Maximum execution time observed for Link operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_ops: Number of MakeDir operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_ops_ok: Number of successful MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_sum: Sum of timings for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_sqr: Sum of squares of sample timings for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_min: Minimum execution time observed for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>MakeDir_max: Maximum execution time observed for MakeDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_ops: Number of RemoveDir operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_ops_ok: Number of successful RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_sum: Sum of timings for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_sqr: Sum of squares of sample timings for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_min: Minimum execution time observed for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>RemoveDir_max: Maximum execution time observed for RemoveDir operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_ops: Number of SetLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_ops_ok: Number of successful SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_sum: Sum of timings for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_sqr: Sum of squares of sample timings for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_min: Minimum execution time observed for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetLock_max: Maximum execution time observed for SetLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_ops: Number of ExtendLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_ops_ok: Number of successful ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_sum: Sum of timings for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_sqr: Sum of squares of sample timings for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_min: Minimum execution time observed for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ExtendLock_max: Maximum execution time observed for ExtendLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_ops: Number of ReleaseLock operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_ops_ok: Number of successful ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_sum: Sum of timings for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_sqr: Sum of squares of sample timings for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_min: Minimum execution time observed for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>ReleaseLock_max: Maximum execution time observed for ReleaseLock operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_ops: Number of GetStatistics operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_ops_ok: Number of successful GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_sum: Sum of timings for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_sqr: Sum of squares of sample timings for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_min: Minimum execution time observed for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetStatistics_max: Maximum execution time observed for GetStatistics operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_ops: Number of GiveUpCallbacks operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_ops_ok: Number of successful GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_sum: Sum of timings for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_sqr: Sum of squares of sample timings for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_min: Minimum execution time observed for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GiveUpCallbacks_max: Maximum execution time observed for GiveUpCallbacks operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_ops: Number of GetVolumeInfo operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_ops_ok: Number of successful GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_sum: Sum of timings for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_sqr: Sum of squares of sample timings for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_min: Minimum execution time observed for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeInfo_max: Maximum execution time observed for GetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_ops: Number of GetVolumeStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_ops_ok: Number of successful GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_sum: Sum of timings for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_sqr: Sum of squares of sample timings for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_min: Minimum execution time observed for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetVolumeStatus_max: Maximum execution time observed for GetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_ops: Number of SetVolumeStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_ops_ok: Number of successful SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_sum: Sum of timings for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_sqr: Sum of squares of sample timings for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_min: Minimum execution time observed for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>SetVolumeStatus_max: Maximum execution time observed for SetVolumeStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_ops: Number of GetRootVolume operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_ops_ok: Number of successful GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_sum: Sum of timings for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_sqr: Sum of squares of sample timings for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_min: Minimum execution time observed for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetRootVolume_max: Maximum execution time observed for GetRootVolume operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_ops: Number of CheckToken operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_ops_ok: Number of successful CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_sum: Sum of timings for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_sqr: Sum of squares of sample timings for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_min: Minimum execution time observed for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>CheckToken_max: Maximum execution time observed for CheckToken operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_ops: Number of GetTime operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_ops_ok: Number of successful GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_sum: Sum of timings for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_sqr: Sum of squares of sample timings for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_min: Minimum execution time observed for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetTime_max: Maximum execution time observed for GetTime operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_ops: Number of NGetVolumeInfo operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_ops_ok: Number of successful NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_sum: Sum of timings for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_sqr: Sum of squares of sample timings for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_min: Minimum execution time observed for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>NGetVolumeInfo_max: Maximum execution time observed for NGetVolumeInfo operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_ops: Number of BulkStatus operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_ops_ok: Number of successful BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_sum: Sum of timings for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_sqr: Sum of squares of sample timings for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_min: Minimum execution time observed for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>BulkStatus_max: Maximum execution time observed for BulkStatus operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_ops: Number of XStatsVersion operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_ops_ok: Number of successful XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_sum: Sum of timings for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_sqr: Sum of squares of sample timings for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_min: Minimum execution time observed for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>XStatsVersion_max: Maximum execution time observed for XStatsVersion operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_ops: Number of GetXStats operations executed.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_ops_ok: Number of successful GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_sum: Sum of timings for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_sqr: Sum of squares of sample timings for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_min: Minimum execution time observed for GetXStats operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>GetXStats_max: Maximum execution time observed for GetXStats operations.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Byte Information for Certain RPC Operations Group (RPCopBytes_group) <itemizedlist>
+           <listitem>
+             <para>FetchData_xfers: Number of FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_ok: Number of successful FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_sum: Sum of timing values for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_sqr: Sum of squares of sample timings for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_min: Minimum transfer time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_max: Maximum transfer time observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bytes_sum: Sum of bytes transferred for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bytes_min: Minimum byte transfer observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bytes_max: Maximum byte transfer observed for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket0: Tally in bucket0 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket1: Tally in bucket1 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket2: Tally in bucket2 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket3: Tally in bucket3 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket4: Tally in bucket4 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket5: Tally in bucket5 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket6: Tally in bucket6 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket7: Tally in bucket7 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>FetchData_xfers_bucket8: Tally in bucket8 for FetchData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers: Number of StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_ok: Number of successful StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_sum: Sum of timing values for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_sqr: Sum of squares of sample timings for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_min: Minimum transfer time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_max: Maximum transfer time observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bytes_sum: Sum of bytes transferred for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bytes_min: Minimum byte transfer observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bytes_max: Maximum byte transfer observed for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket0: Tally in bucket0 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket1: Tally in bucket1 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket2: Tally in bucket2 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket3: Tally in bucket3 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket4: Tally in bucket4 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket5: Tally in bucket5 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket6: Tally in bucket6 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket7: Tally in bucket7 for StoreData operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>StoreData_xfers_bucket8: Tally in bucket8 for StoreData operations.</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+   </sect1>
+ </appendix>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/auagd025.xml
diff -c /dev/null openafs/doc/xml/AdminGuide/auagd025.xml:1.1.10.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/AdminGuide/auagd025.xml	Mon May 11 11:11:10 2009
***************
*** 0 ****
--- 1,2084 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <appendix id="HDRWQ620">
+   <title>AIX Audit Events</title>
+ 
+   <para>This Appendix provides a complete listing of the AFS events that can be audited on AIX file server machines. See Chapter
+   <link linkend="HDRWQ323">Monitoring and Auditing AFS Performance</link> for instructions on auditing AFS events on AIX file server
+   machines. <anchor id="IDX8189" /></para>
+ 
+   <sect1 id="HDRWQ621">
+     <title>Introduction</title>
+ 
+     <para>Below is a list of the AFS events contained in the file <emphasis
+     role="bold">/afs/usr/local/audit/events.sample</emphasis>. Each entry contains information on the event class, the name of the
+     event, the parameters associated with the event, and a description of the event.</para>
+ 
+     <para>Most events have an associated error code that shows the outcome of the event (since each event is recorded after it
+     occurs), an AFSName (the authentication identify of the requesting process), and a host ID (from which the request originated).
+     Many events follow the RPC server entry calls defined in the <emphasis>AFS Programmer's Reference Manual</emphasis>.</para>
+ 
+     <para>Events are classed by functionality (this is AIX specific). Some events possibly fall into one of more of the following
+     classes which are defined by the file <emphasis role="bold">/usr/afs/local/config.sample</emphasis>: <itemizedlist>
+         <listitem>
+           <para>A (afsauthent): Authentication and Identification Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>S (afssecurity): Security Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>P (afsprivilege): Privilege Required Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>O (afsobjects): Object Creation and Deletion Events</para>
+         </listitem>
+ 
+         <listitem>
+           <para>M (afsattributes): Attribute modification</para>
+         </listitem>
+ 
+         <listitem>
+           <para>C (afsprocess): Process Control Events</para>
+         </listitem>
+       </itemizedlist></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ622">
+     <title>Audit-Specific Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_Audit_WR</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>&lt;string&gt;</entry>
+ 
+             <entry>The file "/usr/afs/Audit" has been written to (AIX specific event).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_On</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>Auditing is on for this server process (recorded on startup of a server).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_Off</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>Auditing is off for this server process (recorded on startup of a server).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_Unauth</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode Event</entry>
+ 
+             <entry>Event triggered by an unauthorized user.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+ 
+     <note>
+       <para>The following audit-specific events indicate an error has occurred while recording the event. Most events have an
+       AFSName associated with them and a host ID. If this information cannot be gathered out of the Rx structure, one of these
+       events is raised.</para>
+     </note>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_Aud_NoCall</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode Event</entry>
+ 
+             <entry>No rx call structure with this event. Cannot get security, AFS ID, or origin of call.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_NoConn</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode Event</entry>
+ 
+             <entry>No connection info associated with rx call. Cannot get security, AFS ID, or origin of call.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_UnknSec</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode Event</entry>
+ 
+             <entry>Security of call is unknown (must be authorized or unauthorized caller).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_NoAFSId</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode Event</entry>
+ 
+             <entry>No AFS ID/name associated with a secure event.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_NoHost</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode Event</entry>
+ 
+             <entry>No information about origin (machine) of caller.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Aud_EINVAL</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>Event</entry>
+ 
+             <entry>Error in audit event parameter (can't record the event parameter).</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ627">
+     <title>Volume Server Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_VS_Start</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The volume server has started.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Finish</entry>
+ 
+             <entry>C</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The volume server has finished. Finish events are rare since the server process is normally aborted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Exit</entry>
+ 
+             <entry>C</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The volume server has exited. Exit events are rare since the server process is normally aborted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_TransCr</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Trans VolID</entry>
+ 
+             <entry>AFSVolTransCreate - Create transaction for a [volume, partition]</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_EndTrn</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolEndTrans - End a transaction.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_CrVol</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID Trans VolID VolName Type ParentID</entry>
+ 
+             <entry>AFSVolCreateVolume - Create a volume (volumeId volumeName)</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_DelVol</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolDeleteVolume - Delete a volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_NukVol</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID VolID</entry>
+ 
+             <entry>AFSVolNukeVolume - Obliterate a volume completely (volume ID).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Dump</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolDump - Dump the contents of a volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_SigRst</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID VolName</entry>
+ 
+             <entry>AFSVolSignalRestore - Show intention to call AFSVolRestore.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Restore</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolRestore - Recreate a volume from a dump.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Forward</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID FromTrans Host DestTrans</entry>
+ 
+             <entry>AFSVolForward - Dump a volume, then restore to a given server and volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Clone</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID Trans Purge NewName NewType NewVolID</entry>
+ 
+             <entry>AFSVolClone - Clone (and optionally purge) a volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_ReClone</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID Trans CloneVolID</entry>
+ 
+             <entry>AFSVolReClone - Reclone a volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_SetForw</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID Trans NewHost</entry>
+ 
+             <entry>AFSVolSetForwarding - Set forwarding information for a moved volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_GetFlgs</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolGetFlags - Get volume flags for a transaction.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_SetFlgs</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID Trans Flags</entry>
+ 
+             <entry>AFSVolSetFlags - Set volume flags for a transaction.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_GetName</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolGetName - Get the volume name associated with a transaction.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_GetStat</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolGetStatus - Get status of a transaction/volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_SetIdTy</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID Trans VolName Type ParentId CloneID BackupID</entry>
+ 
+             <entry>AFSVolSetIdsTypes - Set header information for a volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_SetDate</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID Trans Date</entry>
+ 
+             <entry>AFSVolSetDate - Set creation date in a volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_ListPar</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>AFSVolListPartitions - Return a list of AFS partitions on a server.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_ParInf</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID PartName</entry>
+ 
+             <entry>AFSVolPartitionInfo - Get partition information.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_ListVol</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>AFSVolListVolumes - Return a list of volumes on a server.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_XLstVol</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>AFSVolXListVolumes - Return a (detailed) list of volumes on a server.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Lst1Vol</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID VolID</entry>
+ 
+             <entry>AFSVolListOneVolume - Return header information for a single volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_XLst1Vl</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID VolID</entry>
+ 
+             <entry>AFSVolXListOneVolume - Return (detailed) header information for a single volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_GetNVol</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID VolID</entry>
+ 
+             <entry>AFSVolGetNthVolume - Get volume header given its index.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_Monitor</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>AFSVolMonitor - Collect server transaction state.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VS_SetInfo</entry>
+ 
+             <entry>P O M</entry>
+ 
+             <entry>ECode AFSName HostID Trans</entry>
+ 
+             <entry>AFSVolSetInfo - Set volume status.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ630">
+     <title>Backup Server Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_BUDB_Start</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The backup server has started.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_Finish</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The backup server has finished. Finish events are rare since the server process is normally aborted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_Exit</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The backup server has exited. Exit events are rare since the server process is normally aborted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_CrDmp</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_CreateDump - Create a new dump.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_AppDmp</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_makeDumpAppended - Make the dump an appended dump.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_DelDmp</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_DeleteDump - Delete a dump.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FinDmp</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_FinishDump- Notify buserver that dump is finished.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_UseTpe</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_UseTape - Create/add a tape entry to a dump.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_DelTpe</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_DeleteTape - Remove a tape from the database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FinTpe</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_FinishTape - Writing to a tape is completed.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_AddVol</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID volId</entry>
+ 
+             <entry>BUDB_AddVolume - Add a volume to a particular dump and tape.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetTxV</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Type</entry>
+ 
+             <entry>BUDB_GetTextVersion - Get the version number for hosts/volume-sets/dump-hierarchy.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetTxt</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID Type</entry>
+ 
+             <entry>BUDB_GetText - Get the information about hosts/volume-sets/dump-hierarchy.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_SavTxt</entry>
+ 
+             <entry>M</entry>
+ 
+             <entry>ECode AFSName HostID Type</entry>
+ 
+             <entry>BUDB_SaveText - Overwrite the information about hosts/volume-sets/dump-hierarchy.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetLck</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_GetLock - Take a lock for reading/writing text information.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FrALck</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_FreeLock - Free a lock.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FreLck</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_FreeAllLocks - Free all locks.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetIId</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_GetInstanceId - Get lock instance id.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_DmpDB</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_DumpDB - Start dumping the database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_RstDBH</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_RestoreDbHeader - Restore the database header.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_DBVfy</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_DbVerify - Verify the database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FndDmp</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID volName</entry>
+ 
+             <entry>BUDB_FindDump - Find the dump a volume belongs to.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetDmp</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_GetDumps - Get a list of dumps in the database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FnLTpe</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID dumpId</entry>
+ 
+             <entry>BUDB_FindLastTape - Find last tape, and last volume on tape of a dump.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetTpe</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_GetTapes - Find a list of tapes based on name or dump ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_GetVol</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_GetVolumes - Find a list of volumes based on dump or tape name.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_DelVDP</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID dumpSetName</entry>
+ 
+             <entry>BUDB_DeleteVDP - Delete dumps with given name and dump path.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FndCln</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID volName</entry>
+ 
+             <entry>BUDB_FindClone - Find clone time of volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_FndLaD</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID volName</entry>
+ 
+             <entry>BUDB_FindLatestDump - Find the latest dump a volume belongs to.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_TGetVr</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BUDB_T_GetVersion - Test Get version.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_TDmpHa</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID file</entry>
+ 
+             <entry>BUDB_T_DumpHashTable - Test dump of hash table.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BUDB_TDmpDB</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID file</entry>
+ 
+             <entry>BUDB_T_DumpDatabase - Test dump of database.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ633">
+     <title>Protection Server Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_PTS_Start</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The protection server has started.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_Finish</entry>
+ 
+             <entry>C</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The protection server has finished. Finish events are rare since the server process is normally aborted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_Exit</entry>
+ 
+             <entry>C</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>The protection server has exited. Exit events are rare since the server process is normally aborted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_NmToId</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>PR_NameToID - Perform one or more name-to-ID translations.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_IdToNm</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_IDToName - Perform one or more ID-to-name translations.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_NewEnt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId Name OwnerId</entry>
+ 
+             <entry>PR_NewEntry - Create a PDB (Protection DataBase) entry for the given name.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_INewEnt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId Name OwnerId</entry>
+ 
+             <entry>PR_INewEntry - Create a PDB entry for the given name and ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_LstEnt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_ListEntry - Get the contents of a PDB entry based on its ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_DmpEnt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Position</entry>
+ 
+             <entry>PR_DumpEntry - Get the contents of a PDB entry based on its offset.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_ChgEnt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId NewName NewOwnerId NewId</entry>
+ 
+             <entry>PR_ChangeEntry - Change an existing PDB entry's ID, name, owner, or a combination.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_SetFEnt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_SetFieldsEntry - Change miscellaneous fields in an existing PDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_Del</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_Delete - Delete an existing PDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>FS_PTS_WheIsIt</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId Position</entry>
+ 
+             <entry>PR_WhereIsIt - Get the PDB byte offset of the entry for a given ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_AdToGrp</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId UserId</entry>
+ 
+             <entry>PR_AddToGroup - Add a user to a group.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_RmFmGrp</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId UserId</entry>
+ 
+             <entry>PR_RemoveFromGroup - Remove a user from a chosen group.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_LstMax</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>PR_ListMax - Get the largest allocated user and group ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_SetMax</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId flag</entry>
+ 
+             <entry>PR_SetMax - Set the largest allocated user and group ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_LstEle</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_ListElements - List all IDs associated with a user or group.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_GetCPS</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_GetCPS - Get the CPS (Current Protection Subdomain) for the given ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_GetCPS2</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId Host</entry>
+ 
+             <entry>PR_GetCPS2 - Get the CPS for the given id and host.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_GetHCPS</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID Host</entry>
+ 
+             <entry>PR_GetHostCPS - Get the CPS for the given host.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_LstOwn</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID GroupId</entry>
+ 
+             <entry>PR_ListOwned - Get all IDs owned by the given ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PTS_IsMemOf</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID UserId GroupId</entry>
+ 
+             <entry>PR_IsAMemberOf - Is a given user ID a member of a specified group?</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ636">
+     <title>Authentication Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_KAA_ChPswd</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAA_ChangePassword - Change password.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAA_Auth</entry>
+ 
+             <entry>A S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAA_Authenticate - Authenticate to the cell.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAA_AuthO</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAA_Authenticate_old - Old style authentication.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAT_GetTkt</entry>
+ 
+             <entry>A S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAT_GetTicket - An attempt was made to get an AFS ticket for some principal listed in the Authentication
+             Database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAT_GetTktO</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAT_GetTicket_old - An attempt was made to get an AFS ticket for some principal listed in the Authentication
+             Database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_CrUser</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAM_CreateUser - Create a user.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_DelUser</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAM_DeleteUser - Delete a user.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_SetPswd</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAM_SetPassword - Set the password for a user.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_GetPswd</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry>KAM_GetPassword - Get the password of a user.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_GetEnt</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAM_GetEntry - The RPC made by the <emphasis role="bold">kas examine</emphasis> command to get one entry from the
+             Authentication Database (by index entry).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_LstEnt</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID index</entry>
+ 
+             <entry>KAM_ListEntry - The RPC made to list one or more entries in the Authentication Database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_Dbg</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>KAM_Debug - The RPC that produces a debugging trace for the Authentication Server.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_SetFld</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID name instance flags date lifetime maxAssoc</entry>
+ 
+             <entry>KAM_SetFields - The RPC used by the <emphasis role="bold">kas setfields</emphasis> command to manipulate the
+             Authentication Database.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_GetStat</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>KAM_GetStatus - An RPC used to get statistics on the Authentication Server.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_KAM_GRnKey</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>KAM_GetRandomKey - An RPC used to generate a random encryption key.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_UnlockUser</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAM_Unlock - The RPC used to initiate the <emphasis role="bold">kas unlock</emphasis> command.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_LockStatus</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID name instance</entry>
+ 
+             <entry>KAM_LockStatus - The RPC used to determine whether a user's Authentication Database entry is locked.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_UseOfPriv</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID name instance cell</entry>
+ 
+             <entry>An authorized command was issued and allowed because the user had privilege.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_UnAth</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode AFSName HostID name instance cell</entry>
+ 
+             <entry>An authorized command was issued and allowed because the system was running in noauth mode.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_UDPAuth</entry>
+ 
+             <entry>A S</entry>
+ 
+             <entry>ECode name instance</entry>
+ 
+             <entry>An authentication attempt was made with a Kerberos client.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_UDPGetTckt</entry>
+ 
+             <entry>A S</entry>
+ 
+             <entry>ECode name instance cell name instance</entry>
+ 
+             <entry>An attempt was made to get a Kerberos ticket.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_RunNoAuth</entry>
+ 
+             <entry>S</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>Check was made and some random server is running noauth.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_NoAuthDsbl</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>Server is set to run in authenticated mode.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_NoAuthEnbl</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>Server is set to run in unauthenticated mode.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ639">
+     <title>File Server and Cache Manager Interface Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_SRX_FchACL</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_FetchACL - Fetch the ACL associated with the given AFS file identifier.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_FchStat</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_FetchStatus - Fetch the status information for a file system object.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_StACL</entry>
+ 
+             <entry>M</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_StoreACL - Associate an ACL with the names directory.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_StStat</entry>
+ 
+             <entry>M</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_StoreStatus - Store status information for the specified file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_RmFile</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID) name</entry>
+ 
+             <entry>RXAFS_RemoveFile - Delete the given file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_CrFile</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID) name</entry>
+ 
+             <entry>RXAFS_CreateFile - Create the given file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_RNmFile</entry>
+ 
+             <entry>O M</entry>
+ 
+             <entry>ECode AFSName HostID (oldFID) oldName (newFID) newName</entry>
+ 
+             <entry>RXAFS_Rename - Rename the specified file in the given directory.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_SymLink</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID) name</entry>
+ 
+             <entry>RXAFS_Symlink - Create a symbolic link.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_Link</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID) name (FID)</entry>
+ 
+             <entry>RXAFS_Link - Create a hard link.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_MakeDir</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID) name</entry>
+ 
+             <entry>RXAFS_MakeDir - Create a directory.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_RmDir</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID) name</entry>
+ 
+             <entry>RXAFS_RemoveDir - Remove a directory.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_SetLock</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID) type</entry>
+ 
+             <entry>RXAFS_SetLock - Set an advisory lock on the given file identifier.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_ExtLock</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_ExtendLock - Extend an advisory lock on a file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_RelLock</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_ReleaseLock - Release the advisory lock on a file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_FchData</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>StartRXAFS_FetchData - Begin a request to fetch file data.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_StData</entry>
+ 
+             <entry>O</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>StartRXAFS_StoreData - Begin a request to store file data.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_BFchSta</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID (FID)</entry>
+ 
+             <entry>RXAFS_BulkStatus - Fetch status information regarding a set of file system objects.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_SRX_SetVolS</entry>
+ 
+             <entry>M</entry>
+ 
+             <entry>ECode AFSName HostID volId volName</entry>
+ 
+             <entry>RXAFS_SetVolumeStatus - Set the basic status information for the named volume.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_Priv</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode viceId callRoutine</entry>
+ 
+             <entry>Checking Permission Rights of user - user has permissions.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_PrivSet</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode viceId callRoutine</entry>
+ 
+             <entry>Set the privileges of a user.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ642">
+     <title>BOS Server Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_BOS_CreBnod</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_CreateBnode - Create a process instance.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_DelBnod</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID instance</entry>
+ 
+             <entry>BOZO_DeleteBnode - Delete a process instance.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_SetReSt</entry>
+ 
+             <entry>P M C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_Restart - Restart a given process instance.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_GetLog</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>StartBOZO_GetLog - Pass the IN params when fetching a BOS Server log file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_SetStat</entry>
+ 
+             <entry>P M C</entry>
+ 
+             <entry>ECode AFSName HostID instance</entry>
+ 
+             <entry>BOZO_SetStatus - Set process instance status and goal.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_SetTSta</entry>
+ 
+             <entry>P M C</entry>
+ 
+             <entry>ECode AFSName HostID instance</entry>
+ 
+             <entry>BOZO_SetTStatus - Temporarily set process instance status and goal.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_StartAl</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_StartupAll - Start all existing process instances.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_ShtdAll</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_ShutdownAll - Shut down all process instances.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_ReStAll</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_RestartAll - Shut down, then restart all process instances.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_ReBos</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_ReBozo - Shut down, then restart all process instances and the BOS Server itself.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_ReBosIn</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode</entry>
+ 
+             <entry>BOZO_ReBozo - Same as AFS_BOS_ReBos but done internally (server restarts).</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_ReStart</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID instance</entry>
+ 
+             <entry>BOZO_Restart - Restart a given process instance.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_WaitAll</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_WaitAll - Wait until all process instances have reached their goals.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_AddSUsr</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_AddSUser - Add a user to the UserList.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_DelSUsr</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_DeleteSUser - Delete a user from the UserList.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_LstSUsr</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_ListSUsers - Get the name of the user in the given position in the UserList file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_LstKey</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_ListKeys - List information about the key at a given index in the key file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_LstKeyU</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_ListKeys - Same as AFS_BOS_LstKey, but unauthorized.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_AddKey</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_AddKey - Add a key to the key file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_DelKey</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_DeleteKey - Delete the entry for an AFS key.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_SetNoAu</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID flag</entry>
+ 
+             <entry>BOZO_SetNoAuthFlag - Enable or disable authenticated call requirements.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_SetCell</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry>BOZO_SetCellName - Set the name of the cell to which the BOS Server belongs.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_AddHst</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry>BOZO_AddCellHost - Add an entry to the list of database server hosts.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_DelHst</entry>
+ 
+             <entry>S P</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry>BOZO_DeleteCellHost - Delete an entry from the list of database server hosts.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_Inst</entry>
+ 
+             <entry>P O M</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry><para>StartBOZO_Install - Pass the IN parameters when installing a server binary.</para> <para>EndBOZO_Install -
+             Get the OUT parameters when installing a server binary.</para></entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_UnInst</entry>
+ 
+             <entry>P O M</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry>BOZO_UnInstall - Roll back from a server binary installation.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_PrnLog</entry>
+ 
+             <entry>P O</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>BOZO_Prune - Throw away old versions of server binaries and core file.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_Exec</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode AFSName HostID cmd</entry>
+ 
+             <entry>BOZO_Exec - Execute a shell command at the server.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_DoExec</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode exec</entry>
+ 
+             <entry>The <emphasis role="bold">bosserver</emphasis> process was restarted.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_BOS_StpProc</entry>
+ 
+             <entry>P C</entry>
+ 
+             <entry>ECode cmd</entry>
+ 
+             <entry>An RPC to stop any process controlled by the BOS Server.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ 
+   <sect1 id="HDRWQ645">
+     <title>Volume Location Server Events</title>
+ 
+     <informaltable>
+       <tgroup cols="4">
+         <colspec colwidth="28*" />
+ 
+         <colspec colwidth="10*" />
+ 
+         <colspec colwidth="25*" />
+ 
+         <colspec colwidth="38*" />
+ 
+         <thead>
+           <row>
+             <entry>Event</entry>
+ 
+             <entry>Class</entry>
+ 
+             <entry>Parameters</entry>
+ 
+             <entry>Description</entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry>AFS_VL_CreEnt</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID name</entry>
+ 
+             <entry>VL_CreateEntry - Create a VLDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VL_DelEnt</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID volID</entry>
+ 
+             <entry>VL_DeleteEntry - Delete a VLDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VL_GetNVlID</entry>
+ 
+             <entry>None</entry>
+ 
+             <entry>ECode AFSName HostID</entry>
+ 
+             <entry>VL_GetNewVolumeId - Generate a new volume ID.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VL_RepEnt</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID volID</entry>
+ 
+             <entry>VL_ReplaceEntry - Replace entire contents of VLDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VL_UpdEnt</entry>
+ 
+             <entry>P M</entry>
+ 
+             <entry>ECode AFSName HostID volID</entry>
+ 
+             <entry>VL_UpdateEntry - Update contents of VLDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VL_SetLck</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID volID</entry>
+ 
+             <entry>VL_SetLock - Lock VLDB entry.</entry>
+           </row>
+ 
+           <row>
+             <entry>AFS_VL_RelLck</entry>
+ 
+             <entry>P</entry>
+ 
+             <entry>ECode AFSName HostID volID</entry>
+ 
+             <entry>VL_ReleaseLock - Unlock VLDB entry.</entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+   </sect1>
+ </appendix>
\ No newline at end of file
Index: openafs/doc/xml/AdminGuide/cachmgr.png
Index: openafs/doc/xml/AdminGuide/fserver1.png
Index: openafs/doc/xml/AdminGuide/fserver2.png
Index: openafs/doc/xml/AdminGuide/overview.png
Index: openafs/doc/xml/AdminGuide/scout1.png
Index: openafs/doc/xml/AdminGuide/scout2.png
Index: openafs/doc/xml/AdminGuide/scout3.png
Index: openafs/doc/xml/AdminGuide/scout4.png
Index: openafs/doc/xml/AdminGuide/vnode.png
Index: openafs/doc/xml/QuickStartUnix/Makefile.in
diff -c /dev/null openafs/doc/xml/QuickStartUnix/Makefile.in:1.1.4.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/Makefile.in	Mon Jun  1 18:41:05 2009
***************
*** 0 ****
--- 1,39 ----
+ # Makefile to build the AFS QuickStart guide for Unix.
+ #
+ # This makefile assumes that various utilities are available on the system.
+ # On Debian lenny, installing the packages:
+ #
+ #     dblatex
+ #     docbook-xsl
+ #     libxml2-utils
+ #     xsltproc
+ #
+ # gave me all the utilities needed.
+ #
+ # HTML_XSL is specific to Debian and will need to be modified on other
+ # systems until we have a better mechanism for finding the correct path.
+ 
+ all: pdf html
+ 
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ VERSFILE=version
+ include @TOP_OBJDIR@/src/config/Makefile.version
+ 
+ BOOK     = auqbg000.xml
+ SRCS     = $(BOOK) auqbg003.xml auqbg004.xml auqbg005.xml auqbg006.xml \
+ 	   auqbg007.xml auqbg008.xml appendix.xml
+ HTML_XSL = @HTML_XSL@
+ XSLTPROC = @XSLTPROC@
+ 
+ html: $(SRCS) $(VERSFILE).xml
+ 	$(XSLTPROC) --param navig.graphics 1 \
+ 	    --stringparam navig.graphics.path ../ $(HTML_XSL) $(BOOK)
+ 
+ pdf: $(SRCS) $(VERSFILE).xml
+ 	dblatex $(BOOK)
+ 
+ check:
+ 	xmllint --noout --valid $(BOOK)
+ 
+ clean:
+ 	rm -f *.html *.pdf
Index: openafs/doc/xml/QuickStartUnix/NTMakefile
diff -c /dev/null openafs/doc/xml/QuickStartUnix/NTMakefile:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/NTMakefile	Wed May 13 22:26:41 2009
***************
*** 0 ****
--- 1,68 ----
+ # Copyright 2009, Secure Endpoints Inc.
+ # All Rights Reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # - Redistributions of source code must retain the above copyright notice,
+ #   this list of conditions and the following disclaimer.
+ # - Redistributions in binary form must reproduce the above copyright notice,
+ #   this list of conditions and the following disclaimer in the documentation
+ #   and/or other materials provided with the distribution.
+ # - Neither the name of Secure Endpoints Inc. nor the names of its contributors
+ #   may be used to endorse or promote products derived from this software without
+ #   specific prior written permission from Secure Endpoints Inc..
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ !INCLUDE ..\..\..\src\config\NTMakefile.$(SYS_NAME)
+ !INCLUDE ..\..\..\src\config\NTMakefile.version
+ 
+ !IFNDEF CYGWIN
+ CYGWIN     = c:/cygwin
+ !ENDIF
+ !IFNDEF DOCBOOK_XSL
+ DOCBOOK_XSL = $(CYGWIN)/usr/share/docbook-xsl
+ !ENDIF
+ XSLTPROC   = xsltproc.exe
+ HTML_XSL = $(DOCBOOK_XSL)/html/chunk.xsl
+ HTML_PARMS = --param navig.graphics 1 --stringparam navig.graphics.path ../
+ CHM_XSL    = $(DOCBOOK_XSL)/htmlhelp/htmlhelp.xsl
+ 
+ XMLSRCS = \
+         auqbg000.xml \
+         auqbg003.xml \
+         auqbg004.xml \
+         auqbg005.xml \
+         auqbg006.xml \
+         auqbg007.xml \
+         auqbg008.xml \
+         appendix.xml
+ 
+ index.html: $(XMLSRCS)
+         @echo Building Unix Quick Start Guide in HTML format
+         $(XSLTPROC) $(HTML_PARMS) $(HTML_XSL) auqbg000.xml 
+ 
+ htmlhelp.chm: $(XMLSRCS)
+         @echo Building Unix Quick Start Guide in HTML Help format
+         $(XSLTPROC) $(CHM_XSL) auqbg000.xml
+         -hhc.exe htmlhelp.hhp
+         $(DEL) *.html
+         $(DEL) *.hh?
+         $(DEL) *.chw
+ 
+ install: htmlhelp.chm index.html
+ 
+ clean::
+         $(DEL) *.html
+         $(DEL) htmlhelp.chm
Index: openafs/doc/xml/QuickStartUnix/appendix.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/appendix.xml:1.1.4.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/appendix.xml	Wed May 13 22:26:41 2009
***************
*** 0 ****
--- 1,1676 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <appendix id="Legacy">
+   <title>Appendix B. Configuring Legacy Components</title>
+   
+   <para>This chapter describes how to configure a number of deprecated 
+   components in OpenAFS. Whilst these components are not recommended for sites
+   performing new installations, it is recognised that there are a number of
+   installations which have not yet transitioned from using these, for whom
+   continued provision of installation instructions my be useful</para>
+   
+   <sect1 id="KAS001">
+     <title>kaserver and Legacy Kerberos 4 Authentication</title>
+     
+     <para>This section contains instructions for installing server and client
+     machines in sites which use either the deprecated AFS 
+     <emphasis role="bold">kaserver</emphasis> or legacy Kerberos 4 
+     authentication systems</para>
+     
+     <para>This should be used in conjuction with the installation instructures
+     in earlier chapters, whose format it mirrors.</para>
+     
+     <sect2 id="KAS002">
+       <title>Background</title>
+       
+       <para>As detailed in the OpenAFS "No more DES" roadmap, OpenAFS is moving
+       away from the single DES based security models of both 
+       <emphasis role="bold">kaserver</emphasis> and external Kerberos 4 KDCs, 
+       in favour of using external, Kerberos 5 KDCs for authentication.</para>
+       
+       <para>AFS version 3 was designed and implemented during the late 80s and 
+       early 90s when the state of the art in distributed computer 
+       authentication and data security was Kerberos 4 and single DES. The 
+       RXKAD security class was specified to use a single DES key and the kauth 
+       authentication protocol is a derivative of MIT's Kerberos 4 protocol.
+       </para>
+ 
+       <para>For the better part of the last decade there has been concern 
+       regarding the cryptographic strength of the DES cipher when used as a 
+       building block within systems intended to prove authentication and/or 
+       data integrity and privacy. Kerberos 4 and RXKAD are not extensible and 
+       cannot negotiate non-DES key types. As a result efforts to migrate away 
+       from Kerberos 4 based authentication at higher risk organizations have 
+       been underway since the mid to late 90s. Ken Hornstein issued the first 
+       of his Kerberos 5 migration kits for AFS in May 1999. </para>
+       
+       <para>In March 2003, the continued use of single DES and kauth as the 
+       basis for OpenAFS security became a real-world threat when a significant 
+       Kerberos 4 crossrealm vulnerability was published. The OpenAFS community 
+       was notified in security advisory OPENAFS-SA-2003-001 which can be 
+       found at http://www.openafs.org/security.</para>
+ 
+       <para>As a result of the mounting concerns regarding the strength of 
+       DES, NIST announced in May 2003 the withdrawal of FIPS 43-3 
+       "Data Encryption Standard (DES)" as well as the associated FIPS 74 and 
+       FIPS 81. In other words, NIST announced that DES and its derivatives 
+       could no longer be used by the United States Government and should no 
+       longer by those that trust its lead.</para>
+ 
+       <para>In July 2003 MIT announced the end of life of the Kerberos 4 
+       protocol which is distributed for backward compatibility as part of the 
+       MIT Kerberos 5 distribution.</para>
+     </sect2>
+     <sect2 id="KAS003">
+       <title>Using this Appendix</title>
+       
+       <para>This appendix should be read in conjunction with the instructions
+       contained in the earlier chapters. It contains additions and in some 
+       cases, modifications, to the directions contained in those
+       chapters. It is organised into 3 main sections, corresponding to the
+       topics of the earlier chapters.
+       <orderedlist>
+         <listitem>
+           <para>Installing the First AFS Machine</para>
+         </listitem>
+         <listitem>
+           <para>Installing Additional Server Machines</para>
+         </listitem>
+         <listitem>
+           <para>Installing Additonal Client Machines</para>
+         </listitem>
+       </orderedlist></para>
+         
+       <para>There is an additional section on installing AFS login
+       functionality, which is relevant to all machines which are operating as
+       AFS clients</para>
+         
+       <para>In addition, some general substitions should be made
+       <itemizedlist>
+         <listitem>
+           <para>References to <emphasis role="bold">kinit</emphasis>and
+           <emphasis role="bold">aklog</emphasis> should be replaced with
+           a single call to <emphasis role="bold">klog</emphasis></para>
+           <para>For example
+ <programlisting>
+    # <emphasis role="bold">kinit admin</emphasis>
+    Password:  <replaceable>admin_passwd</replaceable>
+    # <emphasis role="bold">aklog</emphasis> 
+ </programlisting>
+           becomes
+ <programlisting>
+    # <emphasis role="bold">kinit admin</emphasis>
+    Password:  <replaceable>admin_passwd</replaceable>
+ </programlisting></para>
+         </listitem>
+       </itemizedlist></para>
+     </sect2>
+     <sect2 id="KAS003a">
+       <title>Installing the First AFS machine</title>
+         
+       <para>This section details changes to the installation procedure for the
+       first AFS machine which are required in order to use 
+       <emphasis role="bold">kaserver</emphasis> for authentication. As 
+       detailed above, new sites are strongly discouraged from deploying 
+       kaserver.</para>
+       
+       <para>The structure of this section follows the structure of the
+       earlier chapter.</para>
+         
+       <sect3 id="F">
+         <title>Overview: Installing Server Functionality</title>
+           
+         <para>In adddition to the items described, you must also create
+         the Authentication Server as a database server process. The procedure
+         for creating the initial security mechanisms is also changed.</para>
+       </sect3>
+         
+       <sect3 id="KAS006">
+         <title>Starting the kaserver Database Server Process</title>
+         <indexterm>
+           <primary>Authentication Server</primary>
+           <secondary>starting</secondary>
+           <tertiary>first AFS machine</tertiary>
+         </indexterm>
+         <indexterm>
+           <primary>first AFS machine</primary>
+           <secondary>Authentication Server</secondary>
+         </indexterm>
+         <indexterm>
+           <primary>kaserver process</primary>
+           <see>Authentication Server</see>
+         </indexterm>
+         <indexterm>
+           <primary>starting</primary>
+           <secondary>Authentication Server</secondary>
+           <tertiary>first AFS machine</tertiary>
+         </indexterm>
+           
+         <para>In addition to the database server processes described, you
+         must also use the <emphasis role="bold">bos create</emphasis> command
+         to create an entry for the following process, which runs on database
+         server machines only:
+         <itemizedlist>
+           <listitem>
+             <para>The Authentication Server 
+             (the <emphasis role="bold">kaserver</emphasis> process) maintains 
+             the Authentication Database</para>
+           </listitem>
+         </itemizedlist></para>
+           
+         <para>The following instructions include the 
+         <emphasis role="bold">-cell</emphasis> argument on all applicable
+         commands. Provide the cell name you assigned in 
+         <link linkend="HDRWQ51">Defining Cell Name and Membership for Server
+         Processes</link>. If a command appears on multiple lines, it is 
+         only for legibility. The following commands should run before any of
+         the <emphasis role="bold">bos create</emphasis> commands detailed in
+         <link linkend="HDRWQ52">Starting the Database Server Processes</link>.
+         </para>
+         
+         <orderedlist>
+           <listitem>
+             <para>
+             <indexterm>
+               <primary>commands</primary>
+               <secondary>bos create</secondary>
+             </indexterm>
+             <indexterm>
+               <primary>bos commands</primary>
+               <secondary>create</secondary>
+             </indexterm> 
+             Issue the <emphasis role="bold">bos create</emphasis> 
+             command to start the Authentication Server. The current
+             working directory is still 
+             <emphasis role="bold">/usr/afs/bin</emphasis>. 
+ <programlisting>
+    # <emphasis role="bold">./bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">kaserver simple /usr/afs/bin/kaserver</emphasis>  \
+  <emphasis role="bold">                 -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>   
+ </programlisting>
+             </para>
+ 
+             <para>You can safely ignore the messages that tell you to add 
+             Kerberos to the <emphasis role="bold">/etc/services</emphasis> 
+             file; AFS uses a default value that makes the addition 
+             unnecessary. You can also ignore messages about the failure of 
+             authentication.</para>
+           </listitem>
+           <listitem>
+             <para>Return to <link linkend="HDRWQ52">Starting the Database Server
+             Processes</link> and follow the remaining instructions</para>
+            </listitem>
+         </orderedlist>
+       </sect3>
+       <sect3 id="KAS007">
+         <title>Initialising Cell Security with kaserver </title>
+         
+         <note>
+           <para>The following instructions should be followed in place of
+           those in <link linkend="HDRWQ53">Initializing Cell Security</link>
+           </para>
+         </note>
+           
+         <para>Begin by creating the following two initial entries in the 
+         Authentication Database: 
+         <itemizedlist>
+           <listitem>
+             <para>A generic administrative account, called 
+             <emphasis role="bold">admin</emphasis> by convention. If you 
+             choose to assign a different name, substitute it throughout the 
+             remainder of this document.</para>
+               
+             <para>After you complete the installation of the first machine, 
+             you can continue to have all administrators use the 
+             <emphasis role="bold">admin</emphasis> account, or you can create 
+             a separate administrative account for each of them. The latter 
+             scheme implies somewhat more overhead, but provides a more 
+             informative audit trail for administrative operations.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The entry for AFS server processes, called 
+             <emphasis role="bold">afs</emphasis>. No user logs in under this
+             identity, but the Authentication Server's Ticket Granting Service 
+             (TGS) module uses the associated key to encrypt the server 
+             tickets that it grants to AFS clients for presentation to server 
+             processes during mutual authentication. (The chapter in the 
+             <emphasis>OpenAFS Administration Guide</emphasis> about cell 
+             configuration and administration describes the role of server 
+             encryption keys in mutual authentication.)</para>
+ 
+             <para>In Step <link linkend="AppendixLIWQ58">7</link>, you also 
+             place the initial AFS server encryption key into the <emphasis
+             role="bold">/usr/afs/etc/KeyFile</emphasis> file. The AFS server 
+             processes refer to this file to learn the server
+             encryption key when they need to decrypt server tickets.</para>
+           </listitem>
+         </itemizedlist>
+         </para>
+ 
+           <para>You also issue several commands that enable the new 
+           <emphasis role="bold">admin</emphasis> user to issue privileged
+           commands in all of the AFS suites.</para>
+ 
+           <para>The following instructions do not configure all of the security 
+           mechanisms related to the AFS Backup System. See the chapter in the 
+           <emphasis>OpenAFS Administration Guide</emphasis> about configuring 
+           the Backup System. 
+           <orderedlist>
+             <indexterm>
+               <primary>commands</primary>
+               <secondary>kas (interactive)</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>kas commands</primary>
+               <secondary>interactive mode, entering</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>interactive mode for kas</primary>
+               <secondary>entering</secondary>
+             </indexterm>
+             
+             <listitem>
+               <para>Enter <emphasis role="bold">kas</emphasis> interactive 
+               mode. Because the machine is in no-authorization checking
+               mode, include the <emphasis role="bold">-noauth</emphasis> flag
+               to suppress the Authentication Server's usual prompt for a
+               password. 
+ <programlisting>
+    # <emphasis role="bold">kas  -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis role="bold">-noauth</emphasis> 
+    ka&gt;
+ </programlisting> 
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>kas create</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>kas commands</primary>
+                 <secondary>create</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>server encryption key</primary>
+                 <secondary>in Authentication Database</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>creating</primary>
+                 <secondary>server encryption key</secondary>
+                 <tertiary>Authentication Database</tertiary>
+               </indexterm>
+               </para>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="AppendixLIWQ54" />Issue the 
+               <emphasis role="bold">kas create</emphasis> command to create 
+               Authentication Database entries called 
+               <emphasis role="bold">admin</emphasis> and 
+               <emphasis role="bold">afs</emphasis>.</para>
+ 
+               <para>Do not provide passwords on the command line. Instead 
+               provide them as <replaceable>afs_passwd</replaceable> and
+               <replaceable>admin_passwd</replaceable> in response to the 
+               <emphasis role="bold">kas</emphasis> command interpreter's
+               prompts as shown, so that they do not appear on the standard 
+               output stream.</para>
+ 
+               <para>You need to enter the <replaceable>afs_passwd</replaceable> 
+               string only in this step and in Step 
+               <link linkend="AppendixLIWQ58">7</link>, so provide a value that 
+               is as long and complex as possible, preferably including numerals,
+               punctuation characters, and both uppercase and lowercase letters. 
+               Also make the <replaceable>admin_passwd</replaceable> as
+               long and complex as possible, but keep in mind that 
+               administrators need to enter it often. Both passwords must be 
+               at least six characters long.</para>
+ 
+ <programlisting>
+    ka&gt; <emphasis role="bold">create afs</emphasis> 
+    initial_password:  <replaceable>afs_passwd</replaceable>
+    Verifying, please re-enter initial_password: <replaceable>afs_passwd</replaceable>
+    ka&gt; <emphasis role="bold">create admin</emphasis>
+    initial_password: <replaceable>admin_passwd</replaceable>
+    Verifying, please re-enter initial_password: <replaceable>admin_passwd</replaceable>
+ </programlisting>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>kas examine</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>kas commands</primary>
+                 <secondary>examine</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>displaying</primary>
+                 <secondary>server encryption key</secondary>
+                 <tertiary>Authentication Database</tertiary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="AppendixLIWQ55" />Issue the 
+               <emphasis role="bold">kas examine</emphasis> command to display 
+               the <emphasis role="bold">afs</emphasis> entry. The output 
+               includes a checksum generated by encrypting a constant with the 
+               server encryption key derived from the 
+               <replaceable>afs_passwd</replaceable> string. In 
+               Step <link linkend="AppendixLIWQ59">8</link> you issue the 
+               <emphasis role="bold">bos listkeys</emphasis> command to verify 
+               that the checksum in its output matches the checksum in this 
+               output. 
+ <programlisting>
+    ka&gt; <emphasis role="bold">examine afs</emphasis>
+    User data for afs
+     key (0) cksum is <replaceable>checksum</replaceable> . . .
+ </programlisting> 
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>kas setfields</secondary>
+               </indexterm> 
+               <indexterm>
+                 <primary>kas commands</primary>
+                 <secondary>setfields</secondary>
+               </indexterm> 
+               <indexterm>
+                 <primary>admin account</primary>
+                 <secondary>setting ADMIN flag on Auth. DB entry</secondary>
+               </indexterm>
+               </para>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="LIWQ56" />Issue the 
+               <emphasis role="bold">kas setfields</emphasis> command to turn 
+               on the <computeroutput>ADMIN</computeroutput> flag in the  
+               <emphasis role="bold">admin</emphasis> entry. This enables the
+               <emphasis role="bold">admin</emphasis> user to issue privileged 
+               <emphasis role="bold">kas</emphasis> commands. Then issue
+               the <emphasis role="bold">kas examine</emphasis> command to verify 
+               that the <computeroutput>ADMIN</computeroutput> flag
+               appears in parentheses on the first line of the output, as shown 
+               in the example. 
+ <programlisting>
+    ka&gt; <emphasis role="bold">setfields admin -flags admin</emphasis>
+    ka&gt; <emphasis role="bold">examine admin</emphasis> 
+    User data for admin (ADMIN) . . .
+ </programlisting> 
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>kas quit</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>kas commands</primary>
+                 <secondary>quit</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>interactive mode for kas</primary>
+                 <secondary>quitting</secondary>
+               </indexterm>
+               </para>
+             </listitem>
+ 
+             <listitem>
+               <para>Issue the <emphasis role="bold">kas quit</emphasis> 
+               command to leave <emphasis role="bold">kas</emphasis>
+               interactive mode. 
+ <programlisting>
+    ka&gt; <emphasis role="bold">quit</emphasis>
+ </programlisting>
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>bos adduser</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>bos commands</primary>
+                 <secondary>adduser</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>usr/afs/etc/UserList</primary>
+                 <see>UserList file</see>
+               </indexterm>
+               <indexterm>
+                 <primary>UserList file</primary>
+                 <secondary>first AFS machine</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>files</primary>
+                 <secondary>UserList</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>creating</primary>
+                 <secondary>UserList file entry</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>admin account</primary>
+                 <secondary>adding</secondary>
+                 <tertiary>to UserList file</tertiary>
+               </indexterm>
+               </para>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="AppendixLIWQ57" />Issue the 
+               <emphasis role="bold">bos adduser</emphasis> command to add the 
+               <emphasis role="bold">admin</emphasis> user to the 
+               <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. 
+               This enables the <emphasis role="bold">admin</emphasis> user to 
+               issue privileged <emphasis role="bold">bos</emphasis> and 
+               <emphasis role="bold">vos</emphasis> commands. 
+ <programlisting>
+    # <emphasis role="bold">./bos adduser</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">admin -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+ </programlisting>
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>bos addkey</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>bos commands</primary>
+                 <secondary>addkey</secondary>
+               </indexterm>
+               <indexterm>
+                 <primary>creating</primary>
+                 <secondary>server encryption key</secondary>
+                 <tertiary>KeyFile file</tertiary>
+               </indexterm>
+               <indexterm>
+                 <primary>server encryption key</primary>
+                 <secondary>in KeyFile file</secondary>
+               </indexterm>
+               </para>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="AppendixLIWQ58" />Issue the 
+               <emphasis role="bold">bos addkey</emphasis> command to define 
+               the AFS server encryption key in the 
+               <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file.
+               </para>
+ 
+               <para>Do not provide the password on the command line. Instead 
+               provide it as <replaceable>afs_passwd</replaceable> in
+               response to the <emphasis role="bold">bos</emphasis> command 
+               interpreter's prompts, as shown. Provide the same string as
+               in Step <link linkend="AppendixLIWQ54">2</link>.</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">./bos addkey</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-kvno 0 -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis
+               role="bold">-noauth</emphasis>
+    Input key: <replaceable>afs_passwd</replaceable>
+    Retype input key: <replaceable>afs_passwd</replaceable>
+ </programlisting>
+ 
+               <indexterm>
+                 <primary>commands</primary>
+                 <secondary>bos listkeys</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>bos commands</primary>
+                 <secondary>listkeys</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>displaying</primary>
+                 <secondary>server encryption key</secondary>
+                 <tertiary>KeyFile file</tertiary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="AppendixLIWQ59" />Issue the 
+               <emphasis role="bold">bos listkeys</emphasis> command to verify 
+               that the checksum for the new key in the 
+               <emphasis role="bold">KeyFile</emphasis> file is the same as the 
+               checksum for the key in the Authentication Database's 
+               <emphasis role="bold">afs</emphasis> entry, which you displayed 
+               in Step <link linkend="AppendixLIWQ55">3</link>. 
+ <programlisting>
+    # <emphasis role="bold">./bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-cell</emphasis> &lt;<replaceable>ce
+ ll name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+    key 0 has cksum <replaceable>checksum</replaceable>    
+ </programlisting></para>
+ 
+               <para>You can safely ignore any error messages indicating that 
+               <emphasis role="bold">bos</emphasis> failed to get tickets
+               or that authentication failed.</para>
+ 
+               <para>If the keys are different, issue the following commands, 
+               making sure that the <replaceable>afs_passwd</replaceable>
+               string is the same in each case. The 
+               <replaceable>checksum</replaceable> strings reported by the 
+               <emphasis role="bold">kas examine</emphasis> and 
+               <emphasis role="bold">bos listkeys</emphasis> commands must 
+               match; if they do not, repeat these instructions until they do, 
+               using the <emphasis role="bold">-kvno</emphasis> argument to 
+               increment the key version number each time.</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">./kas  -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis role="bold">-noauth</emphasis> 
+    ka&gt; <emphasis role="bold">setpassword afs -kvno 1</emphasis> 
+    new_password: <replaceable>afs_passwd</replaceable>
+    Verifying, please re-enter initial_password: <replaceable>afs_passwd</replaceable>
+    ka&gt; <emphasis role="bold">examine afs</emphasis>
+    User data for afs
+     key (1) cksum is <replaceable>checksum</replaceable> . . .
+    ka&gt; <emphasis role="bold">quit</emphasis>
+    # <emphasis role="bold">./bos addkey</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-kvno 1 -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+               role="bold">-noauth</emphasis> 
+    Input key: <replaceable>afs_passwd</replaceable>
+    Retype input key: <replaceable>afs_passwd</replaceable>
+    # <emphasis role="bold">./bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+               role="bold">-noauth</emphasis>
+    key 1 has cksum <replaceable>checksum</replaceable>
+ </programlisting>
+             </listitem>
+             <listitem>
+               <para>Proceed to
+               <link linkend="HDRWQ53a">Initializing the Protection Database</link>
+               to continue with the installation process</para>
+             </listitem>
+           </orderedlist></para>
+         </sect3>
+       </sect2>
+       <sect2 id="KAS009">
+         <title>Installing Additional Server Machines</title>
+         
+         <sect3 id="KAS010">
+           <title>Starting the Authenticxation Service</title>
+           <indexterm>
+             <primary>Authentication Server</primary>
+             <secondary>starting</secondary>
+             <tertiary>new db-server machine</tertiary>
+           </indexterm>
+           <indexterm>
+             <primary>starting</primary>
+             <secondary>Authentication Server</secondary>
+             <tertiary>new db-server machine</tertiary>
+           </indexterm>
+           <para>In addition to the instructions in the main guide, you must
+           also start the Authentication Server on the new database machine,
+           as detailed below</para>
+           
+           <orderedlist>
+             <listitem>
+               <para><anchor id="LIWQ118" />Start the Authentication Server 
+               (the <emphasis role="bold">kaserver</emphasis> process).
+ <programlisting>
+    % <emphasis role="bold">bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">kaserver simple /usr/afs/bin/kaserver</emphasis>
+ </programlisting> </para>
+            </listitem>
+            
+            <listitem>
+              <para>Return to <link linkend="LIWQ119">starting the backup server</link></para>
+            </listitem>
+           </orderedlist>
+         </sect3>
+       </sect2>
+ 
+       <sect2 id="KAS011">  
+         <title>Enabling AFS login with kaserver</title>
+         <para>The authentication system of every machine should be modified so
+         that users obtain an AFS token as they log into the local file system.
+         Using AFS is simpler and more convenient for your users if you make the
+         modifications on all client machines. Otherwise users must perform a two
+         step login procedure (login to the local system, and then issue the
+         <emphasis role="bold">klog</emphasis> command.</para>
+         
+         <para>For convenience, the following sections group this procedure by
+         system type. Proceed to the appropriate section.
+           <itemizedlist>
+             <listitem>
+               <para>
+                 <link linkend="KAS012">Enabling AFS Login on AIX Systems</link>
+               </para>
+             </listitem>
+             <listitem>
+               <para>
+                 <link linkend="KAS013">Enabling AFS Login on HP-UX Systems</link>
+               </para>
+             </listitem>
+             <listitem>
+               <para>
+                 <link linkend="KAS014">Enabling AFS Login on IRIX Systems</link>
+               </para>
+             </listitem>
+             <listitem>
+               <para>
+                 <link linkend="KAS015">Enabling AFS Login on Linux Systems</link>
+               </para>
+             </listitem>
+             <listitem>
+               <para>
+                 <link linkend="KAS016">Enabling AFS login on Solaris Systems</link>
+               </para>
+             </listitem>
+           </itemizedlist>
+         </para>
+       </sect2>
+       <sect2 id="KAS012">
+         <title>Enabling kaserver based AFS login</title>
+                 
+         <para>Now incorporate AFS into the AIX secondary authentication system. 
+           <orderedlist>
+             <listitem>
+               <para>Issue the <emphasis role="bold">ls</emphasis> command to 
+               verify that the <emphasis role="bold">afs_dynamic_auth</emphasis> 
+               and <emphasis role="bold">afs_dynamic_kerbauth</emphasis> 
+               programs are installed in the local 
+               <emphasis role="bold">/usr/vice/etc</emphasis> directory. 
+ <programlisting>
+    # <emphasis role="bold">ls /usr/vice/etc</emphasis>   
+ </programlisting>
+               </para>
+ 
+               <para>If the files do not exist, unpack the 
+               OpenAFS Binary Distribution for AIX (if it is not already), 
+               change directory as indicated, and copy them.</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/rs_aix42/root.client/usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp  -p  afs_dynamic*  /usr/vice/etc</emphasis>
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Edit the local 
+               <emphasis role="bold">/etc/security/user</emphasis> file, making 
+               changes to the indicated stanzas:
+                 <itemizedlist>
+                   <listitem>
+                     <para>In the default stanza, set the 
+                     <computeroutput>registry</computeroutput> attribute to 
+                     <emphasis role="bold">DCE</emphasis> (not to 
+                     <emphasis role="bold">AFS</emphasis>), as follows: 
+ <programlisting>
+    registry = DCE
+ </programlisting>
+                     </para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>In the default stanza, set the 
+                     <computeroutput>SYSTEM</computeroutput> attribute as 
+                     indicated.</para>
+ 
+                     <para>If the machine is an AFS client only, set the 
+                     following value:</para>
+ <programlisting>
+    SYSTEM = "AFS OR (AFS[UNAVAIL] AND compat[SUCCESS])"   
+ </programlisting>
+ 
+                     <para>If the machine is both an AFS and a DCE client, 
+                     set the following value (it must appear on a single line in
+                     the file):</para>
+ <programlisting>
+    SYSTEM = "DCE OR DCE[UNAVAIL] OR AFS OR (AFS[UNAVAIL]  \
+        AND compat[SUCCESS])"
+ </programlisting>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>In the <computeroutput>root</computeroutput> 
+                     stanza, set the <computeroutput>registry</computeroutput>
+                     attribute as follows. It enables the local superuser 
+                     <emphasis role="bold">root</emphasis> to log into the local
+                     file system only, based on the password listed in the 
+                     local password file. 
+ <programlisting>
+    root:
+          registry = files
+ </programlisting>
+                     </para>
+                   </listitem>
+                 </itemizedlist>
+               </para>
+             </listitem>
+ 
+             <listitem>
+               <para>Edit the local 
+               <emphasis role="bold">/etc/security/login.cfg</emphasis> file, 
+               creating or editing the indicated stanzas: 
+                 <itemizedlist>
+                   <listitem>
+                     <para>In the <computeroutput>DCE</computeroutput> stanza, 
+                     set the <computeroutput>program</computeroutput>
+                     attribute as follows.</para>
+ 
+                     <para>If you use the AFS Authentication Server 
+                     (<emphasis role="bold">kaserver</emphasis> process):</para>
+ <programlisting>
+    DCE:
+         program = /usr/vice/etc/afs_dynamic_auth   
+ </programlisting>
+ 
+                     <para>If you use a Kerberos v4 implementation of AFS 
+                     authentication:</para>
+ 
+ <programlisting>
+    DCE:
+         program = /usr/vice/etc/afs_dynamic_kerbauth
+ </programlisting>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>In the <computeroutput>AFS</computeroutput> stanza, 
+                     set the <computeroutput>program</computeroutput>
+                     attribute as follows.</para>
+ 
+                     <para>If you use the AFS Authentication Server 
+                     (<emphasis role="bold">kaserver</emphasis> process):</para>
+ <programlisting>
+    AFS:
+         program = /usr/vice/etc/afs_dynamic_auth   
+ </programlisting>
+ 
+                     <para>If you use a Kerberos v4 implementation of AFS 
+                     authentication:</para>
+ <programlisting>
+    AFS:
+         program = /usr/vice/etc/afs_dynamic_kerbauth
+ </programlisting>
+                 </listitem>
+                 </itemizedlist>
+               </para>
+             </listitem>
+             <listitem>
+               <para>Proceed to 
+               <link linkend="HDRWQ50">Starting the BOS Server</link>,
+               if you are installing your first file server machine;
+               <link linkend="HDRWQ108">Starting Server Programs</link>, 
+               if you are installing an additional file server machine; or
+               <link linkend="HDRWQ145">Loading and Creating Client Files</link>
+               if you are installating a client</para>
+             </listitem>
+           </orderedlist>
+         </para>
+       </sect2>
+       <sect2 id="KAS013">
+         <title>Enabling kaserver based AFS Login on HP-UX systems</title>
+         
+         <para>At this point you incorporate AFS into the operating system's 
+         Pluggable Authentication Module (PAM) scheme. PAM integrates all 
+         authentication mechanisms on the machine, including login, to provide 
+         the security infrastructure for authenticated access to and from the 
+         machine.</para>
+ 
+         <para>Explaining PAM is beyond the scope of this document. It is 
+         assumed that you understand the syntax and meanings of settings in the 
+         PAM configuration file (for example, how the 
+         <computeroutput>other</computeroutput> entry works, the effect of
+         marking an entry as <computeroutput>required</computeroutput>, 
+         <computeroutput>optional</computeroutput>, or
+         <computeroutput>sufficient</computeroutput>, and so on).</para>
+ 
+         <para>The following instructions explain how to alter the entries in 
+         the PAM configuration file for each service for which you
+         wish to use AFS authentication. Other configurations possibly also 
+         work, but the instructions specify the recommended and
+         tested configuration.</para>
+ 
+         <note>
+           <para>The instructions specify that you mark each entry as 
+           <computeroutput>optional</computeroutput>. However, marking some
+           modules as optional can mean that they grant access to the 
+           corresponding service even when the user does not meet all of the
+           module's requirements. In some operating system revisions, for 
+           example, if you mark as optional the module that controls
+           login via a dial-up connection, it allows users to login without 
+           providing a password. See the <emphasis>OpenAFS Release
+           Notes</emphasis> for a discussion of any limitations that apply to 
+           this operating system.</para>
+ 
+           <para>Also, with some operating system versions you must install 
+           patches for PAM to interact correctly with certain
+           authentication programs. For details, see the 
+           <emphasis>OpenAFS Release Notes</emphasis>.</para>
+         </note>
+ 
+         <para>The recommended AFS-related entries in the PAM configuration 
+         file make use of one or more of the following three
+         attributes. 
+         <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>try_first_pass</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This is a standard PAM attribute that can be included on 
+               entries after the first one for a service; it directs
+               the module to use the password that was provided to the first 
+               module. For the AFS module, it means that AFS
+               authentication succeeds if the password provided to the module 
+               listed first is the user's correct AFS password. For
+               further discussion of this attribute and its alternatives, see 
+               the operating system's PAM documentation.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>ignore_root</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This attribute, specific to the AFS PAM module, directs it 
+               to ignore not only the local superuser <emphasis
+               role="bold">root</emphasis>, but also any user with UID 0 
+               (zero).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>setenv_password_expires</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This attribute, specific to the AFS PAM module, sets the 
+               environment variable PASSWORD_EXPIRES to the expiration
+               date of the user's AFS password, which is recorded in the 
+               Authentication Database.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist>
+         </para>
+ 
+         <para>Perform the following steps to enable AFS login. 
+         <orderedlist>
+           <listitem>
+             <para>Unpack the OpenAFS Binary Distribution for HP-UX into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory, if it is 
+             not already.
+             Then change directory as indicated. 
+ <programlisting>
+    # <emphasis role="bold">cd /usr/lib/security</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS authentication library file to the 
+             <emphasis role="bold">/usr/lib/security</emphasis> directory. Then
+             create a symbolic link to it whose name does not mention the 
+             version. Omitting the version eliminates the need to edit
+             the PAM configuration file if you later update the library 
+             file.</para>
+ 
+             <para>If you use the AFS Authentication Server 
+             (<emphasis role="bold">kaserver</emphasis> process) in the cell:</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">cp /tmp/afsdist/hp_ux110/lib/pam_afs.so.1  .</emphasis>
+    # <emphasis role="bold">ln -s  pam_afs.so.1  pam_afs.so</emphasis>   
+ </programlisting>
+ 
+             <para>If you use a Kerberos implementation of AFS authentication:</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">cp /tmp/afsdist/hp_ux110/lib/pam_afs.krb.so.1   .</emphasis>
+    # <emphasis role="bold">ln -s pam_afs.krb.so.1 pam_afs.so</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the 
+             <computeroutput>Authentication management</computeroutput> 
+             section of the HP-UX PAM configuration file,
+             <emphasis role="bold">/etc/pam.conf</emphasis> by convention. The 
+             entries in this section have the value
+             <computeroutput>auth</computeroutput> in their second field.</para>
+ 
+             <para>First edit the standard entries, which refer to the 
+             HP-UX PAM module (usually, the file <emphasis
+             role="bold">/usr/lib/security/libpam_unix.1</emphasis>) in their 
+             fourth field. For each service for which you want to
+             use AFS authentication, edit the third field of its entry to read 
+             <computeroutput>optional</computeroutput>. The
+             <emphasis role="bold">pam.conf</emphasis> file in the HP-UX 
+             distribution usually includes standard entries for the
+             <emphasis role="bold">login</emphasis> and 
+             <emphasis role="bold">ftp</emphasis> services, for instance.</para>
+ 
+             <para>If there are services for which you want to use AFS 
+             authentication, but for which the <emphasis
+             role="bold">pam.conf</emphasis> file does not already include a 
+             standard entry, you must create that entry and place the
+             value <computeroutput>optional</computeroutput> in its third field. 
+             For instance, the HP-UX <emphasis role="bold">pam.conf</emphasis> 
+             file does not usually include standard entries for the <emphasis
+             role="bold">remsh</emphasis> or 
+             <emphasis role="bold">telnet</emphasis> services.</para>
+ 
+             <para>Then create an AFS-related entry for each service, placing it 
+             immediately below the standard entry. The following
+             example shows what the 
+             <computeroutput>Authentication Management</computeroutput> section 
+             looks like after you have you
+             edited or created entries for the services mentioned previously. 
+             Note that the example AFS entries appear on two lines
+             only for legibility.</para>
+ 
+ <programlisting>
+    login   auth  optional  /usr/lib/security/libpam_unix.1
+    login   auth  optional  /usr/lib/security/pam_afs.so      \
+          try_first_pass  ignore_root  setenv_password_expires
+    ftp     auth  optional  /usr/lib/security/libpam_unix.1
+    ftp     auth  optional  /usr/lib/security/pam_afs.so      \
+          try_first_pass  ignore_root
+    remsh   auth  optional  /usr/lib/security/libpam_unix.1
+    remsh   auth  optional  /usr/lib/security/pam_afs.so      \
+          try_first_pass  ignore_root            
+    telnet  auth  optional  /usr/lib/security/libpam_unix.1
+    telnet  auth  optional  /usr/lib/security/pam_afs.so      \
+          try_first_pass  ignore_root  setenv_password_expires
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>If you use the Common Desktop Environment (CDE) on the 
+             machine and want users to obtain an AFS token as they log
+             in, also add or edit the following four entries in the 
+             <computeroutput>Authentication management</computeroutput>
+             section. Note that the AFS-related entries appear on two lines 
+             here only for legibility. 
+ <programlisting>
+    dtlogin   auth  optional  /usr/lib/security/libpam_unix.1
+    dtlogin   auth  optional  /usr/lib/security/pam_afs.so     \
+          try_first_pass  ignore_root
+    dtaction  auth  optional  /usr/lib/security/libpam_unix.1
+    dtaction  auth  optional  /usr/lib/security/pam_afs.so     \
+          try_first_pass  ignore_root
+ </programlisting></para>
+           </listitem>
+           
+           <listitem>
+             <para>Proceed to 
+             <link linkend="HDRWQ50">Starting the BOS Server</link> if you
+             are installing your first file server;
+             <link linkend="HDRWQ108">Starting Server Programs</link> if you
+             are installing an additional file server machine; or
+             <link linkend="HDRWQ145">Loading and Creating Client Files.</link> 
+             if you are installing a client.</para>
+           </listitem>
+         </orderedlist>
+         </para>
+       </sect2>
+       <sect2 id="KAS014">
+         <title>Enabling kaserver based AFS Login on IRIX Systems</title>
+         
+         <para>The standard IRIX command-line 
+         <emphasis role="bold">login</emphasis> program and the graphical 
+         <emphasis role="bold">xdm</emphasis> login program both automatically 
+         grant an AFS token when AFS is incorporated into the machine's
+         kernel. However, some IRIX distributions use another login utility by 
+         default, and it does not necessarily incorporate the required AFS 
+         modifications. If that is the case, you must disable the default 
+         utility if you want AFS users to obtain AFS tokens at login. For 
+         further discussion, see the 
+         <emphasis>OpenAFS Release Notes</emphasis>.</para>
+ 
+         <para>If you configure the machine to use an AFS-modified login 
+         utility, then the <emphasis role="bold">afsauthlib.so</emphasis> and 
+         <emphasis role="bold">afskauthlib.so</emphasis> files (included in the 
+         AFS distribution) must reside in the 
+         <emphasis role="bold">/usr/vice/etc</emphasis> directory. Issue the 
+         <emphasis role="bold">ls</emphasis> command to verify.</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">ls /usr/vice/etc</emphasis>   
+ </programlisting>
+ 
+         <para>If the files do not exist, unpack the OpenAFS Binary Distribution
+         for IRIX (if it is not already), change directory as indicated, and copy
+         them.</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/sgi_65/root.client/usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp  -p  *authlib*  /usr/vice/etc</emphasis>   
+ </programlisting>
+ 
+         <para>After taking any necessary action, proceed to 
+         <link linkend="HDRWQ50">Starting the BOS Server</link> if you
+         are installing your first file server;
+         <link linkend="HDRWQ108">Starting Server Programs</link> if you
+         are installing an additional file server machine; or
+         <link linkend="HDRWQ145">Loading and Creating Client Files</link> 
+         if you are installing a client.</para>
+       </sect2>
+       <sect2 id="KAS015">
+         <title>Enabling kaserver based AFS Login on Linux Systems</title>
+         
+         <para>At this point you incorporate AFS into the operating system's 
+         Pluggable Authentication Module (PAM) scheme. PAM integrates all 
+         authentication mechanisms on the machine, including login, to provide 
+         the security infrastructure for authenticated access to and from the 
+         machine.</para>
+ 
+         <para>Explaining PAM is beyond the scope of this document. It is 
+         assumed that you understand the syntax and meanings of settings in the 
+         PAM configuration file (for example, how the 
+         <computeroutput>other</computeroutput> entry works, the effect of
+         marking an entry as <computeroutput>required</computeroutput>, 
+         <computeroutput>optional</computeroutput>, or
+         <computeroutput>sufficient</computeroutput>, and so on).</para>
+ 
+         <para>The following instructions explain how to alter the entries in 
+         the PAM configuration file for each service for which you
+         wish to use AFS authentication. Other configurations possibly also 
+         work, but the instructions specify the recommended and
+         tested configuration.</para>
+ 
+         <para>The recommended AFS-related entries in the PAM configuration 
+         file make use of one or more of the following three
+         attributes. 
+         <variablelist>
+           <title>Authentication Management</title>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>try_first_pass</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This is a standard PAM attribute that can be included on 
+               entries after the first one for a service; it directs
+               the module to use the password that was provided to the first 
+               module. For the AFS module, it means that AFS
+               authentication succeeds if the password provided to the module 
+               listed first is the user's correct AFS password. For
+               further discussion of this attribute and its alternatives, see 
+               the operating system's PAM documentation.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>ignore_root</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This attribute, specific to the AFS PAM module, directs it 
+               to ignore not only the local superuser <emphasis
+               role="bold">root</emphasis>, but also any user with UID 
+               0 (zero).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>ignore_uid </computeroutput><emphasis>uid</emphasis></emphasis></term>
+ 
+             <listitem>
+               <para>This option is an extension of the "ignore_root" switch. 
+               The additional parameter is a limit. Users with a uid
+               up to the given parameter are ignored by 
+               <emphasis>pam_afs.so</emphasis>. Thus, a system administrator 
+               still has the
+               opportunity to add local user accounts to his system by choosing 
+               between "low" and "high" user ids. An example
+               /etc/passwd file for "ignore_uid 100" may have entries like these: 
+ <programlisting>
+         .
+         .
+ afsuserone:x:99:100::/afs/afscell/u/afsuserone:/bin/bash
+ afsusertwo:x:100:100::/afs/afscell/u/afsusertwo:/bin/bash
+ localuserone:x:101:100::/home/localuserone:/bin/bash
+ localusertwo:x:102:100::/home/localusertwo:/bin/bash
+         .
+         .
+ </programlisting> 
+               AFS accounts should be locked in the file /etc/shadow like this: 
+ <programlisting>
+         .
+         .
+ afsuserone:!!:11500:0:99999:7:::
+ afsusertwo:!!:11500:0:99999:7:::
+ localuserone:&lt;thelocaluserone'skey&gt;:11500:0:99999:7:::
+ localusertwo:&lt;thelocalusertwo'skey&gt;:11500:0:99999:7:::
+         .
+         .
+ </programlisting> 
+               There is no need to store a local key in this file since the AFS 
+               password is sent and verfied at the AFS cell server!</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>setenv_password_expires</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This attribute, specific to the AFS PAM module, sets the 
+               environment variable PASSWORD_EXPIRES to the expiration
+               date of the user's AFS password, which is recorded in the 
+               Authentication Database.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>set_token</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Some applications don't call 
+               <emphasis>pam_setcred()</emphasis> in order to retrieve the 
+               appropriate credentials (here the AFS token) for their session. 
+               This switch sets the credentials already in
+               <emphasis>pam_sm_authenticate()</emphasis> obsoleting a call to 
+               <emphasis>pam_setcred()</emphasis>. <emphasis
+               role="bold">Caution: Don't use this switch for applications which 
+               do call <emphasis>pam_setcred()</emphasis>!</emphasis> One 
+               example for an application not calling
+               <emphasis>pam_setcred()</emphasis> are older versions of the 
+               samba server. Nevertheless, using applications with
+               working pam session management is recommended as this setup 
+               conforms better with the PAM definitions.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>refresh_token</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This options is identical to "set_token" except that no 
+               new PAG is generated. This is necessary to handle
+               processes like xlock or xscreensaver. It is not enough to just
+               unlock the screen for a user who
+               reactivated his session by typing in the correct AFS password, but 
+               one may also need fresh tokens with a full lifetime in
+               order to work on, and the new token must be refreshed in the 
+               already existing PAG for the processes that have been
+               started. This is achieved using this option.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>use_klog</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Activating this switch causes authentication to be done by 
+               calling the external program "klog". One program requiring
+               this is for example <emphasis>kdm</emphasis> of KDE 2.x.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>dont_fork</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Usually, the password verification and token establishment 
+               is performed in a sub process. Using this option pam_afs does not 
+               fork and performs all actions in a single process. 
+               <emphasis role="bold">Only use this option in cases where you 
+               notice serious problems caused by the sub process.</emphasis> 
+               This option has been developed in respect to
+               the "mod_auth_pam"-project (see also 
+               <ulink url="http://pam.sourceforge.net/mod_auth_pam/">mod_auth_pam</ulink>). 
+               The mod_auth_pam module enables PAM authentication for the apache 
+               http server package.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist> 
+         <variablelist>
+           <title>Session Management</title>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>no_unlog</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>Normally the tokens are deleted (in memory) after the 
+               session ends. Using this option causes the tokens to be left
+               untouched. <emphasis role="bold">This behaviour was the default 
+               in pam_afs until openafs-1.1.1!</emphasis></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>remainlifetime</computeroutput> <emphasis>sec</emphasis></emphasis></term>
+ 
+             <listitem>
+               <para>The tokens are kept active for <emphasis>sec</emphasis> 
+               seconds before they are deleted. X display managers i.e.
+               are used to inform the applications started in the X session 
+               before the logout and then end themselves. If the token
+               was deleted immediately the applications would have no chance 
+               to write back their settings to i.e. the user's AFS home
+               space. This option may help to avoid the problem.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>Perform the following steps to enable AFS login. 
+         <orderedlist>
+           <listitem>
+             <para>Unpack the OpenAFS Binary Distribution for Linux into the 
+             <emphasis role="bold">/tmp/afsdist/</emphasis> directory, if it is 
+             not already.
+             Then change to the directory for PAM modules, which depends on which Linux distribution you are using.</para>
+ 
+             <para>If you are using a Linux distribution from Red Hat Software:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cd /lib/security</emphasis>
+ </programlisting>
+ 
+             <para>If you are using another Linux distribution:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cd /usr/lib/security</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS authentication library file to the 
+             directory to which you changed in the previous step.
+             Create a symbolic link whose name does not mention the version. 
+             Omitting the version eliminates the need to edit the PAM
+             configuration file if you later update the library file.</para>
+ 
+             <para>If you use the AFS Authentication Server 
+             (<emphasis role="bold">kaserver</emphasis> process):</para>
+ <programlisting>
+    # <emphasis role="bold">cp /cdrom/i386_linux22/lib/pam_afs.so.1  .</emphasis>
+    # <emphasis role="bold">ln -s pam_afs.so.1 pam_afs.so</emphasis>
+ </programlisting>
+ 
+             <para>If you use a Kerberos implementation of AFS 
+             authentication:</para>
+ <programlisting>
+    # <emphasis role="bold">cp /cdrom/i386_linux22/lib/pam_afs.krb.so.1   .</emphasis>
+    # <emphasis role="bold">ln -s pam_afs.krb.so.1 pam_afs.so</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>For each service with which you want to use AFS 
+             authentication, insert an entry for the AFS PAM module into the
+             <computeroutput>auth</computeroutput> section of the service's 
+             PAM configuration file. (Linux uses a separate
+             configuration file for each service, unlike some other operating 
+             systems which list all services in a single file.) Mark
+             the entry as <computeroutput>sufficient</computeroutput> in the 
+             second field.</para>
+ 
+             <para>Place the AFS entry below any entries that impose conditions 
+             under which you want the service to fail for a user
+             who does not meet the entry's requirements. Mark these entries 
+             <computeroutput>required</computeroutput>. Place the AFS
+             entry above any entries that need to execute only if AFS 
+             authentication fails.</para>
+ 
+             <para>Insert the following AFS entry if using the Red Hat 
+             distribution:</para>
+ <programlisting>
+    auth  sufficient  /lib/security/pam_afs.so   try_first_pass  ignore_root
+ </programlisting>
+ 
+             <para>Insert the following AFS entry if using another 
+             distribution:</para>
+ 
+ <programlisting>
+    auth  sufficient  /usr/lib/security/pam_afs.so  try_first_pass  ignore_root
+ </programlisting>
+ 
+             <para>Check the PAM config files also for "session" entries. If 
+             there are lines beginning with "session" then please
+             insert this line too:</para>
+ 
+ <programlisting>
+    session  optional  /lib/security/pam_afs.so
+ </programlisting>
+ 
+             <para>or</para>
+ 
+ <programlisting>
+    session  optional  /usr/lib/security/pam_afs.so
+ </programlisting>
+ 
+             <para>This guarantees that the user's tokens are deleted from 
+             memory after his session ends so that no other user
+             coincidently gets those tokens without authorization! The 
+             following examples illustrate the recommended configuration of
+             the configuration file for several services: 
+               <variablelist>
+                 <title>Authentication Management</title>
+ 
+                 <varlistentry>
+                   <term>(<emphasis role="bold">/etc/pam.d/login</emphasis>)</term>
+ 
+                   <listitem>
+                     <para>
+ <programlisting>
+    #%PAM-1.0
+    auth      required   /lib/security/pam_securetty.so
+    auth      required   /lib/security/pam_nologin.so
+    auth      sufficient /lib/security/pam_afs.so try_first_pass ignore_root
+    #                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    #This enables AFS authentication for every user but root
+    auth      required   /lib/security/pam_pwdb.so shadow nullok
+    account   required   /lib/security/pam_pwdb.so
+    password  required   /lib/security/pam_cracklib.so
+    password  required   /lib/security/pam_pwdb.so shadow nullok use_authtok
+    session   optional   /lib/security/pam_afs.so
+    #Make sure tokens are deleted after the user logs out
+    session   required   /lib/security/pam_pwdb.so
+ </programlisting>
+                     </para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term>(<emphasis role="bold">/etc/pam.d/samba</emphasis>)</term>
+ 
+                   <listitem>
+                     <para>
+ <programlisting>
+    auth       required     /lib/security/pam_afs.so ignore_uid 100 set_token
+    #                                                ^^^^^^^^^^^^^^^^^^^^^^^^
+    #Here, users with uid&gt;100 are considered to belong to the AFS and users
+    #with uid&lt;=100 are ignored by pam_afs. The token is retrieved already in
+    #pam_sm_authenticate() (this is an example pam config for a samba version
+    #that does not call pam_setcred(), it also does no sense to include session
+    #entries here since they would be ignored by this version of samba ).
+    account    required     /lib/security/pam_pwdb.so
+ </programlisting>
+                     </para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term>(<emphasis role="bold">/etc/pam.d/xscreensaver</emphasis>)</term>
+ 
+                   <listitem>
+                     <para>
+ <programlisting>
+    auth       sufficient   /lib/security/pam_afs.so ignore_uid 100 refresh_token
+    #                                                               ^^^^^^^^^^^^^
+    #Avoid generating a new PAG for the new tokens, use the already existing PAG and
+    #establish a fresh token in it.
+    auth       required     /lib/security/pam_pwdb.so try_first_pass
+ </programlisting>
+                     </para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term>(<emphasis role="bold">/etc/pam.d/httpd</emphasis>)</term>
+ 
+                   <listitem>
+                     <para>
+ <programlisting>
+    auth       required   /lib/security/pam_afs.so ignore_uid 100 dont_fork
+    #                                                             ^^^^^^^^^
+    #Don't fork for the verification of the password.
+ </programlisting>
+                     </para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist>
+               <variablelist>
+                 <title>Session Management</title>
+ 
+                 <varlistentry>
+                   <term>(<emphasis role="bold">/etc/pam.d/su</emphasis>)</term>
+ 
+                   <listitem>
+                     <para>
+ <programlisting>
+    auth       sufficient   /lib/security/pam_afs.so ignore_uid 100
+    auth       required     /lib/security/pam_pwdb.so try_first_pass
+    account    required     /lib/security/pam_pwdb.so
+    password   required     /lib/security/pam_cracklib.so
+    password   required     /lib/security/pam_pwdb.so use_authtok
+    session    required     /lib/security/pam_pwdb.so
+    session    optional     /lib/security/pam_afs.so no_unlog
+    #                                                ^^^^^^^^
+    #Don't delete the token in this case, since the user may still
+    #need it (for example if somebody logs in and changes to root
+    #afterwards he may still want to access his home space in AFS).
+    session    required     /lib/security/pam_login_access.so
+    session    optional     /lib/security/pam_xauth.so
+ </programlisting>
+                     </para>
+                   </listitem>
+                 </varlistentry>
+ 
+                 <varlistentry>
+                   <term>(<emphasis role="bold">/etc/pam.d/xdm</emphasis>)</term>
+ 
+                   <listitem>
+                     <para>
+ <programlisting>
+    auth       required     /lib/security/pam_nologin.so
+    auth       required     /lib/security/pam_login_access.so
+    auth       sufficient   /lib/security/pam_afs.so ignore_uid 100 use_klog
+    auth       required     /lib/security/pam_pwdb.so try_first_pass
+    account    required     /lib/security/pam_pwdb.so
+    password   required     /lib/security/pam_cracklib.so
+    password   required     /lib/security/pam_pwdb.so shadow nullok use_authtok
+    session    optional     /lib/security/pam_afs.so remainlifetime 10
+    #                                                ^^^^^^^^^^^^^^^^^
+    #Wait 10 seconds before deleting the AFS tokens in order to give
+    #the programs of the X session some time to save their settings
+    #to AFS.
+    session    required     /lib/security/pam_pwdb.so
+ </programlisting>
+                      </para>
+                   </listitem>
+                 </varlistentry>
+               </variablelist></para>
+           </listitem>
+           <listitem>        
+             <para>After taking any necessary action, proceed to 
+             <link linkend="HDRWQ50">Starting the BOS Server</link> if you
+             are installing your first file server;
+             <link linkend="HDRWQ108">Starting Server Programs</link> if you
+             are installing an additional file server machine; or
+             <link linkend="HDRWQ145">Loading and Creating Client Files</link> if you are installing a client.
+             </para>
+           </listitem>
+         </orderedlist>
+       </para>
+     </sect2>
+     <sect2 id="KAS016">
+       <title>Enabling kaserver based AFS Login on Solaris Systems</title>
+       
+       <para>At this point you incorporate AFS into the operating system's 
+       Pluggable Authentication Module (PAM) scheme. PAM
+       integrates all authentication mechanisms on the machine, including 
+       login, to provide the security infrastructure for
+       authenticated access to and from the machine.</para>
+ 
+       <para>Explaining PAM is beyond the scope of this document. It is 
+       assumed that you understand the syntax and meanings of
+       settings in the PAM configuration file (for example, how the 
+       <computeroutput>other</computeroutput> entry works, the effect of
+       marking an entry as <computeroutput>required</computeroutput>, 
+       <computeroutput>optional</computeroutput>, or
+       <computeroutput>sufficient</computeroutput>, and so on).</para>
+ 
+       <para>The following instructions explain how to alter the entries in the 
+       PAM configuration file for each service for which you
+       wish to use AFS authentication. Other configurations possibly also 
+       work, but the instructions specify the recommended and
+       tested configuration.</para>
+ 
+       <note>
+         <para>The instructions specify that you mark each entry as 
+         <computeroutput>optional</computeroutput>. However, marking some
+         modules as optional can mean that they grant access to the 
+         corresponding service even when the user does not meet all of the
+         module's requirements. In some operating system revisions, 
+         for example, if you mark as optional the module that controls
+         login via a dial-up connection, it allows users to login without 
+         providing a password. See the <emphasis>OpenAFS Release
+         Notes</emphasis> for a discussion of any limitations that apply to 
+         this operating system.</para>
+ 
+         <para>Also, with some operating system versions you must install 
+         patches for PAM to interact correctly with certain
+         authentication programs. For details, see the 
+         <emphasis>OpenAFS Release Notes</emphasis>.</para>
+       </note>
+ 
+       <para>The recommended AFS-related entries in the PAM configuration file 
+       make use of one or more of the following three
+       attributes. 
+         <variablelist>
+           <title>Authentication Management</title>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>try_first_pass</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This is a standard PAM attribute that can be included on 
+               entries after the first one for a service; it directs
+               the module to use the password that was provided to the first 
+               module. For the AFS module, it means that AFS
+               authentication succeeds if the password provided to the module 
+               listed first is the user's correct AFS password. For
+               further discussion of this attribute and its alternatives, see 
+               the operating system's PAM documentation.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>ignore_root</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This attribute, specific to the AFS PAM module, directs it 
+               to ignore not only the local superuser <emphasis
+               role="bold">root</emphasis>, but also any user with UID 0 
+               (zero).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold"><computeroutput>setenv_password_expires</computeroutput></emphasis></term>
+ 
+             <listitem>
+               <para>This attribute, specific to the AFS PAM module, sets the 
+               environment variable PASSWORD_EXPIRES to the expiration
+               date of the user's AFS password, which is recorded in the 
+               Authentication Database.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+ 
+       <para>Perform the following steps to enable AFS login. <orderedlist>
+           <listitem>
+             <para>Unpack the OpenAFS Binary Distribution for Solaris into the 
+             <emphasis role="bold">/cdrom</emphasis> directory, if it is not 
+             already.
+             Then change directory as indicated. 
+ <programlisting>
+    # <emphasis role="bold">cd /usr/lib/security</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS authentication library file to the 
+             <emphasis role="bold">/usr/lib/security</emphasis> directory. Then
+             create a symbolic link to it whose name does not mention the 
+             version. Omitting the version eliminates the need to edit
+             the PAM configuration file if you later update the library 
+             file.</para>
+ 
+             <para>If you use the AFS Authentication Server 
+             (<emphasis role="bold">kaserver</emphasis> process):</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">cp /tmp/afsdist/sun4x_56/lib/pam_afs.so.1 .</emphasis>
+    # <emphasis role="bold">ln -s pam_afs.so.1 pam_afs.so</emphasis>   
+ </programlisting>
+ 
+             <para>If you use a Kerberos implementation of AFS authentication:</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">cp /tmp/afsdist/sun4x_56/lib/pam_afs.krb.so.1 .</emphasis>
+    # <emphasis role="bold">ln -s pam_afs.krb.so.1 pam_afs.so</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the 
+             <computeroutput>Authentication management</computeroutput> section 
+             of the Solaris PAM configuration file,
+             <emphasis role="bold">/etc/pam.conf</emphasis> by convention. 
+             The entries in this section have the value
+             <computeroutput>auth</computeroutput> in their second field.</para>
+ 
+             <para>First edit the standard entries, which refer to the 
+             Solaris PAM module (usually, the file <emphasis
+             role="bold">/usr/lib/security/pam_unix.so.1</emphasis>) in their 
+             fourth field. For each service for which you want to
+             use AFS authentication, edit the third field of its entry to read 
+             <computeroutput>optional</computeroutput>. The
+             <emphasis role="bold">pam.conf</emphasis> file in the Solaris 
+             distribution usually includes standard entries for the
+             <emphasis role="bold">login</emphasis>, 
+             <emphasis role="bold">rlogin</emphasis>, and <emphasis
+             role="bold">rsh</emphasis> services, for instance.</para>
+ 
+             <para>If there are services for which you want to use AFS 
+             authentication, but for which the <emphasis
+             role="bold">pam.conf</emphasis> file does not already include a 
+             standard entry, you must create that entry and place the
+             value <computeroutput>optional</computeroutput> in its third field. 
+             For instance, the Solaris 
+             <emphasis role="bold">pam.conf</emphasis> file does not usually 
+             include standard entries for the 
+             <emphasis role="bold">ftp</emphasis> or 
+             <emphasis role="bold">telnet</emphasis> services.</para>
+ 
+             <para>Then create an AFS-related entry for each service, placing it 
+             immediately below the standard entry. The following
+             example shows what the 
+             <computeroutput>Authentication Management</computeroutput> 
+             section looks like after you have you edited or created entries 
+             for the services mentioned previously. Note that the example AFS 
+             entries appear on two lines
+             only for legibility.</para>
+ 
+ <programlisting>
+    login   auth  optional  /usr/lib/security/pam_unix.so.1
+    login   auth  optional  /usr/lib/security/pam_afs.so       \
+          try_first_pass  ignore_root  setenv_password_expires
+    rlogin  auth  optional  /usr/lib/security/pam_unix.so.1
+    rlogin  auth  optional  /usr/lib/security/pam_afs.so       \
+          try_first_pass  ignore_root  setenv_password_expires
+    rsh     auth  optional  /usr/lib/security/pam_unix.so.1
+    rsh     auth  optional  /usr/lib/security/pam_afs.so       \
+          try_first_pass  ignore_root            
+    ftp     auth  optional  /usr/lib/security/pam_unix.so.1
+    ftp     auth  optional  /usr/lib/security/pam_afs.so       \
+          try_first_pass  ignore_root
+    telnet  auth  optional  /usr/lib/security/pam_unix.so.1
+    telnet  auth  optional  /usr/lib/security/pam_afs.so       \
+          try_first_pass  ignore_root  setenv_password_expires
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>If you use the Common Desktop Environment (CDE) on the 
+             machine and want users to obtain an AFS token as they log
+             in, also add or edit the following four entries in the 
+             <computeroutput>Authentication management</computeroutput>
+             section. Note that the AFS-related entries appear on two lines 
+             here only for legibility. 
+ <programlisting>
+    dtlogin   auth  optional  /usr/lib/security/pam_unix.so.1
+    dtlogin   auth  optional  /usr/lib/security/pam_afs.so     \
+          try_first_pass  ignore_root
+    dtsession  auth  optional /usr/lib/security/pam_unix.so.1
+    dtsession  auth  optional /usr/lib/security/pam_afs.so     \
+          try_first_pass  ignore_root
+ </programlisting>
+             </para>
+           </listitem>
+           <listitem>
+             <para>Proceed to 
+             <link linkend="HDRWQ49a">Editing the File Systems Clean-up Script 
+             on Solaris Systems in the server instructions </link> if you are 
+             installing your first file server;
+             <link linkend="HDRWQ108">Starting Server Programs</link> if you
+             are installing an additional file server machine; or
+             <link linkend="Header_137a">Editing the File Systems Clean-up Script
+             on Solaris Systems in the client instructions</link> if you are 
+             installing a client.</para>
+           </listitem>
+         </orderedlist>
+       </para>
+     </sect2>
+   </sect1>
+ </appendix>
\ No newline at end of file
Index: openafs/doc/xml/QuickStartUnix/auqbg000.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg000.xml:1.4.4.5
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg000.xml	Thu May 21 13:56:30 2009
***************
*** 0 ****
--- 1,67 ----
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.3//EN"
+ 	"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+ <!ENTITY version SYSTEM "version.xml">
+ <!ENTITY preface SYSTEM "auqbg003.xml">
+ <!ENTITY chapter1 SYSTEM "auqbg004.xml">
+ <!ENTITY chapter2 SYSTEM "auqbg005.xml">
+ <!ENTITY chapter3 SYSTEM "auqbg006.xml">
+ <!ENTITY chapter4 SYSTEM "auqbg007.xml">
+ <!ENTITY appendixA SYSTEM "auqbg008.xml">
+ <!ENTITY appendixB SYSTEM "appendix.xml">
+ ]>
+ 
+ <book>
+   <bookinfo>
+     <title>OpenAFS Quick Start Guide for UNIX</title>
+ 
+     <copyright>
+       <year>2000-2009</year>
+       <holder>IBM Corporation and other contributors. All Rights Reserved</holder>
+     </copyright>
+ 
+     <legalnotice>
+       <para>This documentation is covered by the IBM Public License
+       Version 1.0.</para>
+     </legalnotice>
+ 
+     <revhistory>
+         &version;
+     </revhistory>
+ 
+     <abstract>
+       <para>This document describes the initial setup of an OpenAFS cell
+       and an OpenAFS client.  It is currently being updated for OpenAFS
+       1.4.10 and is still dated and incorrect in some details.  This
+       edition applies to OpenAFS for UNIX, Version 1.4.10, and to all
+       subsequent releases and modifications until otherwise indicated in
+       new editions.</para>
+     </abstract>
+   </bookinfo>
+ 
+   &preface;
+   &chapter1;
+   &chapter2;
+   &chapter3;
+   &chapter4;
+   &appendixA;
+   &appendixB;
+   <index></index>
+ </book>
+ <!-- Keep this comment at the end of the file
+ Local variables:
+ mode: xml
+ sgml-omittag:nil
+ sgml-shorttag:nil
+ sgml-namecase-general:nil
+ sgml-general-insert-case:lower
+ sgml-minimize-attributes:nil
+ sgml-always-quote-attributes:t
+ sgml-indent-step:2
+ sgml-indent-data:nil
+ sgml-parent-document:nil
+ sgml-exposed-tags:nil
+ sgml-local-catalogs:nil
+ sgml-local-ecat-files:nil
+ End:
+ -->
Index: openafs/doc/xml/QuickStartUnix/auqbg003.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg003.xml:1.3.4.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg003.xml	Mon May 11 11:12:14 2009
***************
*** 0 ****
--- 1,198 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <preface id="HDRWQ1">
+   <title>About This Guide</title>
+ 
+   <para>This section describes the purpose, organization, and conventions
+   of this document.</para>
+ 
+   <sect1 id="HDRWQ2">
+     <title>Audience and Purpose</title>
+ 
+     <para>This guide explains how to install and configure OpenAFS
+     server and client machines. It
+     assumes that the reader is familiar with <trademark
+     class="registered">UNIX</trademark> system administration, but not
+     AFS.</para>
+ 
+     <para>The instructions explain how to issue 
+     <trademark class="registered">AFS</trademark> commands in the
+     context of specific tasks, but do not describe a command's function or
+     arguments in detail. Refer to the <citetitle>OpenAFS Administration
+     Reference</citetitle> as necessary.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ3">
+     <title>Organization of the Document</title>
+ 
+     <para>See <link linkend="HDRWQ7">The Procedures Described in this
+     Guide</link>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ4">
+     <title>How to Use This Document</title>
+ 
+     <para>See <link linkend="HDRWQ7">The Procedures Described in this
+     Guide</link> and <link linkend="HDRWQ16">How to
+     Continue</link>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ5">
+     <title>Related Documents</title>
+ 
+     <para>The OpenAFS documentation set also includes the following
+     documents.
+       <variablelist>
+         <varlistentry>
+           <term><citetitle>OpenAFS Administration Guide</citetitle></term>
+ 
+           <listitem>
+             <para>This guide describes the concepts and procedures that a
+             system administrator must know to manage an AFS cell.  It
+             assumes familiarity with UNIX, but requires no previous
+             knowledge of AFS.</para>
+ 
+             <para>The first chapters of the <citetitle>OpenAFS
+             Administration Guide</citetitle> present basic concepts and
+             guidelines.  Understanding them is crucial to successful
+             administration of an AFS cell.  The remaining chapters in the
+             guide provide step-by-step instructions for specific
+             administrative tasks, along with discussions of the concepts
+             important to that particular task.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><citetitle>OpenAFS Administration
+           Reference</citetitle></term>
+ 
+           <listitem>
+             <para>This reference manual details the syntax and effect of
+             each AFS command.  It is intended for the experienced AFS
+             administrator, programmer, or user.</para>
+ 
+             <para>The <citetitle>OpenAFS Administration
+             Reference</citetitle> lists AFS files and commands in
+             alphabetical order.  The reference page for each command
+             specifies its syntax, including the acceptable aliases and
+             abbreviations.  It then describes the command's function,
+             arguments, and output if any.  Examples and a list of related
+             commands are provided, as are warnings where
+             appropriate.</para>
+ 
+             <para>This manual complements the <citetitle>OpenAFS
+             Administration Guide</citetitle>: it does not include
+             procedural information, but describes commands in more detail
+             than the <citetitle>OpenAFS Administration
+             Guide</citetitle>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><citetitle>OpenAFS User Guide</citetitle></term>
+ 
+           <listitem>
+             <para>This guide presents the basic concepts and procedures
+             necessary for using AFS effectively.  It assumes that the
+             reader has some experience with UNIX, but does not require
+             familiarity with networking or AFS.</para>
+ 
+             <para>The guide explains how to perform basic functions,
+             including authenticating, changing a password, protecting AFS
+             data, creating groups, and troubleshooting.  It provides
+             illustrative examples for each function and describes some of
+             the differences between the UNIX file system and AFS.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><citetitle>OpenAFS Release Notes</citetitle></term>
+ 
+           <listitem>
+             <para>This document provides information specific to each
+             release of AFS, such as a list of new features and commands, a
+             list of requirements and limitations, and instructions for
+             upgrading server and client machines.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </para>
+   </sect1>
+ 
+   <sect1 id="HDRTYPO_CONV">
+     <title>Typographical Conventions</title>
+ 
+     <para>This document uses the following typographical conventions:
+       <itemizedlist>
+         <listitem>
+           <para>Command and option names appear
+           in <emphasis role="bold">bold type</emphasis> in syntax
+           definitions, examples, and running text.  Names of directories,
+           files, machines, partitions, volumes, and users also appear
+           in <emphasis role="bold">bold type</emphasis>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Variable information appears in <emphasis>italic
+           type</emphasis>.  This includes user-supplied information on
+           command lines and the parts of prompts that differ depending on
+           who issues the command.  New terms also appear
+           in <emphasis>italic type</emphasis>.</para>
+ 	</listitem>
+ 
+         <listitem>
+           <para>Examples of screen output and file contents appear
+           in <computeroutput>monospace type</computeroutput>.</para>
+         </listitem>
+       </itemizedlist>
+     </para>
+ 
+     <para>In addition, the following symbols appear in command syntax
+     definitions, both in the documentation and in AFS online help
+     statements. When issuing a command, do not type these
+     symbols.
+       <itemizedlist>
+         <listitem>
+           <para>Square brackets <emphasis role="bold">[ ]</emphasis>
+           surround optional items.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Angle brackets <emphasis role="bold">&lt; &gt;</emphasis>
+           surround user-supplied values in AFS commands.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>A superscripted plus
+           sign <emphasis role="bold">+</emphasis> follows an argument that
+           accepts more than one value.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The percent sign <computeroutput>%</computeroutput>
+           represents the regular command shell prompt. Some operating
+           systems possibly use a different character for this
+           prompt.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The number sign <computeroutput>#</computeroutput>
+           represents the command shell prompt for the local
+           superuser <emphasis role="bold">root</emphasis>. Some operating
+           systems possibly use a different character for this
+           prompt.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The pipe symbol <emphasis role="bold">|</emphasis> in a
+           command syntax statement separates mutually exclusive values for
+           an argument.</para>
+         </listitem>
+       </itemizedlist>
+     </para>
+ 
+     <para>For additional information on AFS commands, including a
+     description of command string components, acceptable abbreviations and
+     aliases, and how to get online help for commands, see the appendix to
+     the <citetitle>OpenAFS Administration Guide</citetitle>.</para>
+   </sect1>
+ </preface>
Index: openafs/doc/xml/QuickStartUnix/auqbg004.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg004.xml:1.4.4.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg004.xml	Wed May 13 22:26:41 2009
***************
*** 0 ****
--- 1,535 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ6">
+   <title>Installation Overview</title>
+ 
+   <para>This chapter describes the type of instructions provided in this
+   guide and the hardware and software requirements for installing
+   <trademark class="registered">AFS</trademark>.</para>
+ 
+   <para>Before beginning the installation of your cell's first machine,
+   read this chapter and the material from the <citetitle>OpenAFS
+   Administration Guide</citetitle> listed in <link
+   linkend="HDRWQ8">Recommended Reading List</link>. It is also best to
+   read through <link linkend="HDRWQ17">Installing the First AFS
+   Machine</link> before beginning the installation, so that you understand
+   the overall scope of the installation procedure. Similarly, before
+   installing additional server or client machines it is best to read
+   through <link linkend="HDRWQ99">Installing Additional Server
+   Machines</link> and <link linkend="HDRWQ133">Installing Additional
+   Client Machines</link>.</para>
+ 
+   <para>If you are already running a version of AFS, consult the upgrade
+   instructions in the <citetitle>OpenAFS Release Notes</citetitle> before
+   proceeding with the installation.</para>
+   
+   <para>If you are working with an existing cell that uses
+   <emphasis role="bold">kaserver</emphasis> or external Kerberos v4 for
+   authentication, please see the notes in 
+   <link linkend="KAS001">kaserver and legacy Kerberos 5 authentication</link>
+   and the rest of Appendix B for how the installation
+   steps will differ from those described in the rest of this guide.</para>
+ 
+   <sect1 id="HDRWQ7">
+     <title>The Procedures Described in this Guide</title>
+ 
+     <para>This guide describes two types of installation procedures:
+     initial procedures (such as installing the first AFS machine or
+     incorporating AFS into the kernel) and as-needed procedures (such as
+     installing additional server machines or client machines).</para>
+ 
+     <sect2 id="Header_9">
+       <title>Required Initial Procedures</title>
+ 
+       <para>You must perform the following basic procedures to start using
+       AFS.</para>
+ 
+       <sect3 id="Header_10">
+         <title>Incorporating AFS Into the Kernel</title>
+ 
+         <para>You must incorporate AFS modifications into the kernel of
+         every client machine. On some operating systems you must also 
+         incorporate these modifications into the kernels of server machines. 
+         Depending on 
+         the operating system, you either use a program for dynamic kernel
+         loading, build a new static kernel, or can choose between the
+         two. For your convenience, the instructions for incorporating AFS
+         into the kernel appear in full in every chapter where you need to
+         use them.
+           <indexterm>
+             <primary>roles for first AFS machine</primary>
+           </indexterm>
+           <indexterm>
+             <primary>first AFS machine</primary>
+             <secondary>roles</secondary>
+           </indexterm>
+         </para>
+       </sect3>
+ 
+       <sect3 id="Header_11">
+         <title>Installing the First AFS Machine</title>
+ 
+         <para>You install the first AFS machine in your cell to function
+         as both an AFS server and client machine.  You can disable the
+         client functionality after completing the installation, if you
+         wish.</para>
+ 
+         <para>The first server machine in a cell performs several
+         functions:
+           <itemizedlist>
+             <listitem>
+               <para>It may act as the <emphasis>system control
+               machine</emphasis>, distributing certain
+               configuration files to the other server machines in the
+               cell</para>
+             </listitem>
+ 
+             <listitem>
+               <para>It may act as the <emphasis>binary distribution
+               machine</emphasis> for its system type, distributing AFS
+               binaries to other server machines of its system type</para>
+             </listitem>
+ 
+             <listitem>
+               <para>It acts as the first <emphasis>database server
+               machine</emphasis>, running the server processes that
+               maintain the AFS administrative databases</para>
+             </listitem>
+           </itemizedlist>
+         </para>
+ 
+         <para>After you install server and client functionality, you
+         complete other procedures specific to the first machine, including
+         setting up the top levels of your cell's AFS filespace.</para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="Header_12">
+       <title>As-needed Procedures</title>
+ 
+       <sect3 id="Header_13">
+         <title>Upgrading the Operating System</title>
+ 
+         <para>Upgrading the operating system requires you to take several
+         steps to protect data and AFS-modified binaries from being lost or
+         overwritten. For guidelines, see <link linkend="HDRWQ14">About
+         Upgrading the Operating System</link>.</para>
+       </sect3>
+ 
+       <sect3 id="Header_14">
+         <title>Installing Additional File Server Machines</title>
+ 
+         <para>See <link linkend="HDRWQ100">Installing an Additional File
+         Server Machine</link>.</para>
+       </sect3>
+ 
+       <sect3 id="Header_15">
+         <title>Configuring or Decommissioning Database Server Machines</title>
+ 
+         <para>See <link linkend="HDRWQ114">Installing Database Server
+         Functionality</link> and <link linkend="HDRWQ125">Removing
+         Database Server Functionality</link>.</para>
+       </sect3>
+ 
+       <sect3 id="Header_16">
+         <title>Installing Additional AFS Client Machines</title>
+ 
+         <para>See <link linkend="HDRWQ133">Installing Additional Client
+         Machines</link>.</para>
+       </sect3>
+ 
+       <sect3 id="Header_17">
+         <title>Building AFS from Source Code</title>
+ 
+         <para>See <link linkend="HDRWQ163">Appendix A, Building AFS from
+         Source Code</link></para>
+       </sect3>
+       
+       <sect3 id="Header_17a">
+         <title>Configuring Legacy Components</title>
+         <para>See <link linkend="Legacy">Appendix B, Configuring Legacy
+         Components</link>
+           <indexterm>
+             <primary>background reading list</primary>
+           </indexterm>
+           <indexterm>
+             <primary>reading list for background information</primary>
+           </indexterm>
+         </para>
+       </sect3>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ8">
+     <title>Recommended Reading List</title>
+ 
+     <para>To develop the best understanding of the overall scope of an
+     installation procedure, read through the entire chapter or section
+     that describes it before performing any actions.</para>
+ 
+     <para>In addition, familiarity with some basic AFS concepts can make
+     the installation more efficient, because you understand better the
+     purpose of the steps. The following is a prioritized list of material
+     to read before installing the first AFS machine. At minimum, read the
+     first chapter of the <citetitle>OpenAFS Administration
+     Guide</citetitle>.  Then continue your reading in the indicated order,
+     as extensively as you can. It is more important at this point to read
+     the conceptual material in each section than the instructions.</para>
+ 
+     <para><emphasis role="bold">Selected Topics in the <emphasis>OpenAFS
+     Administration Guide</emphasis></emphasis>
+       <itemizedlist>
+         <listitem>
+           <para>The chapter titled <emphasis>An Overview of AFS
+           Administration</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Administering Server
+           Machines</emphasis> chapter: <emphasis>Local Disk Files on a
+           Server Machine</emphasis>, <emphasis>The Four Roles for a Server
+           Machine</emphasis>, <emphasis>Maintaining the Server CellServDB
+           File</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Monitoring and
+           Controlling Server Processes</emphasis> chapter:
+           <emphasis>Controlling and Checking Process
+           Status</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Managing Server
+           Encryption Keys</emphasis> chapter: <emphasis>About Server
+           Encryption Keys</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Managing
+           Volumes</emphasis> chapter: <emphasis>About Volumes</emphasis>,
+           <emphasis>Creating Read/write Volumes</emphasis>,
+           <emphasis>Clones and Cloning</emphasis>, <emphasis>Mounting
+           Volumes</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Administering Client
+           Machines and the Cache Manager</emphasis> chapter:
+           <emphasis>Overview of Cache Manager Customization</emphasis>,
+           <emphasis>Configuration and Cache-related Files on the Local
+           Disk</emphasis>, <emphasis>Determining the Cache Type, Size, and
+           Location</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Managing Access Control
+           Lists</emphasis> chapter: <emphasis>Protecting Data in
+           AFS</emphasis></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para><emphasis role="bold">More Selected Topics in the
+     <emphasis>OpenAFS Administration Guide</emphasis></emphasis> 
+       <itemizedlist>
+         <listitem>
+           <para>Selected sections in the <emphasis>Managing
+           Volumes</emphasis> chapter: <emphasis>Creating and Releasing
+           Read-only Volumes (Replication)</emphasis>, <emphasis>Creating
+           Backup Volumes</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Administering the
+           Protection Database</emphasis> chapter: <emphasis>About the
+           Protection Database</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Administering User
+           Accounts</emphasis> chapter: <emphasis>The Components of an AFS
+           User Account</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Selected sections in the <emphasis>Managing Administrative
+           Privilege</emphasis> chapter: <emphasis>An Overview of
+           Administrative Privilege</emphasis></para>
+         </listitem>
+       </itemizedlist>
+     </para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ9">
+     <title>Requirements</title>
+ 
+     <para>You must comply with the following requirements to install AFS successfully. <indexterm>
+         <primary>root superuser</primary>
+ 
+         <secondary>as installer's login identity</secondary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_20">
+       <title>Login Identity</title>
+ 
+       <para>Log into the machine you are installing as the local superuser <emphasis role="bold">root</emphasis>. When instructed,
+       also authenticate with AFS as the administrative user <emphasis role="bold">admin</emphasis>. <indexterm>
+           <primary>overview</primary>
+ 
+           <secondary>general installation requirements</secondary>
+         </indexterm> <indexterm>
+           <primary>requirements</primary>
+ 
+           <secondary>general</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ10">
+       <title>General Requirements</title>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>You must have a Kerberos 5 realm running for your site, and
+           the ability to create new principals within that realm. If you are
+           working with an existing cell using <emphasis>kaserver</emphasis>
+           or Kerberos v4 authentication, please see 
+           <link linkend="KAS001">kaserver and legacy Kerberos 4 authentication</link> 
+           for modifications to the following instructions.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You must have a NTP, or similar, timeservice running. Each AFS
+           machine should derive its system time from this timeservice. If you
+           are working with an existing cell, and wish to use AFS's internal
+           time service, please see Appendix B for modifications to the following
+           instructions.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You must have an OpenAFS Binary Distribution for each system 
+           type you are installing, or have built a binary from the supplied 
+           source code. Unless otherwise noted, the Binary Distribution 
+           includes software for both client and server machines.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>All AFS machines that belong to a cell must be able to access each other via the network.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The machine must be running the standard, vendor-supplied version of the operating system supported by the current
+           version of AFS. The operating system must already be installed on the machine's root partition.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You must be familiar with the current operating system and disk configuration of the machine you are
+           installing.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>All hardware and non-AFS software on the machine must be functioning normally.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>No critical processes can be running on the machine you are installing, because you may need to reboot it during the
+           installation.</para>
+         </listitem>
+       </itemizedlist>
+ 
+       <indexterm>
+         <primary>file server machine</primary>
+ 
+         <secondary>requirements for installation</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>requirements</primary>
+ 
+         <secondary>file server machine (general)</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ11">
+       <title>File Server Machine Requirements</title>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>Cell configuration is simplest if the first machine you install has the lowest IP address of any database server
+           machine you currently plan to install. If you later configure a machine with a lower IP address as a database server
+           machine, you must update the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on all of your cell's client
+           machines before the installation. For further discussion, see <link linkend="HDRWQ114">Installing Database Server
+           Functionality</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The partition mounted on the <emphasis role="bold">/usr</emphasis> directory must have at least 18 MB of disk space
+ 	<!-- XXX - Is this still true - how big are our binaries these days? -->
+           available for storing the AFS server binaries (stored by convention in the <emphasis role="bold">/usr/afs/bin</emphasis>
+           directory). If the machine is also a client, there must be additional local disk space available, as specified in <link
+           linkend="HDRWQ12">Client Machine Requirements</link>. The complete set of AFS binaries requires yet more space, but they
+           are normally stored in an AFS volume rather than on a machine's local disk.</para>
+ 
+           <para>More significant amounts of space on the partition are required by the administrative databases stored in the
+           <emphasis role="bold">/usr/afs/db</emphasis> directory and the server process log files stored in the <emphasis
+           role="bold">/usr/afs/logs</emphasis> directory. The exact requirement depends on many factors, such as the size of your
+           cell and how often you truncate the log files.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>There must be at least one partition (or logical volume, if the operating system and AFS support them) dedicated
+           exclusively to storing AFS volumes. The total number and size of server partitions on all file server machines in the cell
+           determines how much space is available for AFS files.</para>
+         </listitem>
+       </itemizedlist>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>requirements for installation</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>requirements</primary>
+ 
+         <secondary>client machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ12">
+       <title>Client Machine Requirements</title>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>The partition mounted on the <emphasis role="bold">/usr</emphasis> directory must have at least 4 MB of disk space
+           available for storing the AFS client binaries and kernel library files (stored by convention in the <emphasis
+           role="bold">/usr/vice/etc</emphasis> directory). The complete set of AFS binaries requires more space, but they are
+           normally stored in an AFS volume rather than on a machine's local disk. For most system types, the instructions have you
+           copy only the one kernel library file appropriate for the machine you are installing. If you choose to store all of the
+           library files on the local disk, the space requirement can be significantly greater.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>On a client machine that uses a disk cache, there must be enough free space on the cache partition (by convention,
+           mounted on the <emphasis role="bold">/usr/vice/cache</emphasis> directory) to accommodate the cache. The minimum
+           recommended cache size is 10 MB, but larger caches generally perform better.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>On a client machine that uses a memory cache, there must be at least 5 MB of machine memory to devote to caching,
+           but again more memory generally leads to better performance. For further discussion, see the sections in <link
+           linkend="HDRWQ133">Installing Additional Client Machines</link> about configuring the cache.</para>
+         </listitem>
+       </itemizedlist>
+ 
+       <indexterm>
+         <primary>system types supported</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>supported system types</primary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ13">
+     <title>Supported System Types</title>
+ 
+     <para>The <emphasis>OpenAFS Release Notes</emphasis> for each AFS release list the supported system types. Support for
+     subsequent revisions of an operating system often becomes available between AFS releases. The OpenAFS mailing lists can provide information regarding this interim support</para>
+ 
+     <para>It is the goal of OpenAFS to support AFS on a wide range of popular system types.
+     Furthermore, each time an operating system vendor releases a new general availability version of a supported operating system,
+     it is a goal to support AFS on it within a short time. Support can be delayed a bit longer if it is necessary to
+     generate completely new binaries.</para>
+ 
+     <para>It is not always possible to support AFS on every intermediate version of an operating system or for certain processor
+     types. In some cases, platform limitations make certain AFS functionality (such as file server or NFS/AFS translator
+     functionality) unavailable on one or more platforms. For a list of limitations, see the <emphasis>OpenAFS Release
+     Notes</emphasis> or ask on the OpenAFS mailing lists. <indexterm>
+         <primary>operating system upgrades</primary>
+       </indexterm> <indexterm>
+         <primary>upgrading the operating system</primary>
+       </indexterm> <indexterm>
+         <primary>AFS server partition</primary>
+ 
+         <secondary>protecting during operating system upgrade</secondary>
+       </indexterm> <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>protecting during operating system upgrade</secondary>
+       </indexterm></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ14">
+     <title>About Upgrading the Operating System</title>
+ 
+     <para>Whenever you upgrade an AFS machine to a different operating system, you must take several actions to maintain proper AFS
+     functionality. These actions include, but are not necessarily limited to, the following. <itemizedlist>
+         <listitem>
+           <para>On platforms running the inode fileserver, unmount the AFS server partitions (mounted at <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>
+           directories) on all file server machines, to prevent the vendor-supplied <emphasis role="bold">fsck</emphasis> program
+           from running on them when you reboot the machine during installation of the new operating system. Before upgrading the
+           operating system, it is prudent to comment out commands in the machine's initialization file that remount the server
+           partitions, to prevent them from being remounted until you can replace the standard <emphasis role="bold">fsck</emphasis>
+           program with the AFS-modified version. The instructions in this guide for installing AFS server machines explain how to
+           replace the <emphasis role="bold">fsck</emphasis> program. If you are unsure if your platform uses the inode fileserver, it is worth following this advice for all platforms.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Protect the AFS-modified versions of commands and configuration files from being overwritten by vendor-supplied
+           versions. These include <emphasis role="bold">vfsck</emphasis> (the AFS version of <emphasis role="bold">fsck</emphasis>), and configuration files such as the
+           one for the Pluggable Authentication Module (PAM). After you have successfully installed the operating system, remember to
+           move the AFS-modified commands and files back to the locations where they are accessed during normal functioning.</para>
+         </listitem>
+ 
+ <!-- 
+ I don't think OpenAFS has ever required the server partitions be reformatted
+         <listitem>
+           <para>Reformat the server partitions to accommodate AFS-specific information, in certain cases. The upgrade instructions
+           that accompany the new AFS binaries for an affected platform always detail the required procedure.</para>
+         </listitem>
+ -->
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>AFS Binary Distribution</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Binary Distribution (AFS)</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CD-ROM</primary>
+ 
+       <secondary>packaging of AFS Binary Distribution</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>encryption files</primary>
+ 
+       <secondary>in AFS Binary Distribution</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ15">
+     <title>The OpenAFS Binary Distribution</title>
+ 
+     <para>Binary Distributions for supported systems may be downloaded from the OpenAFS website. The distributions are in the native packaging format for the system in question, and should generally be installed using your system's package management tools.</para>
+ 
+ <para>For those distributions provided as tar files, or those built from source, the instructions in this guide specify how to copy out both binaries and configuration files</para>
+ 
+   </sect1>
+ 
+   <sect1 id="HDRWQ16">
+     <title>How to Continue</title>
+ 
+     <para>If you are installing the first AFS machine in your cell, proceed to <link linkend="HDRWQ17">Installing the First AFS
+     Machine</link>.</para>
+ 
+     <para>If you are installing an additional file server machine, or configuring or decommissioning a database server machine,
+     proceed to <link linkend="HDRWQ99">Installing Additional Server Machines</link>.</para>
+ 
+     <para>If you are installing an additional client machine, proceed to <link linkend="HDRWQ133">Installing Additional Client
+     Machines</link>.</para>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/QuickStartUnix/auqbg005.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg005.xml:1.5.4.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg005.xml	Wed May 13 22:26:41 2009
***************
*** 0 ****
--- 1,6737 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ17">
+   <title>Installing the First AFS Machine</title>
+ 
+   <indexterm>
+     <primary>file server machine</primary>
+ 
+     <seealso>first AFS machine</seealso>
+ 
+     <seealso>file server machine, additional</seealso>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>instructions</primary>
+ 
+     <secondary>first AFS machine</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>installing</primary>
+ 
+     <secondary>first AFS machine</secondary>
+   </indexterm>
+ 
+   <para>This chapter describes how to install the first AFS machine in your cell, configuring it as both a file server machine and a
+   client machine. After completing all procedures in this chapter, you can remove the client functionality if you wish, as described
+   in <link linkend="HDRWQ98">Removing Client Functionality</link>.</para>
+ 
+   <para>To install additional file server machines after completing this chapter, see <link linkend="HDRWQ99">Installing Additional
+   Server Machines</link>.</para>
+ 
+   <para>To install additional client machines after completing this chapter, see <link linkend="HDRWQ133">Installing Additional
+   Client Machines</link>. <indexterm>
+       <primary>requirements</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm></para>
+ 
+   <sect1 id="Header_29">
+     <title>Requirements and Configuration Decisions</title>
+ 
+     <para>The instructions in this chapter assume that you meet the following requirements. 
+       <itemizedlist>
+         <listitem>
+           <para>You are logged onto the machine's console as the local superuser <emphasis role="bold">root</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para>A standard version of one of the operating systems supported by the current version of AFS is running on the
+           machine</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You have either installed the provided OpenAFS packages for 
+           your system, have access to a binary distribution tarball, or have 
+           successfully built OpenAFS from source</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You have a Kerberos v5 realm running for your site. If you are
+           working with an existing cell which uses 
+           <emphasis role="bold">kaserver</emphasis> or Kerberos v4 for
+           authentication, please see 
+           <link linkend="KAS001">kaserver and Legacy Kerberos v4 Authentication</link>
+           for the modifications required to this installation procedure.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>You have a NTP, or similar, time service deployed to ensure 
+           rough clock syncronistation between your clients and servers. If you
+           wish to use AFS's built in timeservice (which is deprecated) please
+           see Appendix B for the necessary modifications to this installation
+           procedure.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>You must make the following configuration decisions while installing the first AFS machine. To speed the installation
+     itself, it is best to make the decisions before beginning. See the chapter in the <emphasis>OpenAFS Administration
+     Guide</emphasis> about issues in cell administration and configuration for detailed guidelines. <indexterm>
+         <primary>cell name</primary>
+ 
+         <secondary>choosing</secondary>
+       </indexterm> <indexterm>
+         <primary>AFS filespace</primary>
+ 
+         <secondary>deciding how to configure</secondary>
+       </indexterm> <indexterm>
+         <primary>filespace</primary>
+ 
+         <see>AFS filespace</see>
+       </indexterm> <itemizedlist>
+         <listitem>
+           <para>Select the first AFS machine</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Select the cell name</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide which partitions or logical volumes to configure as AFS server partitions, and choose the directory names on
+           which to mount them</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide how big to make the client cache</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Decide how to configure the top levels of your cell's AFS filespace</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>This chapter is divided into three large sections corresponding to the three parts of installing the first AFS machine.
+     Perform all of the steps in the order they appear. Each functional section begins with a summary of the procedures to perform.
+     The sections are as follows: <itemizedlist>
+         <listitem>
+           <para>Installing server functionality (begins in <link linkend="HDRWQ18">Overview: Installing Server
+           Functionality</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Installing client functionality (begins in <link linkend="HDRWQ63">Overview: Installing Client
+           Functionality</link>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configuring your cell's filespace, establishing further security mechanisms, and enabling access to foreign cells
+           (begins in <link linkend="HDRWQ71">Overview: Completing the Installation of the First AFS Machine</link>)</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>overview</primary>
+ 
+       <secondary>installing server functionality on first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>server functionality</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>server functionality</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ18">
+     <title>Overview: Installing Server Functionality</title>
+ 
+     <para>In the first phase of installing your cell's first AFS machine, you install file server and database server functionality
+     by performing the following procedures: 
+     <orderedlist>
+         <listitem>
+           <para>Choose which machine to install as the first AFS machine</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create AFS-related directories on the local disk</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Incorporate AFS modifications into the machine's kernel</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configure partitions or logical volumes for storing AFS volumes</para>
+         </listitem>
+ 
+         <listitem>
+           <para>On some system types, install and configure an AFS-modified version of the <emphasis role="bold">fsck</emphasis>
+           program</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is to remain a client machine, incorporate AFS into its authentication system</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the Basic OverSeer (BOS) Server</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Define the cell name and the machine's cell membership</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the database server processes: Backup Server, Protection Server, and Volume Location
+           (VL) Server</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configure initial security mechanisms</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the <emphasis role="bold">fs</emphasis> process, which incorporates three component processes: the File
+           Server, Volume Server, and Salvager</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the server portion of the Update Server</para>
+         </listitem>
+ 
+       </orderedlist></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ19">
+     <title>Choosing the First AFS Machine</title>
+ 
+     <para>The first AFS machine you install must have sufficient disk space to store AFS volumes. To take best advantage of AFS's
+     capabilities, store client-side binaries as well as user files in volumes. When you later install additional file server
+     machines in your cell, you can distribute these volumes among the different machines as you see fit.</para>
+ 
+     <para>These instructions configure the first AFS machine as a <emphasis>database server machine</emphasis>, the <emphasis>binary
+     distribution machine</emphasis> for its system type, and the cell's <emphasis>system control machine</emphasis>. For a
+     description of these roles, see the <emphasis>OpenAFS Administration Guide</emphasis>.</para>
+ 
+     <para>Installation of additional machines is simplest if the first machine has the lowest IP address of any database server
+     machine you currently plan to install. If you later install database server functionality on a machine with a lower IP address,
+     you must first update the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on all of your cell's client machines.
+     For more details, see <link linkend="HDRWQ114">Installing Database Server Functionality</link>.</para>
+   </sect1>
+ 
+   <sect1 id="Header_32">
+     <title>Creating AFS Directories</title>
+ 
+     <indexterm>
+       <primary>usr/afs directory</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>/usr/afs directory</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>/usr/afs directory</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/vice/etc directory</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>/usr/vice/etc directory</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>/usr/vice/etc directory</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>/ as start to file and directory names</primary>
+ 
+       <secondary>see alphabetized entries without initial slash</secondary>
+     </indexterm>
+ 
+     <para>If you are installing from packages (such as Debian .deb or 
+     Fedora/SuSe .rpm files), you should now install all of the available 
+     OpenAFS packages for your system type. Typically, these will include 
+     packages for client and server functionality, and a seperate package 
+     containing a suitable kernel module for your running kernel. Consult 
+     the package lists on the OpenAFS website to determine the packages 
+     appropriate for your system.</para>
+ 
+     <para>If you are installing from a tarfile, or from a locally compiled 
+     source tree you should create the <emphasis role="bold">/usr/afs</emphasis>
+     and <emphasis role="bold">/usr/vice/etc</emphasis> directories on the
+     local disk, to house server and client files respectively. Subsequent 
+     instructions copy files from the distribution tarfile into them. </para>
+ <programlisting>
+    # <emphasis role="bold">mkdir /usr/afs</emphasis>
+    # <emphasis role="bold">mkdir /usr/vice</emphasis>
+    # <emphasis role="bold">mkdir /usr/vice/etc</emphasis>
+ </programlisting>
+   </sect1>
+ 
+   <sect1 id="HDRWQ20">
+     <title>Performing Platform-Specific Procedures</title>
+ 
+     <para>Several of the initial procedures for installing a file server machine differ for each system type. For convenience, the
+     following sections group them together for each system type: <itemizedlist>
+         <indexterm>
+           <primary>kernel extensions</primary>
+ 
+           <see>AFS kernel extensions</see>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>loading AFS kernel extensions</primary>
+ 
+           <see>incorporating</see>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>building</primary>
+ 
+           <secondary>AFS extensions into kernel</secondary>
+ 
+           <see>incorporating AFS kernel extensions</see>
+         </indexterm>
+ 
+         <listitem>
+           <para>Incorporate AFS modifications into the kernel.</para>
+ 
+           <para>The kernel on every AFS client machine and, on some systems, 
+           the AFS fileservers, must incorporate AFS extensions. On machines 
+           that use a dynamic kernel module loader, it is conventional to 
+           alter the machine's initialization script to load the AFS extensions
+           at each reboot. <indexterm>
+               <primary>AFS server partition</primary>
+ 
+               <secondary>mounted on /vicep directory</secondary>
+             </indexterm> <indexterm>
+               <primary>partition</primary>
+ 
+               <see>AFS server partition</see>
+             </indexterm> <indexterm>
+               <primary>logical volume</primary>
+ 
+               <see>AFS server partition</see>
+             </indexterm> <indexterm>
+               <primary>requirements</primary>
+ 
+               <secondary>AFS server partition name and location</secondary>
+             </indexterm> <indexterm>
+               <primary>naming conventions for AFS server partition</primary>
+             </indexterm> <indexterm>
+               <primary>vicep<emphasis>xx</emphasis> directory</primary>
+ 
+               <see>AFS server partition</see>
+             </indexterm> <indexterm>
+               <primary>directories</primary>
+ 
+               <secondary>/vicep<emphasis>xx</emphasis></secondary>
+ 
+               <see>AFS server partition</see>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configure server partitions or logical volumes to house AFS volumes.</para>
+ 
+           <para>Every AFS file server machine must have at least one partition or logical volume dedicated to storing AFS volumes
+           (for convenience, the documentation hereafter refers to partitions only). Each server partition is mounted at a directory
+           named <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where <replaceable>xx</replaceable> is one or
+           two lowercase letters. By convention, the first 26 partitions are mounted on the directories called <emphasis
+           role="bold">/vicepa</emphasis> through <emphasis role="bold">/vicepz</emphasis>, the 27th one is mounted on the <emphasis
+           role="bold">/vicepaa</emphasis> directory, and so on through <emphasis role="bold">/vicepaz</emphasis> and <emphasis
+           role="bold">/vicepba</emphasis>, continuing up to the index corresponding to the maximum number of server partitions
+           supported in the current version of AFS (which is specified in the <emphasis>OpenAFS Release Notes</emphasis>).</para>
+ 
+           <para>The <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> directories must reside in the file server
+           machine's root directory, not in one of its subdirectories (for example, <emphasis role="bold">/usr/vicepa</emphasis> is
+           not an acceptable directory location).</para>
+ 
+           <para>You can also add or remove server partitions on an existing file server machine. For instructions, see the chapter
+           in the <emphasis>OpenAFS Administration Guide</emphasis> about maintaining server machines.</para>
+ 
+           <note>
+             <para>Not all file system types supported by an operating system are necessarily supported as AFS server partitions. For
+             possible restrictions, see the <emphasis>OpenAFS Release Notes</emphasis>.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para>On some system types, install and configure a modified <emphasis role="bold">fsck</emphasis> program which
+           recognizes the structures that the File Server uses to organize volume data on AFS server partitions. The <emphasis
+           role="bold">fsck</emphasis> program provided with the operating system does not understand the AFS data structures, and so
+           removes them to the <emphasis role="bold">lost+found</emphasis> directory.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the machine is to remain an AFS client machine, modify the machine's authentication system so that users obtain
+           an AFS token as they log into the local file system. Using AFS is simpler and more convenient for your users if you make
+           the modifications on all client machines. Otherwise, users must perform a two or three step login procedure (login to the local
+           system, then obtain Kerberos credentials, and then issue the <emphasis role="bold">aklog</emphasis> command). For further discussion of AFS
+           authentication, see the chapter in the <emphasis>OpenAFS Administration Guide</emphasis> about cell configuration and
+           administration issues.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>To continue, proceed to the appropriate section: <itemizedlist>
+         <listitem>
+           <para><link linkend="HDRWQ21">Getting Started on AIX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ31">Getting Started on HP-UX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ36">Getting Started on IRIX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ41">Getting Started on Linux Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ45">Getting Started on Solaris Systems</link></para>
+         </listitem>
+       </itemizedlist></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ21">
+     <title>Getting Started on AIX Systems</title>
+ 
+     <para>Begin by running the AFS initialization script to call the AIX kernel extension facility, which dynamically loads AFS
+     modifications into the kernel. Then use the <emphasis role="bold">SMIT</emphasis> program to configure partitions for storing
+     AFS volumes, and replace the AIX <emphasis role="bold">fsck</emphasis> program helper with a version that correctly handles AFS
+     volumes. If the machine is to remain an AFS client machine, incorporate AFS into the AIX secondary authentication system.
+     <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm> <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm> <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on AIX</tertiary>
+       </indexterm> <indexterm>
+         <primary>AIX</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ22">
+       <title>Loading AFS into the AIX Kernel</title>
+ 
+       <para>The AIX kernel extension facility is the dynamic kernel loader
+       provided by IBM Corporation.  AIX does not support incorporation of
+       AFS modifications during a kernel build.</para>
+ 
+       <para>For AFS to function correctly, the kernel extension facility must run each time the machine reboots, so the AFS
+       initialization script (included in the AFS distribution) invokes it automatically. In this section you copy the script to the
+       conventional location and edit it to select the appropriate options depending on whether NFS is also to run.</para>
+ 
+       <para>After editing the script, you run it to incorporate AFS into the kernel. In later sections you verify that the script
+       correctly initializes all AFS components, then configure the AIX <emphasis role="bold">inittab</emphasis> file so that the
+       script runs automatically at reboot. <orderedlist>
+           <listitem>
+             <para>Unpack the distribution tarball. The examples below assume 
+             that you have unpacked the files into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+             pick a different location, substitute this in all of the following 
+             examples. Once you have unpacked the distribution, 
+             change directory as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/rs_aix42/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS kernel library files to the local <emphasis role="bold">/usr/vice/etc/dkload</emphasis> directory,
+             and the AFS initialization script to the <emphasis role="bold">/etc</emphasis> directory. <programlisting>
+    # <emphasis role="bold">cp -rp  dkload  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -p  rc.afs  /etc/rc.afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the <emphasis role="bold">/etc/rc.afs</emphasis> script, setting the <computeroutput>NFS</computeroutput>
+             variable as indicated.</para>
+ 
+             <para>If the machine is not to function as an NFS/AFS Translator, set the <computeroutput>NFS</computeroutput> variable
+             as follows.</para>
+ 
+             <programlisting>
+    NFS=$NFS_NONE
+ </programlisting>
+ 
+             <para>If the machine is to function as an NFS/AFS Translator and is running AIX 4.2.1 or higher, set the
+             <computeroutput>NFS</computeroutput> variable as follows. Note that NFS must already be loaded into the kernel, which
+             happens automatically on systems running AIX 4.1.1 and later, as long as the file <emphasis
+             role="bold">/etc/exports</emphasis> exists.</para>
+ 
+             <programlisting>
+    NFS=$NFS_IAUTH
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Invoke the <emphasis role="bold">/etc/rc.afs</emphasis> script to load AFS modifications into the kernel. You can
+             ignore any error messages about the inability to start the BOS Server or the Cache Manager or AFS client.
+             <programlisting>
+    # <emphasis role="bold">/etc/rc.afs</emphasis>
+ </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>AFS server partition on first AFS machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS server partition</primary>
+ 
+         <secondary>configuring on first AFS machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AIX</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ23">
+       <title>Configuring Server Partitions on AIX Systems</title>
+ 
+       <para>Every AFS file server machine must have at least one partition or logical volume dedicated to storing AFS volumes. Each
+       server partition is mounted at a directory named <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where
+       <replaceable>xx</replaceable> is one or two lowercase letters. The <emphasis
+       role="bold">/vicep</emphasis><replaceable>xx</replaceable> directories must reside in the file server machine's root
+       directory, not in one of its subdirectories (for example, <emphasis role="bold">/usr/vicepa</emphasis> is not an acceptable
+       directory location). For additional information, see <link linkend="HDRWQ20">Performing Platform-Specific
+       Procedures</link>.</para>
+ 
+       <para>To configure server partitions on an AIX system, perform the following procedures: <orderedlist>
+           <listitem>
+             <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS server
+             partition you are configuring (there must be at least one). Repeat the command for each partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Use the <emphasis role="bold">SMIT</emphasis> program to create a journaling file system on each partition to be
+             configured as an AFS server partition.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Mount each partition at one of the <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>
+             directories. Choose one of the following three methods: <itemizedlist>
+                 <listitem>
+                   <para>Use the <emphasis role="bold">SMIT</emphasis> program</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Use the <emphasis role="bold">mount -a</emphasis> command to mount all partitions at once</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Use the <emphasis role="bold">mount</emphasis> command on each partition in turn</para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>Also configure the partitions so that they are mounted automatically at each reboot. For more information, refer
+             to the AIX documentation.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>replacing fsck program</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fsck program</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>fsck program</secondary>
+ 
+         <tertiary>on AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AIX</primary>
+ 
+         <secondary>fsck program</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ24">
+       <title>Replacing the fsck Program Helper on AIX Systems</title>
+ 
+       <note><para>The AFS modified fsck program is not required on AIX 5.1 
+       systems, and the <emphasis role="bold">v3fshelper</emphasis> program
+       refered to below is not shipped for these systems.</para></note>
+       
+       <para>In this section, you make modifications to guarantee that the appropriate <emphasis role="bold">fsck</emphasis> program
+       runs on AFS server partitions. The <emphasis role="bold">fsck</emphasis> program provided with the operating system must never
+       run on AFS server partitions. Because it does not recognize the structures that the File Server uses to organize volume data,
+       it removes all of the data. To repeat:</para>
+ 
+       <para><emphasis role="bold">Never run the standard fsck program on AFS server partitions. It discards AFS
+       volumes.</emphasis></para>
+ 
+       <para>On AIX systems, you do not replace the <emphasis role="bold">fsck</emphasis> binary itself, but rather the
+       <emphasis>program helper</emphasis> file included in the AIX distribution as <emphasis
+       role="bold">/sbin/helpers/v3fshelper</emphasis>. <orderedlist>
+           <listitem>
+             <para>Move the AIX <emphasis role="bold">fsck</emphasis> program helper to a safe location and install the version from
+             the AFS distribution in its place. 
+ <programlisting>
+    # <emphasis role="bold">cd /sbin/helpers</emphasis>
+    # <emphasis role="bold">mv v3fshelper v3fshelper.noafs</emphasis>
+    # <emphasis role="bold">cp -p /tmp/afsdist/rs_aix42/root.server/etc/v3fshelper v3fshelper</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you plan to retain client functionality on this machine after completing the installation, proceed to <link
+             linkend="HDRWQ25">Enabling AFS Login on AIX Systems</link>. Otherwise, proceed to <link linkend="HDRWQ50">Starting the
+             BOS Server</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>file server machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on file server machine</secondary>
+ 
+         <tertiary>AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on AIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AIX</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on file server machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>secondary authentication system (AIX)</primary>
+ 
+         <secondary>server machine</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ25">
+       <title>Enabling AFS Login on AIX Systems</title>
+ 
+       <note>
+         <para>If you plan to remove client functionality from this machine after completing the installation, skip this section and
+         proceed to <link linkend="HDRWQ50">Starting the BOS Server</link>.</para>
+       </note>
+ 
+       <para>In modern AFS installations, you should be using Kerberos v5
+       for user login, and obtaining AFS tokens following this authentication
+       step.</para>
+       
+       <para>There are currently no instructions available on configuring AIX to
+       automatically obtain AFS tokens at login. Following login, users can 
+       obtain tokens by running the <emphasis role="bold">aklog</emphasis> 
+       command</para>
+      
+       <para>Sites which still require <emphasis role="bold">kaserver</emphasis>
+       or external Kerberos v4 authentication should consult 
+       <link linkend="KAS012">Enabling kaserver based AFS login on AIX systems</link>
+       for details of how to enable AIX login.</para>
+       
+       <para>Proceed to <link linkend="HDRWQ50">Starting the BOS Server</link> 
+       (or if referring to these instructions while installing an additional 
+       file server machine, return to <link linkend="HDRWQ108">Starting Server
+       Programs</link>).</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ31">
+     <title>Getting Started on HP-UX Systems</title>
+ 
+     <para>Begin by building AFS modifications into a new kernel; HP-UX
+     does not support dynamic loading. Then create partitions for storing
+     AFS volumes, and install and configure the AFS-modified <emphasis
+     role="bold">fsck</emphasis> program to run on AFS server
+     partitions. If the machine is to remain an AFS client machine,
+     incorporate AFS into the machine's Pluggable Authentication Module
+     (PAM) scheme. <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm> <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm> <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on HP-UX</tertiary>
+       </indexterm> <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS-modified kernel</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ32">
+       <title>Building AFS into the HP-UX Kernel</title>
+ 
+       <para>Use the following instructions to build AFS modifications into the kernel on an HP-UX system. <orderedlist>
+           <listitem>
+             <para>Move the existing kernel-related files to a safe location. <programlisting>
+    # <emphasis role="bold">cp /stand/vmunix /stand/vmunix.noafs</emphasis>
+    # <emphasis role="bold">cp /stand/system /stand/system.noafs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Unpack the OpenAFS HP-UX distribution tarball. The examples 
+             below assume that you have unpacked the files into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+             pick a different location, substitute this in all of the following 
+             examples. Once you have unpacked the distribution, change directory 
+             as indicated.
+             <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/hp_ux110/root.client</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS initialization file to the local directory for initialization files (by convention, <emphasis
+             role="bold">/sbin/init.d</emphasis> on HP-UX machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+             extension as you copy the file. <programlisting>
+    # <emphasis role="bold">cp usr/vice/etc/afs.rc  /sbin/init.d/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the file <emphasis role="bold">afs.driver</emphasis> to the local <emphasis
+             role="bold">/usr/conf/master.d</emphasis> directory, changing its name to <emphasis role="bold">afs</emphasis> as you
+             do. <programlisting>
+    # <emphasis role="bold">cp  usr/vice/etc/afs.driver  /usr/conf/master.d/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS kernel module to the local <emphasis role="bold">/usr/conf/lib</emphasis> directory.</para>
+ 
+             <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp bin/libafs.a /usr/conf/lib</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine's kernel does not support NFS server functionality, change the file's name as you copy it:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp bin/libafs.nonfs.a /usr/conf/lib/libafs.a</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Incorporate the AFS driver into the kernel, either using the <emphasis role="bold">SAM</emphasis> program or a
+             series of individual commands. <itemizedlist>
+                 <listitem>
+                   <para>To use the <emphasis role="bold">SAM</emphasis> program: <orderedlist>
+                       <listitem>
+                         <para>Invoke the <emphasis role="bold">SAM</emphasis> program, specifying the hostname of the local machine
+                         as <replaceable>local_hostname</replaceable>. The <emphasis role="bold">SAM</emphasis> graphical user
+                         interface pops up. <programlisting>
+    # <emphasis role="bold">sam -display</emphasis> <replaceable>local_hostname</replaceable><emphasis role="bold">:0</emphasis> 
+ </programlisting></para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Choose the <emphasis role="bold">Kernel Configuration</emphasis> icon, then the <emphasis
+                         role="bold">Drivers</emphasis> icon. From the list of drivers, select <emphasis
+                         role="bold">afs</emphasis>.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Open the pull-down <emphasis role="bold">Actions</emphasis> menu and choose the <emphasis
+                         role="bold">Add Driver to Kernel</emphasis> option.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Open the <emphasis role="bold">Actions</emphasis> menu again and choose the <emphasis
+                         role="bold">Create a New Kernel</emphasis> option.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Confirm your choices by choosing <emphasis role="bold">Yes</emphasis> and <emphasis
+                         role="bold">OK</emphasis> when prompted by subsequent pop-up windows. The <emphasis
+                         role="bold">SAM</emphasis> program builds the kernel and reboots the system.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Login again as the superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                       </listitem>
+                     </orderedlist></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>To use individual commands: <orderedlist>
+                       <listitem>
+                         <para>Edit the file <emphasis role="bold">/stand/system</emphasis>, adding an entry for <emphasis
+                         role="bold">afs</emphasis> to the <computeroutput>Subsystems</computeroutput> section.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Change to the <emphasis role="bold">/stand/build</emphasis> directory and issue the <emphasis
+                         role="bold">mk_kernel</emphasis> command to build the kernel. <programlisting>
+    # <emphasis role="bold">cd /stand/build</emphasis>
+    # <emphasis role="bold">mk_kernel</emphasis>
+ </programlisting></para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Move the new kernel to the standard location (<emphasis role="bold">/stand/vmunix</emphasis>), reboot
+                         the machine to start using it, and login again as the superuser <emphasis role="bold">root</emphasis>.
+                         <programlisting>
+    # <emphasis role="bold">mv /stand/build/vmunix_test /stand/vmunix</emphasis>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>             
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                       </listitem>
+                     </orderedlist></para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>AFS server partition on first AFS machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS server partition</primary>
+ 
+         <secondary>configuring on first AFS machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ33">
+       <title>Configuring Server Partitions on HP-UX Systems</title>
+ 
+       <para>Every AFS file server machine must have at least one partition or logical volume dedicated to storing AFS volumes. Each
+       server partition is mounted at a directory named <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where
+       <replaceable>xx</replaceable> is one or two lowercase letters. The <emphasis
+       role="bold">/vicep</emphasis><replaceable>xx</replaceable> directories must reside in the file server machine's root
+       directory, not in one of its subdirectories (for example, <emphasis role="bold">/usr/vicepa</emphasis> is not an acceptable
+       directory location). For additional information, see <link linkend="HDRWQ20">Performing Platform-Specific Procedures</link>.
+       <orderedlist>
+           <listitem>
+             <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS server
+             partition you are configuring (there must be at least one). Repeat the command for each partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Use the <emphasis role="bold">SAM</emphasis> program to create a file system on each partition. For instructions,
+             consult the HP-UX documentation.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>On some HP-UX systems that use logical volumes, the <emphasis role="bold">SAM</emphasis> program automatically
+             mounts the partitions. If it has not, mount each partition by issuing either the <emphasis role="bold">mount
+             -a</emphasis> command to mount all partitions at once or the <emphasis role="bold">mount</emphasis> command to mount
+             each partition in turn.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>replacing fsck program</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fsck program</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>fsck program</secondary>
+ 
+         <tertiary>on HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>fsck program</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ34">
+       <title>Configuring the AFS-modified fsck Program on HP-UX Systems</title>
+ 
+       <para>In this section, you make modifications to guarantee that the appropriate <emphasis role="bold">fsck</emphasis> program
+       runs on AFS server partitions. The <emphasis role="bold">fsck</emphasis> program provided with the operating system must never
+       run on AFS server partitions. Because it does not recognize the structures that the File Server uses to organize volume data,
+       it removes all of the data. To repeat:</para>
+ 
+       <para><emphasis role="bold">Never run the standard fsck program on AFS server partitions. It discards AFS
+       volumes.</emphasis></para>
+ 
+       <para>On HP-UX systems, there are several configuration files to install in addition to the AFS-modified <emphasis
+       role="bold">fsck</emphasis> program (the <emphasis role="bold">vfsck</emphasis> binary). <orderedlist>
+           <listitem>
+             <para>Create the command configuration file <emphasis role="bold">/sbin/lib/mfsconfig.d/afs</emphasis>. Use a text
+             editor to place the indicated two lines in it: <programlisting>
+    format_revision 1
+    fsck            0        m,P,p,d,f,b:c:y,n,Y,N,q,
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create and change directory to an AFS-specific command directory called <emphasis
+             role="bold">/sbin/fs/afs</emphasis>. <programlisting>
+    # <emphasis role="bold">mkdir /sbin/fs/afs</emphasis>
+    # <emphasis role="bold">cd  /sbin/fs/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS-modified version of the <emphasis role="bold">fsck</emphasis> program (the <emphasis
+             role="bold">vfsck</emphasis> binary) and related files from the distribution directory to the new AFS-specific command
+             directory. <programlisting>
+    # <emphasis role="bold">cp -p /tmp/afsdist/hp_ux110/root.server/etc/*  .</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Change the <emphasis role="bold">vfsck</emphasis> binary's name to <emphasis role="bold">fsck</emphasis> and set
+             the mode bits appropriately on all of the files in the <emphasis role="bold">/sbin/fs/afs</emphasis> directory.
+             <programlisting>
+    # <emphasis role="bold">mv  vfsck  fsck</emphasis>
+    # <emphasis role="bold">chmod  755  *</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the <emphasis role="bold">/etc/fstab</emphasis> file, changing the file system type for each AFS server
+             partition from <computeroutput>hfs</computeroutput> to <computeroutput>afs</computeroutput>. This ensures that the
+             AFS-modified <emphasis role="bold">fsck</emphasis> program runs on the appropriate partitions.</para>
+ 
+             <para>The sixth line in the following example of an edited file shows an AFS server partition, <emphasis
+             role="bold">/vicepa</emphasis>.</para>
+ 
+             <programlisting>
+    /dev/vg00/lvol1 / hfs defaults 0 1
+    /dev/vg00/lvol4 /opt hfs defaults 0 2
+    /dev/vg00/lvol5 /tmp hfs defaults 0 2
+    /dev/vg00/lvol6 /usr hfs defaults 0 2
+    /dev/vg00/lvol8 /var hfs defaults 0 2
+    /dev/vg00/lvol9 /vicepa afs defaults 0 2
+    /dev/vg00/lvol7 /usr/vice/cache hfs defaults 0 2
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>If you plan to retain client functionality on this machine after completing the installation, proceed to <link
+             linkend="HDRWQ35">Enabling AFS Login on HP-UX Systems</link>. Otherwise, proceed to <link linkend="HDRWQ50">Starting the
+             BOS Server</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>file server machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on file server machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on file server machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>PAM</primary>
+ 
+         <secondary>on HP-UX</secondary>
+ 
+         <tertiary>file server machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Pluggable Authentication Module</primary>
+ 
+         <see>PAM</see>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ35">
+       <title>Enabling AFS Login on HP-UX Systems</title>
+ 
+       <note><para>If you plan to remove client functionality from this machine after completing the installation, skip this section and proceed to <link linkend="HDRWQ50">Starting the BOS Server</link>.</para></note>
+ 
+       <para>At this point you incorporate AFS into the operating system's
+       Pluggable Authentication Module (PAM) scheme. PAM integrates all
+       authentication mechanisms on the machine, including login, to
+       provide the security infrastructure for authenticated access to and
+       from the machine.</para>
+ 
+       <para>In modern AFS installations, you should be using Kerberos v5
+       for user login, and obtaining AFS tokens subsequent to this
+       authentication step. OpenAFS does not currently distribute a PAM
+       module allowing AFS tokens to be automatically gained at
+       login. Whilst there are a number of third party modules providing
+       this functionality, it is not know if these have been tested with
+       HP/UX.</para>
+       
+       <para>Following login, users can obtain tokens by running the
+       <emphasis role="bold">aklog</emphasis> command</para>
+ 
+       <para>Sites which still require <emphasis
+       role="bold">kaserver</emphasis> or external Kerberos v4
+       authentication should consult <link linkend="KAS013">Enabling
+       kaserver based AFS login on HP-UX systems</link> for details of how
+       to enable HP-UX login.</para>
+ 
+       <para>Proceed to <link linkend="HDRWQ50">Starting the BOS
+       Server</link> (or if referring to these instructions while
+       installing an additional file server machine, return to <link
+       linkend="HDRWQ108">Starting Server Programs</link>).</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ36">
+     <title>Getting Started on IRIX Systems</title>
+ 
+     <indexterm>
+       <primary>incorporating AFS kernel extensions</primary>
+ 
+       <secondary>first AFS machine</secondary>
+ 
+       <tertiary>IRIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS kernel extensions</primary>
+ 
+       <secondary>on first AFS machine</secondary>
+ 
+       <tertiary>IRIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>AFS kernel extensions</secondary>
+ 
+       <tertiary>on IRIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replacing fsck program</primary>
+ 
+       <secondary>not necessary on IRIX</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>fsck program</primary>
+ 
+       <secondary>on first AFS machine</secondary>
+ 
+       <tertiary>IRIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>fsck program</secondary>
+ 
+       <tertiary>on IRIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>fsck program replacement not necessary</secondary>
+     </indexterm>
+ 
+     <para>To incorporate AFS into the kernel on IRIX systems, choose one of two methods: <itemizedlist>
+         <listitem>
+           <para>Run the AFS initialization script to invoke the <emphasis role="bold">ml</emphasis> program distributed by Silicon
+           Graphics, Incorporated (SGI), which dynamically loads AFS modifications into the kernel</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Build a new static kernel</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Then create partitions for storing AFS volumes. You do not need to replace the IRIX <emphasis role="bold">fsck</emphasis>
+     program because SGI has already modified it to handle AFS volumes properly. If the machine is to remain an AFS client machine,
+     verify that the IRIX login utility installed on the machine grants an AFS token.</para>
+ 
+     <para>In preparation for either dynamic loading or kernel building, perform the following procedures: <orderedlist>
+         <listitem>
+           <para>Unpack the OpenAFS IRIX distribution tarball. The examples
+           below assume that you have unpacked the files into the 
+           <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you
+           pick a different location, substitue this in all of the following
+           examples. Once you have unpacked the distribution, change directory
+           as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd  /tmp/afsdist/sgi_65/root.client</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+           role="bold">/etc/init.d</emphasis> on IRIX machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+           extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p   usr/vice/etc/afs.rc  /etc/init.d/afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">uname -m</emphasis> command to determine the machine's CPU board type. The <emphasis
+           role="bold">IP</emphasis><replaceable>xx</replaceable> value in the output must match one of the supported CPU board types
+           listed in the <emphasis>OpenAFS Release Notes</emphasis> for the current version of AFS. <programlisting>
+    # <emphasis role="bold">uname -m</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Proceed to either <link linkend="HDRWQ37">Loading AFS into the IRIX Kernel</link> or <link
+           linkend="HDRWQ38">Building AFS into the IRIX Kernel</link>.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>AFS kernel extensions</secondary>
+ 
+       <tertiary>on first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afsml variable (IRIX)</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>variables</primary>
+ 
+       <secondary>afsml (IRIX)</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>afsml variable</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afsxnfs variable (IRIX)</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>variables</primary>
+ 
+       <secondary>afsxnfs (IRIX)</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>afsxnfs variable</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ37">
+       <title>Loading AFS into the IRIX Kernel</title>
+ 
+       <para>The <emphasis role="bold">ml</emphasis> program is the dynamic kernel loader provided by SGI for IRIX systems. If you
+       use it rather than building AFS modifications into a static kernel, then for AFS to function correctly the <emphasis
+       role="bold">ml</emphasis> program must run each time the machine reboots. Therefore, the AFS initialization script (included
+       on the AFS CD-ROM) invokes it automatically when the <emphasis role="bold">afsml</emphasis> configuration variable is
+       activated. In this section you activate the variable and run the script.</para>
+ 
+       <para>In later sections you verify that the script correctly initializes all AFS components, then create the links that
+       incorporate AFS into the IRIX startup and shutdown sequence. <orderedlist>
+           <listitem>
+             <para>Create the local <emphasis role="bold">/usr/vice/etc/sgiload</emphasis> directory to house the AFS kernel library
+             file. <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice/etc/sgiload</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS kernel library file to the <emphasis role="bold">/usr/vice/etc/sgiload</emphasis>
+             directory. The <emphasis role="bold">IP</emphasis><replaceable>xx</replaceable> portion of the library file name must
+             match the value previously returned by the <emphasis role="bold">uname -m</emphasis> command. Also choose the file
+             appropriate to whether the machine's kernel supports NFS server functionality (NFS must be supported for the machine to
+             act as an NFS/AFS Translator). Single- and multiprocessor machines use the same library file.</para>
+ 
+             <para>(You can choose to copy all of the kernel library files into the <emphasis
+             role="bold">/usr/vice/etc/sgiload</emphasis> directory, but they require a significant amount of space.)</para>
+ 
+             <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p  usr/vice/etc/sgiload/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.o  /usr/vice/etc/sgiload</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine's kernel does not support NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p  usr/vice/etc/sgiload/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.nonfs.o</emphasis>   \
+                    <emphasis role="bold">/usr/vice/etc/sgiload</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+             role="bold">afsml</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsml on</emphasis>   
+ </programlisting></para>
+ 
+             <para>If the machine is to function as an NFS/AFS Translator and the kernel supports NFS server functionality, activate
+             the <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsxnfs on</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Run the <emphasis role="bold">/etc/init.d/afs</emphasis> script to load AFS extensions into the kernel. The script
+             invokes the <emphasis role="bold">ml</emphasis> command, automatically determining which kernel library file to use
+             based on this machine's CPU type and the activation state of the <emphasis role="bold">afsxnfs</emphasis>
+             variable.</para>
+ 
+             <para>You can ignore any error messages about the inability to start the BOS Server or the Cache Manager or AFS
+             client.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ39">Configuring Server Partitions on IRIX Systems</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>AFS-modified kernel</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ38">
+       <title>Building AFS into the IRIX Kernel</title>
+ 
+       <para>Use the following instructions to build AFS modifications into the kernel on an IRIX system. <orderedlist>
+           <listitem>
+             <para>Copy the kernel initialization file <emphasis role="bold">afs.sm</emphasis> to the local <emphasis
+             role="bold">/var/sysgen/system</emphasis> directory, and the kernel master file <emphasis role="bold">afs</emphasis> to
+             the local <emphasis role="bold">/var/sysgen/master.d</emphasis> directory. <programlisting>
+    # <emphasis role="bold">cp -p  bin/afs.sm  /var/sysgen/system</emphasis>
+    # <emphasis role="bold">cp -p  bin/afs  /var/sysgen/master.d</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS kernel library file to the local file <emphasis
+             role="bold">/var/sysgen/boot/afs.a</emphasis>; the <emphasis role="bold">IP</emphasis><replaceable>xx</replaceable>
+             portion of the library file name must match the value previously returned by the <emphasis role="bold">uname
+             -m</emphasis> command. Also choose the file appropriate to whether the machine's kernel supports NFS server
+             functionality (NFS must be supported for the machine to act as an NFS/AFS Translator). Single- and multiprocessor
+             machines use the same library file.</para>
+ 
+             <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p   bin/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.a   /var/sysgen/boot/afs.a</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine's kernel does not support NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p  bin/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.nonfs.a  /var/sysgen/boot/afs.a</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to deactivate the <emphasis
+             role="bold">afsml</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsml off</emphasis>   
+ </programlisting></para>
+ 
+             <para>If the machine is to function as an NFS/AFS Translator and the kernel supports NFS server functionality, activate
+             the <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsxnfs on</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the existing kernel file, <emphasis role="bold">/unix</emphasis>, to a safe location. Compile the new kernel,
+             which is created in the file <emphasis role="bold">/unix.install</emphasis>. It overwrites the existing <emphasis
+             role="bold">/unix</emphasis> file when the machine reboots in the next step. <programlisting>
+    # <emphasis role="bold">cp /unix /unix_noafs</emphasis>
+    # <emphasis role="bold">autoconfig</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Reboot the machine to start using the new kernel, and login again as the superuser <emphasis
+             role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>AFS server partition on first AFS machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS server partition</primary>
+ 
+         <secondary>configuring on first AFS machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ39">
+       <title>Configuring Server Partitions on IRIX Systems</title>
+ 
+       <para>Every AFS file server machine must have at least one partition or logical volume dedicated to storing AFS volumes. Each
+       server partition is mounted at a directory named <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where
+       <replaceable>xx</replaceable> is one or two lowercase letters. The <emphasis
+       role="bold">/vicep</emphasis><replaceable>xx</replaceable> directories must reside in the file server machine's root
+       directory, not in one of its subdirectories (for example, <emphasis role="bold">/usr/vicepa</emphasis> is not an acceptable
+       directory location). For additional information, see <link linkend="HDRWQ20">Performing Platform-Specific
+       Procedures</link>.</para>
+ 
+       <para>AFS supports use of both EFS and XFS partitions for housing AFS volumes. SGI encourages use of XFS partitions.
+       <orderedlist>
+           <listitem>
+             <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS server
+             partition you are configuring (there must be at least one). Repeat the command for each partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Add a line with the following format to the file systems registry file, <emphasis
+             role="bold">/etc/fstab</emphasis>, for each partition (or logical volume created with the XLV volume manager) to be
+             mounted on one of the directories created in the previous step.</para>
+ 
+             <para>For an XFS partition or logical volume:</para>
+ 
+             <programlisting>
+    /dev/dsk/<replaceable>disk</replaceable>  /vicep<replaceable>xx</replaceable>  xfs  rw,raw=/dev/rdsk/<replaceable>disk</replaceable>  0  0   
+ </programlisting>
+ 
+             <para>For an EFS partition:</para>
+ 
+             <programlisting>
+    /dev/dsk/<replaceable>disk</replaceable>  /vicep<replaceable>xx</replaceable>  efs  rw,raw=/dev/rdsk/<replaceable>disk</replaceable>  0  0   
+ </programlisting>
+ 
+             <para>The following are examples of an entry for each file system type:</para>
+ 
+             <programlisting>
+    /dev/dsk/dks0d2s6 /vicepa  xfs rw,raw=/dev/rdsk/dks0d2s6  0 0
+    /dev/dsk/dks0d3s1 /vicepb  efs rw,raw=/dev/rdsk/dks0d3s1  0 0
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Create a file system on each partition that is to be mounted on a <emphasis
+             role="bold">/vicep</emphasis><replaceable>xx</replaceable> directory. The following commands are probably appropriate,
+             but consult the IRIX documentation for more information. In both cases, <replaceable>raw_device</replaceable> is a raw
+             device name like <emphasis role="bold">/dev/rdsk/dks0d0s0</emphasis> for a single disk partition or <emphasis
+             role="bold">/dev/rxlv/xlv0</emphasis> for a logical volume.</para>
+ 
+             <para>For XFS file systems, include the indicated options to configure the partition or logical volume with inodes large
+             enough to accommodate AFS-specific information:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">mkfs -t xfs -i size=512 -l size=4000b</emphasis> <replaceable>raw_device</replaceable>   
+ </programlisting>
+ 
+             <para>For EFS file systems:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">mkfs -t efs</emphasis> <replaceable>raw_device</replaceable>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Mount each partition by issuing either the <emphasis role="bold">mount -a</emphasis> command to mount all
+             partitions at once or the <emphasis role="bold">mount</emphasis> command to mount each partition in turn.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> If you have configured partitions or logical volumes to use XFS, issue
+             the following command to verify that the inodes are configured properly (are large enough to accommodate AFS-specific
+             information). If the configuration is correct, the command returns no output. Otherwise, it specifies the command to run
+             in order to configure each partition or logical volume properly. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/xfs_size_check</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you plan to retain client functionality on this machine after completing the installation, proceed to <link
+             linkend="HDRWQ40">Enabling AFS Login on IRIX Systems</link>. Otherwise, proceed to <link linkend="HDRWQ50">Starting the
+             BOS Server</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>file server machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on file server machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>AFS login</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ40">
+       <title>Enabling AFS Login on IRIX Systems</title>
+ 
+       <note>
+         <para>If you plan to remove client functionality from this machine after completing the installation, skip this section and
+         proceed to <link linkend="HDRWQ50">Starting the BOS Server</link>.</para>
+       </note>
+ 
+       <para>Whilst the standard IRIX command-line 
+       <emphasis role="bold">login</emphasis> program and the 
+       graphical <emphasis role="bold">xdm</emphasis> login program both have
+       the ability to grant AFS tokens, this ability relies upon the deprecated
+       kaserver authentication system.</para>
+         
+       <para>Users who have been successfully authenticated via Kerberos 5
+       authentication may obtain AFS tokens following login by running the
+       <emphasis role="bold">aklog</emphasis> command.</para>
+ 
+       <para>Sites which still require <emphasis role="bold">kaserver</emphasis>
+       or external Kerberos v4 authentication should consult 
+       <link linkend="KAS014">Enabling kaserver based AFS Login on IRIX Systems</link>
+       for details of how to enable IRIX login.</para>       
+ 
+       <para>After taking any necessary action, proceed to 
+       <link linkend="HDRWQ50">Starting the BOS Server</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ41">
+     <title>Getting Started on Linux Systems</title>
+ 
+     <indexterm>
+       <primary>replacing fsck program</primary>
+ 
+       <secondary>not necessary on Linux</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>fsck program</primary>
+ 
+       <secondary>on first AFS machine</secondary>
+ 
+       <tertiary>Linux</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>fsck program</secondary>
+ 
+       <tertiary>on Linux</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Linux</primary>
+ 
+       <secondary>fsck program replacement not necessary</secondary>
+     </indexterm>
+ 
+     <para>Since this guide was originally written, the procedure for starting 
+     OpenAFS has diverged significantly between different Linux distributions. 
+     The instructions that follow are appropriate for both the Fedora and 
+     RedHat Enterprise Linux packages distributed by OpenAFS. Additional 
+     instructions are provided for those building from source.</para>
+ 
+     <para>Begin by running the AFS client startup scripts, which call the
+     <emphasis role="bold">modprobe</emphasis> program, which dynamically
+     loads AFS modifications into the kernel. Then create partitions for
+     storing AFS volumes. You do not need to replace the Linux <emphasis
+     role="bold">fsck</emphasis> program. If the machine is to remain an
+     AFS client machine, incorporate AFS into the machine's Pluggable
+     Authentication Module (PAM) scheme. <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>Linux</tertiary>
+       </indexterm> <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>Linux</tertiary>
+       </indexterm> <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on Linux</tertiary>
+       </indexterm> <indexterm>
+         <primary>Linux</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ42">
+       <title>Loading AFS into the Linux Kernel</title>
+ 
+       <para>The <emphasis role="bold">modprobe</emphasis> program is the dynamic kernel loader for Linux. Linux does not support
+       incorporation of AFS modifications during a kernel build.</para>
+ 
+       <para>For AFS to function correctly, the <emphasis role="bold">modprobe</emphasis> program must run each time the machine
+       reboots, so your distribution's AFS initialization script invokes it automatically. The script also includes
+       commands that select the appropriate AFS library file automatically. In this section you run the script.</para>
+ 
+       <para>In later sections you verify that the script correctly initializes all AFS components, then activate a configuration
+       variable, which results in the script being incorporated into the Linux startup and shutdown sequence.</para> 
+       
+       <para>The procedure for starting up OpenAFS depends upon your distribution</para>
+       <sect3>
+         <title>Fedora and RedHat Enterprise Linux</title>
+         <para>OpenAFS ship RPMS for all current Fedora and RHEL releases.
+         <orderedlist>
+           <listitem>
+             <para>Download and install the RPM set for your operating system.
+             RPMs are available from the OpenAFS web site. You will need the 
+             <emphasis role="bold">openafs</emphasis>
+             <emphasis role="bold">openafs-client></emphasis>
+             <emphasis role="bold">openafs-server</emphasis> packages, along with
+             an <emphasis role="bold">openafs-kernel</emphasis> package matching
+             your current, running, kernel.</para>
+             <para>You can find the version of your current kernel by running
+ <programlisting>
+   # uname -r
+ <replaceable>2.6.20-1.2933.fc6</replaceable>
+ </programlisting></para>
+             <para>Once downloaded, the packages may be installed with the
+             <emphasis role="bold">rpm</emphasis> command
+ <programlisting>
+   # rpm -U openafs-* openafs-client-* openafs-server-* openafs-kernel-*
+ </programlisting></para>
+           </listitem>
+ <!-- If you do this with current RHEL and Fedora releases you end up with
+      a dynroot'd client running - this breaks setting up the root.afs volume
+      as described later in this guide
+           <listitem>
+             <para>Run the AFS initialization script to load AFS extensions into 
+             the kernel. You can ignore any error messages about the inability 
+             to start the BOS Server or the Cache Manager or AFS client.</para>
+ <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/openafs-client  start</emphasis>
+ </programlisting>
+           </listitem>
+ -->
+         </orderedlist>
+       </para>
+       </sect3>
+       <sect3>
+          <title>Systems packaged as tar files</title>
+          <para>If you are running a system where the OpenAFS Binary Distribution
+          is provided as a tar file, or where you have built the system from
+          source yourself, you need to install the relevant components by hand
+          </para>
+          <orderedlist>
+            
+           <listitem>
+             <para>Unpack the distribution tarball. The examples below assume
+             that you have unpacked the files into the
+             <emphasis role="bold">/tmp/afsdist</emphasis>directory. If you
+             pick a different location, substitute this in all of the following
+             examples. Once you have unpacked the distribution,
+             change directory as indicated.
+ <programlisting>
+   # <emphasis role="bold">cd /tmp/afsdist/linux/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+           
+           <listitem>
+             <para>Copy the AFS kernel library files to the local <emphasis role="bold">/usr/vice/etc/modload</emphasis> directory.
+             The filenames for the libraries have the format <emphasis
+             role="bold">libafs-</emphasis><replaceable>version</replaceable><emphasis role="bold">.o</emphasis>, where
+             <replaceable>version</replaceable> indicates the kernel build level. The string <emphasis role="bold">.mp</emphasis> in
+             the <replaceable>version</replaceable> indicates that the file is appropriate for machines running a multiprocessor
+             kernel. <programlisting>
+    # <emphasis role="bold">cp -rp  modload  /usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+             role="bold">/etc/rc.d/init.d</emphasis> on Linux machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+             extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p   afs.rc  /etc/rc.d/init.d/afs</emphasis> 
+ </programlisting></para>
+           </listitem>
+ 
+ <!-- I don't think we need to do this for Linux, and it complicates things if
+      dynroot is enabled ...
+           <listitem>
+             <para>Run the AFS initialization script to load AFS extensions into the kernel. You can ignore any error messages about
+             the inability to start the BOS Server or the Cache Manager or AFS client.</para>
+ <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/afs start</emphasis>
+ </programlisting>
+           </listitem>
+ -->
+         </orderedlist>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+    
+         <secondary>AFS server partition on first AFS machine</secondary>
+ 
+         <tertiary>Linux</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS server partition</primary>
+ 
+         <secondary>configuring on first AFS machine</secondary>
+ 
+         <tertiary>Linux</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on Linux</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Linux</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ43">
+       <title>Configuring Server Partitions on Linux Systems</title>
+ 
+       <para>Every AFS file server machine must have at least one partition or logical volume dedicated to storing AFS volumes. Each
+       server partition is mounted at a directory named <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where
+       <replaceable>xx</replaceable> is one or two lowercase letters. The <emphasis
+       role="bold">/vicep</emphasis><replaceable>xx</replaceable> directories must reside in the file server machine's root
+       directory, not in one of its subdirectories (for example, <emphasis role="bold">/usr/vicepa</emphasis> is not an acceptable
+       directory location). For additional information, see <link linkend="HDRWQ20">Performing Platform-Specific Procedures</link>.
+       <orderedlist>
+           <listitem>
+             <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS server
+             partition you are configuring (there must be at least one). Repeat the command for each partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Add a line with the following format to the file systems registry file, <emphasis
+             role="bold">/etc/fstab</emphasis>, for each directory just created. The entry maps the directory name to the disk
+             partition to be mounted on it. <programlisting>
+    /dev/<replaceable>disk</replaceable>  /vicep<replaceable>xx</replaceable>  ext2  defaults  0  2   
+ </programlisting></para>
+ 
+             <para>The following is an example for the first partition being configured.</para>
+ 
+             <programlisting>
+    /dev/sda8 /vicepa ext2 defaults 0 2
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Create a file system on each partition that is to be mounted at a <emphasis
+             role="bold">/vicep</emphasis><replaceable>xx</replaceable> directory. The following command is probably appropriate, but
+             consult the Linux documentation for more information. <programlisting>
+    # <emphasis role="bold">mkfs -v /dev/</emphasis><replaceable>disk</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Mount each partition by issuing either the <emphasis role="bold">mount -a</emphasis> command to mount all
+             partitions at once or the <emphasis role="bold">mount</emphasis> command to mount each partition in turn.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you plan to retain client functionality on this machine after completing the installation, proceed to <link
+             linkend="HDRWQ44">Enabling AFS Login on Linux Systems</link>. Otherwise, proceed to <link linkend="HDRWQ50">Starting the
+             BOS Server</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>file server machine</secondary>
+ 
+         <tertiary>Linux</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on file server machine</secondary>
+ 
+         <tertiary>Linux</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on Linux</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Linux</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on file server machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>PAM</primary>
+ 
+         <secondary>on Linux</secondary>
+ 
+         <tertiary>file server machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ44">
+       <title>Enabling AFS Login on Linux Systems</title>
+ 
+       <note>
+         <para>If you plan to remove client functionality from this machine
+         after completing the installation, skip this section and proceed
+         to <link linkend="HDRWQ50">Starting the BOS Server</link>.</para>
+       </note>
+ 
+       <para>At this point you incorporate AFS into the operating system's
+       Pluggable Authentication Module (PAM) scheme.  PAM integrates all
+       authentication mechanisms on the machine, including login, to provide
+       the security infrastructure for authenticated access to and from the
+       machine.</para>
+ 
+       <para>You should first configure your system to obtain Kerberos v5
+       tickets as part of the authentication process, and then run an AFS PAM
+       module to obtain tokens from those tickets after authentication.  Many
+       Linux distributions come with a Kerberos v5 PAM module (usually called
+       pam-krb5 or pam_krb5), or you can download and install <ulink
+       url="http://www.eyrie.org/~eagle/software/pam-krb5">Russ Allbery's
+       Kerberos v5 PAM module</ulink>, which is tested regularly with AFS.
+       See the instructions of whatever PAM module you use for how to
+       configure it.</para>
+ 
+       <para>Some Kerberos v5 PAM modules do come with native AFS support
+       (usually requiring the Heimdal Kerberos implementation rather than the
+       MIT Kerberos implementation).  If you are using one of those PAM
+       modules, you can configure it to obtain AFS tokens.  It's more common,
+       however, to separate the AFS token acquisition into a separate PAM
+       module.</para>
+ 
+       <para>The recommended AFS PAM module is <ulink
+       url="http://www.eyrie.org/~eagle/software/pam-afs-session/">Russ
+       Allbery's pam-afs-session module</ulink>.  It should work with any of
+       the Kerberos v5 PAM modules.  To add it to the PAM configuration, you
+       often only need to add configuration to the session group:</para>
+ 
+       <example>
+         <title>Linux PAM session example</title>
+         <literallayout>session  required  pam_afs_session.so</literallayout>
+       </example>
+ 
+       <para>If you also want to obtain AFS tokens for <command>scp</command>
+       and similar commands that don't open a session, you will also need to
+       add the AFS PAM module to the auth group so that the PAM
+       <function>setcred</function> call will obtain tokens.  The
+       <literal>pam_afs_session</literal> module will always return success
+       for authentication so that it can be added to the auth group only for
+       <function>setcred</function>, so make sure that it's not marked as
+       <literal>sufficient</literal>.</para>
+ 
+       <example>
+         <title>Linux PAM auth example</title>
+ <literallayout>auth  [success=ok default=1]  pam_krb5.so
+ auth  [default=done]          pam_afs_session.so
+ auth  required                pam_unix.so try_first_pass</literallayout>
+       </example>
+ 
+       <para>This example will work if you want to try Kerberos v5 first and
+       then fall back to regular Unix authentication.
+       <literal>success=ok</literal> for the Kerberos PAM module followed by
+       <literal>default=done</literal> for the AFS PAM module will cause a
+       successful Kerberos login to run the AFS PAM module and then skip the
+       Unix authentication module.  <literal>default=1</literal> on the
+       Kerberos PAM module causes failure of that module to skip the next
+       module (the AFS PAM module) and fall back to the Unix module.  If you
+       want to try Unix authentication first and rearrange the order, be sure
+       to use <literal>default=die</literal> instead.</para>
+ 
+       <para>The PAM configuration is stored in different places in different
+       Linux distributions.  On Red Hat, look in
+       <filename>/etc/pam.d/system-auth</filename>.  On Debian and
+       derivatives, look in <filename>/etc/pam.d/common-session</filename>
+       and <filename>/etc/pam.d/common-auth</filename>.</para>
+ 
+       <para>For additional configuration examples and the configuration
+       options of the AFS PAM module, see its documentation.  For more
+       details on the available options for the PAM configuration, see the
+       Linux PAM documentation.</para>
+ 
+       <para>Sites which still require <command>kaserver</command> or
+       external Kerberos v4 authentication should consult <link
+       linkend="KAS015">Enabling kaserver based AFS Login on Linux
+       Systems</link> for details of how to enable AFS login on Linux.</para>
+       
+       <para>Proceed to <link linkend="HDRWQ50">Starting the BOS
+       Server</link> (or if referring to these instructions while installing
+       an additional file server machine, return to <link
+       linkend="HDRWQ108">Starting Server Programs</link>).</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ45">
+     <title>Getting Started on Solaris Systems</title>
+ 
+     <para>Begin by running the AFS initialization script to call the <emphasis role="bold">modload</emphasis> program distributed by
+     Sun Microsystems, which dynamically loads AFS modifications into the kernel. Then create partitions for storing AFS volumes, and
+     install and configure the AFS-modified <emphasis role="bold">fsck</emphasis> program to run on AFS server partitions. If the
+     machine is to remain an AFS client machine, incorporate AFS into the machine's Pluggable Authentication Module (PAM) scheme.
+     <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm> <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm> <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on Solaris</tertiary>
+       </indexterm> <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="HDRWQ46">
+       <title>Loading AFS into the Solaris Kernel</title>
+ 
+       <para>The <emphasis role="bold">modload</emphasis> program is the dynamic kernel loader provided by Sun Microsystems for
+       Solaris systems. Solaris does not support incorporation of AFS modifications during a kernel build.</para>
+ 
+       <para>For AFS to function correctly, the <emphasis role="bold">modload</emphasis> program must run each time the machine
+       reboots, so the AFS initialization script (included on the AFS CD-ROM) invokes it automatically. In this section you copy the
+       appropriate AFS library file to the location where the <emphasis role="bold">modload</emphasis> program accesses it and then
+       run the script.</para>
+ 
+       <para>In later sections you verify that the script correctly initializes all AFS components, then create the links that
+       incorporate AFS into the Solaris startup and shutdown sequence. <orderedlist>
+           <listitem>
+             <para>Unpack the OpenAFS Solaris distribution tarball. The examples
+             below assume that you have unpacked the files into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+             pick a diferent location, substitute this in all of the following
+             exmaples. Once you have unpacked the distribution, change directory
+             as indicated. 
+ <programlisting>
+    # <emphasis role="bold">cd  /tmp/afsdist/sun4x_56/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+             role="bold">/etc/init.d</emphasis> on Solaris machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+             extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p  afs.rc  /etc/init.d/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS kernel library file to the local file <emphasis
+             role="bold">/kernel/fs/afs</emphasis>.</para>
+ 
+             <para>If the machine is running Solaris 2.6 or the 32-bit version of Solaris 7, its kernel supports NFS server
+             functionality, and the <emphasis role="bold">nfsd</emphasis> process is running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs.o /kernel/fs/afs</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine is running Solaris 2.6 or the 32-bit version of Solaris 7, and its kernel does not support NFS
+             server functionality or the <emphasis role="bold">nfsd</emphasis> process is not running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs.nonfs.o /kernel/fs/afs</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine is running the 64-bit version of Solaris 7, its kernel supports NFS server functionality, and the
+             <emphasis role="bold">nfsd</emphasis> process is running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs64.o /kernel/fs/sparcv9/afs</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine is running the 64-bit version of Solaris 7, and its kernel does not support NFS server
+             functionality or the <emphasis role="bold">nfsd</emphasis> process is not running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs64.nonfs.o /kernel/fs/sparcv9/afs</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Run the AFS initialization script to load AFS modifications into the kernel. You can ignore any error messages
+             about the inability to start the BOS Server or the Cache Manager or AFS client. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>   
+ </programlisting></para>
+ 
+             <para>When an entry called <computeroutput>afs</computeroutput> does not already exist in the local <emphasis
+             role="bold">/etc/name_to_sysnum</emphasis> file, the script automatically creates it and reboots the machine to start
+             using the new version of the file. If this happens, log in again as the superuser <emphasis role="bold">root</emphasis>
+             after the reboot and run the initialization script again. This time the required entry exists in the <emphasis
+             role="bold">/etc/name_to_sysnum</emphasis> file, and the <emphasis role="bold">modload</emphasis> program runs.</para>
+ 
+             <programlisting>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>
+ </programlisting>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>replacing fsck program</primary>
+ 
+         <secondary>first AFS machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fsck program</primary>
+ 
+         <secondary>on first AFS machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>fsck program</secondary>
+ 
+         <tertiary>on Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>fsck program</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ47">
+       <title>Configuring the AFS-modified fsck Program on Solaris Systems</title>
+ 
+       <para>In this section, you make modifications to guarantee that the appropriate <emphasis role="bold">fsck</emphasis> program
+       runs on AFS server partitions. The <emphasis role="bold">fsck</emphasis> program provided with the operating system must never
+       run on AFS server partitions. Because it does not recognize the structures that the File Server uses to organize volume data,
+       it removes all of the data. To repeat:</para>
+ 
+       <para><emphasis role="bold">Never run the standard fsck program on AFS server partitions. It discards AFS volumes.</emphasis>
+       <orderedlist>
+           <listitem>
+             <para>Create the <emphasis role="bold">/usr/lib/fs/afs</emphasis> directory to house the AFS-modified <emphasis
+             role="bold">fsck</emphasis> program and related files. <programlisting>
+    # <emphasis role="bold">mkdir /usr/lib/fs/afs</emphasis>
+    # <emphasis role="bold">cd /usr/lib/fs/afs</emphasis>  
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the <emphasis role="bold">vfsck</emphasis> binary to the newly created directory, changing the name as you do
+             so. <programlisting>
+    # <emphasis role="bold">cp  /tmp/afsdist/sun4x_56/root.server/etc/vfsck  fsck</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Working in the <emphasis role="bold">/usr/lib/fs/afs</emphasis> directory, create the following links to Solaris
+             libraries: <programlisting>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/clri</emphasis>  
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/df</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/edquota</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ff</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/fsdb</emphasis>  
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/fsirand</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/fstyp</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/labelit</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/lockfs</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/mkfs</emphasis>  
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/mount</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ncheck</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/newfs</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quot</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quota</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quotaoff</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quotaon</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/repquota</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/tunefs</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ufsdump</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ufsrestore</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/volcopy</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Append the following line to the end of the file <emphasis role="bold">/etc/dfs/fstypes</emphasis>.
+             <programlisting>
+    afs AFS Utilities
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the <emphasis role="bold">/sbin/mountall</emphasis> file, making two changes. <itemizedlist>
+                 <listitem>
+                   <para>Add an entry for AFS to the <computeroutput>case</computeroutput> statement for option 2, so that it reads
+                   as follows: <programlisting>
+    case "$2" in
+    ufs)    foptions="-o p"
+            ;;
+    afs)    foptions="-o p"
+            ;;
+    s5)     foptions="-y -t /var/tmp/tmp$$ -D"
+            ;;
+    *)      foptions="-y"
+            ;;
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Edit the file so that all AFS and UFS partitions are checked in parallel. Replace the following section of
+                   code: <programlisting>
+    # For  fsck purposes, we make a distinction between ufs and
+    # other file systems
+    #
+    if [ "$fstype" = "ufs" ]; then
+         ufs_fscklist="$ufs_fscklist $fsckdev"
+         saveentry $fstype "$OPTIONS" $special $mountp
+         continue
+    fi  
+ </programlisting></para>
+ 
+                   <para>with the following section of code:</para>
+ 
+                   <programlisting>
+    # For fsck purposes, we make a distinction between ufs/afs
+    # and other file systems.
+    #
+    if [ "$fstype" = "ufs" -o "$fstype" = "afs" ]; then
+         ufs_fscklist="$ufs_fscklist $fsckdev"
+         saveentry $fstype "$OPTIONS" $special $mountp
+         continue
+    fi
+ </programlisting>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>AFS server partition on first AFS machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS server partition</primary>
+ 
+         <secondary>configuring on first AFS machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS server partition</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ48">
+       <title>Configuring Server Partitions on Solaris Systems</title>
+ 
+       <para>Every AFS file server machine must have at least one partition or logical volume dedicated to storing AFS volumes. Each
+       server partition is mounted at a directory named <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>, where
+       <replaceable>xx</replaceable> is one or two lowercase letters. The <emphasis
+       role="bold">/vicep</emphasis><replaceable>xx</replaceable> directories must reside in the file server machine's root
+       directory, not in one of its subdirectories (for example, <emphasis role="bold">/usr/vicepa</emphasis> is not an acceptable
+       directory location). For additional information, see <link linkend="HDRWQ20">Performing Platform-Specific Procedures</link>.
+       <orderedlist>
+           <listitem>
+             <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS server
+             partition you are configuring (there must be at least one). Repeat the command for each partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Add a line with the following format to the file systems registry file, <emphasis
+             role="bold">/etc/vfstab</emphasis>, for each partition to be mounted on a directory created in the previous step. Note
+             the value <computeroutput>afs</computeroutput> in the fourth field, which tells Solaris to use the AFS-modified
+             <emphasis role="bold">fsck</emphasis> program on this partition. <programlisting>
+    /dev/dsk/<replaceable>disk</replaceable>   /dev/rdsk/<replaceable>disk</replaceable>   /vicep<replaceable>xx</replaceable>   afs   <replaceable>boot_order</replaceable>  yes  
+ </programlisting></para>
+ 
+             <para>The following is an example for the first partition being configured.</para>
+ 
+             <programlisting>
+    /dev/dsk/c0t6d0s1 /dev/rdsk/c0t6d0s1 /vicepa afs 3 yes
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Create a file system on each partition that is to be mounted at a <emphasis
+             role="bold">/vicep</emphasis><replaceable>xx</replaceable> directory. The following command is probably appropriate, but
+             consult the Solaris documentation for more information. <programlisting>
+    # <emphasis role="bold">newfs -v /dev/rdsk/</emphasis><replaceable>disk</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">mountall</emphasis> command to mount all partitions at once.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you plan to retain client functionality on this machine after completing the installation, proceed to <link
+             linkend="HDRWQ49">Enabling AFS Login and Editing the File Systems Clean-up Script on Solaris Systems</link>. Otherwise,
+             proceed to <link linkend="HDRWQ50">Starting the BOS Server</link>.</para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ49">
+       <title>Enabling AFS Login on Solaris Systems</title>
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>file server machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on file server machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on file server machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>PAM</primary>
+ 
+         <secondary>on Solaris</secondary>
+ 
+         <tertiary>file server machine</tertiary>
+       </indexterm>
+ 
+       <note>
+         <para>If you plan to remove client functionality from this machine after completing the installation, skip this section and
+         proceed to <link linkend="HDRWQ50">Starting the BOS Server</link>.</para>
+       </note>
+ 
+       <para>At this point you incorporate AFS into the operating system's
+       Pluggable Authentication Module (PAM) scheme.  PAM integrates all
+       authentication mechanisms on the machine, including login, to provide
+       the security infrastructure for authenticated access to and from the
+       machine.</para>
+ 
+       <para>Explaining PAM is beyond the scope of this document.  It is
+       assumed that you understand the syntax and meanings of settings in the
+       PAM configuration file (for example, how the
+       <computeroutput>other</computeroutput> entry works, the effect of
+       marking an entry as <computeroutput>required</computeroutput>,
+       <computeroutput>optional</computeroutput>, or
+       <computeroutput>sufficient</computeroutput>, and so on).</para>
+ 
+       <para>You should first configure your system to obtain Kerberos v5
+       tickets as part of the authentication process, and then run an AFS PAM
+       module to obtain tokens from those tickets after authentication.
+       Current versions of Solaris come with a Kerberos v5 PAM module that
+       will work, or you can download and install <ulink
+       url="http://www.eyrie.org/~eagle/software/pam-krb5">Russ Allbery's
+       Kerberos v5 PAM module</ulink>, which is tested regularly with AFS.
+       See the instructions of whatever PAM module you use for how to
+       configure it.</para>
+ 
+       <para>Some Kerberos v5 PAM modules do come with native AFS support
+       (usually requiring the Heimdal Kerberos implementation rather than the
+       MIT Kerberos implementation).  If you are using one of those PAM
+       modules, you can configure it to obtain AFS tokens.  It's more common,
+       however, to separate the AFS token acquisition into a separate PAM
+       module.</para>
+ 
+       <para>The recommended AFS PAM module is <ulink
+       url="http://www.eyrie.org/~eagle/software/pam-afs-session/">Russ
+       Allbery's pam-afs-session module</ulink>.  It should work with any of
+       the Kerberos v5 PAM modules.  To add it to the PAM configuration, you
+       often only need to add configuration to the session group in
+       <filename>pam.conf</filename>:</para>
+ 
+       <example>
+         <title>Solaris PAM session example</title>
+         <literallayout>login session required pam_afs_session.so</literallayout>
+       </example>
+ 
+       <para>This example enables PAM authentication only for console login.
+       You may want to add a similar line for the ssh service and for any
+       other login service that you use, including possibly the
+       <literal>other</literal> service (which serves as a catch-all).  You
+       may also want to add options to the AFS PAM session module
+       (particularly <literal>retain_after_close</literal>, which is
+       necessary for some versions of Solaris.</para>
+ 
+       <para>For additional configuration examples and the configuration
+       options of the AFS PAM module, see its documentation.  For more
+       details on the available options for the PAM configuration, see the
+       <filename>pam.conf</filename> manual page.</para>
+ 
+       <para>Sites which still require <emphasis
+       role="bold">kaserver</emphasis> or external Kerberos v4 authentication
+       should consult <link linkend="KAS016">Enabling kaserver based AFS
+       Login on Solaris Systems"</link> for details of how to enable AFS
+       login on Solaris.</para>
+ 
+       <para>Proceed to <link linkend="HDRWQ49a">Editing the File Systems 
+       Clean-up Script on Solaris Systems</link></para>
+     </sect2>
+     <sect2 id="HDRWQ49a">
+       <title>Editing the File Systems Clean-up Script on Solaris Systems</title>
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>file systems clean-up script</secondary>
+ 
+         <tertiary>on file server machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file systems clean-up script (Solaris)</primary>
+ 
+         <secondary>file server machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scripts</primary>
+ 
+         <secondary>file systems clean-up (Solaris)</secondary>
+ 
+         <tertiary>file server machine</tertiary>
+       </indexterm>
+ 
+       
+         <orderedlist>
+           <listitem>
+             <para>Some Solaris distributions include a script that locates and removes unneeded files from various file systems. Its
+             conventional location is <emphasis role="bold">/usr/lib/fs/nfs/nfsfind</emphasis>. The script generally uses an argument
+             to the <emphasis role="bold">find</emphasis> command to define which file systems to search. In this step you modify the
+             command to exclude the <emphasis role="bold">/afs</emphasis> directory. Otherwise, the command traverses the AFS
+             filespace of every cell that is accessible from the machine, which can take many hours. The following alterations are
+             possibilities, but you must verify that they are appropriate for your cell.</para>
+ 
+             <para>The first possible alteration is to add the <emphasis role="bold">-local</emphasis> flag to the existing command,
+             so that it looks like the following:</para>
+ 
+             <programlisting>
+    find $dir -local -name .nfs\* -mtime +7 -mount -exec rm -f {} \;   
+ </programlisting>
+ 
+             <para>Another alternative is to exclude any directories whose names begin with the lowercase letter <emphasis
+             role="bold">a</emphasis> or a non-alphabetic character.</para>
+ 
+             <programlisting>
+    find /[A-Zb-z]*  <replaceable>remainder of existing command</replaceable>   
+ </programlisting>
+ 
+             <para>Do not use the following command, which still searches under the <emphasis role="bold">/afs</emphasis> directory,
+             looking for a subdirectory of type <emphasis role="bold">4.2</emphasis>.</para>
+ 
+             <programlisting>
+    find / -fstype 4.2     /* <replaceable>do not use</replaceable> */
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ50">Starting the BOS Server</link> (or if referring to these instructions while
+             installing an additional file server machine, return to <link linkend="HDRWQ108">Starting Server
+             Programs</link>).</para>
+           </listitem>
+         </orderedlist>
+ 
+       <indexterm>
+         <primary>Basic OverSeer Server</primary>
+ 
+         <see>BOS Server</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>starting</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>starting</primary>
+ 
+         <secondary>BOS Server</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>BOS Server</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>authorization checking (disabling)</primary>
+ 
+         <secondary>first AFS machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>disabling authorization checking</primary>
+ 
+         <secondary>first AFS machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>authorization checking (disabling)</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+   <sect1 id="HDRWQ50">
+     <title>Starting the BOS Server</title>
+ 
+     <para>You are now ready to start the AFS server processes on this machine. 
+     If you are not working from a packaged distribution, begin by copying the 
+     AFS server binaries from the distribution to the conventional local disk
+     location, the <emphasis role="bold">/usr/afs/bin</emphasis> directory. The 
+     following instructions also create files in other subdirectories of the 
+     <emphasis role="bold">/usr/afs</emphasis> directory.</para>
+ 
+     <para>Then issue the <emphasis role="bold">bosserver</emphasis> command to initialize the Basic OverSeer (BOS) Server, which
+     monitors and controls other AFS server processes on its server machine. Include the <emphasis role="bold">-noauth</emphasis>
+     flag to disable authorization checking. Because you have not yet configured your cell's AFS authentication and authorization
+     mechanisms, the BOS Server cannot perform authorization checking as it does during normal operation. In no-authorization mode,
+     it does not verify the identity or privilege of the issuer of a <emphasis role="bold">bos</emphasis> command, and so performs
+     any operation for anyone.</para>
+ 
+     <para>Disabling authorization checking gravely compromises cell security. You must complete all subsequent steps in one
+     uninterrupted pass and must not leave the machine unattended until you restart the BOS Server with authorization checking
+     enabled, in <link linkend="HDRWQ72">Verifying the AFS Initialization Script</link>.</para>
+ 
+     <para>As it initializes for the first time, the BOS Server creates the following directories and files, setting the owner to the
+     local superuser <emphasis role="bold">root</emphasis> and the mode bits to limit the ability to write (and in some cases, read)
+     them. For a description of the contents and function of these directories and files, see the chapter in the <emphasis>OpenAFS
+     Administration Guide</emphasis> about administering server machines. For further discussion of the mode bit settings, see <link
+     linkend="HDRWQ96">Protecting Sensitive AFS Directories</link>. <indexterm>
+         <primary>Binary Distribution</primary>
+ 
+         <secondary>copying server files from</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm> <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>subdirectories of /usr/afs</secondary>
+       </indexterm> <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>/usr/afs/bin directory</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm> <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>/usr/afs/etc directory</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm> <indexterm>
+         <primary>copying</primary>
+ 
+         <secondary>server files to local disk</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm> <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>copying</secondary>
+ 
+         <tertiary>server files to local disk</tertiary>
+       </indexterm> <indexterm>
+         <primary>usr/afs/bin directory</primary>
+ 
+         <secondary>first AFS machine</secondary>
+       </indexterm> <indexterm>
+         <primary>usr/afs/etc directory</primary>
+ 
+         <secondary>first AFS machine</secondary>
+       </indexterm> <indexterm>
+         <primary>usr/afs/db directory</primary>
+       </indexterm> <indexterm>
+         <primary>usr/afs/local directory</primary>
+       </indexterm> <indexterm>
+         <primary>usr/afs/logs directory</primary>
+       </indexterm> <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/db</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/etc/CellServDB</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/etc/ThisCell</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/local</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/logs</emphasis></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>The BOS Server also creates symbolic links called <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> and <emphasis
+     role="bold">/usr/vice/etc/CellServDB</emphasis> to the corresponding files in the <emphasis role="bold">/usr/afs/etc</emphasis>
+     directory. The AFS command interpreters consult the <emphasis role="bold">CellServDB</emphasis> and <emphasis
+     role="bold">ThisCell</emphasis> files in the <emphasis role="bold">/usr/vice/etc</emphasis> directory because they generally run
+     on client machines. On machines that are AFS servers only (as this machine currently is), the files reside only in the <emphasis
+     role="bold">/usr/afs/etc</emphasis> directory; the links enable the command interpreters to retrieve the information they need.
+     Later instructions for installing the client functionality replace the links with actual files. <orderedlist>
+         <listitem>
+ 	  <para>If you are not working from a packaged distribution, you may need to copy files from the distribution media to the local <emphasis role="bold">/usr/afs</emphasis> directory. 
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/root.server/usr/afs</emphasis>
+    # <emphasis role="bold">cp -rp  *  /usr/afs</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bosserver</secondary>
+             </indexterm> <indexterm>
+               <primary>bosserver command</primary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bosserver</emphasis> command. Include the <emphasis role="bold">-noauth</emphasis>
+           flag to disable authorization checking. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/bosserver -noauth &amp;</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Verify that the BOS Server created <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> and <emphasis
+           role="bold">/usr/vice/etc/CellServDB</emphasis> as symbolic links to the corresponding files in the <emphasis
+           role="bold">/usr/afs/etc</emphasis> directory. <programlisting>
+    # <emphasis role="bold">ls -l  /usr/vice/etc</emphasis>
+ </programlisting></para>
+ 
+           <para>If either or both of <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> and <emphasis
+           role="bold">/usr/vice/etc/CellServDB</emphasis> do not exist, or are not links, issue the following commands.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">ln -s /usr/afs/etc/ThisCell</emphasis>
+    # <emphasis role="bold">ln -s /usr/afs/etc/CellServDB</emphasis> 
+ </programlisting>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>cell name</primary>
+ 
+       <secondary>defining during installation of first machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>defining</primary>
+ 
+       <secondary>cell name during installation of first machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cell name</primary>
+ 
+       <secondary>setting in server ThisCell file</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>cell name in server ThisCell file</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>ThisCell file (server)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/afs/etc/ThisCell</primary>
+ 
+       <see>ThisCell file (server)</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ThisCell file (server)</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>ThisCell (server)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>entry in server CellServDB file</secondary>
+ 
+       <tertiary>on first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>cell membership, defining</secondary>
+ 
+       <tertiary>for server processes</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/afs/etc/CellServDB file</primary>
+ 
+       <see>CellServDB file (server)</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CellServDB file (server)</primary>
+ 
+       <secondary>creating</secondary>
+ 
+       <tertiary>on first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>CellServDB file (server)</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>CellServDB (server)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>CellServDB file (server)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>defining</secondary>
+ 
+       <tertiary>as database server</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>defining</primary>
+ 
+       <secondary>first AFS machine as database server</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ51">
+     <title>Defining Cell Name and Membership for Server Processes</title>
+ 
+     <para>Now assign your cell's name. The chapter in the <emphasis>OpenAFS Administration Guide</emphasis> about cell configuration
+     and administration issues discusses the important considerations, explains why changing the name is difficult, and outlines the
+     restrictions on name format. Two of the most important restrictions are that the name cannot include uppercase letters or more
+     than 64 characters.</para>
+ 
+     <para>Use the <emphasis role="bold">bos setcellname</emphasis> command to assign the cell name. It creates two files:
+     <itemizedlist>
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/etc/ThisCell</emphasis>, which defines this machine's cell membership</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">/usr/afs/etc/CellServDB</emphasis>, which lists the cell's database server machines; the
+           machine named on the command line is placed on the list automatically</para>
+         </listitem>
+       </itemizedlist> <note>
+         <para>In the following and every instruction in this guide, for the <replaceable>machine name</replaceable> argument
+         substitute the fully-qualified hostname (such as <emphasis role="bold">fs1.example.com</emphasis>) of the machine you are
+         installing. For the <replaceable>cell name</replaceable> argument substitute your cell's complete name (such as <emphasis
+         role="bold">example.com</emphasis>).</para>
+       </note></para>
+ 
+     <indexterm>
+       <primary>commands</primary>
+ 
+       <secondary>bos setcellname</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>bos commands</primary>
+ 
+       <secondary>setcellname</secondary>
+     </indexterm>
+ 
+     <orderedlist>
+       <listitem>
+ 	<para>If necessary, add the directory containing the <emphasis role="bold">bos</emphasis> command to your path.
+       <programlisting>
+    # <emphasis role="bold">export PATH=$PATH:/usr/afs/bin</emphasis>
+       </programlisting>
+         </para>
+       </listitem>
+ 
+       <listitem>
+         <para>Issue the <emphasis role="bold">bos setcellname</emphasis> command to set the cell name. <programlisting>
+    # <emphasis role="bold">bos setcellname</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+               role="bold">-noauth</emphasis>
+ </programlisting></para>
+ 
+         <para>Because you are not authenticated and authorization checking is disabled, the <emphasis role="bold">bos</emphasis>
+         command interpreter possibly produces error messages about being unable to obtain tickets and running unauthenticated. You
+         can safely ignore the messages. <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>bos listhosts</secondary>
+           </indexterm> <indexterm>
+             <primary>bos commands</primary>
+ 
+             <secondary>listhosts</secondary>
+           </indexterm> <indexterm>
+             <primary>CellServDB file (server)</primary>
+ 
+             <secondary>displaying entries</secondary>
+           </indexterm> <indexterm>
+             <primary>displaying</primary>
+ 
+             <secondary>CellServDB file (server) entries</secondary>
+           </indexterm></para>
+       </listitem>
+ 
+       <listitem>
+         <para>Issue the <emphasis role="bold">bos listhosts</emphasis> command to verify that the machine you are installing is now
+         registered as the cell's first database server machine. <programlisting>
+    # <emphasis role="bold">bos listhosts</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-noauth</emphasis>
+    Cell name is <replaceable>cell_name</replaceable>
+        Host 1 is <replaceable>machine_name</replaceable>
+ </programlisting></para>
+       </listitem>
+     </orderedlist>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>installing</secondary>
+ 
+       <tertiary>first</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>instructions</primary>
+ 
+       <secondary>database server machine, installing first</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>database server machine</secondary>
+ 
+       <tertiary>first</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Backup Server</primary>
+ 
+       <secondary>starting</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>buserver process</primary>
+ 
+       <see>Backup Server</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>Backup Server</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>Backup Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Protection Server</primary>
+ 
+       <secondary>starting</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ptserver process</primary>
+ 
+       <see>Protection Server</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>Protection Server</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>Protection Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>VL Server (vlserver process)</primary>
+ 
+       <secondary>starting</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Volume Location Server</primary>
+ 
+       <see>VL Server</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>VL Server</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>VL Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/afs/local/BosConfig</primary>
+ 
+       <see>BosConfig file</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>BosConfig file</primary>
+ 
+       <secondary>adding entries</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>adding</primary>
+ 
+       <secondary>entries to BosConfig file</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>BosConfig</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>initializing</primary>
+ 
+       <secondary>server process</secondary>
+ 
+       <see>starting</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>server process</primary>
+ 
+       <secondary>see also entry for each server's name</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ52">
+     <title>Starting the Database Server Processes</title>
+ 
+     <para>Next use the <emphasis role="bold">bos create</emphasis> command to create entries for the three database server processes
+     in the <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file and start them running. The three processes run on database
+     server machines only: <itemizedlist>
+ 
+         <listitem>
+           <para>The Backup Server (the <emphasis role="bold">buserver</emphasis> process) maintains the Backup Database</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The Protection Server (the <emphasis role="bold">ptserver</emphasis> process) maintains the Protection
+           Database</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The Volume Location (VL) Server (the <emphasis role="bold">vlserver</emphasis> process) maintains the Volume
+           Location Database (VLDB)</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>Kerberos</primary>
+     </indexterm>
+ 
+     <note>
+       <para>AFS ships with an additional database server named 'kaserver', which
+       was historically used to provide authentication services to AFS cells.
+       kaserver was based on <emphasis>Kerberos v4</emphasis>, as such, it is
+       not recommended for new cells. This guide assumes you have already
+       configured a Kerberos v5 realm for your site, and details the procedures 
+       required to use AFS with this realm. If you do wish to use
+       <emphasis role="bold">kaserver</emphasis>, please see the modifications
+       to these instructions detailed in 
+       <link linkend="KAS006">Starting the kaserver Database Server Process</link>
+       </para>
+     </note>
+ 
+     <para>The remaining instructions in this chapter include the <emphasis role="bold">-cell</emphasis> argument on all applicable
+     commands. Provide the cell name you assigned in <link linkend="HDRWQ51">Defining Cell Name and Membership for Server
+     Processes</link>. If a command appears on multiple lines, it is only for legibility. <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>bos create</secondary>
+       </indexterm> <indexterm>
+         <primary>bos commands</primary>
+ 
+         <secondary>create</secondary>
+       </indexterm> <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos create</emphasis> command to start the Backup Server. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver simple /usr/afs/bin/buserver</emphasis>  \
+  <emphasis role="bold">                 -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos create</emphasis> command to start the Protection Server. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">ptserver simple /usr/afs/bin/ptserver</emphasis>  \
+  <emphasis role="bold">                 -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos create</emphasis> command to start the VL Server. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">vlserver simple /usr/afs/bin/vlserver</emphasis>  \
+  <emphasis role="bold">                 -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>admin account</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afs entry in Kerberos Database</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Kerberos Database</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>afs entry in Kerberos Database</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>admin account in Kerberos Database</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>security</primary>
+ 
+       <secondary>initializing cell-wide</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cell</primary>
+ 
+       <secondary>initializing security mechanisms</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>initializing</primary>
+ 
+       <secondary>cell security mechanisms</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/afs/etc/KeyFile</primary>
+ 
+       <see>KeyFile file</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>KeyFile file</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>KeyFile</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>key</primary>
+ 
+       <see>server encryption key</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>encryption key</primary>
+ 
+       <see>server encryption key</see>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ53">
+     <title>Initializing Cell Security </title>
+ 
+     <para>If you are working with an existing cell which uses
+     <emphasis role="bold">kaserver</emphasis> or Kerberos v4 for authentication,
+     please see 
+     <link linkend="HDRWQ53">Initializing Cell Security with kaserver</link>
+     for installation instructions which replace this section.</para>
+     
+     <para>Now initialize the cell's security mechanisms. Begin by creating the following two entires in your site's Kerberos database: <itemizedlist>
+         <listitem>
+           <para>A generic administrative account, called <emphasis role="bold">admin</emphasis> by convention. If you choose to
+           assign a different name, substitute it throughout the remainder of this document.</para>
+ 
+           <para>After you complete the installation of the first machine, you can continue to have all administrators use the
+           <emphasis role="bold">admin</emphasis> account, or you can create a separate administrative account for each of them. The
+           latter scheme implies somewhat more overhead, but provides a more informative audit trail for administrative
+           operations.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The entry for AFS server processes, called either 
+           <emphasis role="bold">afs</emphasis> or 
+           <emphasis role="bold">afs/<replaceable>cell</replaceable></emphasis>. 
+           No user logs in under this identity, but it is used to encrypt the
+           server tickets that granted to AFS clients for presentation to 
+           server processes during mutual authentication. (The
+           chapter in the <emphasis>OpenAFS Administration Guide</emphasis> about cell configuration and administration describes the
+           role of server encryption keys in mutual authentication.)</para>
+ 
+           <para>In Step <link linkend="LIWQ58">7</link>, you also place the initial AFS server encryption key into the <emphasis
+           role="bold">/usr/afs/etc/KeyFile</emphasis> file. The AFS server processes refer to this file to learn the server
+           encryption key when they need to decrypt server tickets.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>You also issue several commands that enable the new <emphasis role="bold">admin</emphasis> user to issue privileged
+     commands in all of the AFS suites.</para>
+ 
+     <para>The following instructions do not configure all of the security mechanisms related to the AFS Backup System. See the
+     chapter in the <emphasis>OpenAFS Administration Guide</emphasis> about configuring the Backup System.</para>
+ 
+     <para>The examples below assume you are using MIT Kerberos. Please refer 
+     to the documentation for your KDC's administrative interface if you are 
+     using a different vendor</para>
+ 
+     <orderedlist>
+         <listitem>
+           <para>Enter <emphasis role="bold">kadmin</emphasis> interactive mode.
+ <programlisting>
+    # <emphasis role="bold">kadmin</emphasis>
+ Authenticating as principal <replaceable>you</replaceable>/admin@<replaceable>YOUR REALM</replaceable> with password
+ Password for <replaceable>you/admin@REALM</replaceable>: <replaceable>your_password</replaceable>
+ </programlisting> <indexterm>
+               <primary>server encryption key</primary>
+ 
+               <secondary>in Kerberos Database</secondary>
+             </indexterm> <indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>server encryption key</secondary>
+ 
+               <tertiary>Kerberos Database</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ54" />Issue the 
+           <emphasis role="bold">add_principal</emphasis> command to create 
+           Kerberos Database entries called 
+           <emphasis role="bold">admin</emphasis> and 
+           <emphasis role="bold">afs/&lt;<replaceable>cell name</replaceable>&gt;</emphasis>.</para>
+ 
+           <para>You should make the <replaceable>admin_passwd</replaceable> as
+           long and complex as possible, but keep in mind that administrators 
+           need to enter it often. It must be at least six characters long.</para>
+           <para>Note that when creating the 
+           <emphasis role="bold">afs/&lt;<replaceable>cell name</replaceable>&gt;</emphasis> 
+           entry, the encryption types should be restricted to des-cbc-crc:v4. 
+           For more details regarding encryption types, see the documentation 
+           for your Kerberos installation.
+ 
+ <programlisting>
+    kadmin: <emphasis role="bold">add_principal -randkey -e des-cbc-crc:v4 afs/</emphasis>&lt;<replaceable>cell name</replaceable>&gt;
+    Principal "afs/<replaceable>cell name</replaceable>@<replaceable>REALM</replaceable>" created.
+    kadmin:  <emphasis role="bold">add_principal admin</emphasis>
+    Enter password for principal "admin@<replaceable>REALM</replaceable>": <emphasis role="bold"><replaceable>admin_password</replaceable></emphasis>
+    Principal "admin@<replaceable>REALM</replaceable>" created.
+ </programlisting>
+           </para>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>kas examine</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>kas commands</primary>
+ 
+             <secondary>examine</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>displaying</primary>
+ 
+             <secondary>server encryption key</secondary>
+ 
+             <tertiary>Authentication Database</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ55" />Issue the <emphasis role="bold">kadmin 
+ 	  get_principal</emphasis> command to display the <emphasis
+           role="bold">afs/</emphasis>&lt;<replaceable>cell name</replaceable>&gt; entry. 
+ <programlisting>
+   kadmin: <emphasis role="bold">get_principal afs/&lt;<replaceable>cell name</replaceable>&gt;</emphasis>
+   Principal: afs/<replaceable>cell</replaceable>
+   [ ... ]
+   Key: vno 2, DES cbc mode with CRC-32, no salt
+   [ ... ]
+ </programlisting>
+ </para>
+         </listitem>
+         <listitem>
+           <para>Extract the newly created key for <emphasis role="bold">afs/<replaceable>cell</replaceable></emphasis> to a keytab on the local machine. We will use <emphasis role="bold">/etc/afs.keytab</emphasis> as the location for this keytab.</para>
+ 
+           <para>The keytab contains the key material that ensures the security of your AFS cell. You should ensure that it is kept in a secure location at all times.</para>
+ 
+ <programlisting>
+   kadmin: <emphasis role="bold">ktadd -k /etc/afs.keytab -e des-cbc-crc:v4 afs/&lt;<replaceable>cell name</replaceable>&gt;</emphasis>
+ Entry for principal afs/&lt;<replaceable>cell name</replaceable>&gt; with kvno 3, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/afs.keytab
+ </programlisting>
+           <para>Make a note of the key version number (kvno) given in the
+           response, as you will need it to load the key into bos in a later
+           step</para>
+ 
+           <note><para>Note that each time you run 
+           <emphasis role="bold">ktadd</emphasis> a new key is generated
+           for the item being extracted. This means that you cannot run ktadd
+           multiple times and end up with the same key material each time.
+           </para></note>
+ 
+         </listitem>
+         <listitem>
+           <para>Issue the <emphasis role="bold">kadmin quit</emphasis> command to leave <emphasis role="bold">kadmin</emphasis>
+           interactive mode. <programlisting>
+    kadmin: <emphasis role="bold">quit</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos adduser</secondary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>adduser</secondary>
+             </indexterm> <indexterm>
+               <primary>usr/afs/etc/UserList</primary>
+ 
+               <see>UserList file</see>
+             </indexterm> <indexterm>
+               <primary>UserList file</primary>
+ 
+               <secondary>first AFS machine</secondary>
+             </indexterm> <indexterm>
+               <primary>files</primary>
+ 
+               <secondary>UserList</secondary>
+             </indexterm> <indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>UserList file entry</secondary>
+             </indexterm> <indexterm>
+               <primary>admin account</primary>
+ 
+               <secondary>adding</secondary>
+ 
+               <tertiary>to UserList file</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ57" />Issue the <emphasis role="bold">bos adduser</emphasis> command to add the <emphasis
+           role="bold">admin</emphasis> user to the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file. This enables the
+           <emphasis role="bold">admin</emphasis> user to issue privileged <emphasis role="bold">bos</emphasis> and <emphasis
+           role="bold">vos</emphasis> commands. <programlisting>
+    # <emphasis role="bold">./bos adduser</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">admin -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+ </programlisting> 
+             <indexterm>
+               <primary>commands</primary>
+               <secondary>asetkey</secondary>
+             </indexterm>
+             <indexterm>
+               <primary>creating</primary>
+               <secondary>server encryption key</secondary>
+               <tertiary>KeyFile file</tertiary>
+             </indexterm> 
+             <indexterm>
+               <primary>server encryption key</primary>
+               <secondary>in KeyFile file</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ58" />Issue the 
+           <emphasis role="bold">asetkey</emphasis> command to set the AFS 
+           server encryption key in the 
+           <emphasis role="bold">/usr/afs/etc/KeyFile</emphasis> file. This key 
+           is created from the <emphasis role="bold">/etc/afs.keytab</emphasis> 
+           file created earlier.</para>
+ 
+           <para>asetkey requires the key version number (or kvno) of the 
+           <emphasis role="bold">afs/</emphasis><replaceable>cell</replaceable>
+           key. You should have noted this down when creating the key earlier. 
+           The key version number can also be found by running the 
+           <emphasis role="bold">kvno</emphasis> command</para>
+ <programlisting>
+    # <emphasis role="bold">kvno afs/</emphasis>&lt;<replaceable>cell name</replaceable>&gt;
+ </programlisting>
+ 
+           <para>Once the kvno is known, the key can then be extracted using 
+           asetkey</para>
+ <programlisting>
+    # <emphasis role="bold">asetkey</emphasis> &lt;<replaceable>kvno</replaceable>&gt;  <emphasis role="bold">/etc/afs.keytab afs/</emphasis>&lt;<replaceable>cell name</replaceable>&gt;
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+             <secondary>bos listkeys</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>bos commands</primary>
+             <secondary>listkeys</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>displaying</primary>
+             <secondary>server encryption key</secondary>
+             <tertiary>KeyFile file</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ59" />Issue the 
+           <emphasis role="bold">bos listkeys</emphasis> command to verify that 
+           the key version number for the new key in the 
+           <emphasis role="bold">KeyFile</emphasis> file is the same as the key 
+           version number in the Authentication Database's 
+           <emphasis role="bold">afs/<replaceable>cell name</replaceable></emphasis> 
+           entry, which you displayed in Step <link linkend="LIWQ55">3</link>. 
+ <programlisting>
+    # <emphasis role="bold">./bos listkeys</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+    key 0 has cksum <replaceable>checksum</replaceable>    
+ </programlisting></para>
+ 
+           <para>You can safely ignore any error messages indicating that <emphasis role="bold">bos</emphasis> failed to get tickets
+           or that authentication failed.</para>
+         </listitem>
+       </orderedlist>
+     </sect1>
+     <sect1 id="HDRWQ53a">
+       <title>Initializing the Protection Database</title>
+       
+       <para>Now continue to configure your cell's security systems by
+       populating the Protection Database with the newly created
+       <emphasis role="bold">admin</emphasis> user, and permitting it
+       to issue priviledged commands on the AFS filesystem.</para>
+           
+         <orderedlist>
+           <listitem>
+           <indexterm>
+             <primary>commands</primary>
+             <secondary>pts createuser</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>pts commands</primary>
+             <secondary>createuser</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Protection Database</primary>
+           </indexterm>
+           <para>Issue the <emphasis role="bold">pts createuser</emphasis> command to create a Protection Database entry for the
+           <emphasis role="bold">admin</emphasis> user.</para>
+ 
+           <para>By default, the Protection Server assigns AFS UID 1 (one) to the <emphasis role="bold">admin</emphasis> user,
+           because it is the first user entry you are creating. If the local password file (<emphasis
+           role="bold">/etc/passwd</emphasis> or equivalent) already has an entry for <emphasis role="bold">admin</emphasis> that
+           assigns it a UNIX UID other than 1, it is best to use the <emphasis role="bold">-id</emphasis> argument to the <emphasis
+           role="bold">pts createuser</emphasis> command to make the new AFS UID match the existing UNIX UID. Otherwise, it is best
+           to accept the default.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">pts createuser -name admin -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; [<emphasis
+               role="bold">-id</emphasis> &lt;<replaceable>AFS UID</replaceable>&gt;]  <emphasis role="bold">-noauth</emphasis>
+    User admin has id <replaceable>AFS UID</replaceable>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+             <secondary>pts adduser</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>pts commands</primary>
+             <secondary>adduser</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>system:administrators group</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>admin account</primary>
+             <secondary>adding</secondary>
+             <tertiary>to system:administrators group</tertiary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">pts adduser</emphasis> command to make the <emphasis role="bold">admin</emphasis>
+           user a member of the <emphasis role="bold">system:administrators</emphasis> group, and the <emphasis role="bold">pts
+           membership</emphasis> command to verify the new membership. Membership in the group enables the <emphasis
+           role="bold">admin</emphasis> user to issue privileged <emphasis role="bold">pts</emphasis> commands and some privileged
+           <emphasis role="bold">fs</emphasis> commands. <programlisting>
+    # <emphasis role="bold">./pts adduser admin system:administrators -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+    # <emphasis role="bold">./pts membership admin -cell</emphasis>  &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+    Groups admin (id: 1) is a member of:
+      system:administrators
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+               <secondary>bos restart</secondary>
+               <tertiary>on first AFS machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+               <secondary>restart</secondary>
+               <tertiary>on first AFS machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>restarting server process</primary>
+               <secondary>on first AFS machine</secondary>
+             </indexterm> <indexterm>
+               <primary>server process</primary>
+               <secondary>restarting</secondary>
+               <tertiary>on first AFS machine</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos restart</emphasis> command with the <emphasis role="bold">-all</emphasis> flag
+           to restart the database server processes, so that they start using the new server encryption key. <programlisting>
+    # <emphasis role="bold">./bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-all -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                 role="bold">-noauth</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+     <indexterm>
+       <primary>File Server</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>fileserver process</primary>
+ 
+       <see>File Server</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>File Server</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>File Server, fs process</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Volume Server</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volserver process</primary>
+ 
+       <see>Volume Server</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>Volume Server</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>Volume Server</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>Salvager (salvager process)</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>fs process</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>fs process</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>Salvager</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ60">
+     <title>Starting the File Server, Volume Server, and Salvager</title>
+ 
+     <para>Start the <emphasis role="bold">fs</emphasis> process, which consists of the File Server, Volume Server, and Salvager
+     (<emphasis role="bold">fileserver</emphasis>, <emphasis role="bold">volserver</emphasis> and <emphasis
+     role="bold">salvager</emphasis> processes). <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos create</emphasis> command to start the <emphasis role="bold">fs</emphasis>
+           process. The command appears here on multiple lines only for legibility. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">fs fs /usr/afs/bin/fileserver</emphasis>   \
+                    <emphasis role="bold">/usr/afs/bin/volserver /usr/afs/bin/salvager</emphasis>  \
+                    <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>   
+ </programlisting></para>
+ 
+           <para>Sometimes a message about Volume Location Database (VLDB) initialization appears, along with one or more instances
+           of an error message similar to the following:</para>
+ 
+           <programlisting>
+    FSYNC_clientInit temporary failure (will retry)   
+ </programlisting>
+ 
+           <para>This message appears when the <emphasis role="bold">volserver</emphasis> process tries to start before the <emphasis
+           role="bold">fileserver</emphasis> process has completed its initialization. Wait a few minutes after the last such message
+           before continuing, to guarantee that both processes have started successfully. <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos status</secondary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>status</secondary>
+             </indexterm></para>
+ 
+           <para>You can verify that the <emphasis role="bold">fs</emphasis> process has started successfully by issuing the
+           <emphasis role="bold">bos status</emphasis> command. Its output mentions two <computeroutput>proc
+           starts</computeroutput>.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">./bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">fs -long -noauth</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Your next action depends on whether you have ever run AFS file server machines in the cell: <itemizedlist>
+               <indexterm>
+                 <primary>commands</primary>
+ 
+                 <secondary>vos create</secondary>
+ 
+                 <tertiary>root.afs volume</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>vos commands</primary>
+ 
+                 <secondary>create</secondary>
+ 
+                 <tertiary>root.afs volume</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>root.afs volume</primary>
+ 
+                 <secondary>creating</secondary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>volume</primary>
+ 
+                 <secondary>creating</secondary>
+ 
+                 <tertiary>root.afs</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>creating</primary>
+ 
+                 <secondary>root.afs volume</secondary>
+               </indexterm>
+ 
+               <listitem>
+                 <para>If you are installing the first AFS server machine ever in the cell (that is, you are not upgrading the AFS
+                 software from a previous version), create the first AFS volume, <emphasis role="bold">root.afs</emphasis>.</para>
+ 
+                 <para>For the <replaceable>partition name</replaceable> argument, substitute the name of one of the machine's AFS
+                 server partitions (such as <emphasis role="bold">/vicepa</emphasis>).</para>
+ 
+                 <programlisting>
+    # <emphasis role="bold">./vos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <emphasis
+                     role="bold">root.afs</emphasis>   \
+                    <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>   
+ </programlisting>
+ 
+                 <para>The Volume Server produces a message confirming that it created the volume on the specified partition. You can
+                 ignore error messages indicating that tokens are missing, or that authentication failed. <indexterm>
+                     <primary>commands</primary>
+ 
+                     <secondary>vos syncvldb</secondary>
+                   </indexterm> <indexterm>
+                     <primary>vos commands</primary>
+ 
+                     <secondary>syncvldb</secondary>
+                   </indexterm> <indexterm>
+                     <primary>commands</primary>
+ 
+                     <secondary>vos syncserv</secondary>
+                   </indexterm> <indexterm>
+                     <primary>vos commands</primary>
+ 
+                     <secondary>syncserv</secondary>
+                   </indexterm></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If there are existing AFS file server machines and volumes in the cell, issue the <emphasis role="bold">vos
+                 syncvldb</emphasis> and <emphasis role="bold">vos syncserv</emphasis> commands to synchronize the VLDB with the
+                 actual state of volumes on the local machine. To follow the progress of the synchronization operation, which can
+                 take several minutes, use the <emphasis role="bold">-verbose</emphasis> flag. <programlisting>
+    # <emphasis role="bold">./vos syncvldb</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                       role="bold">-verbose  -noauth</emphasis>
+    # <emphasis role="bold">./vos syncserv</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt; <emphasis
+                       role="bold">-verbose  -noauth</emphasis>   
+ </programlisting></para>
+ 
+                 <para>You can ignore error messages indicating that tokens are missing, or that authentication failed.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>Update Server</primary>
+ 
+       <secondary>starting server portion</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>upserver process</primary>
+ 
+       <see>Update Server</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>starting</primary>
+ 
+       <secondary>Update Server server portion</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>Update Server server portion</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>defining</secondary>
+ 
+       <tertiary>as binary distribution machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>defining</secondary>
+ 
+       <tertiary>as system control machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>system control machine</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>binary distribution machine</primary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ61">
+     <title>Starting the Server Portion of the Update Server</title>
+ 
+     <para>Start the server portion of the Update Server (the <emphasis role="bold">upserver</emphasis> process), to distribute the
+     contents of directories on this machine to other server machines in the cell. It becomes active when you configure the client
+     portion of the Update Server on additional server machines.</para>
+ 
+     <para>Distributing the contents of its <emphasis role="bold">/usr/afs/etc</emphasis> directory makes this machine the cell's
+     <emphasis>system control machine</emphasis>. The other server machines in the cell run the <emphasis
+     role="bold">upclientetc</emphasis> process (an instance of the client portion of the Update Server) to retrieve the
+     configuration files. Use the <emphasis role="bold">-crypt</emphasis> argument to the <emphasis role="bold">upserver</emphasis>
+     initialization command to specify that the Update Server distributes the contents of the <emphasis
+     role="bold">/usr/afs/etc</emphasis> directory only in encrypted form, as shown in the following instruction. Several of the
+     files in the directory, particularly the <emphasis role="bold">KeyFile</emphasis> file, are crucial to cell security and so must
+     never cross the network unencrypted.</para>
+ 
+     <para>(You can choose not to configure a system control machine, in which case you must update the configuration files in each
+     server machine's <emphasis role="bold">/usr/afs/etc</emphasis> directory individually. The <emphasis role="bold">bos</emphasis>
+     commands used for this purpose also encrypt data before sending it across the network.)</para>
+ 
+     <para>Distributing the contents of its <emphasis role="bold">/usr/afs/bin</emphasis> directory to other server machines of its
+     system type makes this machine a <emphasis>binary distribution machine</emphasis>. The other server machines of its system type
+     run the <emphasis role="bold">upclientbin</emphasis> process (an instance of the client portion of the Update Server) to
+     retrieve the binaries. If your platform has a package management system, 
+     such as 'rpm' or 'apt', running the Update Server to distribute binaries 
+     may interfere with this system.</para>
+ 
+     <para>The binaries in the <emphasis role="bold">/usr/afs/bin</emphasis> directory are not sensitive, so it is not necessary to
+     encrypt them before transfer across the network. Include the <emphasis role="bold">-clear</emphasis> argument to the <emphasis
+     role="bold">upserver</emphasis> initialization command to specify that the Update Server distributes the contents of the
+     <emphasis role="bold">/usr/afs/bin</emphasis> directory in unencrypted form unless an <emphasis
+     role="bold">upclientbin</emphasis> process requests encrypted transfer.</para>
+ 
+     <para>Note that the server and client portions of the Update Server always mutually authenticate with one another, regardless of
+     whether you use the <emphasis role="bold">-clear</emphasis> or <emphasis role="bold">-crypt</emphasis> arguments. This protects
+     their communications from eavesdropping to some degree.</para>
+ 
+     <para>For more information on the <emphasis role="bold">upclient</emphasis> and <emphasis role="bold">upserver</emphasis>
+     processes, see their reference pages in the <emphasis>OpenAFS Administration Reference</emphasis>. The commands appear on
+     multiple lines here only for legibility. <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos create</emphasis> command to start the <emphasis role="bold">upserver</emphasis>
+           process. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name&gt;</replaceable> <emphasis role="bold">upserver simple</emphasis>  \ 
+              <emphasis role="bold">"/usr/afs/bin/upserver  -crypt /usr/afs/etc</emphasis>    \
+              <emphasis role="bold">-clear /usr/afs/bin" -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis
+                 role="bold">-noauth</emphasis> 
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+   </sect1>
+ 
+   <sect1 id="HDRWQ62">
+     <title>Starting the Controller for NTPD</title>
+ 
+     <para>Keeping the clocks on all server and client machines in your cell synchronized is crucial to several functions, and in
+     particular to the correct operation of AFS's distributed database technology, Ubik. The chapter in the <emphasis>OpenAFS
+     Administration Guide</emphasis> about administering server machines explains how time skew can disturb Ubik's performance and
+     cause service outages in your cell.</para>
+ 
+     <para>Historically, AFS used to distribute its own version of the Network 
+ Time Protocol Daemon. Whilst this is still provided for existing sites, we 
+ recommend that you configure and install your time service independently of 
+ AFS. A reliable timeservice will also be required by your Kerberos realm, 
+ and so may already be available at your site.</para>
+ 
+     <indexterm>
+       <primary>overview</primary>
+ 
+       <secondary>installing client functionality on first machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>client functionality</secondary>
+ 
+       <tertiary>installing</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>client functionality</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ63">
+     <title>Overview: Installing Client Functionality</title>
+ 
+     <para>The machine you are installing is now an AFS file server machine, 
+     database server machine, system control machine, and binary distribution 
+     machine. Now make it a client machine by completing the following tasks: 
+     <orderedlist>
+         <listitem>
+           <para>Define the machine's cell membership for client processes</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the client version of the <emphasis role="bold">CellServDB</emphasis> file</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Define cache location and size</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the <emphasis role="bold">/afs</emphasis> directory and start the Cache Manager</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>Distribution</primary>
+ 
+       <secondary>copying client files from</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>copying</secondary>
+ 
+       <tertiary>client files to local disk</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>copying</primary>
+ 
+       <secondary>client files to local disk</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ64">
+     <title>Copying Client Files to the Local Disk</title>
+ 
+     <para>You need only undertake the steps in this section, if you are using
+     a tar file distribution, or one built from scratch. Packaged distributions,
+     such as RPMs or DEBs will already have installed the necessary files in
+     the correct locations.</para>
+ 
+     <para>Before installing and configuring the AFS client, copy the necessary files from the tarball to the local <emphasis
+     role="bold">/usr/vice/etc</emphasis> directory. <orderedlist>
+         <listitem>
+           <para>If you have not already done so, unpack the distribution 
+           tarball for this machine's system type into a suitable location on 
+           the filesystem, such as <emphasis role="bold">/tmp/afsdist</emphasis>.
+           If you use a different location, substitue that in the examples that 
+           follow.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Copy files to the local <emphasis role="bold">/usr/vice/etc</emphasis> directory.</para>
+ 
+           <para>This step places a copy of the AFS initialization script (and related files, if applicable) into the <emphasis
+           role="bold">/usr/vice/etc</emphasis> directory. In the preceding instructions for incorporating AFS into the kernel, you
+           copied the script directly to the operating system's conventional location for initialization files. When you incorporate
+           AFS into the machine's startup sequence in a later step, you can choose to link the two files.</para>
+ 
+           <para>On some system types that use a dynamic kernel loader program, you previously copied AFS library files into a
+           subdirectory of the <emphasis role="bold">/usr/vice/etc</emphasis> directory. On other system types, you copied the
+           appropriate AFS library file directly to the directory where the operating system accesses it. The following commands do
+           not copy or recopy the AFS library files into the <emphasis role="bold">/usr/vice/etc</emphasis> directory, because on
+           some system types the library files consume a large amount of space. If you want to copy them, add the <emphasis
+           role="bold">-r</emphasis> flag to the first <emphasis role="bold">cp</emphasis> command and skip the second <emphasis
+           role="bold">cp</emphasis> command.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/root.client/usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -p  *  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -rp  C  /usr/vice/etc</emphasis>
+ </programlisting>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>cell name</primary>
+ 
+       <secondary>setting in client ThisCell file</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>cell name in client ThisCell file</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>ThisCell file (client)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>cell membership, defining</secondary>
+ 
+       <tertiary>for client processes</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/vice/etc/ThisCell</primary>
+ 
+       <see>ThisCell file (client)</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ThisCell file (client)</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>ThisCell (client)</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ65">
+     <title>Defining Cell Membership for Client Processes</title>
+ 
+     <para>Every AFS client machine has a copy of the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file on its local disk
+     to define the machine's cell membership for the AFS client programs that run on it. The <emphasis
+     role="bold">ThisCell</emphasis> file you created in the <emphasis role="bold">/usr/afs/etc</emphasis> directory (in <link
+     linkend="HDRWQ51">Defining Cell Name and Membership for Server Processes</link>) is used only by server processes.</para>
+ 
+     <para>Among other functions, the <emphasis role="bold">ThisCell</emphasis> file on a client machine determines the following:
+     <itemizedlist>
+         <listitem>
+           <para>The cell in which users gain tokens when they log onto the 
+           machine, assuming it is using an AFS-modified login utility</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The cell in which users gain tokens by default when they issue
+           the <emphasis role="bold">aklog</emphasis> command</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The cell membership of the AFS server processes that the AFS 
+           command interpreters on this machine contact by default</para>
+         </listitem>
+       </itemizedlist> 
+     <orderedlist>
+         <listitem>
+           <para>Change to the <emphasis role="bold">/usr/vice/etc</emphasis> directory and remove the symbolic link created in <link
+           linkend="HDRWQ50">Starting the BOS Server</link>. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm ThisCell</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the <emphasis role="bold">ThisCell</emphasis> file as a copy of the <emphasis
+           role="bold">/usr/afs/etc/ThisCell</emphasis> file. Defining the same local cell for both server and client processes leads
+           to the most consistent AFS performance. <programlisting>
+    # <emphasis role="bold">cp  /usr/afs/etc/ThisCell  ThisCell</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>entry in client CellServDB file</secondary>
+ 
+       <tertiary>on first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/vice/etc/CellServDB</primary>
+ 
+       <see>CellServDB file (client)</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CellServDB file (client)</primary>
+ 
+       <secondary>creating</secondary>
+ 
+       <tertiary>on first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>CellServDB file (client)</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CellServDB file (client)</primary>
+ 
+       <secondary>required format</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>requirements</primary>
+ 
+       <secondary>CellServDB file format (client version)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>CellServDB (client)</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>CellServDB file (client)</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ66">
+     <title>Creating the Client CellServDB File</title>
+ 
+     <para>The <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on a client machine's local disk lists the database
+     server machines for each cell that the local Cache Manager can contact. If there is no entry in the file for a cell, or if the
+     list of database server machines is wrong, then users working on this machine cannot access the cell. The chapter in the
+     <emphasis>OpenAFS Administration Guide</emphasis> about administering client machines explains how to maintain the file after
+     creating it.</para>
+ 
+     <para>As the <emphasis role="bold">afsd</emphasis> program initializes the Cache Manager, it copies the contents of the
+     <emphasis role="bold">CellServDB</emphasis> file into kernel memory. The Cache Manager always consults the list in kernel memory
+     rather than the <emphasis role="bold">CellServDB</emphasis> file itself. Between reboots of the machine, you can use the
+     <emphasis role="bold">fs newcell</emphasis> command to update the list in kernel memory directly; see the chapter in the
+     <emphasis>OpenAFS Administration Guide</emphasis> about administering client machines.</para>
+ 
+     <para>The AFS distribution includes the file 
+     <emphasis role="bold">CellServDB.dist</emphasis>. It includes an entry for 
+     all AFS cells that agreed to share their database server machine 
+     information at the time the distribution was 
+     created. The definitive copy of this file is maintained at 
+     grand.central.org, and updates may be obtained from
+     /afs/grand.central.org/service/CellServDB or 
+     <ulink url="http://grand.central.org/dl/cellservdb/CellServDB">
+     http://grand.central.org/dl/cellservdb/CellServDB</ulink></para>
+ 
+     <para>The <emphasis role="bold">CellServDB.dist</emphasis> file can be a 
+     good basis for the client <emphasis role="bold">CellServDB</emphasis> file, 
+     because all of the entries in it use the correct format. You can add or 
+     remove cell entries as you see fit. Depending on your cache manager
+     configuration, additional steps (as detailed in 
+     <link linkend="HDRWQ91">Enabling Access to Foreign Cells</link>) may be
+     required to enable the Cache Manager to actually reach the cells.</para>
+ 
+     <para>In this section, you add an entry for the local cell to the local <emphasis role="bold">CellServDB</emphasis> file. The
+     current working directory is still <emphasis role="bold">/usr/vice/etc</emphasis>. <orderedlist>
+         <listitem>
+           <para>Remove the symbolic link created in <link linkend="HDRWQ50">Starting the BOS Server</link> and rename the <emphasis
+           role="bold">CellServDB.sample</emphasis> file to <emphasis role="bold">CellServDB</emphasis>. <programlisting>
+    # <emphasis role="bold">rm CellServDB</emphasis>
+    # <emphasis role="bold">mv CellServDB.sample CellServDB</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Add an entry for the local cell to the <emphasis role="bold">CellServDB</emphasis> file. One easy method is to use
+           the <emphasis role="bold">cat</emphasis> command to append the contents of the server <emphasis
+           role="bold">/usr/afs/etc/CellServDB</emphasis> file to the client version. <programlisting>
+     # <emphasis role="bold">cat  /usr/afs/etc/CellServDB &gt;&gt;  CellServDB</emphasis>   
+ </programlisting></para>
+ 
+           <para>Then open the file in a text editor to verify that there are no blank lines, and that all entries have the required
+           format, which is described just following. The ordering of cells is not significant, but it can be convenient to have the
+           client machine's home cell at the top; move it there now if you wish. <itemizedlist>
+               <listitem>
+                 <para>The first line of a cell's entry has the following format: <programlisting>
+    &gt;<replaceable>cell_name</replaceable>      #<replaceable>organization</replaceable>   
+ </programlisting></para>
+ 
+                 <para>where <replaceable>cell_name</replaceable> is the cell's complete Internet domain name (for example, <emphasis
+                 role="bold">example.com</emphasis>) and <replaceable>organization</replaceable> is an optional field that follows any
+                 number of spaces and the number sign (<computeroutput>#</computeroutput>). By convention it names the organization
+                 to which the cell corresponds (for example, the Example Corporation).</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>After the first line comes a separate line for each database server machine. Each line has the following
+                 format: <programlisting>
+    <replaceable>IP_address</replaceable>   #<replaceable>machine_name</replaceable>   
+ </programlisting></para>
+ 
+                 <para>where <replaceable>IP_address</replaceable> is the machine's IP address in dotted decimal format (for example,
+                 192.12.105.3). Following any number of spaces and the number sign (<computeroutput>#</computeroutput>) is
+                 <replaceable>machine_name</replaceable>, the machine's fully-qualified hostname (for example, <emphasis
+                 role="bold">db1.example.com</emphasis>). In this case, the number sign does not indicate a comment;
+                 <replaceable>machine_name</replaceable> is a required field.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If the file includes cells that you do not wish users of this machine to access, remove their entries.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>The following example shows entries for two cells, each of which has three database server machines:</para>
+ 
+     <programlisting>
+    &gt;example.com       #Example Corporation (home cell)
+    192.12.105.3      #db1.example.com
+    192.12.105.4      #db2.example.com
+    192.12.105.55     #db3.example.com
+    &gt;stateu.edu    #State University cell
+    138.255.68.93     #serverA.stateu.edu
+    138.255.68.72     #serverB.stateu.edu
+    138.255.33.154    #serverC.stateu.edu
+ </programlisting>
+ 
+     <indexterm>
+       <primary>cache</primary>
+ 
+       <secondary>configuring</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>configuring</primary>
+ 
+       <secondary>cache</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>cache size and location</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>cache size and location</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ67">
+     <title>Configuring the Cache</title>
+ 
+     <para>The Cache Manager uses a cache on the local disk or in machine memory to store local copies of files fetched from file
+     server machines. As the <emphasis role="bold">afsd</emphasis> program initializes the Cache Manager, it sets basic cache
+     configuration parameters according to definitions in the local <emphasis role="bold">/usr/vice/etc/cacheinfo</emphasis> file.
+     The file has three fields: <orderedlist>
+         <listitem>
+           <para>The first field names the local directory on which to mount the AFS filespace. The conventional location is the
+           <emphasis role="bold">/afs</emphasis> directory.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The second field defines the local disk directory to use for the disk cache. The conventional location is the
+           <emphasis role="bold">/usr/vice/cache</emphasis> directory, but you can specify an alternate directory if another
+           partition has more space available. There must always be a value in this field, but the Cache Manager ignores it if the
+           machine uses a memory cache.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The third field specifies the number of kilobyte (1024 byte) blocks to allocate for the cache.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>The values you define must meet the following requirements. <itemizedlist>
+         <listitem>
+           <para>On a machine using a disk cache, the Cache Manager expects always to be able to use the amount of space specified in
+           the third field. Failure to meet this requirement can cause serious problems, some of which can be repaired only by
+           rebooting. You must prevent non-AFS processes from filling up the cache partition. The simplest way is to devote a
+           partition to the cache exclusively.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The amount of space available in memory or on the partition housing the disk cache directory imposes an absolute
+           limit on cache size.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The maximum supported cache size can vary in each AFS release; see the <emphasis>OpenAFS Release Notes</emphasis>
+           for the current version.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>For a disk cache, you cannot specify a value in the third field that exceeds 95% of the space available on the
+           partition mounted at the directory named in the second field. If you violate this restriction, the <emphasis
+           role="bold">afsd</emphasis> program exits without starting the Cache Manager and prints an appropriate message on the
+           standard output stream. A value of 90% is more appropriate on most machines. Some operating systems (such as AIX) do not
+           automatically reserve some space to prevent the partition from filling completely; for them, a smaller value (say, 80% to
+           85% of the space available) is more appropriate.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>For a memory cache, you must leave enough memory for other processes and applications to run. If you try to allocate
+           more memory than is actually available, the <emphasis role="bold">afsd</emphasis> program exits without initializing the
+           Cache Manager and produces the following message on the standard output stream. <programlisting>
+    afsd: memCache allocation failure at <replaceable>number</replaceable> KB
+ </programlisting></para>
+ 
+           <para>The <replaceable>number</replaceable> value is how many kilobytes were allocated just before the failure, and so
+           indicates the approximate amount of memory available.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Within these hard limits, the factors that determine appropriate cache size include the number of users working on the
+     machine, the size of the files with which they work, and (for a memory cache) the number of processes that run on the machine.
+     The higher the demand from these factors, the larger the cache needs to be to maintain good performance.</para>
+ 
+     <para>Disk caches smaller than 10 MB do not generally perform well. Machines serving multiple users usually perform better with
+     a cache of at least 60 to 70 MB. The point at which enlarging the cache further does not really improve performance depends on
+     the factors mentioned previously and is difficult to predict.</para>
+ 
+     <para>Memory caches smaller than 1 MB are nonfunctional, and the performance of caches smaller than 5 MB is usually
+     unsatisfactory. Suitable upper limits are similar to those for disk caches but are probably determined more by the demands on
+     memory from other sources on the machine (number of users and processes). Machines running only a few processes possibly can use
+     a smaller memory cache.</para>
+ 
+     <sect2 id="HDRWQ68">
+       <title>Configuring a Disk Cache</title>
+ 
+       <note>
+         <para>Not all file system types that an operating system supports are necessarily supported for use as the cache partition.
+         For possible restrictions, see the <emphasis>OpenAFS Release Notes</emphasis>.</para>
+       </note>
+ 
+       <para>To configure the disk cache, perform the following procedures: <orderedlist>
+           <listitem>
+             <para>Create the local directory to use for caching. The following instruction shows the conventional location,
+             <emphasis role="bold">/usr/vice/cache</emphasis>. If you are devoting a partition exclusively to caching, as
+             recommended, you must also configure it, make a file system on it, and mount it at the directory created in this step.
+             <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice/cache</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create the <emphasis role="bold">cacheinfo</emphasis> file to define the configuration parameters discussed
+             previously. The following instruction shows the standard mount location, <emphasis role="bold">/afs</emphasis>, and the
+             standard cache location, <emphasis role="bold">/usr/vice/cache</emphasis>. <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:</emphasis><replaceable>#blocks</replaceable><emphasis role="bold">" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting></para>
+ 
+             <para>The following example defines the disk cache size as 50,000 KB:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:50000" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ69">
+       <title>Configuring a Memory Cache</title>
+ 
+       <para>To configure a memory cache, create the <emphasis role="bold">cacheinfo</emphasis> file to define the configuration
+       parameters discussed previously. The following instruction shows the standard mount location, <emphasis
+       role="bold">/afs</emphasis>, and the standard cache location, <emphasis role="bold">/usr/vice/cache</emphasis> (though the
+       exact value of the latter is irrelevant for a memory cache).</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:</emphasis><replaceable>#blocks</replaceable><emphasis role="bold">" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting>
+ 
+       <para>The following example allocates 25,000 KB of memory for the cache.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:25000" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>first AFS machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>Cache Manager</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>Cache Manager</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afs (/afs) directory</primary>
+ 
+         <secondary>creating</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS initialization script</primary>
+ 
+         <secondary>setting afsd parameters</secondary>
+ 
+         <tertiary>first AFS machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>afsd command parameters</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ70">
+     <title>Configuring the Cache Manager</title>
+ 
+     <para>By convention, the Cache Manager mounts the AFS filespace on the local <emphasis role="bold">/afs</emphasis> directory. In
+     this section you create that directory.</para>
+ 
+     <para>The <emphasis role="bold">afsd</emphasis> program sets several cache configuration parameters as it initializes the Cache
+     Manager, and starts daemons that improve performance. You can use the <emphasis role="bold">afsd</emphasis> command's arguments
+     to override the parameters' default values and to change the number of some of the daemons. Depending on the machine's cache
+     size, its amount of RAM, and how many people work on it, you can sometimes improve Cache Manager performance by overriding the
+     default values. For a discussion of all of the <emphasis role="bold">afsd</emphasis> command's arguments, see its reference page
+     in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+     <para>On platforms using the standard 'afs' initialisation script (this does not apply to Fedora or RHEL based distributions), the <emphasis role="bold">afsd</emphasis> command line in the AFS initialization script on each system type includes an
+     <computeroutput>OPTIONS</computeroutput> variable. You can use it to set nondefault values for the command's arguments, in one
+     of the following ways: <itemizedlist>
+         <listitem>
+           <para>You can create an <emphasis role="bold">afsd</emphasis> <emphasis>options file</emphasis> that sets values for
+           arguments to the <emphasis role="bold">afsd</emphasis> command. If the file exists, its contents are automatically
+           substituted for the <computeroutput>OPTIONS</computeroutput> variable in the AFS initialization script. The AFS
+           distribution for some system types includes an options file; on other system types, you must create it.</para>
+ 
+           <para>You use two variables in the AFS initialization script to specify the path to the options file:
+           <computeroutput>CONFIG</computeroutput> and <computeroutput>AFSDOPT</computeroutput>. On system types that define a
+           conventional directory for configuration files, the <computeroutput>CONFIG</computeroutput> variable indicates it by
+           default; otherwise, the variable indicates an appropriate location.</para>
+ 
+           <para>List the desired <emphasis role="bold">afsd</emphasis> options on a single line in the options file, separating each
+           option with one or more spaces. The following example sets the <emphasis role="bold">-stat</emphasis> argument to 2500,
+           the <emphasis role="bold">-daemons</emphasis> argument to 4, and the <emphasis role="bold">-volumes</emphasis> argument to
+           100.</para>
+ 
+           <programlisting>
+    -stat 2500 -daemons 4 -volumes 100   
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>On a machine that uses a disk cache, you can set the <computeroutput>OPTIONS</computeroutput> variable in the AFS
+           initialization script to one of <computeroutput>$SMALL</computeroutput>, <computeroutput>$MEDIUM</computeroutput>, or
+           <computeroutput>$LARGE</computeroutput>. The AFS initialization script uses one of these settings if the <emphasis
+           role="bold">afsd</emphasis> options file named by the <computeroutput>AFSDOPT</computeroutput> variable does not exist. In
+           the script as distributed, the <computeroutput>OPTIONS</computeroutput> variable is set to the value
+           <computeroutput>$MEDIUM</computeroutput>.</para>
+ 
+           <note>
+             <para>Do not set the <computeroutput>OPTIONS</computeroutput> variable to <computeroutput>$SMALL</computeroutput>,
+             <computeroutput>$MEDIUM</computeroutput>, or <computeroutput>$LARGE</computeroutput> on a machine that uses a memory
+             cache. The arguments it sets are appropriate only on a machine that uses a disk cache.</para>
+           </note>
+ 
+           <para>The script (or on some system types the <emphasis role="bold">afsd</emphasis> options file named by the
+           <computeroutput>AFSDOPT</computeroutput> variable) defines a value for each of <computeroutput>SMALL</computeroutput>,
+           <computeroutput>MEDIUM</computeroutput>, and <computeroutput>LARGE</computeroutput> that sets <emphasis
+           role="bold">afsd</emphasis> command arguments appropriately for client machines of different sizes: <itemizedlist>
+               <listitem>
+                 <para><computeroutput>SMALL</computeroutput> is suitable for a small machine that serves one or two users and has
+                 approximately 8 MB of RAM and a 20-MB cache</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><computeroutput>MEDIUM</computeroutput> is suitable for a medium-sized machine that serves two to six users
+                 and has 16 MB of RAM and a 40-MB cache</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><computeroutput>LARGE</computeroutput> is suitable for a large machine that serves five to ten users and has
+                 32 MB of RAM and a 100-MB cache</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can choose not to create an <emphasis role="bold">afsd</emphasis> options file and to set the
+           <computeroutput>OPTIONS</computeroutput> variable in the initialization script to a null value rather than to the default
+           <computeroutput>$MEDIUM</computeroutput> value. You can then either set arguments directly on the <emphasis
+           role="bold">afsd</emphasis> command line in the script, or set no arguments (and so accept default values for all Cache
+           Manager parameters).</para>
+         </listitem>
+       </itemizedlist>
+ 
+       <note>
+       <para>If you are running on a Fedora or RHEL based system, the 
+       openafs-client initialization script behaves differently from that 
+       described above. It sources /etc/sysconfig/openafs, in which the
+       AFSD_ARGS variable may be set to contain any, or all, of the afsd options
+       detailed. Note that this script does not support setting an OPTIONS
+       variable, or the SMALL, MEDIUM and LARGE methods of defining cache size
+       </para>
+       </note>
+ 
+  <orderedlist>
+         <listitem>
+           <para>Create the local directory on which to mount the AFS filespace, by convention <emphasis role="bold">/afs</emphasis>.
+           If the directory already exists, verify that it is empty. <programlisting>
+    # <emphasis role="bold">mkdir /afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On AIX systems, add the following line to the <emphasis role="bold">/etc/vfs</emphasis> file. It enables AIX to
+           unmount AFS correctly during shutdown. <programlisting>
+    afs     4     none     none
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On non-package based Linux systems, copy the <emphasis role="bold">afsd</emphasis> options file from the <emphasis
+           role="bold">/usr/vice/etc</emphasis> directory to the <emphasis role="bold">/etc/sysconfig</emphasis> directory, removing
+           the <emphasis role="bold">.conf</emphasis> extension as you do so. <programlisting>
+    # <emphasis role="bold">cp /usr/vice/etc/afs.conf /etc/sysconfig/afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Edit the machine's AFS initialization script or <emphasis role="bold">afsd</emphasis> options file to set
+           appropriate values for <emphasis role="bold">afsd</emphasis> command parameters. The script resides in the indicated
+           location on each system type: <itemizedlist>
+               <listitem>
+                 <para>On AIX systems, <emphasis role="bold">/etc/rc.afs</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On HP-UX systems, <emphasis role="bold">/sbin/init.d/afs</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On IRIX systems, <emphasis role="bold">/etc/init.d/afs</emphasis></para>
+               </listitem>
+ 
+ 	          <listitem>
+                 <para>On Fedora and RHEL systems, <emphasis role="bold">/etc/sysconfg/openafs</emphasis></para>
+               </listitem>
+               
+               <listitem>
+                 <para>On non-package based Linux systems, <emphasis role="bold">/etc/sysconfig/afs</emphasis> (the <emphasis
+                 role="bold">afsd</emphasis> options file)</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On Solaris systems, <emphasis role="bold">/etc/init.d/afs</emphasis></para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>Use one of the methods described in the introduction to this section to add the following flags to the <emphasis
+           role="bold">afsd</emphasis> command line. If you intend for the machine to remain an AFS client, also set any
+           performance-related arguments you wish. <itemizedlist>
+               <listitem>
+                 <para>Add the <emphasis role="bold">-memcache</emphasis> flag if the machine is to use a memory cache.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Add the <emphasis role="bold">-verbose</emphasis> flag to display a trace of the Cache Manager's
+                 initialization on the standard output stream.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist>
+       <note><para>In order to successfully complete the instructions in the
+       remainder of this guide, it is important that the machine does not have
+       a synthetic root (as discussed in <link linkend="HDRWQ91">Enabling Access
+       to Foreign Cells</link>). As some distributions ship with this enabled, it
+       may be necessary to remove any occurences of the 
+       <emphasis role="bold">-dynroot</emphasis> and 
+       <emphasis role="bold">-afsdb</emphasis> options from both the AFS 
+       initialisation script and options file. If this functionality is 
+       required it may be renabled as detailed in 
+       <link linkend="HDRWQ91">Enabling Access to Foreign Cells</link>.
+       </para></note>
+       </para>
+ 
+     <indexterm>
+       <primary>overview</primary>
+ 
+       <secondary>completing installation of first machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>completion of installation</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ71">
+     <title>Overview: Completing the Installation of the First AFS Machine</title>
+ 
+     <para>The machine is now configured as an AFS file server and client machine. In this final phase of the installation, you
+     initialize the Cache Manager and then create the upper levels of your AFS filespace, among other procedures. The procedures are:
+     <orderedlist>
+         <listitem>
+           <para>Verify that the initialization script works correctly, and incorporate it into the operating system's startup and
+           shutdown sequence</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create and mount top-level volumes</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create and mount volumes to store system binaries in AFS</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Enable access to foreign cells</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Institute additional security measures</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Remove client functionality if desired</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>AFS initialization script</primary>
+ 
+       <secondary>verifying on first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS initialization script</primary>
+ 
+       <secondary>running</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+ 
+       <tertiary>running/verifying</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>running AFS init. script</primary>
+ 
+       <secondary>first AFS machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>invoking AFS init. script</primary>
+ 
+       <see>running</see>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ72">
+     <title>Verifying the AFS Initialization Script</title>
+ 
+     <para>At this point you run the AFS initialization script to verify that it correctly invokes all of the necessary programs and
+     AFS processes, and that they start correctly. The following are the relevant commands: <itemizedlist>
+         <listitem>
+           <para>The command that dynamically loads AFS modifications into the kernel, on some system types (not applicable if the
+           kernel has AFS modifications built in)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">bosserver</emphasis> command, which starts the BOS Server; it in turn starts the server
+           processes for which you created entries in the <emphasis role="bold">/usr/afs/local/BosConfig</emphasis> file</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The <emphasis role="bold">afsd</emphasis> command, which initializes the Cache Manager</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>On system types that use a dynamic loader program, you must reboot the machine before running the initialization script,
+     so that it can freshly load AFS modifications into the kernel.</para>
+ 
+     <para>If there are problems during the initialization, attempt to resolve them. The OpenAFS mailing lists can provide assistance if necessary. 
+ 
+      <orderedlist>
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>bos shutdown</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>bos commands</primary>
+ 
+           <secondary>shutdown</secondary>
+         </indexterm>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos shutdown</emphasis> command to shut down the AFS server processes other than the
+           BOS Server. Include the <emphasis role="bold">-wait</emphasis> flag to delay return of the command shell prompt until all
+           processes shut down completely. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis
+                 role="bold">-wait</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">ps</emphasis> command to learn the <emphasis role="bold">bosserver</emphasis>
+           process's process ID number (PID), and then the <emphasis role="bold">kill</emphasis> command to stop it. <programlisting>
+    # <emphasis role="bold">ps</emphasis> <replaceable>appropriate_ps_options</replaceable> <emphasis role="bold">| grep bosserver</emphasis>
+    # <emphasis role="bold">kill</emphasis> <replaceable>bosserver_PID</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the appropriate commands to run the AFS initialization script for this system type.</para>
+ 
+           <indexterm>
+             <primary>AIX</primary>
+ 
+             <secondary>AFS initialization script</secondary>
+ 
+             <tertiary>on first AFS machine</tertiary>
+           </indexterm>
+ 
+           <para><emphasis role="bold">On AIX systems:</emphasis> <orderedlist>
+               <listitem>
+                 <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+                 <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/rc.afs</emphasis>
+ </programlisting></para>
+               </listitem>
+             </orderedlist></para>
+ 
+           <indexterm>
+             <primary>HP-UX</primary>
+ 
+             <secondary>AFS initialization script</secondary>
+ 
+             <tertiary>on first AFS machine</tertiary>
+           </indexterm>
+ 
+           <para><emphasis role="bold">On HP-UX systems:</emphasis> <orderedlist>
+               <listitem>
+                 <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/sbin/init.d/afs  start</emphasis>
+ </programlisting></para>
+               </listitem>
+             </orderedlist></para>
+ 
+           <indexterm>
+             <primary>IRIX</primary>
+ 
+             <secondary>AFS initialization script</secondary>
+ 
+             <tertiary>on first AFS machine</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>afsclient variable (IRIX)</primary>
+ 
+             <secondary>first AFS machine</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>variables</primary>
+ 
+             <secondary>afsclient (IRIX)</secondary>
+ 
+             <tertiary>first AFS machine</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>IRIX</primary>
+ 
+             <secondary>afsclient variable</secondary>
+ 
+             <tertiary>first AFS machine</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>afsserver variable (IRIX)</primary>
+ 
+             <secondary>first AFS machine</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>variables</primary>
+ 
+             <secondary>afsserver (IRIX)</secondary>
+ 
+             <tertiary>first AFS machine</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>IRIX</primary>
+ 
+             <secondary>afsserver variable</secondary>
+ 
+             <tertiary>first AFS machine</tertiary>
+           </indexterm>
+ 
+           <para><emphasis role="bold">On IRIX systems:</emphasis> <orderedlist>
+               <listitem>
+                 <para>If you have configured the machine to use the <emphasis role="bold">ml</emphasis> dynamic loader program,
+                 reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+                 role="bold">afsserver</emphasis> and <emphasis role="bold">afsclient</emphasis> configuration variables.
+                 <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsserver on</emphasis>
+    # <emphasis role="bold">/etc/chkconfig -f afsclient on</emphasis> 
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs  start</emphasis>
+ </programlisting></para>
+               </listitem>
+             </orderedlist></para>
+ 
+           <indexterm>
+             <primary>Linux</primary>
+ 
+             <secondary>AFS initialization script</secondary>
+ 
+             <tertiary>on first AFS machine</tertiary>
+           </indexterm>
+ 
+           <para><emphasis role="bold">On Linux systems:</emphasis> <orderedlist>
+               <listitem>
+                 <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+                 <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Run the AFS initialization scripts. 
+ <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/openafs-client  start</emphasis>
+    # <emphasis role="bold">/etc/rc.d/init.d/openafs-server  start</emphasis>
+ </programlisting></para>
+               </listitem>
+             </orderedlist></para>
+ 
+           <indexterm>
+             <primary>Solaris</primary>
+ 
+             <secondary>AFS initialization script</secondary>
+ 
+             <tertiary>on first AFS machine</tertiary>
+           </indexterm>
+ 
+           <para><emphasis role="bold">On Solaris systems:</emphasis> <orderedlist>
+               <listitem>
+                 <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+                 <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs  start</emphasis>
+ </programlisting></para>
+               </listitem>
+             </orderedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Wait for the message that confirms that Cache Manager initialization is complete.</para>
+ 
+           <para>On machines that use a disk cache, it can take a while to initialize the Cache Manager for the first time, because
+           the <emphasis role="bold">afsd</emphasis> program must create all of the <emphasis
+           role="bold">V</emphasis><replaceable>n</replaceable> files in the cache directory. Subsequent Cache Manager
+           initializations do not take nearly as long, because the <emphasis role="bold">V</emphasis><replaceable>n</replaceable>
+           files already exist.</para>
+         </listitem>
+         <listitem>
+         
+           <indexterm>
+             <primary>commands</primary>
+             <secondary>aklog</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>aklog command</primary>
+           </indexterm>
+           
+           <para>If you are working with an existing cell which uses
+           <emphasis role="bold">kaserver</emphasis> for authentication, 
+           please recall the note in 
+           <link linkend="KAS003">Using this Appendix</link> detailing the 
+           substitution of <emphasis role="bold">kinit</emphasis> and 
+           <emphasis role="bold">aklog</emphasis> with 
+           <emphasis role="bold">klog</emphasis>.</para>
+           
+           <para>As a basic test of correct AFS functioning, issue the 
+           <emphasis role="bold">kinit</emphasis> and 
+           <emphasis role="bold">aklog</emphasis> commands to authenticate
+           as the <emphasis role="bold">admin</emphasis> user. 
+           Provide the password (<replaceable>admin_passwd</replaceable>) you
+           defined in <link linkend="HDRWQ53">Initializing Cell Security</link>.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">kinit admin</emphasis>
+    Password:  <replaceable>admin_passwd</replaceable>
+    # <emphasis role="bold">aklog</emphasis>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>tokens</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>tokens command</primary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">tokens</emphasis> command to 
+           verify that the <emphasis role="bold">aklog</emphasis>
+           command worked correctly. If it did, the output looks similar to the following example for the <emphasis
+           role="bold">example.com</emphasis> cell, where <emphasis role="bold">admin</emphasis>'s AFS UID is 1. If the output does not
+           seem correct, resolve the problem. Changes to the AFS initialization script are possibly necessary. The OpenAFS mailing lists can provide assistance as necessary. <programlisting>
+    # <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 1) tokens for afs@example.com [Expires May 22 11:52]
+        --End of list--
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">bos status</emphasis> command to verify that the output for each process reads
+           <computeroutput>Currently running normally</computeroutput>. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/bos status</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting> <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>checkvolumes</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs checkvolumes</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Change directory to the local file system root (<emphasis role="bold">/</emphasis>) and issue the <emphasis
+           role="bold">fs checkvolumes</emphasis> command. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">/usr/afs/bin/fs checkvolumes</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>AFS initialization script</primary>
+ 
+       <secondary>adding to machine startup sequence</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+ 
+       <tertiary>first AFS machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>first AFS machine</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+ 
+       <tertiary>activating</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>activating AFS init. script</primary>
+ 
+       <see>installing</see>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ73">
+     <title>Activating the AFS Initialization Script</title>
+ 
+     <para>Now that you have confirmed that the AFS initialization script works correctly, take the action necessary to have it run
+     automatically at each reboot. Proceed to the instructions for your system type: <itemizedlist>
+         <listitem>
+           <para><link linkend="HDRWQ74">Activating the Script on AIX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ76">Activating the Script on HP-UX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ77">Activating the Script on IRIX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ78">Activating the Script on Linux Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ79">Activating the Script on Solaris Systems</link></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>AIX</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+ 
+       <tertiary>on first AFS machine</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ74">
+       <title>Activating the Script on AIX Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Edit the AIX initialization file, <emphasis role="bold">/etc/inittab</emphasis>, adding the following line to invoke
+           the AFS initialization script. Place it just after the line that starts NFS daemons. <programlisting>
+    rcafs:2:wait:/etc/rc.afs &gt; /dev/console 2&gt;&amp;1 # Start AFS services
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc</emphasis> directories. If you want to avoid
+           potential confusion by guaranteeing that they are always the same, create a link between them. You can always retrieve the
+           original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm  rc.afs</emphasis>
+    # <emphasis role="bold">ln -s  /etc/rc.afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Proceed to <link linkend="HDRWQ80">Configuring the Top Levels of the AFS Filespace</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ76">
+       <title>Activating the Script on HP-UX Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Change to the <emphasis role="bold">/sbin/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+           -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the HP-UX startup and
+           shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /sbin/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /sbin/rc2.d/S460afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /sbin/rc2.d/K800afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/sbin/init.d</emphasis> directories. If you want
+           to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can always
+           retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /sbin/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Proceed to <link linkend="HDRWQ80">Configuring the Top Levels of the AFS Filespace</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ77">
+       <title>Activating the Script on IRIX Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Change to the <emphasis role="bold">/etc/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+           -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the IRIX startup and
+           shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /etc/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc2.d/S35afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc0.d/K35afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/init.d</emphasis> directories. If you want
+           to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can always
+           retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Proceed to <link linkend="HDRWQ80">Configuring the Top Levels of the AFS Filespace</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Linux</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ78">
+       <title>Activating the Script on Linux Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis role="bold">openafs-client</emphasis> and <emphasis role="bold">openafs-server</emphasis>
+           configuration variables. Based on the instruction in the AFS initialization file that begins with the string
+           <computeroutput>#chkconfig</computeroutput>, the command automatically creates the symbolic links that incorporate the
+           script into the Linux startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">/sbin/chkconfig  --add openafs-client</emphasis>
+    # <emphasis role="bold">/sbin/chkconfig  --add openafs-server</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/rc.d/init.d</emphasis> directories, and
+           copies of the <emphasis role="bold">afsd</emphasis> options file in both the <emphasis
+           role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/sysconfig</emphasis> directories. If you want to avoid
+           potential confusion by guaranteeing that the two copies of each file are always the same, create a link between them. You
+           can always retrieve the original script or options file from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc afs.conf</emphasis>
+    # <emphasis role="bold">ln -s  /etc/rc.d/init.d/afs  afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/sysconfig/afs  afs.conf</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Proceed to <link linkend="HDRWQ80">Configuring the Top Levels of the AFS Filespace</link>.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on first AFS machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ79">
+       <title>Activating the Script on Solaris Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Change to the <emphasis role="bold">/etc/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+           -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the Solaris startup and
+           shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /etc/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc3.d/S99afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc0.d/K66afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/init.d</emphasis> directories. If you want
+           to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can always
+           retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>AFS filespace</primary>
+ 
+         <secondary>configuring top levels</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>AFS filespace (top levels)</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ80">
+     <title>Configuring the Top Levels of the AFS Filespace</title>
+ 
+     <para>If you have not previously run AFS in your cell, you now configure the top levels of your cell's AFS filespace. If you
+     have run a previous version of AFS, the filespace is already configured. Proceed to <link linkend="HDRWQ83">Storing AFS Binaries
+     in AFS</link>. <indexterm>
+         <primary>root.cell volume</primary>
+ 
+         <secondary>creating and replicating</secondary>
+       </indexterm> <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>creating</secondary>
+ 
+         <tertiary>root.cell</tertiary>
+       </indexterm> <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>root.cell volume</secondary>
+       </indexterm></para>
+ 
+     <para>You created the <emphasis role="bold">root.afs</emphasis> volume in <link linkend="HDRWQ60">Starting the File Server,
+     Volume Server, and Salvager</link>, and the Cache Manager mounted it automatically on the local <emphasis
+     role="bold">/afs</emphasis> directory when you ran the AFS initialization script in <link linkend="HDRWQ72">Verifying the AFS
+     Initialization Script</link>. You now set the access control list (ACL) on the <emphasis role="bold">/afs</emphasis> directory;
+     creating, mounting, and setting the ACL are the three steps required when creating any volume.</para>
+ 
+     <para>After setting the ACL on the <emphasis role="bold">root.afs</emphasis> volume, you create your cell's <emphasis
+     role="bold">root.cell</emphasis> volume, mount it as a subdirectory of the <emphasis role="bold">/afs</emphasis> directory, and
+     set the ACL. Create both a read/write and a regular mount point for the <emphasis role="bold">root.cell</emphasis> volume. The
+     read/write mount point enables you to access the read/write version of replicated volumes when necessary. Creating both mount
+     points essentially creates separate read-only and read-write copies of your filespace, and enables the Cache Manager to traverse
+     the filespace on a read-only path or read/write path as appropriate. For further discussion of these concepts, see the chapter
+     in the <emphasis>OpenAFS Administration Guide</emphasis> about administering volumes. <indexterm>
+         <primary>root.afs volume</primary>
+ 
+         <secondary>replicating</secondary>
+       </indexterm> <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>replicating root.afs and root.cell</secondary>
+       </indexterm> <indexterm>
+         <primary>replicating volumes</primary>
+       </indexterm></para>
+ 
+     <para>Then replicate both the <emphasis role="bold">root.afs</emphasis> and <emphasis role="bold">root.cell</emphasis> volumes.
+     This is required if you want to replicate any other volumes in your cell, because all volumes mounted above a replicated volume
+     must themselves be replicated in order for the Cache Manager to access the replica.</para>
+ 
+     <para>When the <emphasis role="bold">root.afs</emphasis> volume is replicated, the Cache Manager is programmed to access its
+     read-only version (<emphasis role="bold">root.afs.readonly</emphasis>) whenever possible. To make changes to the contents of the
+     <emphasis role="bold">root.afs</emphasis> volume (when, for example, you mount another cell's <emphasis
+     role="bold">root.cell</emphasis> volume at the second level in your filespace), you must mount the <emphasis
+     role="bold">root.afs</emphasis> volume temporarily, make the changes, release the volume and remove the temporary mount point.
+     For instructions, see <link linkend="HDRWQ91">Enabling Access to Foreign Cells</link>. <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>setacl</secondary>
+       </indexterm> <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs setacl</secondary>
+       </indexterm> <indexterm>
+         <primary>access control list (ACL), setting</primary>
+       </indexterm> <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>ACL</secondary>
+       </indexterm> <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setacl</emphasis> command to edit the ACL on the <emphasis
+           role="bold">/afs</emphasis> directory. Add an entry that grants the <emphasis role="bold">l</emphasis> (<emphasis
+           role="bold">lookup</emphasis>) and <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permissions
+           to the <emphasis role="bold">system:anyuser</emphasis> group, to enable all AFS users who can reach your cell to traverse
+           through the directory. If you prefer to enable access only to locally authenticated users, substitute the <emphasis
+           role="bold">system:authuser</emphasis> group.</para>
+ 
+           <para>Note that there is already an ACL entry that grants all seven access rights to the <emphasis
+           role="bold">system:administrators</emphasis> group. It is a default entry that AFS places on every new volume's root
+           directory.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/fs setacl /afs system:anyuser rl</emphasis>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos create</secondary>
+ 
+             <tertiary>root.cell volume</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>create</secondary>
+ 
+             <tertiary>root.cell volume</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>mkmount</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs mkmount</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>mount point</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>creating</primary>
+ 
+             <secondary>mount point</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume</primary>
+ 
+             <secondary>mounting</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ81" />Issue the <emphasis role="bold">vos create</emphasis> command to create the <emphasis
+           role="bold">root.cell</emphasis> volume. Then issue the <emphasis role="bold">fs mkmount</emphasis> command to mount it as
+           a subdirectory of the <emphasis role="bold">/afs</emphasis> directory, where it serves as the root of your cell's local
+           AFS filespace. Finally, issue the <emphasis role="bold">fs setacl</emphasis> command to create an ACL entry for the
+           <emphasis role="bold">system:anyuser</emphasis> group (or <emphasis role="bold">system:authuser</emphasis> group).</para>
+ 
+           <para>For the <replaceable>partition name</replaceable> argument, substitute the name of one of the machine's AFS server
+           partitions (such as <emphasis role="bold">/vicepa</emphasis>). For the <replaceable>cellname</replaceable> argument,
+           substitute your cell's fully-qualified Internet domain name (such as <emphasis role="bold">abc.com</emphasis>).</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/vos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <emphasis
+               role="bold">root.cell</emphasis> 
+    # <emphasis role="bold">/usr/afs/bin/fs mkmount /afs/</emphasis><replaceable>cellname</replaceable>  <emphasis role="bold">root.cell</emphasis>
+    # <emphasis role="bold">/usr/afs/bin/fs setacl /afs/</emphasis><replaceable>cellname</replaceable>  <emphasis role="bold">system:anyuser rl</emphasis>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>creating</primary>
+ 
+             <secondary>symbolic link</secondary>
+ 
+             <tertiary>for abbreviated cell name</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>symbolic link</primary>
+ 
+             <secondary>for abbreviated cell name</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>cell name</primary>
+ 
+             <secondary>symbolic link for abbreviated</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Create a symbolic link to a shortened cell name, to reduce the length of
+           pathnames for users in the local cell. For example, in the <emphasis role="bold">abc.com</emphasis> cell, <emphasis
+           role="bold">/afs/abc</emphasis> is a link to <emphasis role="bold">/afs/abc.com</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /afs</emphasis>
+    # <emphasis role="bold">ln -s</emphasis>  <replaceable>full_cellname</replaceable>  <replaceable>short_cellname</replaceable>
+ </programlisting> <indexterm>
+               <primary>read/write mount point for root.afs volume</primary>
+             </indexterm> <indexterm>
+               <primary>root.afs volume</primary>
+ 
+               <secondary>read/write mount point</secondary>
+             </indexterm> <indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>read/write mount point</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to create a read/write mount point for the <emphasis
+           role="bold">root.cell</emphasis> volume (you created a regular mount point in Step <link
+           linkend="LIWQ81">2</link>).</para>
+ 
+           <para>By convention, the name of a read/write mount point begins with a period, both to distinguish it from the regular
+           mount point and to make it visible only when the <emphasis role="bold">-a</emphasis> flag is used on the <emphasis
+           role="bold">ls</emphasis> command.</para>
+ 
+           <para>Change directory to <emphasis role="bold">/usr/afs/bin</emphasis> to make it easier to access the command
+           binaries.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">cd /usr/afs/bin</emphasis>
+    # <emphasis role="bold">./fs mkmount   /afs/.</emphasis><replaceable>cellname</replaceable>   <emphasis role="bold">root.cell -rw</emphasis>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>vos addsite</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>vos commands</primary>
+ 
+             <secondary>addsite</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>volume</primary>
+ 
+             <secondary>defining replication site</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>defining</primary>
+ 
+             <secondary>replication site for volume</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ82" />Issue the <emphasis role="bold">vos addsite</emphasis> command to define a replication site
+           for both the <emphasis role="bold">root.afs</emphasis> and <emphasis role="bold">root.cell</emphasis> volumes. In each
+           case, substitute for the <replaceable>partition name</replaceable> argument the partition where the volume's read/write
+           version resides. When you install additional file server machines, it is a good idea to create replication sites on them
+           as well. <programlisting>
+    # <emphasis role="bold">./vos addsite</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <emphasis
+                 role="bold">root.afs</emphasis>
+    # <emphasis role="bold">./vos addsite</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <emphasis
+                 role="bold">root.cell</emphasis>
+ </programlisting> <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>examine</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs examine</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs examine</emphasis> command to verify that the Cache Manager can access both the
+           <emphasis role="bold">root.afs</emphasis> and <emphasis role="bold">root.cell</emphasis> volumes, before you attempt to
+           replicate them. The output lists each volume's name, volumeID number, quota, size, and the size of the partition that
+           houses them. If you get an error message instead, do not continue before taking corrective action. <programlisting>
+    # <emphasis role="bold">./fs examine /afs</emphasis>
+    # <emphasis role="bold">./fs examine /afs/</emphasis><replaceable>cellname</replaceable>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>vos release</secondary>
+             </indexterm> <indexterm>
+               <primary>vos commands</primary>
+ 
+               <secondary>release</secondary>
+             </indexterm> <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>releasing replicated</secondary>
+             </indexterm> <indexterm>
+               <primary>releasing replicated volume</primary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos release</emphasis> command to release a replica of the <emphasis
+           role="bold">root.afs</emphasis> and <emphasis role="bold">root.cell</emphasis> volumes to the sites you defined in Step
+           <link linkend="LIWQ82">5</link>. <programlisting>
+    # <emphasis role="bold">./vos release root.afs</emphasis>
+    # <emphasis role="bold">./vos release root.cell</emphasis>
+ </programlisting> <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>checkvolumes</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs checkvolumes</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs checkvolumes</emphasis> to force the Cache Manager to notice that you have
+           released read-only versions of the volumes, then issue the <emphasis role="bold">fs examine</emphasis> command again. This
+           time its output mentions the read-only version of the volumes (<emphasis role="bold">root.afs.readonly</emphasis> and
+           <emphasis role="bold">root.cell.readonly</emphasis>) instead of the read/write versions, because of the Cache Manager's
+           bias to access the read-only version of the <emphasis role="bold">root.afs</emphasis> volume if it exists.
+           <programlisting>
+    # <emphasis role="bold">./fs checkvolumes</emphasis>
+    # <emphasis role="bold">./fs examine /afs</emphasis>
+    # <emphasis role="bold">./fs examine /afs/</emphasis><replaceable>cellname</replaceable>
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>storing</primary>
+ 
+       <secondary>AFS binaries in volumes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>volume</secondary>
+ 
+       <tertiary>for AFS binaries</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>for AFS binaries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>binaries</primary>
+ 
+       <secondary>storing AFS in volume</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/afsws directory</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>/usr/afsws</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ83">
+     <title>Storing AFS Binaries in AFS</title>
+ 
+     <note><para>Sites with existing binary distribution mechanisms, including
+     those which use packaging systems such as RPM, may wish to skip this step,
+     and use tools native to their operating system to manage AFS configuration
+     information.</para></note>
+     
+     <para>In the conventional configuration, you make AFS client binaries and configuration files available in the subdirectories of
+     the <emphasis role="bold">/usr/afsws</emphasis> directory on client machines (<emphasis role="bold">afsws</emphasis> is an
+     acronym for <emphasis role="bold">AFS w</emphasis><emphasis>ork</emphasis><emphasis
+     role="bold">s</emphasis><emphasis>tation</emphasis>). You can conserve local disk space by creating <emphasis
+     role="bold">/usr/afsws</emphasis> as a link to an AFS volume that houses the AFS client binaries and configuration files for
+     this system type.</para>
+ 
+     <para>In this section you create the necessary volumes. The conventional location to which to link <emphasis
+     role="bold">/usr/afsws</emphasis> is <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+     role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis>, where
+     <replaceable>sysname</replaceable> is the appropriate system type name as specified in the <emphasis>OpenAFS Release
+     Notes</emphasis>. The instructions in <link linkend="HDRWQ133">Installing Additional Client Machines</link> assume that you have
+     followed the instructions in this section.</para>
+ 
+     <para>If you have previously run AFS in the cell, the volumes possibly already exist. If so, you need to perform Step <link
+     linkend="LIWQ86">8</link> only.</para>
+ 
+     <para>The current working directory is still <emphasis role="bold">/usr/afs/bin</emphasis>, which houses the <emphasis
+     role="bold">fs</emphasis> and <emphasis role="bold">vos</emphasis> command suite binaries. In the following commands, it is
+     possible you still need to specify the pathname to the commands, depending on how your PATH environment variable is set.
+     <orderedlist>
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>vos create</secondary>
+ 
+           <tertiary>volume for AFS binaries</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>vos commands</primary>
+ 
+           <secondary>create</secondary>
+ 
+           <tertiary>volume for AFS binaries</tertiary>
+         </indexterm>
+ 
+         <listitem>
+           <para><anchor id="LIWQ84" />Issue the <emphasis role="bold">vos create</emphasis> command to create volumes for storing
+           the AFS client binaries for this system type. The following example instruction creates volumes called
+           <replaceable>sysname</replaceable>, <replaceable>sysname</replaceable>.<emphasis role="bold">usr</emphasis>, and
+           <replaceable>sysname</replaceable>.<emphasis role="bold">usr.afsws</emphasis>. Refer to the <emphasis>OpenAFS Release
+           Notes</emphasis> to learn the proper value of <replaceable>sysname</replaceable> for this system type. <programlisting>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable><emphasis
+                 role="bold">.usr</emphasis>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable><emphasis
+                 role="bold">.usr.afsws</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount the newly created volumes. Because the
+           <emphasis role="bold">root.cell</emphasis> volume is replicated, you must precede the <emphasis>cellname</emphasis> part
+           of the pathname with a period to specify the read/write mount point, as shown. Then issue the <emphasis role="bold">vos
+           release</emphasis> command to release a new replica of the <emphasis role="bold">root.cell</emphasis> volume, and the
+           <emphasis role="bold">fs checkvolumes</emphasis> command to force the local Cache Manager to access them. <programlisting>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable> <emphasis
+                 role="bold">-vol</emphasis> <replaceable>sysname</replaceable>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                 role="bold">/usr</emphasis>  <emphasis role="bold">-vol</emphasis> <replaceable>sysname</replaceable><emphasis
+                 role="bold">.usr</emphasis>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                 role="bold">/usr/afsws</emphasis> <emphasis role="bold">-vol</emphasis> <replaceable>sysname</replaceable><emphasis
+                 role="bold">.usr.afsws</emphasis>
+    # <emphasis role="bold">vos release root.cell</emphasis>
+    # <emphasis role="bold">fs checkvolumes</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setacl</emphasis> command to grant the <emphasis role="bold">l</emphasis>
+           (<emphasis role="bold">lookup</emphasis>) and <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>)
+           permissions to the <emphasis role="bold">system:anyuser</emphasis> group on each new directory's ACL. <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable>
+    # <emphasis role="bold">fs setacl  -dir  .  usr  usr/afsws  -acl  system:anyuser rl</emphasis> 
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs setquota</secondary>
+             </indexterm> <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>setquota</secondary>
+             </indexterm> <indexterm>
+               <primary>quota for volume</primary>
+             </indexterm> <indexterm>
+               <primary>volume</primary>
+ 
+               <secondary>setting quota</secondary>
+             </indexterm> <indexterm>
+               <primary>setting</primary>
+ 
+               <secondary>volume quota</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ85" />Issue the <emphasis role="bold">fs setquota</emphasis> command to set an unlimited quota on
+           the volume mounted at the <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis> directory. This
+           enables you to copy all of the appropriate files from the CD-ROM into the volume without exceeding the volume's
+           quota.</para>
+ 
+           <para>If you wish, you can set the volume's quota to a finite value after you complete the copying operation. At that
+           point, use the <emphasis role="bold">vos examine</emphasis> command to determine how much space the volume is occupying.
+           Then issue the <emphasis role="bold">fs setquota</emphasis> command to set a quota that is slightly larger.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">fs setquota /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+               role="bold">/usr/afsws  0</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Unpack the distribution tarball into the <emphasis role="bold">/tmp/afsdist</emphasis> directory,
+           if it is not already. <indexterm>
+               <primary>copying</primary>
+ 
+               <secondary>AFS binaries into volume</secondary>
+             </indexterm> <indexterm>
+               <primary>CD-ROM</primary>
+ 
+               <secondary>copying AFS binaries into volume</secondary>
+             </indexterm> <indexterm>
+               <primary>first AFS machine</primary>
+ 
+               <secondary>copying</secondary>
+ 
+               <tertiary>AFS binaries into volume</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Copy the contents of the indicated directories from the 
+           distribution into the <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis> directory.
+           <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                 role="bold">/usr/afsws</emphasis>
+    # <emphasis role="bold">cp -rp /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/bin  .</emphasis>
+    # <emphasis role="bold">cp -rp /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/etc  .</emphasis>
+    # <emphasis role="bold">cp -rp /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/include  .</emphasis>
+    # <emphasis role="bold">cp -rp /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/lib  .</emphasis>
+ </programlisting> 
+ <indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>symbolic link</secondary>
+ 
+               <tertiary>to AFS binaries</tertiary>
+             </indexterm> <indexterm>
+               <primary>symbolic link</primary>
+ 
+               <secondary>to AFS binaries from local disk</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ86" />Create <emphasis role="bold">/usr/afsws</emphasis> on the local disk as a symbolic link to the
+           directory <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/@sys/usr/afsws</emphasis>. You can specify the actual system name instead of <emphasis
+           role="bold">@sys</emphasis> if you wish, but the advantage of using <emphasis role="bold">@sys</emphasis> is that it
+           remains valid if you upgrade this machine to a different system type. <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/@sys/usr/afsws  /usr/afsws</emphasis>
+ </programlisting> <indexterm>
+               <primary>PATH environment variable for users</primary>
+             </indexterm> <indexterm>
+               <primary>variables</primary>
+ 
+               <secondary>PATH, setting for users</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> To enable users to issue commands from the AFS suites (such as <emphasis
+           role="bold">fs</emphasis>) without having to specify a pathname to their binaries, include the <emphasis
+           role="bold">/usr/afsws/bin</emphasis> and <emphasis role="bold">/usr/afsws/etc</emphasis> directories in the PATH
+           environment variable you define in each user's shell initialization file (such as <emphasis
+           role="bold">.cshrc</emphasis>).</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>storing</primary>
+ 
+       <secondary>AFS documentation in volumes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>volume</secondary>
+ 
+       <tertiary>for AFS documentation</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>for AFS documentation</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>documentation, creating volume for AFS</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/afsdoc directory</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>/usr/afsdoc</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ87">
+     <title>Storing AFS Documents in AFS</title>
+ 
+     <para>The AFS distribution includes the following documents: <itemizedlist>
+         <listitem>
+           <para><emphasis>OpenAFS Release Notes</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>OpenAFS Quick Beginnings</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>OpenAFS User Guide</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>OpenAFS Administration Reference</emphasis></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>OpenAFS Administration Guide</emphasis></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <note><para>OpenAFS Documentation is not currently provided with all 
+     distributions, but may be downloaded separately from the OpenAFS 
+     website</para></note>
+     
+     <para>The OpenAFS Documentation Distribution has a directory for each 
+     document format provided. The different formats are suitable for online 
+     viewing, printing, or both.</para>
+ 
+     <para>This section explains how to create and mount a volume to house the documents, making them available to your users. The
+     recommended mount point for the volume is <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+     role="bold">/afsdoc</emphasis>. If you wish, you can create a link to the mount point on each client machine's local disk,
+     called <emphasis role="bold">/usr/afsdoc</emphasis>. Alternatively, you can create a link to the mount point in each user's home
+     directory. You can also choose to permit users to access only certain documents (most probably, the <emphasis>OpenAFS User
+     Guide</emphasis>) by creating different mount points or setting different ACLs on different document directories.</para>
+ 
+     <para>The current working directory is still <emphasis role="bold">/usr/afs/bin</emphasis>, which houses the <emphasis
+     role="bold">fs</emphasis> and <emphasis role="bold">vos</emphasis> command suite binaries you use to create and mount volumes.
+     In the following commands, it is possible you still need to specify the pathname to the commands, depending on how your PATH
+     environment variable is set. <orderedlist>
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>vos create</secondary>
+ 
+           <tertiary>volume for AFS documentation</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>vos commands</primary>
+ 
+           <secondary>create</secondary>
+ 
+           <tertiary>volume for AFS documentation</tertiary>
+         </indexterm>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">vos create</emphasis> command to create a volume for storing the AFS documentation.
+           Include the <emphasis role="bold">-maxquota</emphasis> argument to set an unlimited quota on the volume. This enables you
+           to copy all of the appropriate files from the CD-ROM into the volume without exceeding the volume's quota.</para>
+ 
+           <para>If you wish, you can set the volume's quota to a finite value after you complete the copying operations. At that
+           point, use the <emphasis role="bold">vos examine</emphasis> command to determine how much space the volume is occupying.
+           Then issue the <emphasis role="bold">fs setquota</emphasis> command to set a quota that is slightly larger.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">vos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt;  <emphasis
+               role="bold">afsdoc  -maxquota  0</emphasis> 
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount the new volume. Because the <emphasis
+           role="bold">root.cell</emphasis> volume is replicated, you must precede the <emphasis>cellname</emphasis> with a period to
+           specify the read/write mount point, as shown. Then issue the <emphasis role="bold">vos release</emphasis> command to
+           release a new replica of the <emphasis role="bold">root.cell</emphasis> volume, and the <emphasis role="bold">fs
+           checkvolumes</emphasis> command to force the local Cache Manager to access them. <programlisting>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc</emphasis> <emphasis
+                 role="bold">-vol</emphasis> <emphasis role="bold">afsdoc</emphasis>
+    # <emphasis role="bold">vos release root.cell</emphasis>
+    # <emphasis role="bold">fs checkvolumes</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs setacl</emphasis> command to grant the <emphasis role="bold">rl</emphasis>
+           permissions to the <emphasis role="bold">system:anyuser</emphasis> group on the new directory's ACL. <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc</emphasis> 
+    # <emphasis role="bold">fs setacl  .  system:anyuser rl</emphasis> 
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Unpack the OpenAFS documentation distribution into the 
+           <emphasis role="bold">/tmp/afsdocs</emphasis> directory. You may use
+           a different directory, in which case the location you use should be
+           subsituted in the following examples. For instructions on unpacking
+           the distribution, consult the documentation for your operating
+           system's <emphasis role="bold">tar</emphasis> command.
+           <indexterm>
+               <primary>copying</primary>
+ 
+               <secondary>AFS documentation from distribution</secondary>
+             </indexterm> <indexterm>
+               <primary>OpenAFS Distribution</primary>
+ 
+               <secondary>copying AFS documentation from</secondary>
+             </indexterm> <indexterm>
+               <primary>first AFS machine</primary>
+ 
+               <secondary>copying</secondary>
+ 
+               <tertiary>AFS documentation from OpenAFS distribution</tertiary>
+             </indexterm> <indexterm>
+               <primary>index.htm file</primary>
+             </indexterm> <indexterm>
+               <primary>files</primary>
+ 
+               <secondary>index.htm</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Copy the AFS documents in one or more formats from the unpacked distribution into subdirectories of the <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc</emphasis> directory. Repeat
+           the commands for each format. <programlisting>
+    # <emphasis role="bold">mkdir</emphasis> <replaceable>format_name</replaceable>
+    # <emphasis role="bold">cd</emphasis> <replaceable>format_name</replaceable>
+    # <emphasis role="bold">cp -rp /tmp/afsdocs/</emphasis><replaceable>format</replaceable>  <emphasis role="bold">.</emphasis>      
+ </programlisting></para>
+ 
+           <para>If you choose to store the HTML version of the documents in AFS, note that in addition to a subdirectory for each
+           document there are several files with a <emphasis role="bold">.gif</emphasis> extension, which enable readers to move
+           easily between sections of a document. The file called <emphasis role="bold">index.htm</emphasis> is an introductory HTML
+           page that contains a hyperlink to each of the documents. For online viewing to work properly, these files must remain in
+           the top-level HTML directory (the one named, for example, <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc/html</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> If you believe it is helpful to your users to access the AFS documents
+           in a certain format via a local disk directory, create <emphasis role="bold">/usr/afsdoc</emphasis> on the local disk as a
+           symbolic link to the documentation directory in AFS (<emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable>). <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable> <emphasis
+                 role="bold">/usr/afsdoc</emphasis>
+ </programlisting></para>
+ 
+           <para>An alternative is to create a link in each user's home directory to the <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable> directory.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>storing</primary>
+ 
+       <secondary>system binaries in volumes</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>volume</secondary>
+ 
+       <tertiary>for system binaries</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>for system binaries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>binaries</primary>
+ 
+       <secondary>storing system in volumes</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ88">
+     <title>Storing System Binaries in AFS</title>
+ 
+     <para>You can also choose to store other system binaries in AFS volumes, such as the standard UNIX programs conventionally
+     located in local disk directories such as <emphasis role="bold">/etc</emphasis>, <emphasis role="bold">/bin</emphasis>, and
+     <emphasis role="bold">/lib</emphasis>. Storing such binaries in an AFS volume not only frees local disk space, but makes it
+     easier to update binaries on all client machines.</para>
+ 
+     <para>The following is a suggested scheme for storing system binaries in AFS. It does not include instructions, but you can use
+     the instructions in <link linkend="HDRWQ83">Storing AFS Binaries in AFS</link> (which are for AFS-specific binaries) as a
+     template.</para>
+ 
+     <para>Some files must remain on the local disk for use when AFS is inaccessible (during bootup and file server or network
+     outages). The required binaries include the following: <itemizedlist>
+         <listitem>
+           <para>A text editor, network commands, and so on</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Files used during the boot sequence before the <emphasis role="bold">afsd</emphasis> program runs, such as
+           initialization and configuration files, and binaries for commands that mount file systems</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Files used by dynamic kernel loader programs</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>In most cases, it is more secure to enable only locally authenticated users to access system binaries, by granting the
+     <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) and <emphasis role="bold">r</emphasis> (<emphasis
+     role="bold">read</emphasis>) permissions to the <emphasis role="bold">system:authuser</emphasis> group on the ACLs of
+     directories that contain the binaries. If users need to access a binary while unauthenticated, however, the ACL on its directory
+     must grant those permissions to the <emphasis role="bold">system:anyuser</emphasis> group.</para>
+ 
+     <para>The following chart summarizes the suggested volume and mount point names for storing system binaries. It uses a separate
+     volume for each directory. You already created a volume called <replaceable>sysname</replaceable> for this machine's system type
+     when you followed the instructions in <link linkend="HDRWQ83">Storing AFS Binaries in AFS</link>.</para>
+ 
+     <para>You can name volumes in any way you wish, and mount them at other locations than those suggested here. However, this
+     scheme has several advantages: <itemizedlist>
+         <listitem>
+           <para>Volume names clearly identify volume contents</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Using the <replaceable>sysname</replaceable> prefix on every volume makes it is easy to back up all of the volumes
+           together, because the AFS Backup System enables you to define sets of volumes based on a string included in all of their
+           names</para>
+         </listitem>
+ 
+         <listitem>
+           <para>It makes it easy to track related volumes, keeping them together on the same file server machine if desired</para>
+         </listitem>
+ 
+         <listitem>
+           <para>There is a clear relationship between volume name and mount point name</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <informaltable frame="none">
+       <tgroup cols="2">
+         <colspec colwidth="50*" />
+ 
+         <colspec colwidth="50*" />
+ 
+         <thead>
+           <row>
+             <entry><emphasis role="bold">Volume Name</emphasis></entry>
+ 
+             <entry><emphasis role="bold">Mount Point</emphasis></entry>
+           </row>
+         </thead>
+ 
+         <tbody>
+           <row>
+             <entry><replaceable>sysname</replaceable></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">bin</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/bin</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">etc</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/etc</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.afsws</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/afsws</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.bin</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/bin</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.etc</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/etc</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.inc</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/include</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.lib</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/lib</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.loc</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/local</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.man</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/man</emphasis></entry>
+           </row>
+ 
+           <row>
+             <entry><replaceable>sysname</replaceable>.<emphasis role="bold">usr.sys</emphasis></entry>
+ 
+             <entry><emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable>/<replaceable>sysname</replaceable><emphasis
+             role="bold">/usr/sys</emphasis></entry>
+           </row>
+         </tbody>
+       </tgroup>
+     </informaltable>
+ 
+     <indexterm>
+       <primary>foreign cell, enabling access</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cell</primary>
+ 
+       <secondary>enabling access to foreign</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>access</primary>
+ 
+       <secondary>to local and foreign cells</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS filespace</primary>
+ 
+       <secondary>enabling access to foreign cells</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>root.cell volume</primary>
+ 
+       <secondary>mounting for foreign cells in local filespace</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>database server machine</primary>
+ 
+       <secondary>entry in client CellServDB file</secondary>
+ 
+       <tertiary>for foreign cell</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>CellServDB file (client)</primary>
+ 
+       <secondary>adding entry</secondary>
+ 
+       <tertiary>for foreign cell</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ91">
+     <title>Enabling Access to Foreign Cells</title>
+     
+     <para>With current OpenAFS releases, there exist a number of mechanisms for
+     providing access to foreign cells. You may add mount points in your AFS
+     filespace for each foreign cell you wish users to access, or you can
+     enable a 'synthetic' AFS root, which contains mountpoints for either all
+     AFS cells defined in the client machine's local 
+     <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis>, or for all cells
+     providing location information in the DNS.
+     </para>
+     
+     <sect2>
+     <title>Enabling a Synthetic AFS root</title>
+     
+     <para>When a synthetic root is enabled, the client cache machine creates its
+     own root.afs volume, rather than using the one provided with your cell. This
+     allows clients to access all cells in the 
+     <emphasis role="bold">CellServDB</emphasis> file and, optionally, all cells
+     registered in the DNS, without requiring system administrator action to 
+     enable this access. Using a synthetic root has the additional advantage that
+     it allows a client to start its AFS service without a network available, as
+     it is no longer necessary to contact a fileserver to obtain the root volume.
+     </para>
+     
+     <para>OpenAFS supports two complimentary mechanisms for creating the 
+     synthetic root. Starting the cache manager with the 
+     <emphasis role="bold">-dynroot</emphasis> option adds all cells listed
+     in <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> to the client's
+     AFS root. Adding the <emphasis role="bold">-afsdb</emphasis> option in
+     addition to this enables DNS lookups for any cells that are not found in
+     the client's CellServDB file. Both of these options are added to the AFS
+     initialisation script, or options file, as detailed in 
+     <link linkend="HDRWQ70">Configuring the Cache Manager</link>.</para>
+     </sect2>
+     <sect2>
+       <title>Adding foreign cells to a conventional root volume</title>
+     
+     <para>In this section you create a mount point in your AFS filespace for the <emphasis role="bold">root.cell</emphasis> volume
+     of each foreign cell that you want to enable your users to access. For users working on a client machine to access the cell,
+     there must in addition be an entry for it in the client machine's local <emphasis
+     role="bold">/usr/vice/etc/CellServDB</emphasis> file. (The instructions in <link linkend="HDRWQ66">Creating the Client
+     CellServDB File</link> suggest that you use the <emphasis role="bold">CellServDB.sample</emphasis> file included in the AFS
+     distribution as the basis for your cell's client <emphasis role="bold">CellServDB</emphasis> file. The sample file lists all of
+     the cells that had agreed to participate in the AFS global namespace at the time your AFS CD-ROM was created. As mentioned in
+     that section, the AFS Product Support group also maintains a copy of the file, updating it as necessary.)</para>
+ 
+     <para>The chapter in the <emphasis>OpenAFS Administration Guide</emphasis> about cell administration and configuration issues
+     discusses the implications of participating in the global AFS namespace. The chapter about administering client machines
+     explains how to maintain knowledge of foreign cells on client machines, and includes suggestions for maintaining a central
+     version of the file in AFS. <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount each foreign cell's <emphasis
+           role="bold">root.cell</emphasis> volume on a directory called <emphasis
+           role="bold">/afs/</emphasis><replaceable>foreign_cell</replaceable>. Because the <emphasis role="bold">root.afs</emphasis>
+           volume is replicated, you must create a temporary mount point for its read/write version in a directory to which you have
+           write access (such as your cell's <emphasis role="bold">/afs/.</emphasis><replaceable>cellname</replaceable> directory).
+           Create the mount points, issue the <emphasis role="bold">vos release</emphasis> command to release new replicas to the
+           read-only sites for the <emphasis role="bold">root.afs</emphasis> volume, and issue the <emphasis role="bold">fs
+           checkvolumes</emphasis> command to force the local Cache Manager to access the new replica.</para>
+ 
+           <note>
+             <para>You need to issue the <emphasis role="bold">fs mkmount</emphasis> command only once for each foreign cell's
+             <emphasis role="bold">root.cell</emphasis> volume. You do not need to repeat the command on each client machine.</para>
+           </note>
+ 
+           <para>Substitute your cell's name for <replaceable>cellname</replaceable>.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable>
+    # <emphasis role="bold">/usr/afs/bin/fs  mkmount  temp  root.afs</emphasis>   
+ </programlisting>
+ 
+           <para>Repeat the <emphasis role="bold">fs mkmount</emphasis> command for each foreign cell you wish to mount at this
+           time.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/fs mkmount temp/</emphasis><replaceable>foreign_cell</replaceable> <emphasis role="bold">root.cell -c</emphasis> <replaceable>foreign_cell</replaceable>   
+ </programlisting>
+ 
+           <para>Issue the following commands only once.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/fs rmmount temp</emphasis>
+    # <emphasis role="bold">/usr/afs/bin/vos release root.afs</emphasis>
+    # <emphasis role="bold">/usr/afs/bin/fs checkvolumes</emphasis>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>fs commands</primary>
+ 
+             <secondary>newcell</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>fs newcell</secondary>
+           </indexterm>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ92" />If this machine is going to remain an AFS client after you complete the installation, verify
+           that the local <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file includes an entry for each foreign
+           cell.</para>
+ 
+           <para>For each cell that does not already have an entry, complete the following instructions: <orderedlist>
+               <listitem>
+                 <para>Create an entry in the <emphasis role="bold">CellServDB</emphasis> file. Be sure to comply with the formatting
+                 instructions in <link linkend="HDRWQ66">Creating the Client CellServDB File</link>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Issue the <emphasis role="bold">fs newcell</emphasis> command to add an entry for the cell directly to the
+                 list that the Cache Manager maintains in kernel memory. Provide each database server machine's fully qualified
+                 hostname. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/fs newcell</emphasis> &lt;<replaceable>foreign_cell</replaceable>&gt; &lt;<replaceable>dbserver1&gt;</replaceable>    \
+             [&lt;<replaceable>dbserver2&gt;</replaceable>] [&lt;<replaceable>dbserver3&gt;</replaceable>]
+ </programlisting></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If you plan to maintain a central version of the <emphasis role="bold">CellServDB</emphasis> file (the
+                 conventional location is <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+                 role="bold">/common/etc/CellServDB</emphasis>), create it now as a copy of the local <emphasis
+                 role="bold">/usr/vice/etc/CellServDB</emphasis> file. Verify that it includes an entry for each foreign cell you
+                 want your users to be able to access. <programlisting>
+    # <emphasis role="bold">mkdir common</emphasis>
+    # <emphasis role="bold">mkdir common/etc</emphasis>
+    # <emphasis role="bold">cp  /usr/vice/etc/CellServDB  common/etc</emphasis>
+    # <emphasis role="bold">/usr/afs/bin/vos release root.cell</emphasis>
+ </programlisting></para>
+               </listitem>
+             </orderedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">ls</emphasis> command to verify that the new cell's mount point is visible in your
+           filespace. The output lists the directories at the top level of the new cell's AFS filespace. <programlisting>
+    # <emphasis role="bold">ls /afs/</emphasis><replaceable>foreign_cell</replaceable>
+ </programlisting></para>
+         </listitem>
+              
+         <listitem>
+           <para>If you wish to participate in the global AFS namespace, and only
+           intend running one database server, please
+           register your cell with grand.central.org at this time.
+           To do so, email the <emphasis role="bold">CellServDB</emphasis> fragment
+           describing your cell, together with a contact name and email address
+           for any queries, to cellservdb@grand.central.org. If you intend
+           on deploying multiple database servers, please wait until you have 
+           installed all of them before registering your cell.</para>
+         </listitem>
+         <listitem>
+           <para>If you wish to allow your cell to be located through DNS lookups,
+           at this time you should also add the necessary configuration to your
+           DNS.</para>
+           
+           <para>AFS database servers may be located by creating AFSDB records
+           in the DNS for the domain name corresponding to the name of your cell.
+           It's outside the scope of this guide to give an indepth description of
+           managing, or configuring, your site's DNS. You should consult the
+           documentation for your DNS server for further details on AFSDB 
+           records.</para>
+         </listitem>
+       </orderedlist></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ93">
+     <title>Improving Cell Security</title>
+ 
+     <indexterm>
+       <primary>cell</primary>
+ 
+       <secondary>improving security</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>security</primary>
+ 
+       <secondary>improving</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>root superuser</primary>
+ 
+       <secondary>controlling access</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>access</primary>
+ 
+       <secondary>to root and admin accounts</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>admin account</primary>
+ 
+       <secondary>controlling access to</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS filespace</primary>
+ 
+       <secondary>controlling access by root superuser</secondary>
+     </indexterm>
+ 
+     <para>This section discusses ways to improve the security of AFS data
+     in your cell. Also see the chapter in the <emphasis>OpenAFS
+     Administration Guide</emphasis> about configuration and administration
+     issues.</para>
+ 
+     <sect2 id="HDRWQ94">
+       <title>Controlling root Access</title>
+ 
+       <para>As on any machine, it is important to prevent unauthorized users from logging onto an AFS server or client machine as
+       the local superuser <emphasis role="bold">root</emphasis>. Take care to keep the <emphasis role="bold">root</emphasis>
+       password secret.</para>
+ 
+       <para>The local <emphasis role="bold">root</emphasis> superuser does not have special access to AFS data through the Cache
+       Manager (as members of the <emphasis role="bold">system:administrators</emphasis> group do), but it does have the following
+       privileges: <itemizedlist>
+           <listitem>
+             <para>On client machines, the ability to issue commands from the <emphasis role="bold">fs</emphasis> suite that affect
+             AFS performance</para>
+           </listitem>
+ 
+           <listitem>
+             <para>On server machines, the ability to disable authorization checking, or to install rogue process binaries</para>
+           </listitem>
+         </itemizedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ95">
+       <title>Controlling System Administrator Access</title>
+ 
+       <para>Following are suggestions for managing AFS administrative privilege: <itemizedlist>
+           <listitem>
+             <para>Create an administrative account for each administrator named 
+             something like 
+             <replaceable>username</replaceable><emphasis role="bold">.admin</emphasis>. 
+             Administrators authenticate under these identities only when 
+             performing administrative tasks, and destroy the administrative 
+             tokens immediately after finishing the task (either by issuing the 
+             <emphasis role="bold">unlog</emphasis> command, or the 
+             <emphasis role="bold">kinit</emphasis> and 
+             <emphasis role="bold">aklog</emphasis> commands to adopt their 
+             regular identity).</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Set a short ticket lifetime for administrator accounts (for example, 20 minutes) by using the 
+             facilities of your KDC. For instance, with a MIT Kerberos KDC, this
+             can be performed using the 
+             <emphasis role="bold">--max-ticket-life</emphasis> argument to
+             the <emphasis role="bold">kadmin modify_principal</emphasis>
+             command. Do not however, use a short lifetime for users
+             who issue long-running <emphasis role="bold">backup</emphasis> commands.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Limit the number of system administrators in your cell, especially those who belong to the <emphasis
+             role="bold">system:administrators</emphasis> group. By default they have all ACL rights on all directories in the local
+             AFS filespace, and therefore must be trusted not to examine private files.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Limit the use of system administrator accounts on machines in public areas. It is especially important not to
+             leave such machines unattended without first destroying the administrative tokens.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Limit the use by administrators of standard UNIX commands that make connections to remote machines (such as the
+             <emphasis role="bold">telnet</emphasis> utility). Many of these programs send passwords across the network without
+             encrypting them.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <indexterm>
+         <primary>BOS Server</primary>
+ 
+         <secondary>checking mode bits on AFS directories</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>mode bits on local AFS directories</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>UNIX mode bits on local AFS directories</primary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ96">
+       <title>Protecting Sensitive AFS Directories</title>
+ 
+       <para>Some subdirectories of the <emphasis role="bold">/usr/afs</emphasis> directory contain files crucial to cell security.
+       Unauthorized users must not read or write to these files because of the potential for misuse of the information they
+       contain.</para>
+ 
+       <para>As the BOS Server initializes for the first time on a server machine, it creates several files and directories (as
+       mentioned in <link linkend="HDRWQ50">Starting the BOS Server</link>). It sets their owner to the local superuser <emphasis
+       role="bold">root</emphasis> and sets their mode bits to enable writing by the owner only; in some cases, it also restricts
+       reading.</para>
+ 
+       <para>At each subsequent restart, the BOS Server checks that the owner and mode bits on these files are still set
+       appropriately. If they are not, it write the following message to the <emphasis role="bold">/usr/afs/logs/BosLog</emphasis>
+       file:</para>
+ 
+       <programlisting>
+    Bosserver reports inappropriate access on server directories   
+ </programlisting>
+ 
+       <para>The BOS Server does not reset the mode bits, which enables you to set alternate values if you wish.</para>
+ 
+       <para>The following charts lists the expected mode bit settings. A question mark indicates that the BOS Server does not check
+       that mode bit.</para>
+ 
+       <informaltable frame="none">
+         <tgroup cols="2">
+           <colspec colwidth="30*" />
+ 
+           <colspec colwidth="70*" />
+ 
+           <tbody>
+             <row>
+               <entry><emphasis role="bold">/usr/afs</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr</computeroutput>?<computeroutput>xr-x</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/backup</emphasis></entry>
+ 
+               <entry><computeroutput>drwx</computeroutput>???<computeroutput>---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/bin</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr</computeroutput>?<computeroutput>xr-x</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/db</emphasis></entry>
+ 
+               <entry><computeroutput>drwx</computeroutput>???<computeroutput>---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/etc</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr</computeroutput>?<computeroutput>xr-x</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/etc/KeyFile</emphasis></entry>
+ 
+               <entry><computeroutput>-rw</computeroutput>????<computeroutput>---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/etc/UserList</emphasis></entry>
+ 
+               <entry><computeroutput>-rw</computeroutput>?????<computeroutput>--</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/local</emphasis></entry>
+ 
+               <entry><computeroutput>drwx</computeroutput>???<computeroutput>---</computeroutput></entry>
+             </row>
+ 
+             <row>
+               <entry><emphasis role="bold">/usr/afs/logs</emphasis></entry>
+ 
+               <entry><computeroutput>drwxr</computeroutput>?<computeroutput>xr-x</computeroutput></entry>
+             </row>
+           </tbody>
+         </tgroup>
+       </informaltable>
+ 
+       <indexterm>
+         <primary>first AFS machine</primary>
+ 
+         <secondary>client functionality</secondary>
+ 
+         <tertiary>removing</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>client functionality from first AFS machine</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ98">
+     <title>Removing Client Functionality</title>
+ 
+     <para>Follow the instructions in this section only if you do not wish this machine to remain an AFS client. Removing client
+     functionality means that you cannot use this machine to access AFS files. <orderedlist>
+         <listitem>
+           <para>Remove the files from the <emphasis role="bold">/usr/vice/etc</emphasis> directory. The command does not remove the
+           directory for files used by the dynamic kernel loader program, if it exists on this system type. Those files are still
+           needed on a server-only machine. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm  *</emphasis> 
+    # <emphasis role="bold">rm -rf  C</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create symbolic links to the <emphasis role="bold">ThisCell</emphasis> and <emphasis
+           role="bold">CellServDB</emphasis> files in the <emphasis role="bold">/usr/afs/etc</emphasis> directory. This makes it
+           possible to issue commands from the AFS command suites (such as <emphasis role="bold">bos</emphasis> and <emphasis
+           role="bold">fs</emphasis>) on this machine. <programlisting>
+    # <emphasis role="bold">ln -s /usr/afs/etc/ThisCell ThisCell</emphasis>
+    # <emphasis role="bold">ln -s /usr/afs/etc/CellServDB CellServDB</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On IRIX systems, issue the <emphasis role="bold">chkconfig</emphasis> command to deactivate the <emphasis
+           role="bold">afsclient</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsclient off</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Reboot the machine. Most system types use the <emphasis role="bold">shutdown</emphasis> command, but the appropriate
+           options vary. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown</emphasis> <replaceable>appropriate_options</replaceable>
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/QuickStartUnix/auqbg006.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg006.xml:1.3.4.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg006.xml	Mon May 11 11:12:14 2009
***************
*** 0 ****
--- 1,3698 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ99">
+   <title>Installing Additional Server Machines</title>
+ 
+   <indexterm>
+     <primary>instructions</primary>
+ 
+     <secondary>file server machine after first</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>installing</primary>
+ 
+     <secondary>file server machine after first</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>server machine after first</primary>
+ 
+     <see>file server machine, additional</see>
+   </indexterm>
+ 
+   <para>Instructions for the following procedures appear in the indicated section of this chapter. <itemizedlist>
+       <listitem>
+         <para><link linkend="HDRWQ100">Installing an Additional File Server Machine</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para><link linkend="HDRWQ114">Installing Database Server Functionality</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para><link linkend="HDRWQ125">Removing Database Server Functionality</link></para>
+       </listitem>
+     </itemizedlist></para>
+ 
+   <para>The instructions make the following assumptions. <itemizedlist>
+       <listitem>
+         <para>You have already installed your cell's first file server machine by following the instructions in <link
+         linkend="HDRWQ17">Installing the First AFS Machine</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para>You are logged in as the local superuser <emphasis role="bold">root</emphasis></para>
+       </listitem>
+ 
+       <listitem>
+         <para>You are working at the console</para>
+       </listitem>
+ 
+       <listitem>
+         <para>A standard version of one of the operating systems supported by the current version of AFS is running on the
+         machine</para>
+       </listitem>
+ 
+       <listitem>
+         <para>You can access the data on the OpenAFS Binary Distribution for
+         your operating system, either on the local filesystem or via an NFS
+         mount of the distribution's contents.</para>
+       </listitem>
+     </itemizedlist></para>
+ 
+   <indexterm>
+     <primary>requirements</primary>
+ 
+     <secondary>file server machine (additional)</secondary>
+   </indexterm>
+ 
+   <sect1 id="HDRWQ100">
+     <title>Installing an Additional File Server Machine</title>
+ 
+     <para>The procedure for installing a new file server machine is similar to installing the first file server machine in your
+     cell. There are a few parts of the installation that differ depending on whether the machine is the same AFS system type as an
+     existing file server machine or is the first file server machine of its system type in your cell. The differences mostly concern
+     the source for the needed binaries and files, and what portions of the Update Server you install: <itemizedlist>
+         <listitem>
+           <para>On a new system type, you must load files and binaries from the 
+           OpenAFS distribution. You may install the server portion of the
+           Update Server to make this machine the binary distribution machine 
+           for its system type.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>On an existing system type, you can copy files and binaries 
+           from a previously installed file server machine, rather
+           than from the OpenAFS distribution. You may install the client 
+           portion of the Update Server to accept updates of binaries, because a
+           previously installed machine of this type was installed as the binary 
+           distribution machine.</para>
+         </listitem>
+         <listitem>
+           <para>On some system types, distribtution of the appropriate binaries
+           may be acheived using the system's own package management system. In
+           these cases, it is recommended that this system is used, rather than
+           installing the binaries by hand.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>These instructions are brief; for more detailed information, refer to the corresponding steps in <link
+     linkend="HDRWQ17">Installing the First AFS Machine</link>. <indexterm>
+         <primary>overview</primary>
+ 
+         <secondary>installing server machine after first</secondary>
+       </indexterm></para>
+ 
+     <para>To install a new file server machine, perform the following procedures: <orderedlist>
+         <listitem>
+           <para>Copy needed binaries and files onto this machine's local disk,
+           as required.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Incorporate AFS modifications into the kernel</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Configure partitions for storing volumes</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Replace the standard <emphasis role="bold">fsck</emphasis> utility with the AFS-modified version on some system
+           types</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the Basic OverSeer (BOS) Server</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the appropriate portion of the Update Server, if 
+           required</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Start the <emphasis role="bold">fs</emphasis> process, which incorporates three component processes: the File
+           Server, Volume Server, and Salvager</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>After completing the instructions in this section, you can install database server functionality on the machine according
+     to the instructions in <link linkend="HDRWQ114">Installing Database Server Functionality</link>. <indexterm>
+         <primary>usr/afs directory</primary>
+ 
+         <secondary>server machine after first</secondary>
+       </indexterm> <indexterm>
+         <primary>file server machine, additional</primary>
+ 
+         <secondary>/usr/afs directory</secondary>
+       </indexterm> <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>/usr/afs directory</secondary>
+ 
+         <tertiary>server machine after first</tertiary>
+       </indexterm> <indexterm>
+         <primary>usr/afs/bin directory</primary>
+ 
+         <secondary>server machine after first</secondary>
+       </indexterm> <indexterm>
+         <primary>file server machine, additional</primary>
+ 
+         <secondary>/usr/afs/bin directory</secondary>
+       </indexterm> <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>/usr/afs/bin directory</secondary>
+ 
+         <tertiary>server machine after first</tertiary>
+       </indexterm> <indexterm>
+         <primary>usr/vice/etc directory</primary>
+ 
+         <secondary>server machine after first</secondary>
+       </indexterm> <indexterm>
+         <primary>file server machine, additional</primary>
+ 
+         <secondary>/usr/vice/etc directory</secondary>
+       </indexterm> <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>/usr/vice/etc directory</secondary>
+ 
+         <tertiary>server machine after first</tertiary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_99">
+       <title>Creating AFS Directories and Performing Platform-Specific Procedures</title>
+ 
+       <para>If your operating systems AFS distribution is supplied as packages,
+       such as .rpms or .debs, you should just install those packages as detailed
+       in the previous chapter.</para>
+       
+       <para>Create the <emphasis role="bold">/usr/afs</emphasis> and <emphasis role="bold">/usr/vice/etc</emphasis> directories on
+       the local disk. Subsequent instructions copy files from the AFS distribution into them, at the appropriate point for
+       each system type.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">mkdir /usr/afs</emphasis>
+    # <emphasis role="bold">mkdir /usr/afs/bin</emphasis>
+    # <emphasis role="bold">mkdir /usr/vice</emphasis>
+    # <emphasis role="bold">mkdir /usr/vice/etc</emphasis>
+    # <emphasis role="bold">mkdir /tmp/afsdist</emphasis>     
+ </programlisting>
+ 
+       <para>As on the first file server machine, the initial procedures in installing an additional file server machine vary a good
+       deal from platform to platform. For convenience, the following sections group together all of the procedures for a system
+       type. Most of the remaining procedures are the same on every system type, but differences are noted as appropriate. The
+       initial procedures are the following. <itemizedlist>
+           <listitem>
+             <para>Incorporate AFS modifications into the kernel, either by using a dynamic kernel loader program or by building a
+             new static kernel</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Configure server partitions to house AFS volumes</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Replace the operating system vendor's <emphasis role="bold">fsck</emphasis> program with a version that recognizes
+             AFS data <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>AFS login</secondary>
+ 
+                 <see>first AFS machine</see>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the machine is to remain an AFS client machine, modify the machine's authentication system so that users obtain
+             an AFS token as they log into the local file system. (For this procedure only, the instructions direct you to the
+             platform-specific section in <link linkend="HDRWQ17">Installing the First AFS Machine</link>.)</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>To continue, proceed to the section for this system type: <itemizedlist>
+           <listitem>
+             <para><link linkend="HDRWQ101">Getting Started on AIX Systems</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para><link linkend="HDRWQ103">Getting Started on HP-UX Systems</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para><link linkend="HDRWQ104">Getting Started on IRIX Systems</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para><link linkend="HDRWQ106">Getting Started on Linux Systems</link></para>
+           </listitem>
+ 
+           <listitem>
+             <para><link linkend="HDRWQ107">Getting Started on Solaris Systems</link></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <sect3 id="HDRWQ101">
+         <title>Getting Started on AIX Systems</title>
+ 
+         <para>Begin by running the AFS initialization script to call the AIX kernel extension facility, which dynamically loads AFS
+         modifications into the kernel. Then configure partitions and replace the AIX <emphasis role="bold">fsck</emphasis> program
+         with a version that correctly handles AFS volumes. <orderedlist>
+             <indexterm>
+               <primary>incorporating AFS kernel extensions</primary>
+ 
+               <secondary>server machine after first</secondary>
+ 
+               <tertiary>AIX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AFS kernel extensions</primary>
+ 
+               <secondary>on server machine after first</secondary>
+ 
+               <tertiary>AIX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on AIX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AIX</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <listitem>
+               <para>Unpack the distribution tarball. The examples below assume 
+               that you have unpacked the files into the 
+               <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+               pick a different location, substitute this in all of the following 
+               examples. Once you have unpacked the distribution, 
+               change directory as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/rs_aix42/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the AFS kernel library files to the local <emphasis role="bold">/usr/vice/etc/dkload</emphasis> directory,
+               and the AFS initialization script to the <emphasis role="bold">/etc</emphasis> directory. <programlisting>
+    # <emphasis role="bold">cp -rp  dkload  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -p  rc.afs  /etc/rc.afs</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Edit the <emphasis role="bold">/etc/rc.afs</emphasis> script, setting the <computeroutput>NFS</computeroutput>
+               variable as indicated.</para>
+ 
+               <para>If the machine is not to function as an NFS/AFS Translator, set the <computeroutput>NFS</computeroutput>
+               variable as follows.</para>
+ 
+               <programlisting>
+    NFS=$NFS_NONE
+ </programlisting>
+ 
+               <para>If the machine is to function as an NFS/AFS Translator and is running AIX 4.2.1 or higher, set the
+               <computeroutput>NFS</computeroutput> variable as follows. Note that NFS must already be loaded into the kernel, which
+               happens automatically on systems running AIX 4.1.1 and later, as long as the file <emphasis
+               role="bold">/etc/exports</emphasis> exists.</para>
+ 
+               <programlisting>
+    NFS=$NFS_IAUTH
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Invoke the <emphasis role="bold">/etc/rc.afs</emphasis> script to load AFS modifications into the kernel. You
+               can ignore any error messages about the inability to start the BOS Server or the Cache Manager or AFS client.
+               <programlisting>
+    # <emphasis role="bold">/etc/rc.afs</emphasis>
+ </programlisting> <indexterm>
+                   <primary>configuring</primary>
+ 
+                   <secondary>AFS server partition on server machine after first</secondary>
+ 
+                   <tertiary>AIX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>AFS server partition</primary>
+ 
+                   <secondary>configuring on server machine after first</secondary>
+ 
+                   <tertiary>AIX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>file server machine, additional</primary>
+ 
+                   <secondary>AFS server partition</secondary>
+ 
+                   <tertiary>on AIX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>AIX</primary>
+ 
+                   <secondary>AFS server partition</secondary>
+ 
+                   <tertiary>on add'l server machine</tertiary>
+                 </indexterm></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS
+               server partition you are configuring (there must be at least one). Repeat the command for each partition.
+               <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Use the <emphasis role="bold">SMIT</emphasis> program to create a journaling file system on each partition to be
+               configured as an AFS server partition.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Mount each partition at one of the <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable>
+               directories. Choose one of the following three methods: <itemizedlist>
+                   <listitem>
+                     <para>Use the <emphasis role="bold">SMIT</emphasis> program</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Use the <emphasis role="bold">mount -a</emphasis> command to mount all partitions at once</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Use the <emphasis role="bold">mount</emphasis> command on each partition in turn</para>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <para>Also configure the partitions so that they are mounted automatically at each reboot. For more information, refer
+               to the AIX documentation. <indexterm>
+                   <primary>replacing fsck program</primary>
+ 
+                   <secondary>server machine after first</secondary>
+ 
+                   <tertiary>AIX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>fsck program</primary>
+ 
+                   <secondary>on server machine after first</secondary>
+ 
+                   <tertiary>AIX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>file server machine, additional</primary>
+ 
+                   <secondary>fsck program</secondary>
+ 
+                   <tertiary>on AIX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>AIX</primary>
+ 
+                   <secondary>fsck program</secondary>
+ 
+                   <tertiary>on add'l server machine</tertiary>
+                 </indexterm></para>
+             </listitem>
+ 
+             <listitem>
+               <para>On systems prior to AIX 5.1, move the AIX 
+               <emphasis role="bold">fsck</emphasis> program helper to a safe 
+               location and install the version from the AFS distribution in 
+               its place. Note that on AIX 5.1, and later, systems this step is
+               not required, and the <emphasis role="bold">v3fshelper</emphasis>
+               program is not shipped for these systems.</para>
+               
+               <para>The AFS binary distribution must still be available in the
+               <emphasis role="bold">/tmp/afsdist</emphasis> directory. 
+ <programlisting>
+    # <emphasis role="bold">cd /sbin/helpers</emphasis>
+    # <emphasis role="bold">mv v3fshelper v3fshelper.noafs</emphasis>
+    # <emphasis role="bold">cp -p /tmp/afsdist/rs_aix42/root.server/etc/v3fshelper v3fshelper</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>If the machine is to remain an AFS client, incorporate AFS into its authentication system, following the
+               instructions in <link linkend="HDRWQ25">Enabling AFS Login on AIX Systems</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Proceed to <link linkend="HDRWQ108">Starting Server Programs</link>.</para>
+             </listitem>
+           </orderedlist></para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ103">
+         <title>Getting Started on HP-UX Systems</title>
+ 
+         <para>Begin by building AFS modifications into the kernel, then configure server partitions and replace the HP-UX <emphasis
+         role="bold">fsck</emphasis> program with a version that correctly handles AFS volumes.</para>
+ 
+         <para>If the machine's hardware and software configuration exactly matches another HP-UX machine on which AFS is already
+         built into the kernel, you can copy the kernel from that machine to this one. In general, however, it is better to build AFS
+         modifications into the kernel on each machine according to the following instructions. 
+           <orderedlist>
+             <indexterm>
+               <primary>incorporating AFS kernel extensions</primary>
+ 
+               <secondary>server machine after first</secondary>
+ 
+               <tertiary>HP-UX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AFS kernel extensions</primary>
+ 
+               <secondary>on server machine after first</secondary>
+ 
+               <tertiary>HP-UX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on HP-UX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>HP-UX</primary>
+ 
+               <secondary>AFS-modified kernel</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <listitem>
+               <para>Move the existing kernel-related files to a safe location. <programlisting>
+    # <emphasis role="bold">cp /stand/vmunix /stand/vmunix.noafs</emphasis>
+    # <emphasis role="bold">cp /stand/system /stand/system.noafs</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Unpack the OpenAFS HP-UX distribution tarball. The examples 
+               below assume that you have unpacked the files into the 
+               <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+               pick a different location, substitute this in all of the following 
+               examples. Once you have unpacked the distribution, change 
+               directory as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/hp_ux110/root.client</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the AFS initialization file to the local directory for initialization files (by convention, <emphasis
+               role="bold">/sbin/init.d</emphasis> on HP-UX machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+               extension as you copy the file. <programlisting>
+    # <emphasis role="bold">cp usr/vice/etc/afs.rc  /sbin/init.d/afs</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the file <emphasis role="bold">afs.driver</emphasis> to the local <emphasis
+               role="bold">/usr/conf/master.d</emphasis> directory, changing its name to <emphasis role="bold">afs</emphasis> as you
+               do. <programlisting>
+    # <emphasis role="bold">cp  usr/vice/etc/afs.driver  /usr/conf/master.d/afs</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the AFS kernel module to the local <emphasis role="bold">/usr/conf/lib</emphasis> directory.</para>
+ 
+               <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">cp bin/libafs.a /usr/conf/lib</emphasis>   
+ </programlisting>
+ 
+               <para>If the machine's kernel does not support NFS server functionality, change the file's name as you copy it:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">cp bin/libafs.nonfs.a /usr/conf/lib/libafs.a</emphasis>
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Incorporate the AFS driver into the kernel, either using the <emphasis role="bold">SAM</emphasis> program or a
+               series of individual commands. <itemizedlist>
+                   <listitem>
+                     <para>To use the <emphasis role="bold">SAM</emphasis> program: <orderedlist>
+                         <listitem>
+                           <para>Invoke the <emphasis role="bold">SAM</emphasis> program, specifying the hostname of the local
+                           machine as <replaceable>local_hostname</replaceable>. The <emphasis role="bold">SAM</emphasis> graphical
+                           user interface pops up. <programlisting>
+    # <emphasis role="bold">sam -display</emphasis> <replaceable>local_hostname</replaceable><emphasis role="bold">:0</emphasis> 
+ </programlisting></para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Choose the <emphasis role="bold">Kernel Configuration</emphasis> icon, then the <emphasis
+                           role="bold">Drivers</emphasis> icon. From the list of drivers, select <emphasis
+                           role="bold">afs</emphasis>.</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Open the pull-down <emphasis role="bold">Actions</emphasis> menu and choose the <emphasis
+                           role="bold">Add Driver to Kernel</emphasis> option.</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Open the <emphasis role="bold">Actions</emphasis> menu again and choose the <emphasis
+                           role="bold">Create a New Kernel</emphasis> option.</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Confirm your choices by choosing <emphasis role="bold">Yes</emphasis> and <emphasis
+                           role="bold">OK</emphasis> when prompted by subsequent pop-up windows. The <emphasis
+                           role="bold">SAM</emphasis> program builds the kernel and reboots the system.</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Login again as the superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                         </listitem>
+                       </orderedlist></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>To use individual commands: <orderedlist>
+                         <listitem>
+                           <para>Edit the file <emphasis role="bold">/stand/system</emphasis>, adding an entry for <emphasis
+                           role="bold">afs</emphasis> to the <computeroutput>Subsystems</computeroutput> section.</para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Change to the <emphasis role="bold">/stand/build</emphasis> directory and issue the <emphasis
+                           role="bold">mk_kernel</emphasis> command to build the kernel. <programlisting>
+    # <emphasis role="bold">cd /stand/build</emphasis>
+    # <emphasis role="bold">mk_kernel</emphasis>
+ </programlisting></para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Move the new kernel to the standard location (<emphasis role="bold">/stand/vmunix</emphasis>),
+                           reboot the machine to start using it, and login again as the superuser <emphasis
+                           role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">mv /stand/build/vmunix_test /stand/vmunix</emphasis>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>             
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                         </listitem>
+                       </orderedlist></para>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <indexterm>
+                 <primary>configuring</primary>
+ 
+                 <secondary>AFS server partition on server machine after first</secondary>
+ 
+                 <tertiary>HP-UX</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>AFS server partition</primary>
+ 
+                 <secondary>configuring on server machine after first</secondary>
+ 
+                 <tertiary>HP-UX</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>AFS server partition</secondary>
+ 
+                 <tertiary>on HP-UX</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>HP-UX</primary>
+ 
+                 <secondary>AFS server partition</secondary>
+ 
+                 <tertiary>on add'l server machine</tertiary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS
+               server partition you are configuring (there must be at least one). Repeat the command for each partition.
+               <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Use the <emphasis role="bold">SAM</emphasis> program to create a file system on each partition. For
+               instructions, consult the HP-UX documentation.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>On some HP-UX systems that use logical volumes, the <emphasis role="bold">SAM</emphasis> program automatically
+               mounts the partitions. If it has not, mount each partition by issuing either the <emphasis role="bold">mount
+               -a</emphasis> command to mount all partitions at once or the <emphasis role="bold">mount</emphasis> command to mount
+               each partition in turn. <indexterm>
+                   <primary>replacing fsck program</primary>
+ 
+                   <secondary>server machine after first</secondary>
+ 
+                   <tertiary>HP-UX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>fsck program</primary>
+ 
+                   <secondary>on server machine after first</secondary>
+ 
+                   <tertiary>HP-UX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>file server machine, additional</primary>
+ 
+                   <secondary>fsck program</secondary>
+ 
+                   <tertiary>on HP-UX</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>HP-UX</primary>
+ 
+                   <secondary>fsck program</secondary>
+ 
+                   <tertiary>on add'l server machine</tertiary>
+                 </indexterm></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Create the command configuration file <emphasis role="bold">/sbin/lib/mfsconfig.d/afs</emphasis>. Use a text
+               editor to place the indicated two lines in it: <programlisting>
+    format_revision 1
+    fsck            0        m,P,p,d,f,b:c:y,n,Y,N,q,
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Create and change directory to an AFS-specific command directory called <emphasis
+               role="bold">/sbin/fs/afs</emphasis>. <programlisting>
+    # <emphasis role="bold">mkdir /sbin/fs/afs</emphasis>
+    # <emphasis role="bold">cd  /sbin/fs/afs</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the AFS-modified version of the <emphasis role="bold">fsck</emphasis> program (the <emphasis
+               role="bold">vfsck</emphasis> binary) and related files from the distribution directory to the new AFS-specific command
+               directory. <programlisting>
+    # <emphasis role="bold">cp -p /tmp/afsdist/hp_ux110/root.server/etc/*  .</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Change the <emphasis role="bold">vfsck</emphasis> binary's name to <emphasis role="bold">fsck</emphasis> and set
+               the mode bits appropriately on all of the files in the <emphasis role="bold">/sbin/fs/afs</emphasis> directory.
+               <programlisting>
+    # <emphasis role="bold">mv  vfsck  fsck</emphasis>
+    # <emphasis role="bold">chmod  755  *</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Edit the <emphasis role="bold">/etc/fstab</emphasis> file, changing the file system type for each AFS server
+               partition from <computeroutput>hfs</computeroutput> to <computeroutput>afs</computeroutput>. This ensures that the
+               AFS-modified <emphasis role="bold">fsck</emphasis> program runs on the appropriate partitions.</para>
+ 
+               <para>The sixth line in the following example of an edited file shows an AFS server partition, <emphasis
+               role="bold">/vicepa</emphasis>.</para>
+ 
+               <programlisting>
+    /dev/vg00/lvol1 / hfs defaults 0 1
+    /dev/vg00/lvol4 /opt hfs defaults 0 2
+    /dev/vg00/lvol5 /tmp hfs defaults 0 2
+    /dev/vg00/lvol6 /usr hfs defaults 0 2
+    /dev/vg00/lvol8 /var hfs defaults 0 2
+    /dev/vg00/lvol9 /vicepa afs defaults 0 2
+    /dev/vg00/lvol7 /usr/vice/cache hfs defaults 0 2
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>If the machine is to remain an AFS client, incorporate AFS into its authentication system, following the
+               instructions in <link linkend="HDRWQ35">Enabling AFS Login on HP-UX Systems</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Proceed to <link linkend="HDRWQ108">Starting Server Programs</link>.</para>
+             </listitem>
+           </orderedlist></para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ104">
+         <title>Getting Started on IRIX Systems</title>
+ 
+         <para>Begin by incorporating AFS modifications into the kernel. Either use the <emphasis role="bold">ml</emphasis> dynamic
+         loader program, or build a static kernel. Then configure partitions to house AFS volumes. AFS supports use of both EFS and
+         XFS partitions for housing AFS volumes. SGI encourages use of XFS partitions. <indexterm>
+             <primary>file server machine, additional</primary>
+ 
+             <secondary>fsck program</secondary>
+ 
+             <tertiary>on IRIX</tertiary>
+           </indexterm> <indexterm>
+             <primary>fsck program</primary>
+ 
+             <secondary>on server machine after first</secondary>
+ 
+             <tertiary>IRIX</tertiary>
+           </indexterm></para>
+ 
+         <para>You do not need to replace IRIX <emphasis role="bold">fsck</emphasis> program, because the version that SGI
+         distributes handles AFS volumes properly. <orderedlist>
+             <indexterm>
+               <primary>incorporating AFS kernel extensions</primary>
+ 
+               <secondary>server machine after first</secondary>
+ 
+               <tertiary>IRIX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AFS kernel extensions</primary>
+ 
+               <secondary>on server machine after first</secondary>
+ 
+               <tertiary>IRIX</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on IRIX</tertiary>
+             </indexterm>
+ 
+             <listitem>
+               <para>Prepare for incorporating AFS into the kernel by performing the following procedures. <orderedlist>
+                   <listitem>
+                     <para>Unpack the OpenAFS IRIX distribution tarball. The 
+                     examples below assume that you have unpacked the files into 
+                     the <emphasis role="bold">/tmp/afsdist</emphasis> 
+                     directory. If you pick a different location, substitue this 
+                     in all of the following examples. Once you have unpacked 
+                     the distribution, change directory as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/sgi_65/root.client</emphasis>
+ </programlisting></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Copy the AFS initialization script to the local directory for initialization files (by convention,
+                     <emphasis role="bold">/etc/init.d</emphasis> on IRIX machines). Note the removal of the <emphasis
+                     role="bold">.rc</emphasis> extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p   usr/vice/etc/afs.rc  /etc/init.d/afs</emphasis>
+ </programlisting></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Issue the <emphasis role="bold">uname -m</emphasis> command to determine the machine's CPU board type. The
+                     <emphasis role="bold">IP</emphasis><replaceable>xx</replaceable> value in the output must match one of the
+                     supported CPU board types listed in the <emphasis>OpenAFS Release Notes</emphasis> for the current version of
+                     AFS. <programlisting>
+    # <emphasis role="bold">uname -m</emphasis>
+ </programlisting></para>
+                   </listitem>
+                 </orderedlist></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Incorporate AFS into the kernel, either using the <emphasis role="bold">ml</emphasis> program or by building AFS
+               modifications into a static kernel. <itemizedlist>
+                   <indexterm>
+                     <primary>IRIX</primary>
+ 
+                     <secondary>AFS kernel extensions</secondary>
+ 
+                     <tertiary>on server machine after first</tertiary>
+                   </indexterm>
+ 
+                   <listitem>
+                     <para>To use the <emphasis role="bold">ml</emphasis> program: <indexterm>
+                         <primary>afsml variable (IRIX)</primary>
+ 
+                         <secondary>server machine after first</secondary>
+                       </indexterm> <indexterm>
+                         <primary>variables</primary>
+ 
+                         <secondary>afsml (IRIX)</secondary>
+ 
+                         <tertiary>server machine after first</tertiary>
+                       </indexterm> <indexterm>
+                         <primary>IRIX</primary>
+ 
+                         <secondary>afsml variable</secondary>
+ 
+                         <tertiary>server machine after first</tertiary>
+                       </indexterm> <indexterm>
+                         <primary>afsxnfs variable (IRIX)</primary>
+ 
+                         <secondary>server machine after first</secondary>
+                       </indexterm> <indexterm>
+                         <primary>variables</primary>
+ 
+                         <secondary>afsxnfs (IRIX)</secondary>
+ 
+                         <tertiary>server machine after first</tertiary>
+                       </indexterm> <indexterm>
+                         <primary>IRIX</primary>
+ 
+                         <secondary>afsxnfs variable</secondary>
+ 
+                         <tertiary>server machine after first</tertiary>
+                       </indexterm> <orderedlist>
+                         <listitem>
+                           <para>Create the local <emphasis role="bold">/usr/vice/etc/sgiload</emphasis> directory to house the AFS
+                           kernel library file. <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice/etc/sgiload</emphasis>
+ </programlisting></para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Copy the appropriate AFS kernel library file to the <emphasis
+                           role="bold">/usr/vice/etc/sgiload</emphasis> directory. The <emphasis
+                           role="bold">IP</emphasis><replaceable>xx</replaceable> portion of the library file name must match the
+                           value previously returned by the <emphasis role="bold">uname -m</emphasis> command. Also choose the file
+                           appropriate to whether the machine's kernel supports NFS server functionality (NFS must be supported for
+                           the machine to act as an NFS/AFS Translator). Single- and multiprocessor machines use the same library
+                           file.</para>
+ 
+                           <para>(You can choose to copy all of the kernel library files into the <emphasis
+                           role="bold">/usr/vice/etc/sgiload</emphasis> directory, but they require a significant amount of
+                           space.)</para>
+ 
+                           <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">cp -p  usr/vice/etc/sgiload/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.o  /usr/vice/etc/sgiload</emphasis>   
+ </programlisting>
+ 
+                           <para>If the machine's kernel does not support NFS server functionality:</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">cp -p  usr/vice/etc/sgiload/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.nonfs.o</emphasis>   \
+                    <emphasis role="bold">/usr/vice/etc/sgiload</emphasis>
+ </programlisting>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+                           role="bold">afsml</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsml on</emphasis>   
+ </programlisting></para>
+ 
+                           <para>If the machine is to function as an NFS/AFS Translator and the kernel supports NFS server
+                           functionality, activate the <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsxnfs on</emphasis>
+ </programlisting>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Run the <emphasis role="bold">/etc/init.d/afs</emphasis> script to load AFS extensions into the
+                           kernel. The script invokes the <emphasis role="bold">ml</emphasis> command, automatically determining
+                           which kernel library file to use based on this machine's CPU type and the activation state of the
+                           <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+                           <para>You can ignore any error messages about the inability to start the BOS Server or the Cache Manager
+                           or AFS client.</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>
+ </programlisting>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Proceed to Step <link linkend="LIWQ105">3</link>.</para>
+                         </listitem>
+                       </orderedlist></para>
+ 
+                     <indexterm>
+                       <primary>IRIX</primary>
+ 
+                       <secondary>AFS-modified kernel</secondary>
+ 
+                       <tertiary>on add'l server machine</tertiary>
+                     </indexterm>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>If you prefer to build a kernel, and the machine's hardware and software configuration exactly matches
+                     another IRIX machine on which AFS is already built into the kernel, you can copy the kernel from that machine to
+                     this one. In general, however, it is better to build AFS modifications into the kernel on each machine according
+                     to the following instructions. <orderedlist>
+                         <listitem>
+                           <para>Copy the kernel initialization file <emphasis role="bold">afs.sm</emphasis> to the local <emphasis
+                           role="bold">/var/sysgen/system</emphasis> directory, and the kernel master file <emphasis
+                           role="bold">afs</emphasis> to the local <emphasis role="bold">/var/sysgen/master.d</emphasis> directory.
+                           <programlisting>
+    # <emphasis role="bold">cp -p  bin/afs.sm  /var/sysgen/system</emphasis>
+    # <emphasis role="bold">cp -p  bin/afs  /var/sysgen/master.d</emphasis>
+ </programlisting></para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Copy the appropriate AFS kernel library file to the local file <emphasis
+                           role="bold">/var/sysgen/boot/afs.a</emphasis>; the <emphasis
+                           role="bold">IP</emphasis><replaceable>xx</replaceable> portion of the library file name must match the
+                           value previously returned by the <emphasis role="bold">uname -m</emphasis> command. Also choose the file
+                           appropriate to whether the machine's kernel supports NFS server functionality (NFS must be supported for
+                           the machine to act as an NFS/AFS Translator). Single- and multiprocessor machines use the same library
+                           file.</para>
+ 
+                           <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">cp -p   bin/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.a   /var/sysgen/boot/afs.a</emphasis>   
+ </programlisting>
+ 
+                           <para>If the machine's kernel does not support NFS server functionality:</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">cp -p  bin/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.nonfs.a  /var/sysgen/boot/afs.a</emphasis>
+ </programlisting>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to deactivate the <emphasis
+                           role="bold">afsml</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsml off</emphasis>   
+ </programlisting></para>
+ 
+                           <para>If the machine is to function as an NFS/AFS Translator and the kernel supports NFS server
+                           functionality, activate the <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+                           <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsxnfs on</emphasis>
+ </programlisting>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Copy the existing kernel file, <emphasis role="bold">/unix</emphasis>, to a safe location. Compile
+                           the new kernel, which is created in the file <emphasis role="bold">/unix.install</emphasis>. It overwrites
+                           the existing <emphasis role="bold">/unix</emphasis> file when the machine reboots in the next step.
+                           <programlisting>
+    # <emphasis role="bold">cp /unix /unix_noafs</emphasis>
+    # <emphasis role="bold">autoconfig</emphasis>
+ </programlisting></para>
+                         </listitem>
+ 
+                         <listitem>
+                           <para>Reboot the machine to start using the new kernel, and login again as the superuser <emphasis
+                           role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                         </listitem>
+                       </orderedlist></para>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <indexterm>
+                 <primary>configuring</primary>
+ 
+                 <secondary>AFS server partition on server machine after first</secondary>
+ 
+                 <tertiary>IRIX</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>AFS server partition</primary>
+ 
+                 <secondary>configuring on server machine after first</secondary>
+ 
+                 <tertiary>IRIX</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>AFS server partition</secondary>
+ 
+                 <tertiary>on IRIX</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>IRIX</primary>
+ 
+                 <secondary>AFS server partition</secondary>
+ 
+                 <tertiary>on add'l server machine</tertiary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para><anchor id="LIWQ105" />Create a directory called <emphasis
+               role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS server partition you are configuring (there
+               must be at least one). Repeat the command for each partition. <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Add a line with the following format to the file systems registry file, <emphasis
+               role="bold">/etc/fstab</emphasis>, for each partition (or logical volume created with the XLV volume manager) to be
+               mounted on one of the directories created in the previous step.</para>
+ 
+               <para>For an XFS partition or logical volume:</para>
+ 
+               <programlisting>
+    /dev/dsk/<replaceable>disk</replaceable>  /vicep<replaceable>xx</replaceable>  xfs  rw,raw=/dev/rdsk/<replaceable>disk</replaceable>  0  0   
+ </programlisting>
+ 
+               <para>For an EFS partition:</para>
+ 
+               <programlisting>
+    /dev/dsk/<replaceable>disk</replaceable>  /vicep<replaceable>xx</replaceable>  efs  rw,raw=/dev/rdsk/<replaceable>disk</replaceable>  0  0   
+ </programlisting>
+ 
+               <para>The following are examples of an entry for each file system type:</para>
+ 
+               <programlisting>
+    /dev/dsk/dks0d2s6 /vicepa  xfs rw,raw=/dev/rdsk/dks0d2s6  0 0
+    /dev/dsk/dks0d3s1 /vicepb  efs rw,raw=/dev/rdsk/dks0d3s1  0 0
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Create a file system on each partition that is to be mounted on a <emphasis
+               role="bold">/vicep</emphasis><replaceable>xx</replaceable> directory. The following commands are probably appropriate,
+               but consult the IRIX documentation for more information. In both cases, <replaceable>raw_device</replaceable> is a raw
+               device name like <emphasis role="bold">/dev/rdsk/dks0d0s0</emphasis> for a single disk partition or <emphasis
+               role="bold">/dev/rxlv/xlv0</emphasis> for a logical volume.</para>
+ 
+               <para>For XFS file systems, include the indicated options to configure the partition or logical volume with inodes
+               large enough to accommodate AFS-specific information:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">mkfs -t xfs -i size=512 -l size=4000b</emphasis> <replaceable>raw_device</replaceable>   
+ </programlisting>
+ 
+               <para>For EFS file systems:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">mkfs -t efs</emphasis> <replaceable>raw_device</replaceable>
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Mount each partition by issuing either the <emphasis role="bold">mount -a</emphasis> command to mount all
+               partitions at once or the <emphasis role="bold">mount</emphasis> command to mount each partition in turn.</para>
+             </listitem>
+ 
+             <listitem>
+               <para><emphasis role="bold">(Optional)</emphasis> If you have configured partitions or logical volumes to use XFS,
+               issue the following command to verify that the inodes are configured properly (are large enough to accommodate
+               AFS-specific information). If the configuration is correct, the command returns no output. Otherwise, it specifies the
+               command to run in order to configure each partition or logical volume properly. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/xfs_size_check</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>If the machine is to remain an AFS client, incorporate AFS into its authentication system, following the
+               instructions in <link linkend="HDRWQ40">Enabling AFS Login on IRIX Systems</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Proceed to <link linkend="HDRWQ108">Starting Server Programs</link>.</para>
+             </listitem>
+           </orderedlist></para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ106">
+         <title>Getting Started on Linux Systems</title>
+ 
+         <indexterm>
+           <primary>file server machine, additional</primary>
+ 
+           <secondary>fsck program</secondary>
+ 
+           <tertiary>on Linux</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>fsck program</primary>
+ 
+           <secondary>on server machine after first</secondary>
+ 
+           <tertiary>Linux</tertiary>
+         </indexterm>
+ 
+         <para>Begin by running the AFS initialization script to call the <emphasis role="bold">insmod</emphasis> program, which
+         dynamically loads AFS modifications into the kernel. Then create partitions for storing AFS volumes. You do not need to
+         replace the Linux <emphasis role="bold">fsck</emphasis> program.</para>
+         
+         <para> The procedure for starting up OpenAFS depends upon your distribution</para>
+           <orderedlist>
+             <listitem>
+               <para>For Fedora and RedHat Enterprise Linux systems (or their
+               derivateds), download and install the RPM set for your operating system
+               from the OpenAFS distribution site. You will need the
+               <emphasis role="bold">openafs</emphasis> and
+               <emphasis role="bold">openafs-server</emphasis> packages, along
+               with an <emphasis role="bold">openafs-kernel</emphasis> package
+               matching your current, running, kernel. If you wish to install
+               client functionality, you will also require the
+               <emphasis role="bold">openafs-client</emphasis> package.</para>
+              
+               <para>You can find the version of your current kernel by running
+ <programlisting>
+   # uname -r
+ <replaceable>2.6.20-1.2933.fc6</replaceable>
+ </programlisting></para>
+  
+               <para>Once downloaded, the packages may be installed with the
+               <emphasis role="bold">rpm</emphasis> command
+ <programlisting>
+   # rpm -U openafs-* openafs-client-* openafs-server-* openafs-kernel-*
+ </programlisting></para>
+             </listitem>
+             <listitem>
+             <indexterm>
+               <primary>incorporating AFS kernel extensions</primary>
+ 
+               <secondary>server machine after first</secondary>
+ 
+               <tertiary>Linux</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AFS kernel extensions</primary>
+ 
+               <secondary>on server machine after first</secondary>
+ 
+               <tertiary>Linux</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on Linux</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>Linux</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+               <para>For systems which are provided as a tarball, or built from
+               source, unpack the distribution tarball. The examples below assume
+               that you have unpacked the files into the
+               <emphasis role="bold">/tmp/afsdist</emphasis>directory. If you
+               pick a different location, substitute this in all of the following
+               examples. Once you have unpacked the distribution,
+               change directory as indicated.
+ <programlisting>
+   # <emphasis role="bold">cd /tmp/afsdist/linux/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+ 
+               <para>Copy the AFS kernel library files to the local <emphasis role="bold">/usr/vice/etc/modload</emphasis> directory.
+               The filenames for the libraries have the format <emphasis
+               role="bold">libafs-</emphasis><replaceable>version</replaceable><emphasis role="bold">.o</emphasis>, where
+               <replaceable>version</replaceable> indicates the kernel build level. The string <emphasis role="bold">.mp</emphasis>
+               in the <replaceable>version</replaceable> indicates that the file is appropriate for machines running a multiprocessor
+               kernel. <programlisting>
+    # <emphasis role="bold">cp -rp  modload  /usr/vice/etc</emphasis>
+ </programlisting></para>
+             
+               <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+               role="bold">/etc/rc.d/init.d</emphasis> on Linux machines). Note the removal of the <emphasis
+               role="bold">.rc</emphasis> extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p   afs.rc  /etc/rc.d/init.d/afs</emphasis> 
+ </programlisting></para>
+             </listitem>
+             <listitem>
+                 <indexterm>
+                   <primary>configuring</primary>
+ 
+                   <secondary>AFS server partition on server machine after first</secondary>
+ 
+                   <tertiary>Linux</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>AFS server partition</primary>
+ 
+                   <secondary>configuring on server machine after first</secondary>
+ 
+                   <tertiary>Linux</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>file server machine, additional</primary>
+ 
+                   <secondary>AFS server partition</secondary>
+ 
+                   <tertiary>on Linux</tertiary>
+                 </indexterm> <indexterm>
+                   <primary>Linux</primary>
+ 
+                   <secondary>AFS server partition</secondary>
+ 
+                   <tertiary>on add'l server machine</tertiary>
+                 </indexterm>
+               <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS
+               server partition you are configuring (there must be at least one). Repeat the command for each partition.
+               <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Add a line with the following format to the file systems registry file, <emphasis
+               role="bold">/etc/fstab</emphasis>, for each directory just created. The entry maps the directory name to the disk
+               partition to be mounted on it. <programlisting>
+    /dev/<replaceable>disk</replaceable>  /vicep<replaceable>xx</replaceable>  ext2  defaults  0  2   
+ </programlisting></para>
+ 
+               <para>The following is an example for the first partition being configured.</para>
+ 
+               <programlisting>
+    /dev/sda8 /vicepa ext2 defaults 0 2
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Create a file system on each partition that is to be mounted at a <emphasis
+               role="bold">/vicep</emphasis><replaceable>xx</replaceable> directory. The following command is probably appropriate,
+               but consult the Linux documentation for more information. <programlisting>
+    # <emphasis role="bold">mkfs -v /dev/</emphasis><replaceable>disk</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Mount each partition by issuing either the <emphasis role="bold">mount -a</emphasis> command to mount all
+               partitions at once or the <emphasis role="bold">mount</emphasis> command to mount each partition in turn.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>If the machine is to remain an AFS client, incorporate AFS into its authentication system, following the
+               instructions in <link linkend="HDRWQ44">Enabling AFS Login on Linux Systems</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Proceed to <link linkend="HDRWQ108">Starting Server Programs</link>.</para>
+             </listitem>
+           </orderedlist>
+       </sect3>
+ 
+       <sect3 id="HDRWQ107">
+         <title>Getting Started on Solaris Systems</title>
+ 
+         <para>Begin by running the AFS initialization script to call the <emphasis role="bold">modload</emphasis> program, which
+         dynamically loads AFS modifications into the kernel. Then configure partitions and replace the Solaris <emphasis
+         role="bold">fsck</emphasis> program with a version that correctly handles AFS volumes. <orderedlist>
+             <indexterm>
+               <primary>incorporating AFS kernel extensions</primary>
+ 
+               <secondary>server machine after first</secondary>
+ 
+               <tertiary>Solaris</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AFS kernel extensions</primary>
+ 
+               <secondary>on server machine after first</secondary>
+ 
+               <tertiary>Solaris</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>Solaris</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>Solaris</primary>
+ 
+               <secondary>AFS kernel extensions</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <listitem>
+               <para>Unpack the OpenAFS Solaris distribution tarball. The examples
+               below assume that you have unpacked the files into the 
+               <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+               pick a diferent location, substitute this in all of the following
+               exmaples. Once you have unpacked the distribution, change directory
+               as indicated. 
+ <programlisting>
+    # <emphasis role="bold">cd  /tmp/afsdist/sun4x_56/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+               role="bold">/etc/init.d</emphasis> on Solaris machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+               extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p  afs.rc  /etc/init.d/afs</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the appropriate AFS kernel library file to the local file <emphasis
+               role="bold">/kernel/fs/afs</emphasis>.</para>
+ 
+               <para>If the machine is running Solaris 2.6 or the 32-bit version of Solaris 7, its kernel supports NFS server
+               functionality, and the <emphasis role="bold">nfsd</emphasis> process is running:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs.o /kernel/fs/afs</emphasis>   
+ </programlisting>
+ 
+               <para>If the machine is running Solaris 2.6 or the 32-bit version of Solaris 7, and its kernel does not support NFS
+               server functionality or the <emphasis role="bold">nfsd</emphasis> process is not running:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs.nonfs.o /kernel/fs/afs</emphasis>   
+ </programlisting>
+ 
+               <para>If the machine is running the 64-bit version of Solaris 7, its kernel supports NFS server functionality, and the
+               <emphasis role="bold">nfsd</emphasis> process is running:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs64.o /kernel/fs/sparcv9/afs</emphasis>   
+ </programlisting>
+ 
+               <para>If the machine is running the 64-bit version of Solaris 7, and its kernel does not support NFS server
+               functionality or the <emphasis role="bold">nfsd</emphasis> process is not running:</para>
+ 
+               <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs64.nonfs.o /kernel/fs/sparcv9/afs</emphasis>
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Run the AFS initialization script to load AFS modifications into the kernel. You can ignore any error messages
+               about the inability to start the BOS Server or the Cache Manager or AFS client. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>   
+ </programlisting></para>
+ 
+               <para>When an entry called <computeroutput>afs</computeroutput> does not already exist in the local <emphasis
+               role="bold">/etc/name_to_sysnum</emphasis> file, the script automatically creates it and reboots the machine to start
+               using the new version of the file. If this happens, log in again as the superuser <emphasis
+               role="bold">root</emphasis> after the reboot and run the initialization script again. This time the required entry
+               exists in the <emphasis role="bold">/etc/name_to_sysnum</emphasis> file, and the <emphasis
+               role="bold">modload</emphasis> program runs.</para>
+ 
+               <programlisting>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>
+ </programlisting>
+ 
+               <indexterm>
+                 <primary>replacing fsck program</primary>
+ 
+                 <secondary>server machine after first</secondary>
+ 
+                 <tertiary>Solaris</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>fsck program</primary>
+ 
+                 <secondary>on server machine after first</secondary>
+ 
+                 <tertiary>Solaris</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>fsck program</secondary>
+ 
+                 <tertiary>on Solaris</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Solaris</primary>
+ 
+                 <secondary>fsck program</secondary>
+ 
+                 <tertiary>on add'l server machine</tertiary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para>Create the <emphasis role="bold">/usr/lib/fs/afs</emphasis> directory to house the AFS-modified <emphasis
+               role="bold">fsck</emphasis> program and related files. <programlisting>
+    # <emphasis role="bold">mkdir /usr/lib/fs/afs</emphasis>
+    # <emphasis role="bold">cd /usr/lib/fs/afs</emphasis>  
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Copy the <emphasis role="bold">vfsck</emphasis> binary to the newly created directory, changing the name as you
+               do so. <programlisting>
+    # <emphasis role="bold">cp  /cdrom/sun4x_56/root.server/etc/vfsck  fsck</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Working in the <emphasis role="bold">/usr/lib/fs/afs</emphasis> directory, create the following links to Solaris
+               libraries: <programlisting>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/clri</emphasis>  
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/df</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/edquota</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ff</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/fsdb</emphasis>  
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/fsirand</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/fstyp</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/labelit</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/lockfs</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/mkfs</emphasis>  
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/mount</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ncheck</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/newfs</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quot</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quota</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quotaoff</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/quotaon</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/repquota</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/tunefs</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ufsdump</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/ufsrestore</emphasis>
+    # <emphasis role="bold">ln -s /usr/lib/fs/ufs/volcopy</emphasis>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Append the following line to the end of the file <emphasis role="bold">/etc/dfs/fstypes</emphasis>.
+               <programlisting>
+    afs AFS Utilities
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Edit the <emphasis role="bold">/sbin/mountall</emphasis> file, making two changes. <itemizedlist>
+                   <listitem>
+                     <para>Add an entry for AFS to the <computeroutput>case</computeroutput> statement for option 2, so that it reads
+                     as follows: <programlisting>
+    case "$2" in
+    ufs)    foptions="-o p"
+            ;;
+    afs)    foptions="-o p"
+            ;;
+    s5)     foptions="-y -t /var/tmp/tmp$$ -D"
+            ;;
+    *)      foptions="-y"
+            ;;
+ </programlisting></para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>Edit the file so that all AFS and UFS partitions are checked in parallel. Replace the following section of
+                     code: <programlisting>
+    # For  fsck purposes, we make a distinction between ufs and
+    # other file systems
+    #
+    if [ "$fstype" = "ufs" ]; then
+         ufs_fscklist="$ufs_fscklist $fsckdev"
+         saveentry $fstype "$OPTIONS" $special $mountp
+         continue
+    fi  
+ </programlisting></para>
+ 
+                     <para>with the following section of code:</para>
+ 
+                     <programlisting>
+    # For fsck purposes, we make a distinction between ufs/afs
+    # and other file systems.
+    #
+    if [ "$fstype" = "ufs" -o "$fstype" = "afs" ]; then
+         ufs_fscklist="$ufs_fscklist $fsckdev"
+         saveentry $fstype "$OPTIONS" $special $mountp
+         continue
+    fi
+ </programlisting>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <indexterm>
+                 <primary>configuring</primary>
+ 
+                 <secondary>AFS server partition on server machine after first</secondary>
+ 
+                 <tertiary>Solaris</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>AFS server partition</primary>
+ 
+                 <secondary>configuring on server machine after first</secondary>
+ 
+                 <tertiary>Solaris</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>AFS server partition</secondary>
+ 
+                 <tertiary>on Solaris</tertiary>
+               </indexterm>
+ 
+               <indexterm>
+                 <primary>Solaris</primary>
+ 
+                 <secondary>AFS server partition</secondary>
+ 
+                 <tertiary>on add'l server machine</tertiary>
+               </indexterm>
+             </listitem>
+ 
+             <listitem>
+               <para>Create a directory called <emphasis role="bold">/vicep</emphasis><replaceable>xx</replaceable> for each AFS
+               server partition you are configuring (there must be at least one). Repeat the command for each partition.
+               <programlisting>
+    # <emphasis role="bold">mkdir /vicep</emphasis><replaceable>xx</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Add a line with the following format to the file systems registry file, <emphasis
+               role="bold">/etc/vfstab</emphasis>, for each partition to be mounted on a directory created in the previous step. Note
+               the value <computeroutput>afs</computeroutput> in the fourth field, which tells Solaris to use the AFS-modified
+               <emphasis role="bold">fsck</emphasis> program on this partition. <programlisting>
+    /dev/dsk/<replaceable>disk</replaceable>   /dev/rdsk/<replaceable>disk</replaceable>   /vicep<replaceable>xx</replaceable>   afs   <replaceable>boot_order</replaceable>  yes  
+ </programlisting></para>
+ 
+               <para>The following is an example for the first partition being configured.</para>
+ 
+               <programlisting>
+    /dev/dsk/c0t6d0s1 /dev/rdsk/c0t6d0s1 /vicepa afs 3 yes
+ </programlisting>
+             </listitem>
+ 
+             <listitem>
+               <para>Create a file system on each partition that is to be mounted at a <emphasis
+               role="bold">/vicep</emphasis><replaceable>xx</replaceable> directory. The following command is probably appropriate,
+               but consult the Solaris documentation for more information. <programlisting>
+    # <emphasis role="bold">newfs -v /dev/rdsk/</emphasis><replaceable>disk</replaceable>
+ </programlisting></para>
+             </listitem>
+ 
+             <listitem>
+               <para>Issue the <emphasis role="bold">mountall</emphasis> command to mount all partitions at once.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>If the machine is to remain an AFS client, incorporate AFS into its authentication system, following the
+               instructions in <link linkend="HDRWQ49">Enabling AFS Login and Editing the File Systems Clean-up Script on Solaris
+               Systems</link>.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Proceed to <link linkend="HDRWQ108">Starting Server Programs</link>.</para>
+             </listitem>
+           </orderedlist></para>
+ 
+         <indexterm>
+           <primary>file server machine, additional</primary>
+ 
+           <secondary>server functionality</secondary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>installing</primary>
+ 
+           <secondary>server functionality</secondary>
+ 
+           <tertiary>server machine after first</tertiary>
+         </indexterm>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ108">
+       <title>Starting Server Programs</title>
+ 
+       <para>In this section you initialize the BOS Server, the Update Server, the controller process for NTPD, and the <emphasis
+       role="bold">fs</emphasis> process. You begin by copying the necessary server files to the local disk. <orderedlist>
+           <indexterm>
+             <primary>copying</primary>
+ 
+             <secondary>server files to local disk</secondary>
+ 
+             <tertiary>server machine after first</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>Binary Distribution</primary>
+ 
+             <secondary>copying server files from</secondary>
+ 
+             <tertiary>server machine after first</tertiary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>file server machine, additional</primary>
+ 
+             <secondary>copying</secondary>
+ 
+             <tertiary>server files to local disk</tertiary>
+           </indexterm>
+ 
+           <listitem>
+             <para>Copy file server binaries to the local <emphasis role="bold">/usr/afs/bin</emphasis> directory. <itemizedlist>
+                 <listitem>
+                   <para>On a machine of an existing system type, you can either 
+                   copy files from the OpenAFS binary distribution or use a 
+                   remote file transfer protocol to copy files from an existing 
+                   server machine of the same system type. To load from the 
+                   binary distribution, see the instructions just following for 
+                   a machine of a new system type. If using a remote file 
+                   transfer protocol, copy the complete contents of the 
+                   existing server machine's 
+                   <emphasis role="bold">/usr/afs/bin</emphasis>
+                   directory.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If you are working from a tarball distribtion, rather
+                   than one distributed in a packaged format, you must use the 
+                   following instructions to copy files from 
+                   the OpenAFS Binary Distribution.
+                    <orderedlist>
+                       <listitem>
+                         <para>Unpack the distribution tarball. The examples 
+                         below assume that you have unpacked the files into the 
+                         <emphasis role="bold">/tmp/afsdist</emphasis> 
+                         directory. If you pick a different location, substitute
+                         this in all of the following examples.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Copy files from the distribution to the local <emphasis role="bold">/usr/afs</emphasis> directory.
+                         <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/root.server/usr/afs</emphasis>
+    # <emphasis role="bold">cp -rp  *  /usr/afs</emphasis>
+ </programlisting></para>
+                       </listitem>
+                     </orderedlist></para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <indexterm>
+               <primary>usr/afs/etc directory</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>/usr/afs/etc directory</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>/usr/afs/etc directory</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>creating</primary>
+ 
+               <secondary>CellServDB file (server)</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>UserList file</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>KeyFile file</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>CellServDB file (server)</primary>
+ 
+               <secondary>creating</secondary>
+ 
+               <tertiary>on server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>entry in server CellServDB file</secondary>
+ 
+               <tertiary>on server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>ThisCell file (server)</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>cell membership, defining</secondary>
+ 
+               <tertiary>for server processes</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>setting</primary>
+ 
+               <secondary>cell name in server ThisCell file</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>ThisCell file (server)</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the contents of the 
+             <emphasis role="bold">/usr/afs/etc</emphasis> directory from an 
+             existing file server machine, using a remote file transfer protocol 
+             such as <emphasis role="bold">sftp</emphasis> or 
+             <emphasis role="bold">scp</emphasis>. If you use a system
+             control machine, it is best to copy the contents of its 
+             <emphasis role="bold">/usr/afs/etc</emphasis> directory. If you
+             choose not to run a system control machine, copy the directory's 
+             contents from any existing file server machine.
+             <indexterm>
+                 <primary>BOS Server</primary>
+ 
+                 <secondary>starting</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>starting</primary>
+ 
+                 <secondary>BOS Server</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>BOS Server</secondary>
+               </indexterm> <indexterm>
+                 <primary>authorization checking (disabling)</primary>
+ 
+                 <secondary>server machine after first</secondary>
+               </indexterm> <indexterm>
+                 <primary>disabling authorization checking</primary>
+ 
+                 <secondary>server machine after first</secondary>
+               </indexterm> <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>authorization checking (disabling)</secondary>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Change to the <emphasis role="bold">/usr/afs/bin</emphasis> directory and start the BOS Server (<emphasis
+             role="bold">bosserver</emphasis> process). Include the <emphasis role="bold">-noauth</emphasis> flag to prevent the AFS
+             processes from performing authorization checking. This is a grave compromise of security; finish the remaining
+             instructions in this section in an uninterrupted pass. <programlisting>
+    # <emphasis role="bold">cd /usr/afs/bin</emphasis>
+    # <emphasis role="bold">./bosserver -noauth &amp;</emphasis>
+ </programlisting> <indexterm>
+                 <primary>BosConfig file</primary>
+ 
+                 <secondary>adding entries</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>adding</primary>
+ 
+                 <secondary>entries to BosConfig file</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>Update Server</primary>
+ 
+                 <secondary>starting client portion</secondary>
+               </indexterm> <indexterm>
+                 <primary>upclient process</primary>
+               </indexterm> <indexterm>
+                 <primary>starting</primary>
+ 
+                 <secondary>Update Server client portion</secondary>
+               </indexterm> <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>Update Server client portion</secondary>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ109" />If you run a system control machine, create the <emphasis
+             role="bold">upclientetc</emphasis> process as an instance of the client portion of the Update Server. It accepts updates
+             of the common configuration files stored in the system control machine's <emphasis role="bold">/usr/afs/etc</emphasis>
+             directory from the <emphasis role="bold">upserver</emphasis> process (server portion of the Update Server) running on
+             that machine. The cell's first file server machine was installed as the system control machine in <link
+             linkend="HDRWQ61">Starting the Server Portion of the Update Server</link>. (If you do not run a system control machine,
+             you must update the contents of the <emphasis role="bold">/usr/afs/etc</emphasis> directory on each file server machine,
+             using the appropriate <emphasis role="bold">bos</emphasis> commands.)</para>
+ 
+             <para>By default, the Update Server performs updates every 300 seconds (five minutes). Use the <emphasis
+             role="bold">-t</emphasis> argument to specify a different number of seconds. For the
+             <replaceable>machine&nbsp;name</replaceable> argument, substitute the name of the machine you are installing. The
+             command appears on multiple lines here only for legibility reasons.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">upclientetc simple</emphasis>  \ 
+          <emphasis role="bold">"/usr/afs/bin/upclient</emphasis>  &lt;<replaceable>system control machine</replaceable>&gt;  \  
+          [<emphasis role="bold">-t</emphasis>  &lt;<replaceable>time</replaceable>&gt;]  <emphasis role="bold">/usr/afs/etc" -cell</emphasis>  &lt;<replaceable>cell name</replaceable>&gt;  <emphasis
+                 role="bold">-noauth</emphasis>
+ </programlisting>
+ 
+             <indexterm>
+               <primary>Update Server</primary>
+ 
+               <secondary>starting server portion</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>Update Server server portion</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>Update Server server portion</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ110" />Create an instance of the Update 
+             Server to handle distribution of the file server binaries
+             stored in the <emphasis role="bold">/usr/afs/bin</emphasis> 
+             directory. If your architecture using a package management system
+             such as 'rpm' or 'apt' to maintain its binaries, note that
+             distributing binaries via this system may interfere with your local
+             package management tools.
+             </para>
+             
+             <itemizedlist>
+                 <listitem>
+                   <para>If this is the first file server machine of its AFS system type, create the <emphasis
+                   role="bold">upserver</emphasis> process as an instance of the server portion of the Update Server. It distributes
+                   its copy of the file server process binaries to the other file server machines of this system type that you
+                   install in future. Creating this process makes this machine the binary distribution machine for its type.
+                   <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">upserver  simple</emphasis>  \ 
+          <emphasis role="bold">"/usr/afs/bin/upserver -clear /usr/afs/bin"</emphasis>   \
+          <emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis role="bold">-noauth</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>If this machine is an existing system type, create the <emphasis role="bold">upclientbin</emphasis> process
+                   as an instance of the client portion of the Update Server. It accepts updates of the AFS binaries from the
+                   <emphasis role="bold">upserver</emphasis> process running on the binary distribution machine for its system type.
+                   For distribution to work properly, the <emphasis role="bold">upserver</emphasis> process must already by running
+                   on that machine.</para>
+ 
+                   <para>Use the <emphasis role="bold">-clear</emphasis> argument to specify that the <emphasis
+                   role="bold">upclientbin</emphasis> process requests unencrypted transfer of the binaries in the <emphasis
+                   role="bold">/usr/afs/bin</emphasis> directory. Binaries are not sensitive and encrypting them is
+                   time-consuming.</para>
+ 
+                   <para>By default, the Update Server performs updates every 300 seconds (five minutes). Use the <emphasis
+                   role="bold">-t</emphasis> argument to specify an different number of seconds.</para>
+ 
+ <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">upclientbin simple</emphasis>  \ 
+         <emphasis role="bold">"/usr/afs/bin/upclient</emphasis> &lt;<replaceable>binary distribution machine</replaceable>&gt;   \
+         [<emphasis role="bold">-t</emphasis> &lt;<replaceable>time</replaceable>&gt;] <emphasis role="bold">-clear /usr/afs/bin" -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis
+                       role="bold">-noauth</emphasis>
+ </programlisting>
+                 </listitem>
+               </itemizedlist>
+ 
+             <indexterm>
+               <primary>runntp process</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>runntp process</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>runntp process</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>NTPD</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+           
+             <note>
+               <para>Historically, AFS provided its own version of the
+               Network Time Protocol Daemon. Whilst this is still provided for
+               existing sites, we recommend that you configure and run your
+               own timeservice independently of AFS. The instructions below are
+               provided for those sites still reliant upon OpenAFS's ntp system.
+               </para>
+             </note>
+             
+             <para>Start the <emphasis role="bold">runntp</emphasis> process, which configures the Network Time Protocol Daemon
+             (NTPD) to choose a database server machine chosen randomly from the local <emphasis
+             role="bold">/usr/afs/etc/CellServDB</emphasis> file as its time source. In the standard configuration, the first
+             database server machine installed in your cell refers to a time source outside the cell, and serves as the basis for
+             clock synchronization on all server machines. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">runntp simple</emphasis>  \ 
+          <emphasis role="bold">/usr/afs/bin/runntp -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis
+                   role="bold">-noauth</emphasis>
+ </programlisting></para>
+ 
+             <note>
+               <para>Do not run the <emphasis role="bold">runntp</emphasis> process if NTPD or another time synchronization protocol
+               is already running on the machine. Some versions of some operating systems run a time synchronization program by
+               default, as detailed in the <emphasis>OpenAFS Release Notes</emphasis>.</para>
+ 
+               <para>Attempting to run multiple instances of the NTPD causes an error. Running NTPD together with another time
+               synchronization protocol is unnecessary and can cause instability in the clock setting.</para>
+             </note>
+ 
+             <indexterm>
+               <primary>File Server</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>File Server</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>File Server</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>Volume Server</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>Volume Server</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>Volume Server</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>Salvager (salvager process)</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>fs process</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>fs process</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>fs process</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Start the <emphasis role="bold">fs</emphasis> process, which binds together the File Server, Volume Server, and
+             Salvager. <programlisting>
+    # <emphasis role="bold">./bos create</emphasis>  &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">fs fs</emphasis>   \ 
+          <emphasis role="bold">/usr/afs/bin/fileserver /usr/afs/bin/volserver</emphasis>  \ 
+          <emphasis role="bold">/usr/afs/bin/salvager -cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;  <emphasis
+                   role="bold">-noauth</emphasis>
+ </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>installing</primary>
+ 
+         <secondary>client functionality</secondary>
+ 
+         <tertiary>server machine after first</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file server machine, additional</primary>
+ 
+         <secondary>client functionality</secondary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ111">
+       <title>Installing Client Functionality</title>
+ 
+       <para>If you want this machine to be a client as well as a server, follow the instructions in this section. Otherwise, skip to
+       <link linkend="HDRWQ112">Completing the Installation</link>.</para>
+ 
+       <para>Begin by loading the necessary client files to the local disk. Then create the necessary configuration files and start
+       the Cache Manager. For more detailed explanation of the procedures involved, see the corresponding instructions in <link
+       linkend="HDRWQ17">Installing the First AFS Machine</link> (in the sections following <link linkend="HDRWQ63">Overview:
+       Installing Client Functionality</link>).</para>
+ 
+       <para>If another AFS machine of this machine's system type exists, the AFS binaries are probably already accessible in your
+       AFS filespace (the conventional location is <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+       role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis>). If not, or if this is
+       the first AFS machine of its type, copy the AFS binaries for this system type into an AFS volume by following the instructions
+       in <link linkend="HDRWQ83">Storing AFS Binaries in AFS</link>. Because this machine is not yet an AFS client, you must perform
+       the procedure on an existing AFS machine. However, remember to perform the final step (linking the local directory <emphasis
+       role="bold">/usr/afsws</emphasis> to the appropriate location in the AFS file tree) on this machine itself. If you also want
+       to create AFS volumes to house UNIX system binaries for the new system type, see <link linkend="HDRWQ88">Storing System
+       Binaries in AFS</link>. <indexterm>
+           <primary>Binary Distribution</primary>
+ 
+           <secondary>copying client files from</secondary>
+ 
+           <tertiary>server machine after first</tertiary>
+         </indexterm> <indexterm>
+           <primary>file server machine, additional</primary>
+ 
+           <secondary>copying</secondary>
+ 
+           <tertiary>client files to local disk</tertiary>
+         </indexterm> <indexterm>
+           <primary>copying</primary>
+ 
+           <secondary>client files to local disk</secondary>
+ 
+           <tertiary>server machine after first</tertiary>
+         </indexterm> <orderedlist>
+           <listitem>
+             <para>Copy client binaries and files to the local disk. <itemizedlist>
+                 <listitem>
+                   <para>On a machine of an existing system type, you can either 
+                   load files from the OpenAFS Binary Distribution or use a 
+                   remote file transfer protocol to copy files from an existing 
+                   server machine of the same system type. To load from the
+                   binary distribution, see the instructions just following 
+                   for a machine of a new system type. If using a remote file 
+                   transfer protocol, copy the complete contents of the existing 
+                   client machine's 
+                   <emphasis role="bold">/usr/vice/etc</emphasis> 
+                   directory.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>On a machine of a new system type, you must use the 
+                   following instructions to copy files from the OpenAFS
+                   Binary Distribution. If your distribution is provided in
+                   a packaged format, then simply installing the packages will
+                   perform the necessary actions.
+                     <orderedlist>
+                       <listitem>
+                         <para>Unpack the distribution tarball. The examples 
+                         below assume that you have unpacked the files into the 
+                         <emphasis role="bold">/tmp/afsdist</emphasis> 
+                         directory. If you pick a different location, substitute
+                         this in all of the following examples.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Copy files to the local <emphasis role="bold">/usr/vice/etc</emphasis> directory.</para>
+ 
+                         <para>This step places a copy of the AFS initialization script (and related files, if applicable) into the
+                         <emphasis role="bold">/usr/vice/etc</emphasis> directory. In the preceding instructions for incorporating
+                         AFS into the kernel, you copied the script directly to the operating system's conventional location for
+                         initialization files. When you incorporate AFS into the machine's startup sequence in a later step, you can
+                         choose to link the two files.</para>
+ 
+                         <para>On some system types that use a dynamic kernel loader program, you previously copied AFS library files
+                         into a subdirectory of the <emphasis role="bold">/usr/vice/etc</emphasis> directory. On other system types,
+                         you copied the appropriate AFS library file directly to the directory where the operating system accesses
+                         it. The following commands do not copy or recopy the AFS library files into the <emphasis
+                         role="bold">/usr/vice/etc</emphasis> directory, because on some system types the library files consume a
+                         large amount of space. If you want to copy them, add the <emphasis role="bold">-r</emphasis> flag to the
+                         first <emphasis role="bold">cp</emphasis> command and skip the second <emphasis role="bold">cp</emphasis>
+                         command.</para>
+ 
+                         <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/root.client/usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -p  *  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -rp  C  /usr/vice/etc</emphasis>
+ </programlisting>
+                       </listitem>
+                     </orderedlist></para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <indexterm>
+               <primary>cell name</primary>
+ 
+               <secondary>setting in client ThisCell file</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>cell name</primary>
+ 
+               <secondary>setting in server ThisCell file</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>setting</primary>
+ 
+               <secondary>cell name in client ThisCell file</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>ThisCell file (client)</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>cell membership, defining</secondary>
+ 
+               <tertiary>for client processes</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>ThisCell file (client)</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Change to the <emphasis role="bold">/usr/vice/etc</emphasis> directory and create the <emphasis
+             role="bold">ThisCell</emphasis> file as a copy of the <emphasis role="bold">/usr/afs/etc/ThisCell</emphasis> file. You
+             must first remove the symbolic link to the <emphasis role="bold">/usr/afs/etc/ThisCell</emphasis> file that the BOS
+             Server created automatically in <link linkend="HDRWQ108">Starting Server Programs</link>. <programlisting>
+    # <emphasis role="bold">cd  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm  ThisCell</emphasis>
+    # <emphasis role="bold">cp  /usr/afs/etc/ThisCell  ThisCell</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Remove the symbolic link to the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file. <programlisting>
+    # <emphasis role="bold">rm  CellServDB</emphasis>
+ </programlisting> <indexterm>
+                 <primary>database server machine</primary>
+ 
+                 <secondary>entry in client CellServDB file</secondary>
+ 
+                 <tertiary>on server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>CellServDB file (client)</primary>
+ 
+                 <secondary>creating</secondary>
+ 
+                 <tertiary>on server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>creating</primary>
+ 
+                 <secondary>CellServDB file (client)</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create the 
+             <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file. 
+             Use a network file transfer program such as 
+             <emphasis role="bold">sftp</emphasis> or 
+             <emphasis role="bold">scp</emphasis> to copy it from 
+             one of the following sources, which are listed in
+             decreasing order of preference: 
+               <itemizedlist>
+                 <listitem>
+                   <para>Your cell's central <emphasis role="bold">CellServDB</emphasis> source file (the conventional location is
+                   <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+                   role="bold">/common/etc/CellServDB</emphasis>)</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The global <emphasis role="bold">CellServDB</emphasis> 
+                   file maintained at grand.central.org</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>An existing client machine in your cell</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>The <emphasis role="bold">CellServDB.sample</emphasis> 
+                   file included in the 
+                   <replaceable>sysname</replaceable><emphasis role="bold">/root.client/usr/vice/etc</emphasis> 
+                   directory of each OpenAFS distribution; add an entry for the 
+                   local cell by following the instructions in 
+                   <link linkend="HDRWQ66">Creating the Client CellServDB File</link>
+                   </para>
+                 </listitem>
+               </itemizedlist>
+             </para>
+ 
+             <indexterm>
+               <primary>cache</primary>
+ 
+               <secondary>configuring</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>configuring</primary>
+ 
+               <secondary>cache</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>setting</primary>
+ 
+               <secondary>cache size and location</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>cache size and location</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Create the <emphasis role="bold">cacheinfo</emphasis> file for either a disk cache or a memory cache. For a
+             discussion of the appropriate values to record in the file, see <link linkend="HDRWQ67">Configuring the
+             Cache</link>.</para>
+ 
+             <para>To configure a disk cache, issue the following commands. If you are devoting a partition exclusively to caching,
+             as recommended, you must also configure it, make a file system on it, and mount it at the directory created in this
+             step.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice/cache</emphasis>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:</emphasis><replaceable>#blocks</replaceable><emphasis role="bold">" &gt; cacheinfo</emphasis>   
+ </programlisting>
+ 
+             <para>To configure a memory cache:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:</emphasis><replaceable>#blocks</replaceable><emphasis role="bold">" &gt; cacheinfo</emphasis>
+ </programlisting>
+ 
+             <indexterm>
+               <primary>Cache Manager</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>configuring</primary>
+ 
+               <secondary>Cache Manager</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>Cache Manager</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>afs (/afs) directory</primary>
+ 
+               <secondary>creating</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>AFS initialization script</primary>
+ 
+               <secondary>setting afsd parameters</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>file server machine, additional</primary>
+ 
+               <secondary>afsd command parameters</secondary>
+             </indexterm>
+           </listitem>
+ 
+           <listitem>
+             <para>Create the local directory on which to mount the AFS filespace, by convention <emphasis
+             role="bold">/afs</emphasis>. If the directory already exists, verify that it is empty. <programlisting>
+    # <emphasis role="bold">mkdir /afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>On AIX systems, add the following line to the <emphasis role="bold">/etc/vfs</emphasis> file. It enables AIX to
+             unmount AFS correctly during shutdown. <programlisting>
+    afs     4     none     none
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>On non-packaged Linux systems, copy the <emphasis role="bold">afsd</emphasis> options file from the <emphasis
+             role="bold">/usr/vice/etc</emphasis> directory to the <emphasis role="bold">/etc/sysconfig</emphasis> directory,
+             removing the <emphasis role="bold">.conf</emphasis> extension as you do so. <programlisting>
+    # <emphasis role="bold">cp /usr/vice/etc/afs.conf /etc/sysconfig/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the machine's AFS initialization script or <emphasis role="bold">afsd</emphasis> options file to set
+             appropriate values for <emphasis role="bold">afsd</emphasis> command parameters. The script resides in the indicated
+             location on each system type: <itemizedlist>
+                 <listitem>
+                   <para>On AIX systems, <emphasis role="bold">/etc/rc.afs</emphasis></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>On HP-UX systems, <emphasis role="bold">/sbin/init.d/afs</emphasis></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>On IRIX systems, <emphasis role="bold">/etc/init.d/afs</emphasis></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>On Fedora and RHEL systems, 
+                   <emphasis role="bold">/etc/sysconfig/openafs</emphasis>. 
+                   Note that this file has a different format from a standard 
+                   afsd options file.</para>
+                 </listitem>
+                 
+                 <listitem>
+                   <para>On non-packaged Linux systems, <emphasis role="bold">/etc/sysconfig/afs</emphasis> (the <emphasis
+                   role="bold">afsd</emphasis> options file)</para>
+                 </listitem>
+                 
+ 
+                 <listitem>
+                   <para>On Solaris systems, <emphasis role="bold">/etc/init.d/afs</emphasis></para>
+                 </listitem>
+               </itemizedlist></para>
+ 
+             <para>Use one of the methods described in <link linkend="HDRWQ70">Configuring the Cache Manager</link> to add the
+             following flags to the <emphasis role="bold">afsd</emphasis> command line. If you intend for the machine to remain an
+             AFS client, also set any performance-related arguments you wish. <itemizedlist>
+                 <!-- nosetime is now the default
+                 <listitem>
+                   <para>Add the <emphasis role="bold">-nosettime</emphasis> flag, because this is a file server machine that is also
+                   a client.</para>
+                 </listitem> -->
+ 
+                 <listitem>
+                   <para>Add the <emphasis role="bold">-memcache</emphasis> flag if the machine is to use a memory cache.</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Add the <emphasis role="bold">-verbose</emphasis> flag to display a trace of the Cache Manager's
+                   initialization on the standard output stream.</para>
+                 </listitem>
+                 <listitem>
+                   <para>Add the <emphasis role="bold">--dynroot</emphasis> or
+                   <emphasis role="bold">--afsdb</emphasis> options if you
+                   wish to have a synthetic AFS root, as discussed in
+                   <link linkend="HDRWQ91">Enabling Access to Foreign Cells</link>
+                   </para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If appropriate, follow the instructions in <link linkend="HDRWQ83">Storing AFS Binaries in AFS</link> to copy the
+             AFS binaries for this system type into an AFS volume. See the introduction to this section for further
+             discussion.</para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ112">
+       <title>Completing the Installation</title>
+ 
+       <para>At this point you run the machine's AFS initialization script to verify that it correctly loads AFS modifications into
+       the kernel and starts the BOS Server, which starts the other server processes. If you have installed client files, the script
+       also starts the Cache Manager. If the script works correctly, perform the steps that incorporate it into the machine's startup
+       and shutdown sequence. If there are problems during the initialization, attempt to resolve them. The AFS Product Support group
+       can provide assistance if necessary.</para>
+ 
+       <para>If the machine is configured as a client using a disk cache, it can take a while for the <emphasis
+       role="bold">afsd</emphasis> program to create all of the <emphasis role="bold">V</emphasis><replaceable>n</replaceable> files
+       in the cache directory. Messages on the console trace the initialization process. <orderedlist>
+           <listitem>
+             <para>Issue the <emphasis role="bold">bos shutdown</emphasis> command to shut down the AFS server processes other than
+             the BOS Server. Include the <emphasis role="bold">-wait</emphasis> flag to delay return of the command shell prompt
+             until all processes shut down completely. <programlisting>
+    # <emphasis role="bold">/usr/afs/bin/bos shutdown</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis
+                   role="bold">-wait</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">ps</emphasis> command to learn the BOS Server's process ID number (PID), and then
+             the <emphasis role="bold">kill</emphasis> command to stop the <emphasis role="bold">bosserver</emphasis> process.
+             <programlisting>
+    # <emphasis role="bold">ps</emphasis> <replaceable>appropriate_ps_options</replaceable> <emphasis role="bold">| grep bosserver</emphasis>
+    # <emphasis role="bold">kill</emphasis> <replaceable>bosserver_PID</replaceable>
+ </programlisting> <indexterm>
+                 <primary>AFS initialization script</primary>
+ 
+                 <secondary>adding to machine startup sequence</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>AFS initialization script</primary>
+ 
+                 <secondary>running</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>file server machine, additional</primary>
+ 
+                 <secondary>AFS initialization script</secondary>
+               </indexterm> <indexterm>
+                 <primary>running AFS init. script</primary>
+ 
+                 <secondary>server machine after first</secondary>
+               </indexterm> <indexterm>
+                 <primary>installing</primary>
+ 
+                 <secondary>AFS initialization script</secondary>
+ 
+                 <tertiary>server machine after first</tertiary>
+               </indexterm> <indexterm>
+                 <primary>AIX</primary>
+ 
+                 <secondary>AFS initialization script</secondary>
+ 
+                 <tertiary>on add'l server machine</tertiary>
+               </indexterm></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Run the AFS initialization script by issuing the appropriate commands for this system type.</para>
+ 
+             <para><emphasis role="bold">On AIX systems:</emphasis> <orderedlist>
+                 <listitem>
+                   <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+                   <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/rc.afs</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Edit the AIX initialization file, <emphasis role="bold">/etc/inittab</emphasis>, adding the following line
+                   to invoke the AFS initialization script. Place it just after the line that starts NFS daemons. <programlisting>
+    rcafs:2:wait:/etc/rc.afs &gt; /dev/console 2&gt;&amp;1 # Start AFS services
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+                   <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc</emphasis> directories. If you want
+                   to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can
+                   always retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm  rc.afs</emphasis>
+    # <emphasis role="bold">ln -s  /etc/rc.afs</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Proceed to Step <link linkend="LIWQ113">4</link>.</para>
+                 </listitem>
+               </orderedlist></para>
+ 
+             <indexterm>
+               <primary>HP-UX</primary>
+ 
+               <secondary>AFS initialization script</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <para><emphasis role="bold">On HP-UX systems:</emphasis> <orderedlist>
+                 <listitem>
+                   <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/sbin/init.d/afs  start</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Change to the <emphasis role="bold">/sbin/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+                   -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the HP-UX
+                   startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /sbin/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /sbin/rc2.d/S460afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /sbin/rc2.d/K800afs</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+                   <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/sbin/init.d</emphasis> directories. If
+                   you want to avoid potential confusion by guaranteeing that they are always the same, create a link between them.
+                   You can always retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /sbin/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Proceed to Step <link linkend="LIWQ113">4</link>.</para>
+                 </listitem>
+               </orderedlist></para>
+ 
+             <indexterm>
+               <primary>IRIX</primary>
+ 
+               <secondary>AFS initialization script</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>afsclient variable (IRIX)</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>variables</primary>
+ 
+               <secondary>afsclient (IRIX)</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>IRIX</primary>
+ 
+               <secondary>afsclient variable</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>afsserver variable (IRIX)</primary>
+ 
+               <secondary>server machine after first</secondary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>variables</primary>
+ 
+               <secondary>afsserver (IRIX)</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <indexterm>
+               <primary>IRIX</primary>
+ 
+               <secondary>afsserver variable</secondary>
+ 
+               <tertiary>server machine after first</tertiary>
+             </indexterm>
+ 
+             <para><emphasis role="bold">On IRIX systems:</emphasis> <orderedlist>
+                 <listitem>
+                   <para>If you have configured the machine to use the <emphasis role="bold">ml</emphasis> dynamic loader program,
+                   reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+                   role="bold">afsserver</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsserver on</emphasis>   
+ </programlisting></para>
+ 
+                   <para>If you have configured this machine as an AFS client and want to it remain one, also issue the <emphasis
+                   role="bold">chkconfig</emphasis> command to activate the <emphasis role="bold">afsclient</emphasis> configuration
+                   variable.</para>
+ 
+                   <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsclient on</emphasis> 
+ </programlisting>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs  start</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Change to the <emphasis role="bold">/etc/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+                   -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the IRIX
+                   startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /etc/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc2.d/S35afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc0.d/K35afs</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+                   <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/init.d</emphasis> directories. If
+                   you want to avoid potential confusion by guaranteeing that they are always the same, create a link between them.
+                   You can always retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Proceed to Step <link linkend="LIWQ113">4</link>.</para>
+                 </listitem>
+               </orderedlist></para>
+ 
+             <indexterm>
+               <primary>Linux</primary>
+ 
+               <secondary>AFS initialization script</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <para><emphasis role="bold">On Fedora or RHEL Linux systems:</emphasis> 
+               <orderedlist>
+                 <listitem>
+                   <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+  <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Run the OpenAFS initialization scripts. <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/openafs-client  start</emphasis>
+    # <emphasis role="bold">/etc/rc.d/init.d/openafs-server  start</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Issue the <emphasis role="bold">chkconfig</emphasis> 
+                   command to activate the 
+                   <emphasis role="bold">openafs-client</emphasis> and 
+                   <emphasis role="bold">openafs-server</emphasis> configuration 
+                   variables. Based on the instruction in the AFS initialization 
+                   files that begins with the string 
+                   <computeroutput>#chkconfig</computeroutput>, the command 
+                   automatically creates the symbolic links that incorporate the 
+                   script into the Linux startup and shutdown sequence. 
+ <programlisting>
+    # <emphasis role="bold">/sbin/chkconfig  --add openafs-client</emphasis>
+    # <emphasis role="bold">/sbin/chkconfig  --add openafs-server</emphasis>
+ </programlisting></para>
+                 </listitem>
+               </orderedlist>
+             </para>
+             <para><emphasis role="bold">On Linux systems:</emphasis> <orderedlist>
+                 <listitem>
+                   <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+                   <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Run the OpenAFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/afs  start</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+                   role="bold">afs</emphasis> configuration variable. Based on the instruction in the AFS initialization file that
+                   begins with the string <computeroutput>#chkconfig</computeroutput>, the command automatically creates the symbolic
+                   links that incorporate the script into the Linux startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">/sbin/chkconfig  --add afs</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+                   <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/rc.d/init.d</emphasis> directories,
+                   and copies of the <emphasis role="bold">afsd</emphasis> options file in both the <emphasis
+                   role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/sysconfig</emphasis> directories. If you want
+                   to avoid potential confusion by guaranteeing that the two copies of each file are always the same, create a link
+                   between them. You can always retrieve the original script or options file from the AFS CD-ROM if necessary.
+                   <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc afs.conf</emphasis>
+    # <emphasis role="bold">ln -s  /etc/rc.d/init.d/afs  afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/sysconfig/afs  afs.conf</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Proceed to Step <link linkend="LIWQ113">4</link>.</para>
+                 </listitem>
+               </orderedlist></para>
+ 
+             <indexterm>
+               <primary>Solaris</primary>
+ 
+               <secondary>AFS initialization script</secondary>
+ 
+               <tertiary>on add'l server machine</tertiary>
+             </indexterm>
+ 
+             <para><emphasis role="bold">On Solaris systems:</emphasis> <orderedlist>
+                 <listitem>
+                   <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>.
+                   <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs  start</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>Change to the <emphasis role="bold">/etc/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+                   -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the Solaris
+                   startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /etc/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc3.d/S99afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc0.d/K66afs</emphasis>
+ </programlisting></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+                   <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/init.d</emphasis> directories. If
+                   you want to avoid potential confusion by guaranteeing that they are always the same, create a link between them.
+                   You can always retrieve the original script from the OpenAFS Binary Distribution if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+                 </listitem>
+               </orderedlist></para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ113" />Verify that <emphasis role="bold">/usr/afs</emphasis> and its subdirectories on the new
+             file server machine meet the ownership and mode bit requirements outlined in <link linkend="HDRWQ96">Protecting
+             Sensitive AFS Directories</link>. If necessary, use the <emphasis role="bold">chmod</emphasis> command to correct the
+             mode bits.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To configure this machine as a database server machine, proceed to <link linkend="HDRWQ114">Installing Database
+             Server Functionality</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>requirements for installation</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>requirements</primary>
+ 
+         <secondary>database server machine</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ114">
+     <title>Installing Database Server Functionality</title>
+ 
+     <para>This section explains how to install database server functionality. Database server machines have two defining
+     characteristics. First, they run the Protection Server, and Volume Location (VL) Server processes. They
+     also run the Backup Server if the cell uses the AFS Backup System, as is assumed in these instructions. Second, they appear in
+     the <emphasis role="bold">CellServDB</emphasis> file of every machine in the cell (and of client machines in foreign cells, if
+     they are to access files in this cell).</para>
+ 
+     <para>Note the following requirements for database server machines. <itemizedlist>
+         <listitem>
+           <para>In the conventional configuration, database server machines also serve as file server machines (run the File Server,
+           Volume Server and Salvager processes). If you choose not to run file server functionality on a database server machine,
+           then the kernel does not have to incorporate AFS modifications, but the local <emphasis role="bold">/usr/afs</emphasis>
+           directory must house most of the standard files and subdirectories. In particular, the <emphasis
+           role="bold">/usr/afs/etc/KeyFile</emphasis> file must contain the same keys as all other server machines in the cell. If
+           you run a system control machine, run the <emphasis role="bold">upclientetc</emphasis> process on every database server
+           machine other than the system control machine; if you do not run a system control machine, use the <emphasis
+           role="bold">bos addkey</emphasis> command as instructed in the chapter in the <emphasis>OpenAFS Administration
+           Guide</emphasis> about maintaining server encryption keys.</para>
+ 
+           <para>The instructions in this section assume that the machine on which you are installing database server functionality
+           is already a file server machine. Contact the OpenAFS mailing list to learn how to install database server
+           functionality on a non-file server machine.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>During the installation of database server functionality, you must restart all of the database server machines to
+           force the election of a new Ubik coordinator (synchronization site) for each database server process. This can cause a
+           system outage, which usually lasts less than 5 minutes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Updating the kernel memory list of database server machines on each client machine is generally the most
+           time-consuming part of installing a new database server machine. It is, however, crucial for correct functioning in your
+           cell. Incorrect knowledge of your cell's database server machines can prevent your users from authenticating, accessing
+           files, and issuing AFS commands.</para>
+ 
+           <para>You update a client's kernel memory list by changing the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis>
+           file and then either rebooting or issuing the <emphasis role="bold">fs newcell</emphasis> command. For instructions, see
+           the chapter in the <emphasis>OpenAFS Administration Guide</emphasis> about administering client machines.</para>
+ 
+           <para>The point at which you update your clients' knowledge of database server machines depends on which of the database
+           server machines has the lowest IP address. The following instructions indicate the appropriate place to update your client
+           machines in either case. <itemizedlist>
+               <listitem>
+                 <para>If the new database server machine has a lower IP address than any existing database server machine, update
+                 the <emphasis role="bold">CellServDB</emphasis> file on every client machine before restarting the database server
+                 processes. If you do not, users can become unable to update (write to) any of the AFS databases. This is because the
+                 machine with the lowest IP address is usually elected as the Ubik coordinator, and only the Coordinator accepts
+                 database writes. On client machines that do not have the new list of database server machines, the Cache Manager
+                 cannot locate the new coordinator. (Be aware that if clients contact the new coordinator before it is actually in
+                 service, they experience a timeout before contacting another database server machine. This is a minor, and
+                 temporary, problem compared to being unable to write to the database.)</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If the new database server machine does not have the lowest IP address of any database server machine, then it
+                 is better to update clients after restarting the database server processes. Client machines do not start using the
+                 new database server machine until you update their kernel memory list, but that does not usually cause timeouts or
+                 update problems (because the new machine is not likely to become the coordinator).</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>overview</primary>
+ 
+       <secondary>installing additional database server machine</secondary>
+     </indexterm>
+ 
+     <sect2 id="Header_110">
+       <title>Summary of Procedures</title>
+ 
+       <para>To install a database server machine, perform the following procedures. <orderedlist>
+           <listitem>
+             <para>Install the <emphasis role="bold">bos</emphasis> suite of commands locally, as a precaution</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Add the new machine to the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on existing file server
+             machines</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Update your cell's central <emphasis role="bold">CellServDB</emphasis> source file and the file you make available
+             to foreign cells</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Update every client machine's <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file and kernel memory
+             list of database server machines</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Start the database server processes (Backup Server, Protection Server, and Volume Location
+             Server)</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Restart the database server processes on every database server machine</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If required, request that grand.central.org add details of 
+             your new database server machine to the global CellServDB</para>
+           </listitem>
+           
+           <listitem>
+             <para>If required, add details of your new database server to the
+             AFS database location records in your site's DNS</para>
+           </listitem>
+           
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>installing</secondary>
+ 
+         <tertiary>additional</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>instructions</primary>
+ 
+         <secondary>database server machine, installing additional</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>installing</primary>
+ 
+         <secondary>database server machine</secondary>
+ 
+         <tertiary>additional</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="Header_111">
+       <title>Instructions</title>
+ 
+       <note>
+         <para>It is assumed that your PATH environment variable includes the directory that houses the AFS command binaries. If not,
+         you possibly need to precede the command names with the appropriate pathname.</para>
+       </note>
+ 
+       <orderedlist>
+         <listitem>
+           <para>You can perform the following instructions on either a server or client machine. Login as an AFS administrator who
+           is listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file on all server machines. 
+ <programlisting> 
+    % <emphasis role="bold">kinit</emphasis> <replaceable>admin_user</replaceable>
+    Password: <replaceable>admin_password</replaceable>
+    % <emphasis role="bold">aklog</emphasis>
+ </programlisting>
+           </para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you are working on a client machine configured in the conventional manner, the <emphasis
+           role="bold">bos</emphasis> command suite resides in the <emphasis role="bold">/usr/afsws/bin</emphasis> directory, a
+           symbolic link to an AFS directory. An error during installation can potentially block access to AFS, in which case it is
+           helpful to have a copy of the <emphasis role="bold">bos</emphasis> binary on the local disk. This step is not necessary if
+           you are working on a server machine, where the binary resides in the local <emphasis role="bold">/usr/afs/bin</emphasis>
+           directory. <programlisting>
+    % <emphasis role="bold">cp  /usr/afsws/bin/bos   /tmp</emphasis>
+ </programlisting> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>addhost</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos addhost</secondary>
+             </indexterm> <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>entry in server CellServDB file</secondary>
+ 
+               <tertiary>for new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>CellServDB file (server)</primary>
+ 
+               <secondary>adding entry for new db-server machine</secondary>
+             </indexterm> <indexterm>
+               <primary>adding</primary>
+ 
+               <secondary>new db-server machine to CellServDB files</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ115" />Issue the <emphasis role="bold">bos addhost</emphasis> command to add the new database server
+           machine to the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on existing server machines (as well as the
+           new database server machine itself).</para>
+ 
+           <para>Substitute the new database server machine's fully-qualified hostname for the <replaceable>host name</replaceable>
+           argument. If you run a system control machine, substitute its fully-qualified hostname for the
+           <replaceable>machine&nbsp;name</replaceable> argument. If you do not run a system control machine, repeat the <emphasis
+           role="bold">bos addhost</emphasis> command once for each server machine in your cell (including the new database server
+           machine itself), by substituting each one's fully-qualified hostname for the <replaceable>machine&nbsp;name</replaceable>
+           argument in turn.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos addhost</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  &lt;<replaceable>host name</replaceable>&gt;   
+ </programlisting>
+ 
+           <para>If you run a system control machine, wait for the Update Server to distribute the new <emphasis
+           role="bold">CellServDB</emphasis> file, which takes up to five minutes by default. If you are issuing individual <emphasis
+           role="bold">bos addhost</emphasis> commands, attempt to issue all of them within five minutes.</para>
+ 
+           <note>
+             <para>It is best to maintain a one-to-one mapping between hostnames and IP addresses on a multihomed database server
+             machine (the conventional configuration for any AFS machine). The BOS Server uses the <emphasis
+             role="bold">gethostbyname(&nbsp;)</emphasis> routine to obtain the IP address associated with the <replaceable>host
+             name</replaceable> argument. If there is more than one address, the BOS Server records in the <emphasis
+             role="bold">CellServDB</emphasis> entry the one that appears first in the list of addresses returned by the routine. The
+             routine possibly returns addresses in a different order on different machines, which can create inconsistency.</para>
+           </note>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">bos listhosts</emphasis> command on each
+           server machine to verify that the new database server machine appears in its <emphasis role="bold">CellServDB</emphasis>
+           file. <programlisting>
+    % <emphasis role="bold">bos listhosts</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ116" />Add the new database server machine to your cell's central <emphasis
+           role="bold">CellServDB</emphasis> source file, if you use one. The standard location is <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/common/etc/CellServDB</emphasis>.</para>
+ 
+           <para>If you are willing to make your cell accessible to users in foreign cells, add the new database server machine to
+           the file that lists your cell's database server machines. The conventional location is <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/service/etc/CellServDB.local</emphasis>. <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>entry in client CellServDB file</secondary>
+ 
+               <tertiary>for new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>CellServDB file (client)</primary>
+ 
+               <secondary>adding entry</secondary>
+ 
+               <tertiary>for new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>client machine</primary>
+ 
+               <secondary>CellServDB file</secondary>
+ 
+               <tertiary>adding entry</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ117" />If this machine's IP address is lower than any existing database server machine's, update
+           every client machine's <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file and kernel memory list to include
+           this machine. (If this machine's IP address is not the lowest, it is acceptable to wait until Step <link
+           linkend="LIWQ123">12</link>.)</para>
+ 
+           <para>There are several ways to update the <emphasis role="bold">CellServDB</emphasis> file on client machines, as
+           detailed in the chapter of the <emphasis>OpenAFS Administration Guide</emphasis> about administering client machines. One
+           option is to copy over the central update source (which you updated in Step <link linkend="LIWQ116">5</link>), with or
+           without using the <emphasis role="bold">package</emphasis> program. To update the machine's kernel memory list, you can
+           either reboot after changing the <emphasis role="bold">CellServDB</emphasis> file or issue the <emphasis role="bold">fs
+           newcell</emphasis> command. 
+             <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>starting database server processes</secondary>
+             </indexterm> <indexterm>
+               <primary>BosConfig file</primary>
+ 
+               <secondary>adding entries</secondary>
+ 
+               <tertiary>database server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>adding</primary>
+ 
+               <secondary>entries to BosConfig file</secondary>
+ 
+               <tertiary>database server machine</tertiary>
+             </indexterm></para>
+         </listitem>
+         
+         <listitem>
+           <para>If you are running a cell which still relies upon
+           <emphasis role="bold">kaserver</emphasis> see 
+           <link linkend="KAS010">Starting the Authentication Service</link>
+           for an additional installation step.</para>
+         </listitem>
+ 
+         <listitem>
+           <indexterm>
+             <primary>Backup Server</primary>
+             <secondary>starting</secondary>
+             <tertiary>new db-server machine</tertiary>
+           </indexterm> <indexterm>
+             <primary>starting</primary>
+             <secondary>Backup Server</secondary>
+             <tertiary>new db-server machine</tertiary>
+           </indexterm>
+ 
+           <para><anchor id="LIWQ119" />Start the Backup Server (the <emphasis role="bold">buserver</emphasis> process). You must
+           perform other configuration procedures before actually using the AFS Backup System, as detailed in the <emphasis>OpenAFS
+           Administration Guide</emphasis>. <programlisting>
+    % <emphasis role="bold">bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver simple /usr/afs/bin/buserver</emphasis>
+ </programlisting> <indexterm>
+               <primary>Protection Server</primary>
+ 
+               <secondary>starting</secondary>
+ 
+               <tertiary>new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>Protection Server</secondary>
+ 
+               <tertiary>new db-server machine</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ120" />Start the Protection Server (the <emphasis role="bold">ptserver</emphasis> process).
+           <programlisting>
+    % <emphasis role="bold">bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">ptserver simple /usr/afs/bin/ptserver</emphasis>
+ </programlisting> <indexterm>
+               <primary>VL Server (vlserver process)</primary>
+ 
+               <secondary>starting</secondary>
+ 
+               <tertiary>new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>starting</primary>
+ 
+               <secondary>VL Server</secondary>
+ 
+               <tertiary>new db-server machine</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ121" />Start the Volume Location (VL) Server (the <emphasis role="bold">vlserver</emphasis>
+           process). <programlisting>
+    % <emphasis role="bold">bos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">vlserver simple /usr/afs/bin/vlserver</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos restart</secondary>
+ 
+               <tertiary>on new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>restart</secondary>
+ 
+               <tertiary>on new db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>restarting server process</primary>
+ 
+               <secondary>on new db-server machine</secondary>
+             </indexterm> <indexterm>
+               <primary>server process</primary>
+ 
+               <secondary>restarting</secondary>
+ 
+               <tertiary>on new db-server machine</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ122" />Issue the <emphasis role="bold">bos restart</emphasis> command on every database server
+           machine in the cell, including the new machine. The command restarts the Authentication, Backup, Protection, and VL
+           Servers, which forces an election of a new Ubik coordinator for each process. The new machine votes in the election and is
+           considered as a potential new coordinator.</para>
+ 
+           <para>A cell-wide service outage is possible during the election of a new coordinator for the VL Server, but it normally
+           lasts less than five minutes. Such an outage is particularly likely if you are installing your cell's second database
+           server machine. Messages tracing the progress of the election appear on the console.</para>
+ 
+           <para>Repeat this command on each of your cell's database server machines in quick succession. Begin with the machine with
+           the lowest IP address.</para>
+ 
+           <programlisting>
+    %  <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">kaserver buserver ptserver vlserver</emphasis>    
+ </programlisting>
+ 
+           <para>If an error occurs, restart all server processes on the database server machines again by using one of the following
+           methods: <itemizedlist>
+               <listitem>
+                 <para>Issue the <emphasis role="bold">bos restart</emphasis> command with the <emphasis
+                 role="bold">-bosserver</emphasis> flag for each database server machine</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Reboot each database server machine, either using the <emphasis role="bold">bos exec</emphasis> command or at
+                 its console</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ123" />If you did not update the <emphasis role="bold">CellServDB</emphasis> file on client machines
+           in Step <link linkend="LIWQ117">6</link>, do so now.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ124" />If you wish to participate in the AFS
+           global name space, send the new database server machine's name and 
+           IP address to grand.central.org. Do so, by emailing an updated
+           <emphasis role="bold">CellServDB</emphasis> fragment for your cell
+           to cellservdb@grand.central.org</para>
+           <para>More details on the registration procedures for the
+           CellServDB maintained by grand.central.org are available from
+           <ulink url="http://grand.central.org/csdb.html">
+           http://grand.central.org/csdb.html</ulink></para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>removing from service</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>instructions</primary>
+ 
+         <secondary>database server machine, removing</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>removing</primary>
+ 
+         <secondary>database server machine from service</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>overview</primary>
+ 
+         <secondary>removing database server machine</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ125">
+     <title>Removing Database Server Functionality</title>
+ 
+     <para>Removing database server machine functionality is nearly the reverse of installing it.</para>
+ 
+     <sect2 id="Header_113">
+       <title>Summary of Procedures</title>
+ 
+       <para>To decommission a database server machine, perform the following procedures. <orderedlist>
+           <listitem>
+             <para>Install the <emphasis role="bold">bos</emphasis> suite of commands locally, as a precaution</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If you participate in the global AFS namespace, notify
+             grand.central.org that you are decommissioning a database server 
+             machine</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Update your cell's central <emphasis role="bold">CellServDB</emphasis> source file and the file you make available
+             to foreign cells</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Update every client machine's <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file and kernel memory
+             list of database server machines</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Remove the machine from the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on file server
+             machines</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Stop the database server processes and remove them from the <emphasis
+             role="bold">/usr/afs/local/BosConfig</emphasis> file if desired</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Restart the database server processes on the remaining database server machines</para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_114">
+       <title>Instructions</title>
+ 
+       <note>
+         <para>It is assumed that your PATH environment variable includes the directory that houses the AFS command binaries. If not,
+         you possibly need to precede the command names with the appropriate pathname.</para>
+       </note>
+ 
+       <orderedlist>
+         <listitem>
+           <para>You can perform the following instructions on either a server or client machine. Login as an AFS administrator who
+           is listed in the <emphasis role="bold">/usr/afs/etc/UserList</emphasis> file on all server machines. 
+ <programlisting>
+    % <emphasis role="bold">kinit</emphasis> <replaceable>admin_user</replaceable>
+    Password: <replaceable>admin_password</replaceable>
+    % <emphasis role="bold">aklog</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If you are working on a client machine configured in the conventional manner, the <emphasis
+           role="bold">bos</emphasis> command suite resides in the <emphasis role="bold">/usr/afsws/bin</emphasis> directory, a
+           symbolic link to an AFS directory. An error during installation can potentially block access to AFS, in which case it is
+           helpful to have a copy of the <emphasis role="bold">bos</emphasis> binary on the local disk. This step is not necessary if
+           you are working on a server machine, where the binary resides in the local <emphasis role="bold">/usr/afs/bin</emphasis>
+           directory. <programlisting>
+    % <emphasis role="bold">cp  /usr/afsws/bin/bos   /tmp</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ126" />If your cell is included in the global
+           <emphasis role="bold">CellServDB</emphasis>, send the revised list of 
+           your cell's database server machines to grand.central.org</para>
+ 
+           <para>If the administrators in foreign cells do not learn about the change in your cell,
+           they cannot update the <emphasis role="bold">CellServDB</emphasis> file on their client machines. Users in foreign cells
+           continue to send database requests to the decommissioned machine, which creates needless network traffic and activity on
+           the machine. Also, the users experience time-out delays while their request is forwarded to a valid database server
+           machine.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ127" />Remove the decommissioned machine from your cell's central <emphasis
+           role="bold">CellServDB</emphasis> source file, if you use one. The conventional location is <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/common/etc/CellServDB</emphasis>.</para>
+ 
+           <para>If you maintain a file that users in foreign cells can access to learn about your cell's database server machines,
+           update it also. The conventional location is <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/service/etc/CellServDB.local</emphasis>. <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>entry in client CellServDB file</secondary>
+ 
+               <tertiary>removing</tertiary>
+             </indexterm> <indexterm>
+               <primary>CellServDB file (client)</primary>
+ 
+               <secondary>removing entry</secondary>
+             </indexterm> <indexterm>
+               <primary>client machine</primary>
+ 
+               <secondary>CellServDB file</secondary>
+ 
+               <tertiary>removing entry</tertiary>
+             </indexterm> <indexterm>
+               <primary>removing</primary>
+ 
+               <secondary>entry from CellServDB file</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ128" />Update every client machine's <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file
+           and kernel memory list to exclude this machine. Altering the <emphasis role="bold">CellServDB</emphasis> file and kernel
+           memory list before stopping the actual database server processes avoids possible time-out delays that result when users
+           send requests to a decommissioned database server machine that is still listed in the file.</para>
+ 
+           <para>There are several ways to update the <emphasis role="bold">CellServDB</emphasis> file on client machines, as
+           detailed in the chapter of the <emphasis>OpenAFS Administration Guide</emphasis> about administering client machines. One
+           option is to copy over the central update source (which you updated in Step <link linkend="LIWQ116">5</link>), with or
+           without using the <emphasis role="bold">package</emphasis> program. To update the machine's kernel memory list, you can
+           either reboot after changing the <emphasis role="bold">CellServDB</emphasis> file or issue the <emphasis role="bold">fs
+           newcell</emphasis> command. <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>removehost</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos removehost</secondary>
+             </indexterm> <indexterm>
+               <primary>CellServDB file (server)</primary>
+ 
+               <secondary>removing entry</secondary>
+             </indexterm> <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>entry in server CellServDB file</secondary>
+ 
+               <tertiary>removing</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ129" />Issue the <emphasis role="bold">bos removehost</emphasis> command to remove the
+           decommissioned database server machine from the <emphasis role="bold">/usr/afs/etc/CellServDB</emphasis> file on server
+           machines.</para>
+ 
+           <para>Substitute the decommissioned database server machine's fully-qualified hostname for the <replaceable>host
+           name</replaceable> argument. If you run a system control machine, substitute its fully-qualified hostname for the
+           <replaceable>machine&nbsp;name</replaceable> argument. If you do not run a system control machine, repeat the <emphasis
+           role="bold">bos removehost</emphasis> command once for each server machine in your cell (including the decommissioned
+           database server machine itself), by substituting each one's fully-qualified hostname for the
+           <replaceable>machine&nbsp;name</replaceable> argument in turn.</para>
+ 
+           <programlisting>
+    % <emphasis role="bold">bos removehost</emphasis> &lt;<replaceable>machine name</replaceable>&gt;  &lt;<replaceable>host name</replaceable>&gt;   
+ </programlisting>
+ 
+           <para>If you run a system control machine, wait for the Update Server to distribute the new <emphasis
+           role="bold">CellServDB</emphasis> file, which takes up to five minutes by default. If issuing individual <emphasis
+           role="bold">bos removehost</emphasis> commands, attempt to issue all of them within five minutes.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">bos listhosts</emphasis> command on each
+           server machine to verify that the decommissioned database server machine no longer appears in its <emphasis
+           role="bold">CellServDB</emphasis> file. <programlisting>
+    % <emphasis role="bold">bos listhosts</emphasis> &lt;<replaceable>machine name</replaceable>&gt;
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos stop</secondary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>stop</secondary>
+             </indexterm> <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>stopping database server processes</secondary>
+             </indexterm> <indexterm>
+               <primary>stopping</primary>
+ 
+               <secondary>database server processes</secondary>
+             </indexterm> <indexterm>
+               <primary>Backup Server</primary>
+ 
+               <secondary>stopping</secondary>
+             </indexterm> <indexterm>
+               <primary>Protection Server</primary>
+ 
+               <secondary>stopping</secondary>
+             </indexterm> <indexterm>
+               <primary>VL Server (vlserver process)</primary>
+ 
+               <secondary>stopping</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ130" />Issue the <emphasis role="bold">bos stop</emphasis> command to stop the database server
+           processes on the machine, by substituting its fully-qualified hostname for the
+           <replaceable>machine&nbsp;name</replaceable> argument. The command changes each process's status in the <emphasis
+           role="bold">/usr/afs/local/BosConfig</emphasis> file to <computeroutput>NotRun</computeroutput>, but does not remove its
+           entry from the file. <programlisting>
+    % <emphasis role="bold">bos stop</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">kaserver buserver ptserver vlserver</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos delete</secondary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>delete</secondary>
+             </indexterm> <indexterm>
+               <primary>BosConfig file</primary>
+ 
+               <secondary>removing entries</secondary>
+             </indexterm> <indexterm>
+               <primary>removing</primary>
+ 
+               <secondary>entries from BosConfig File</secondary>
+             </indexterm> <indexterm>
+               <primary>database server machine</primary>
+ 
+               <secondary>removing db-server processes from BosConfig file</secondary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ131" /><emphasis role="bold">(Optional)</emphasis> Issue the <emphasis role="bold">bos
+           delete</emphasis> command to remove the entries for database server processes from the <emphasis
+           role="bold">BosConfig</emphasis> file. This step is unnecessary if you plan to restart the database server functionality
+           on this machine in future. <programlisting>
+    % <emphasis role="bold">bos delete</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver ptserver vlserver</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>bos restart</secondary>
+ 
+               <tertiary>on removed db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>bos commands</primary>
+ 
+               <secondary>restart</secondary>
+ 
+               <tertiary>on removed db-server machine</tertiary>
+             </indexterm> <indexterm>
+               <primary>restarting server process</primary>
+ 
+               <secondary>on removed db-server machine</secondary>
+             </indexterm> <indexterm>
+               <primary>server process</primary>
+ 
+               <secondary>restarting</secondary>
+ 
+               <tertiary>on removed db-server machine</tertiary>
+             </indexterm></para>
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ132" />Issue the <emphasis role="bold">bos restart</emphasis> command on every database server
+           machine in the cell, to restart the Backup, Protection, and VL Servers. This forces the election of a Ubik
+           coordinator for each process, ensuring that the remaining database server processes recognize that the machine is no
+           longer a database server.</para>
+ 
+           <para>A cell-wide service outage is possible during the election of a new coordinator for the VL Server, but it normally
+           lasts less than five minutes. Messages tracing the progress of the election appear on the console.</para>
+ 
+           <para>Repeat this command on each of your cell's database server machines in quick succession. Begin with the machine with
+           the lowest IP address.</para>
+ 
+           <programlisting>
+    %  <emphasis role="bold">bos restart</emphasis> &lt;<replaceable>machine name</replaceable>&gt; <emphasis role="bold">buserver ptserver vlserver</emphasis>    
+ </programlisting>
+ 
+           <para>If an error occurs, restart all server processes on the database server machines again by using one of the following
+           methods: <itemizedlist>
+               <listitem>
+                 <para>Issue the <emphasis role="bold">bos restart</emphasis> command with the <emphasis
+                 role="bold">-bosserver</emphasis> flag for each database server machine</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Reboot each database server machine, either using the <emphasis role="bold">bos exec</emphasis> command or at
+                 its console</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/QuickStartUnix/auqbg007.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg007.xml:1.4.4.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg007.xml	Mon May 11 11:12:14 2009
***************
*** 0 ****
--- 1,2910 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ133">
+   <title>Installing Additional Client Machines</title>
+ 
+   <indexterm>
+     <primary>instructions</primary>
+ 
+     <secondary>client machine</secondary>
+   </indexterm>
+ 
+   <indexterm>
+     <primary>installing</primary>
+ 
+     <secondary>client functionality</secondary>
+ 
+     <tertiary>client machine</tertiary>
+   </indexterm>
+ 
+   <para>This chapter describes how to install AFS client machines after you have installed the first AFS machine. Some parts of the
+   installation differ depending on whether or not the new client is of the same AFS system type (uses the same AFS binaries) as a
+   previously installed client machine. <indexterm>
+       <primary>overview</primary>
+ 
+       <secondary>installing client machine</secondary>
+     </indexterm></para>
+ 
+   <sect1 id="Header_116">
+     <title>Summary of Procedures</title>
+ 
+     <orderedlist>
+       <listitem>
+         <para>Incorporate AFS into the machine's kernel</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Define the machine's cell membership</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Define cache location and size</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Create the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file, which determines which foreign cells the
+         client can access in addition to the local cell</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Create the <emphasis role="bold">/afs</emphasis> directory and start the Cache Manager</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Create and mount volumes for housing AFS client binaries (necessary only for clients of a new system type)</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Create a link from the local <emphasis role="bold">/usr/afsws</emphasis> directory to the AFS directory housing the
+         AFS client binaries</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Modify the machine's authentication system to enable AFS users to obtain tokens at login</para>
+       </listitem>
+     </orderedlist>
+ 
+     <indexterm>
+       <primary>Binary Distribution</primary>
+ 
+       <secondary>creating /tmp/afsdist directory</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afsdist directory</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>/tmp/afsdist directory</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>/tmp/afsdist directory</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/vice/etc directory</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>/usr/vice/etc directory</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>/usr/vice/etc directory</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ134">
+     <title>Creating AFS Directories on the Local Disk</title>
+ 
+     <para>If you are not installing from a packaged distribution, create the <emphasis role="bold">/usr/vice/etc</emphasis> directory on the local disk, to house client binaries and
+     configuration files. Subsequent instructions copy files from the OpenAFS binary distribution into them. Create the <emphasis
+     role="bold">/tmp/afsdist</emphasis> directory as a location to uncompress this distribution, if it does not already exist.</para>
+ 
+     <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice</emphasis>
+    # <emphasis role="bold">mkdir /usr/vice/etc</emphasis>
+    # <emphasis role="bold">mkdir /tmp/afsdist</emphasis>
+ </programlisting>
+   </sect1>
+ 
+   <sect1 id="HDRWQ135">
+     <title>Performing Platform-Specific Procedures</title>
+ 
+     <para>Every AFS client machine's kernel must incorporate AFS modifications. Some system types use a dynamic kernel loader
+     program, whereas on other system types you build AFS modifications into a static kernel. Some system types support both
+     methods.</para>
+ 
+     <para>Also modify the machine's authentication system so that users obtain an AFS token as they log into the local file system.
+     Using AFS is simpler and more convenient for your users if you make the modifications on all client machines. Otherwise, users
+     must perform a two or three step login procedure (login to the local system, obtain Kerberos credentials, and then issue the <emphasis role="bold">klog</emphasis>
+     command). For further discussion of AFS authentication, see the chapter in the <emphasis>OpenAFS Administration Guide</emphasis>
+     about cell configuration and administration issues.</para>
+ 
+     <para>For convenience, the following sections group the two procedures by system type. Proceed to the appropriate section.
+     <itemizedlist>
+         <listitem>
+           <para><link linkend="HDRWQ136">Getting Started on AIX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ138">Getting Started on HP-UX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ139">Getting Started on IRIX Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ143">Getting Started on Linux Systems</link></para>
+         </listitem>
+ 
+         <listitem>
+           <para><link linkend="HDRWQ144">Getting Started on Solaris Systems</link></para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <indexterm>
+       <primary>incorporating AFS kernel extensions</primary>
+ 
+       <secondary>client machine</secondary>
+ 
+       <tertiary>AIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS kernel extensions</primary>
+ 
+       <secondary>on client machine</secondary>
+ 
+       <tertiary>AIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>AFS kernel extensions</secondary>
+ 
+       <tertiary>on AIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AIX</primary>
+ 
+       <secondary>AFS kernel extensions</secondary>
+ 
+       <tertiary>on client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>enabling AFS login</primary>
+ 
+       <secondary>client machine</secondary>
+ 
+       <tertiary>AIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS login</primary>
+ 
+       <secondary>on client machine</secondary>
+ 
+       <tertiary>AIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>AFS login</secondary>
+ 
+       <tertiary>on AIX</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AIX</primary>
+ 
+       <secondary>AFS login</secondary>
+ 
+       <tertiary>on client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>secondary authentication system (AIX)</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ136">
+     <title>Getting Started on AIX Systems</title>
+ 
+     <para>In this section you load AFS into the AIX kernel. Then incorporate AFS modifications into the machine's secondary
+     authentication system, if you wish to enable AFS login.</para>
+ 
+     <sect2 id="Header_120">
+       <title>Loading AFS into the AIX Kernel</title>
+ 
+       <para>The AIX kernel extension facility is the dynamic kernel loader provided by IBM Corporation. AIX does not support
+       incorporation of AFS modifications during a kernel build.</para>
+ 
+       <para>For AFS to function correctly, the kernel extension facility must run each time the machine reboots, so the AFS
+       initialization script (included in the AFS distribution) invokes it automatically. In this section you copy the script to the
+       conventional location and edit it to select the appropriate options depending on whether NFS is also to run.</para>
+ 
+       <para>After editing the script, you run it to incorporate AFS into the kernel. In a later section you verify that the script
+       correctly initializes the Cache Manager, then configure the AIX <emphasis role="bold">inittab</emphasis> file so that the
+       script runs automatically at reboot. <orderedlist>
+           <listitem>
+             <para>Unpack the distribution tarball. The examples below assume 
+             that you have unpacked the files into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+             pick a different location, substitute this in all of the following 
+             examples. Once you have unpacked the distribution, 
+             change directory as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/rs_aix42/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+           <listitem>
+             <para>Copy the AFS kernel library files to the local <emphasis role="bold">/usr/vice/etc/dkload</emphasis> directory,
+             and the AFS initialization script to the <emphasis role="bold">/etc</emphasis> directory. <programlisting>
+    # <emphasis role="bold">cp -rp  dkload  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -p  rc.afs  /etc/rc.afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Edit the <emphasis role="bold">/etc/rc.afs</emphasis> script, setting the <computeroutput>NFS</computeroutput>
+             variable as indicated.</para>
+ 
+             <para>If the machine is not to function as an NFS/AFS Translator, set the <computeroutput>NFS</computeroutput> variable
+             as follows.</para>
+ 
+             <programlisting>
+    NFS=$NFS_NONE
+ </programlisting>
+ 
+             <para>If the machine is to function as an NFS/AFS Translator and is running AIX 4.2.1 or higher, set the
+             <computeroutput>NFS</computeroutput> variable as follows. Note that NFS must already be loaded into the kernel, which
+             happens automatically on systems running AIX 4.1.1 and later, as long as the file <emphasis
+             role="bold">/etc/exports</emphasis> exists.</para>
+ 
+             <programlisting>
+    NFS=$NFS_IAUTH
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Invoke the <emphasis role="bold">/etc/rc.afs</emphasis> script to load AFS modifications into the kernel. You can
+             ignore any error messages about the inability to start the BOS Server or the Cache Manager or AFS client.
+             <programlisting>
+    # <emphasis role="bold">/etc/rc.afs</emphasis>
+ </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_121">
+       <title>Enabling AFS Login on AIX Systems</title>
+ 
+       <para>In modern AFS installations, you should be using Kerberos v5
+       for user login, and obtaining AFS tokens following this authentication
+       step.</para>
+       
+       <para>There are currently no instructions available on configuring AIX to
+       automatically obtain AFS tokens at login. Following login, users can 
+       obtain tokens by running the <emphasis role="bold">aklog</emphasis> 
+       command</para>
+ 
+       <para>Sites which still require <emphasis role="bold">kaserver</emphasis>
+       or external Kerberos v4 authentication should consult 
+       <link linkend="KAS012">Enabling kaserver based AFS Login on AIX Systems</link>
+       for details of how to enable AIX login.</para>
+ 
+       <para><orderedlist>
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ145">Loading and Creating Client Files</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>client machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on client machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS-modified kernel</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>client machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on client machine</secondary>
+ 
+         <tertiary>HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on HP-UX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>PAM</primary>
+ 
+         <secondary>on HP-UX</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ138">
+     <title>Getting Started on HP-UX Systems</title>
+ 
+     <para>In this section you build AFS into the HP-UX kernel. Then incorporate AFS modifications into the machine's Pluggable
+     Authentication Module (PAM) system, if you wish to enable AFS login.</para>
+ 
+     <sect2 id="Header_126">
+       <title>Building AFS into the HP-UX Kernel</title>
+ 
+       <para>On HP-UX systems, you must build AFS modifications into a new static kernel; HP-UX does not support dynamic loading. If
+       the machine's hardware and software configuration exactly matches another HP-UX machine on which AFS is already built into the
+       kernel, you can choose to copy the kernel from that machine to this one. In general, however, it is better to build AFS
+       modifications into the kernel on each machine according to the following instructions. <orderedlist>
+           <listitem>
+             <para>Move the existing kernel-related files to a safe location. <programlisting>
+    # <emphasis role="bold">cp /stand/vmunix /stand/vmunix.noafs</emphasis>
+    # <emphasis role="bold">cp /stand/system /stand/system.noafs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Unpack the OpenAFS HP-UX distribution tarball. The examples 
+             below assume that you have unpacked the files into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+             pick a different location, substitute this in all of the following 
+             examples. Once you have unpacked the distribution, change directory 
+             as indicated.
+             <programlisting>
+    # <emphasis role="bold">cd /tmp/afsdist/hp_ux110/root.client</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS initialization file to the local directory for initialization files (by convention, <emphasis
+             role="bold">/sbin/init.d</emphasis> on HP-UX machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+             extension as you copy the file. <programlisting>
+    # <emphasis role="bold">cp usr/vice/etc/afs.rc  /sbin/init.d/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the file <emphasis role="bold">afs.driver</emphasis> to the local <emphasis
+             role="bold">/usr/conf/master.d</emphasis> directory, changing its name to <emphasis role="bold">afs</emphasis> as you
+             do. <programlisting>
+    # <emphasis role="bold">cp  usr/vice/etc/afs.driver  /usr/conf/master.d/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS kernel module to the local <emphasis role="bold">/usr/conf/lib</emphasis> directory.</para>
+ 
+             <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp bin/libafs.a /usr/conf/lib</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine's kernel does not support NFS server functionality, change the file's name as you copy it:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp bin/libafs.nonfs.a /usr/conf/lib/libafs.a</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Incorporate the AFS driver into the kernel, either using the <emphasis role="bold">SAM</emphasis> program or a
+             series of individual commands. <itemizedlist>
+                 <listitem>
+                   <para>To use the <emphasis role="bold">SAM</emphasis> program: <orderedlist>
+                       <listitem>
+                         <para>Invoke the <emphasis role="bold">SAM</emphasis> program, specifying the hostname of the local machine
+                         as <replaceable>local_hostname</replaceable>. The <emphasis role="bold">SAM</emphasis> graphical user
+                         interface pops up. <programlisting>
+    # <emphasis role="bold">sam -display</emphasis> <replaceable>local_hostname</replaceable><emphasis role="bold">:0</emphasis> 
+ </programlisting></para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Choose the <emphasis role="bold">Kernel Configuration</emphasis> icon, then the <emphasis
+                         role="bold">Drivers</emphasis> icon. From the list of drivers, select <emphasis
+                         role="bold">afs</emphasis>.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Open the pull-down <emphasis role="bold">Actions</emphasis> menu and choose the <emphasis
+                         role="bold">Add Driver to Kernel</emphasis> option.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Open the <emphasis role="bold">Actions</emphasis> menu again and choose the <emphasis
+                         role="bold">Create a New Kernel</emphasis> option.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Confirm your choices by choosing <emphasis role="bold">Yes</emphasis> and <emphasis
+                         role="bold">OK</emphasis> when prompted by subsequent pop-up windows. The <emphasis
+                         role="bold">SAM</emphasis> program builds the kernel and reboots the system.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Login again as the superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                       </listitem>
+                     </orderedlist></para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>To use individual commands: <orderedlist>
+                       <listitem>
+                         <para>Edit the file <emphasis role="bold">/stand/system</emphasis>, adding an entry for <emphasis
+                         role="bold">afs</emphasis> to the <computeroutput>Subsystems</computeroutput> section.</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Change to the <emphasis role="bold">/stand/build</emphasis> directory and issue the <emphasis
+                         role="bold">mk_kernel</emphasis> command to build the kernel. <programlisting>
+    # <emphasis role="bold">cd /stand/build</emphasis>
+    # <emphasis role="bold">mk_kernel</emphasis>
+ </programlisting></para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para>Move the new kernel to the standard location (<emphasis role="bold">/stand/vmunix</emphasis>), reboot
+                         the machine to start using it, and login again as the superuser <emphasis role="bold">root</emphasis>.
+                         <programlisting>
+    # <emphasis role="bold">mv /stand/build/vmunix_test /stand/vmunix</emphasis>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>             
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+                       </listitem>
+                     </orderedlist></para>
+                 </listitem>
+               </itemizedlist></para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_127">
+       <title>Enabling AFS Login on HP-UX Systems</title>
+ 
+       <para>At this point you incorporate AFS into the operating system's Pluggable Authentication Module (PAM) scheme. PAM
+       integrates all authentication mechanisms on the machine, including login, to provide the security infrastructure for
+       authenticated access to and from the machine.</para>
+ 
+       <para>In modern AFS installations, you should be using Kerberos v5
+       for user login, and obtaining AFS tokens subsequent to this authentication
+       step. OpenAFS does not currently distribute a PAM module allowing AFS 
+       tokens to be automatically gained at login. Whilst there are a number of
+       third party modules providing this functionality, it is not know if these 
+       have been tested with HP/UX.</para>
+       
+       <para>Following login, users can 
+       obtain tokens by running the <emphasis role="bold">aklog</emphasis> 
+       command</para>
+ 
+       <para>If you are at a site which still requires 
+       <emphasis role="bold">kaserver</emphasis> or external Kerberos v4 based 
+       authentication, please consult
+       <link linkend="KAS014">Enabling kaserver based AFS Login on HP-UX systems</link>
+       for further installation instructions.
+         <orderedlist>
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ145">Loading and Creating Client Files</link>.</para>
+           </listitem>
+         </orderedlist>
+       </para>
+ 
+       <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>client machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on client machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on IRIX</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ139">
+     <title>Getting Started on IRIX Systems</title>
+ 
+     <para>In this section you incorporate AFS into the IRIX kernel, choosing one of two methods: <itemizedlist>
+         <listitem>
+           <para>Dynamic loading using the <emphasis role="bold">ml</emphasis> program distributed by Silicon Graphics, Incorporated
+           (SGI).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Building a new static kernel.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Then see <link linkend="HDRWQ142">Enabling AFS Login on IRIX Systems</link> to read about integrated AFS login on IRIX
+     systems.</para>
+ 
+     <para>In preparation for either dynamic loading or kernel building, perform the following procedures: <orderedlist>
+         <listitem>
+           <para>Unpack the OpenAFS IRIX distribution tarball. The examples
+           below assume that you have unpacked the files into the 
+           <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you
+           pick a different location, substitue this in all of the following
+           examples. Once you have unpacked the distribution, change directory
+           as indicated.
+ <programlisting>
+    # <emphasis role="bold">cd  /tmp/afsdist/sgi_65/root.client</emphasis>
+ </programlisting></para>
+         </listitem>
+         <listitem>
+           <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+           role="bold">/etc/init.d</emphasis> on IRIX machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+           extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p   usr/vice/etc/afs.rc  /etc/init.d/afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">uname -m</emphasis> command to determine the machine's CPU board type. The <emphasis
+           role="bold">IP</emphasis><replaceable>xx</replaceable> value in the output must match one of the supported CPU board types
+           listed in the <emphasis>OpenAFS Release Notes</emphasis> for the current version of AFS. <programlisting>
+    # <emphasis role="bold">uname -m</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Proceed to either <link linkend="HDRWQ140">Loading AFS into the IRIX Kernel</link> or <link
+           linkend="HDRWQ141">Building AFS into the IRIX Kernel</link>.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>AFS kernel extensions</secondary>
+ 
+       <tertiary>on client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afsml variable (IRIX)</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>variables</primary>
+ 
+       <secondary>afsml (IRIX)</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>afsml variable</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>afsxnfs variable (IRIX)</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>variables</primary>
+ 
+       <secondary>afsxnfs (IRIX)</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>IRIX</primary>
+ 
+       <secondary>afsxnfs variable</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ140">
+       <title>Loading AFS into the IRIX Kernel</title>
+ 
+       <para>The <emphasis role="bold">ml</emphasis> program is the dynamic kernel loader provided by SGI for IRIX systems. If you
+       use it rather than building AFS modifications into a static kernel, then for AFS to function correctly the <emphasis
+       role="bold">ml</emphasis> program must run each time the machine reboots. Therefore, the AFS initialization script (included
+       in the OpenAFS Binary Distribution) invokes it automatically when the <emphasis role="bold">afsml</emphasis> configuration variable is
+       activated. In this section you activate the variable and run the script.</para>
+ 
+       <para>In a later section you verify that the script correctly initializes the Cache Manager, then create the links that
+       incorporate AFS into the IRIX startup and shutdown sequence. <orderedlist>
+           <listitem>
+             <para>Create the local <emphasis role="bold">/usr/vice/etc/sgiload</emphasis> directory to house the AFS kernel library
+             file. <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice/etc/sgiload</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS kernel library file to the <emphasis role="bold">/usr/vice/etc/sgiload</emphasis>
+             directory. The <emphasis role="bold">IP</emphasis><replaceable>xx</replaceable> portion of the library file name must
+             match the value previously returned by the <emphasis role="bold">uname -m</emphasis> command. Also choose the file
+             appropriate to whether the machine's kernel supports NFS server functionality (NFS must be supported for the machine to
+             act as an NFS/AFS Translator). Single- and multiprocessor machines use the same library file.</para>
+ 
+             <para>(You can choose to copy all of the kernel library files into the <emphasis
+             role="bold">/usr/vice/etc/sgiload</emphasis> directory, but they require a significant amount of space.)</para>
+ 
+             <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p  usr/vice/etc/sgiload/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.o  /usr/vice/etc/sgiload</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine's kernel does not support NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p  usr/vice/etc/sgiload/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.nonfs.o</emphasis>   \
+                    <emphasis role="bold">/usr/vice/etc/sgiload</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+             role="bold">afsml</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsml on</emphasis>   
+ </programlisting></para>
+ 
+             <para>If the machine is to function as an NFS/AFS Translator and the kernel supports NFS server functionality, activate
+             the <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsxnfs on</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Run the <emphasis role="bold">/etc/init.d/afs</emphasis> script to load AFS extensions into the kernel. The script
+             invokes the <emphasis role="bold">ml</emphasis> command, automatically determining which kernel library file to use
+             based on this machine's CPU type and the activation state of the <emphasis role="bold">afsxnfs</emphasis>
+             variable.</para>
+ 
+             <para>You can ignore any error messages about the inability to start the BOS Server or the Cache Manager or AFS
+             client.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ142">Enabling AFS Login on IRIX Systems</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>AFS-modified kernel</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ141">
+       <title>Building AFS into the IRIX Kernel</title>
+ 
+       <para>If you prefer to build a kernel, and the machine's hardware and software configuration exactly matches another IRIX
+       machine on which AFS is already built into the kernel, you can choose to copy the kernel from that machine to this one. In
+       general, however, it is better to build AFS modifications into the kernel on each machine according to the following
+       instructions. <orderedlist>
+           <listitem>
+             <para>Copy the kernel initialization file <emphasis role="bold">afs.sm</emphasis> to the local <emphasis
+             role="bold">/var/sysgen/system</emphasis> directory, and the kernel master file <emphasis role="bold">afs</emphasis> to
+             the local <emphasis role="bold">/var/sysgen/master.d</emphasis> directory. <programlisting>
+    # <emphasis role="bold">cp -p  bin/afs.sm  /var/sysgen/system</emphasis>
+    # <emphasis role="bold">cp -p  bin/afs  /var/sysgen/master.d</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS kernel library file to the local file <emphasis
+             role="bold">/var/sysgen/boot/afs.a</emphasis>; the <emphasis role="bold">IP</emphasis><replaceable>xx</replaceable>
+             portion of the library file name must match the value previously returned by the <emphasis role="bold">uname
+             -m</emphasis> command. Also choose the file appropriate to whether the machine's kernel supports NFS server
+             functionality (NFS must be supported for the machine to act as an NFS/AFS Translator). Single- and multiprocessor
+             machines use the same library file.</para>
+ 
+             <para>If the machine's kernel supports NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p   bin/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.a   /var/sysgen/boot/afs.a</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine's kernel does not support NFS server functionality:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p  bin/libafs.IP</emphasis><replaceable>xx</replaceable><emphasis role="bold">.nonfs.a  /var/sysgen/boot/afs.a</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to deactivate the <emphasis
+             role="bold">afsml</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsml off</emphasis>   
+ </programlisting></para>
+ 
+             <para>If the machine is to function as an NFS/AFS Translator and the kernel supports NFS server functionality, activate
+             the <emphasis role="bold">afsxnfs</emphasis> variable.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsxnfs on</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the existing kernel file, <emphasis role="bold">/unix</emphasis>, to a safe location. Compile the new kernel,
+             which is created in the file <emphasis role="bold">/unix.install</emphasis>. It overwrites the existing <emphasis
+             role="bold">/unix</emphasis> file when the machine reboots in the next step. <programlisting>
+    # <emphasis role="bold">cp /unix /unix_noafs</emphasis>
+    # <emphasis role="bold">autoconfig</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Reboot the machine to start using the new kernel, and login again as the superuser <emphasis
+             role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ142">Enabling AFS Login on IRIX Systems</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>client machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on client machine</secondary>
+ 
+         <tertiary>IRIX</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on IRIX</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ142">
+       <title>Enabling AFS Login on IRIX Systems</title>
+ 
+       <para>Whilst the standard IRIX command-line 
+       <emphasis role="bold">login</emphasis> program and the 
+       graphical <emphasis role="bold">xdm</emphasis> login program both have
+       the ability to grant AFS tokens, this ability relies upon the deprecated
+       kaserver authentication system. As this system is not recommended for
+       new installations, this is not documented here.</para>
+         
+       <para>Users who have been successfully authenticated via Kerberos 5
+       authentication may obtain AFS tokens following login by running the
+       <emphasis role="bold">aklog</emphasis> command.</para>
+ 
+       <para>If you are at a site which still requires 
+       <emphasis role="bold">kaserver</emphasis> or external Kerberos v4 based 
+       authentication, please consult 
+       <link linkend="KAS014">Enabling kaserver based AFS Login on Linux Systems</link>
+       for further installation instructions.</para>
+       
+       <para>Proceed to <link linkend="HDRWQ145">Loading and Creating Client Files</link>.
+       <indexterm>
+           <primary>incorporating AFS kernel extensions</primary>
+ 
+           <secondary>client machine</secondary>
+ 
+           <tertiary>Linux</tertiary>
+         </indexterm> <indexterm>
+           <primary>AFS kernel extensions</primary>
+ 
+           <secondary>on client machine</secondary>
+ 
+           <tertiary>Linux</tertiary>
+         </indexterm> <indexterm>
+           <primary>client machine</primary>
+ 
+           <secondary>AFS kernel extensions</secondary>
+ 
+           <tertiary>on Linux</tertiary>
+         </indexterm> <indexterm>
+           <primary>Linux</primary>
+ 
+           <secondary>AFS kernel extensions</secondary>
+ 
+           <tertiary>on client machine</tertiary>
+         </indexterm> <indexterm>
+           <primary>enabling AFS login</primary>
+ 
+           <secondary>client machine</secondary>
+ 
+           <tertiary>Linux</tertiary>
+         </indexterm> <indexterm>
+           <primary>AFS login</primary>
+ 
+           <secondary>on client machine</secondary>
+ 
+           <tertiary>Linux</tertiary>
+         </indexterm> <indexterm>
+           <primary>client machine</primary>
+ 
+           <secondary>AFS login</secondary>
+ 
+           <tertiary>on Linux</tertiary>
+         </indexterm> <indexterm>
+           <primary>Linux</primary>
+ 
+           <secondary>AFS login</secondary>
+ 
+           <tertiary>on client machine</tertiary>
+         </indexterm> <indexterm>
+           <primary>PAM</primary>
+ 
+           <secondary>on Linux</secondary>
+ 
+           <tertiary>client machine</tertiary>
+         </indexterm></para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ143">
+     <title>Getting Started on Linux Systems</title>
+ 
+     <para>In this section you load AFS into the Linux kernel. Then incorporate AFS modifications into the machine's Pluggable
+     Authentication Module (PAM) system, if you wish to enable AFS login.</para>
+ 
+     <sect2 id="Header_133">
+       <title>Loading AFS into the Linux Kernel</title>
+ 
+       <para>The <emphasis role="bold">modprobe</emphasis> program is the dynamic kernel loader for Linux. Linux does not support
+       incorporation of AFS modifications during a kernel build.</para>
+ 
+       <para>For AFS to function correctly, the <emphasis role="bold">modprobe</emphasis> program must run each time the machine
+       reboots, so your distributions's AFS initialization script invokes it automatically. The script also includes
+       commands that select the appropriate AFS library file automatically. In this section you run the script.</para>
+ 
+       <para>In a later section you also verify that the script correctly initializes the Cache Manager, then activate a
+       configuration variable, which results in the script being incorporated into the Linux startup and shutdown sequence.</para>
+       
+       <para>The procedure for starting up OpenAFS depends upon your distribution</para>
+       <sect3>
+         <title>Fedora and RedHat Enterprise Linux</title>
+         <para>OpenAFS ships RPMS for all current Fedora and RHEL releases.
+         <orderedlist>
+           <listitem>
+             <para>Download and install the RPM set for your operating system.
+             RPMs are available from the OpenAFS web site. You will need the
+             <emphasis role="bold">openafs</emphasis> and
+             <emphasis role="bold">openfs-client</emphasis> packages, along
+             with an <emphasis role="bold">openafs-kernel</emphasis> package
+             matching your current, running ,kernel.</para>
+ 
+             <para>You can find the version of your current kernel by running
+ <programlisting>
+   # uname -r
+ <replaceable>2.6.20-1.2933.fc6</replaceable>
+ </programlisting></para>
+ 
+             <para>Once downloaded, the packages may be installed with the
+             <emphasis role="bold">rpm</emphasis> command
+ <programlisting>
+   # rpm -U openafs-* openafs-client-* openafs-server-* openafs-kernel-*
+ </programlisting></para>
+           </listitem>
+         </orderedlist>
+       </para>
+       </sect3>
+       <sect3>
+         <title>Systems packaged as tar files</title>
+         <para>If you are running a system where the OpenAFS Binary Distribution
+         is provided as a tar file, or where you have built the system from
+         source yourself, you need to install the relevant components by hand
+         </para>
+         <orderedlist>
+           <listitem>
+             <para>Unpack the distribution tarball. The examples below assume
+             that you have unpacked the files into the
+             <emphasis role="bold">/tmp/afsdist</emphasis>directory. If you
+             pick a different location, substitute this in all of the following
+             examples. Once you have unpacked the distribution,
+             change directory as indicated.
+ <programlisting>
+   # <emphasis role="bold">cd /tmp/afsdist/linux/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS kernel library files to the local <emphasis role="bold">/usr/vice/etc/modload</emphasis> directory.
+             The filenames for the libraries have the format <emphasis
+             role="bold">libafs-</emphasis><replaceable>version</replaceable><emphasis role="bold">.o</emphasis>, where
+             <replaceable>version</replaceable> indicates the kernel build level. The string <emphasis role="bold">.mp</emphasis> in
+             the <replaceable>version</replaceable> indicates that the file is appropriate for machines running a multiprocessor
+             kernel. <programlisting>
+    # <emphasis role="bold">cp -rp  modload  /usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+             role="bold">/etc/rc.d/init.d</emphasis> on Linux machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+             extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p   afs.rc  /etc/rc.d/init.d/afs</emphasis> 
+ </programlisting></para>
+           </listitem>
+ 
+ <!--
+           <listitem>
+             <para>Run the AFS initialization script to load AFS extensions into the kernel. You can ignore any error messages about
+             the inability to start the BOS Server or the Cache Manager or AFS client. <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/afs  start</emphasis>
+ </programlisting></para>
+           </listitem>
+ -->
+         </orderedlist>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="Header_134">
+       <title>Enabling AFS Login on Linux Systems</title>
+ 
+       <para>At this point you incorporate AFS into the operating system's Pluggable Authentication Module (PAM) scheme. PAM
+       integrates all authentication mechanisms on the machine, including login, to provide the security infrastructure for
+       authenticated access to and from the machine.</para>
+ 
+       <para>At this time, we recommend that new sites requiring AFS credentials
+       to be gained as part of PAM authentication use Russ Alberry's 
+       pam_afs_session, rather than utilising the bundled pam_afs2 module. 
+       A typical PAM stack should authenticate the user using an external 
+       Kerberos V service, and then use the AFS PAM module to obtain AFS 
+       credentials in the <computeroutput>session</computeroutput> section</para>
+ 
+       <para>If you are at a site which still requires 
+       <emphasis role="bold">kaserver</emphasis> or external Kerberos v4 based 
+       authentication, please consult 
+       <link linkend="KAS015">Enabling kaserver based AFS Login on Linux Systems</link>
+       for further installation instructions.</para>
+       
+       <para>Proceed to 
+       <link linkend="HDRWQ145">Loading and Creating Client Files</link>.</para>
+ 
+       <indexterm>
+         <primary>incorporating AFS kernel extensions</primary>
+ 
+         <secondary>client machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS kernel extensions</primary>
+ 
+         <secondary>on client machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS kernel extensions</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>enabling AFS login</primary>
+ 
+         <secondary>client machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS login</primary>
+ 
+         <secondary>on client machine</secondary>
+ 
+         <tertiary>Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on Solaris</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS login</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>PAM</primary>
+ 
+         <secondary>on Solaris</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>file systems clean-up script</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>file systems clean-up script (Solaris)</primary>
+ 
+         <secondary>client machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scripts</primary>
+ 
+         <secondary>file systems clean-up (Solaris)</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ144">
+     <title>Getting Started on Solaris Systems</title>
+ 
+     <para>In this section you load AFS into the Solaris kernel. Then incorporate AFS modifications into the machine's Pluggable
+     Authentication Module (PAM) system, if you wish to enable AFS login.</para>
+ 
+     <sect2 id="Header_136">
+       <title>Loading AFS into the Solaris Kernel</title>
+ 
+       <para>The <emphasis role="bold">modload</emphasis> program is the dynamic kernel loader provided by Sun Microsystems for
+       Solaris systems. Solaris does not support incorporation of AFS modifications during a kernel build.</para>
+ 
+       <para>For AFS to function correctly, the <emphasis role="bold">modload</emphasis> program must run each time the machine
+       reboots, so the AFS initialization script (included on the AFS CD-ROM) invokes it automatically. In this section you copy the
+       appropriate AFS library file to the location where the <emphasis role="bold">modload</emphasis> program accesses it and then
+       run the script.</para>
+ 
+       <para>In a later section you verify that the script correctly initializes the Cache Manager, then create the links that
+       incorporate AFS into the Solaris startup and shutdown sequence. <orderedlist>
+           <listitem>
+             <para>Unpack the OpenAFS Solaris distribution tarball. The examples
+             below assume that you have unpacked the files into the 
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory. If you 
+             pick a diferent location, substitute this in all of the following
+             exmaples. Once you have unpacked the distribution, change directory
+             as indicated. 
+ <programlisting>
+    # <emphasis role="bold">cd  /tmp/afsdist/sun4x_56/root.client/usr/vice/etc</emphasis>
+ </programlisting></para>
+           </listitem>          
+ 
+           <listitem>
+             <para>Copy the AFS initialization script to the local directory for initialization files (by convention, <emphasis
+             role="bold">/etc/init.d</emphasis> on Solaris machines). Note the removal of the <emphasis role="bold">.rc</emphasis>
+             extension as you copy the script. <programlisting>
+    # <emphasis role="bold">cp -p  afs.rc  /etc/init.d/afs</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the appropriate AFS kernel library file to the local file <emphasis
+             role="bold">/kernel/fs/afs</emphasis>.</para>
+ 
+             <para>If the machine is running Solaris 2.6 or the 32-bit version of Solaris 7, its kernel supports NFS server
+             functionality, and the <emphasis role="bold">nfsd</emphasis> process is running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs.o /kernel/fs/afs</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine is running Solaris 2.6 or the 32-bit version of Solaris 7, and its kernel does not support NFS
+             server functionality or the <emphasis role="bold">nfsd</emphasis> process is not running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs.nonfs.o /kernel/fs/afs</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine is running the 64-bit version of Solaris 7, its kernel supports NFS server functionality, and the
+             <emphasis role="bold">nfsd</emphasis> process is running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs64.o /kernel/fs/sparcv9/afs</emphasis>   
+ </programlisting>
+ 
+             <para>If the machine is running the 64-bit version of Solaris 7, and its kernel does not support NFS server
+             functionality or the <emphasis role="bold">nfsd</emphasis> process is not running:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">cp -p modload/libafs64.nonfs.o /kernel/fs/sparcv9/afs</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Run the AFS initialization script to load AFS modifications into the kernel. You can ignore any error messages
+             about the inability to start the BOS Server or the Cache Manager or AFS client. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>   
+ </programlisting></para>
+ 
+             <para>When an entry called <computeroutput>afs</computeroutput> does not already exist in the local <emphasis
+             role="bold">/etc/name_to_sysnum</emphasis> file, the script automatically creates it and reboots the machine to start
+             using the new version of the file. If this happens, log in again as the superuser <emphasis role="bold">root</emphasis>
+             after the reboot and run the initialization script again. This time the required entry exists in the <emphasis
+             role="bold">/etc/name_to_sysnum</emphasis> file, and the <emphasis role="bold">modload</emphasis> program runs.</para>
+ 
+             <programlisting>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+    # <emphasis role="bold">/etc/init.d/afs start</emphasis>
+ </programlisting>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_137">
+       <title>Enabling AFS Login on Solaris Systems</title>
+ 
+       <para>At this point you incorporate AFS into the operating system's Pluggable Authentication Module (PAM) scheme. PAM
+       integrates all authentication mechanisms on the machine, including login, to provide the security infrastructure for
+       authenticated access to and from the machine.</para>
+ 
+       <para>In modern AFS installations, you should be using Kerberos v5
+       for user login, and obtaining AFS tokens subsequent to this authentication
+       step. OpenAFS does not currently distribute a PAM module allowing AFS 
+       tokens to be automatically gained at login. Some of these, such as
+       pam-krb5 and pam-afs-session from http://www.eyrie.org/~eagle/software/
+       or pam_afs2 from ftp://achilles.ctd.anl.gov/pub/DEE/pam_afs2-0.1.tar,
+       have been tested with Solaris.</para>
+ 
+       <para>If you are at a site which still requires 
+       <emphasis role="bold">kaserver</emphasis> or external Kerberos v4 based 
+       authentication, please consult 
+       <link linkend="KAS016">Enabling kaserver based AFS Login on Solaris Systems</link>
+       for further installation instructions.</para>
+     </sect2>
+     <sect2 id="Header_137a">
+       <title>Editing the File Systems Clean-up Script on Solaris Systems</title>
+       <para>
+         <orderedlist>
+           <listitem>
+             <para>Some Solaris distributions include a script that locates 
+             and removes unneeded files from various file systems. Its
+             conventional location is 
+             <emphasis role="bold">/usr/lib/fs/nfs/nfsfind</emphasis>. The 
+             script generally uses an argument to the 
+             <emphasis role="bold">find</emphasis> command to define which file 
+             systems to search. In this step you modify the
+             command to exclude the <emphasis role="bold">/afs</emphasis> 
+             directory. Otherwise, the command traverses the AFS
+             filespace of every cell that is accessible from the machine, which can take many hours. The following alterations are
+             possibilities, but you must verify that they are appropriate for your cell.</para>
+ 
+             <para>The first possible alteration is to add the <emphasis role="bold">-local</emphasis> flag to the existing command,
+             so that it looks like the following:</para>
+ 
+             <programlisting>
+    find $dir -local -name .nfs\* -mtime +7 -mount -exec rm -f {} \;   
+ </programlisting>
+ 
+             <para>Another alternative is to exclude any directories whose names begin with the lowercase letter <emphasis
+             role="bold">a</emphasis> or a non-alphabetic character.</para>
+ 
+             <programlisting>
+    find /[A-Zb-z]*  <replaceable>remainder of existing command</replaceable>   
+ </programlisting>
+ 
+             <para>Do not use the following command, which still searches under the <emphasis role="bold">/afs</emphasis> directory,
+             looking for a subdirectory of type <emphasis role="bold">4.2</emphasis>.</para>
+ 
+             <programlisting>
+    find / -fstype 4.2     /* <replaceable>do not use</replaceable> */
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para>Proceed to <link linkend="HDRWQ145">Loading and Creating Client Files</link>.</para>
+           </listitem>
+         </orderedlist></para>
+ 
+       <indexterm>
+         <primary>Binary Distribution</primary>
+ 
+         <secondary>copying client files from</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>copying client files to local disk</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>copying</primary>
+ 
+         <secondary>client files to local disk</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>cell name</primary>
+ 
+         <secondary>setting in client ThisCell file</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>setting</primary>
+ 
+         <secondary>cell name in client ThisCell file</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>cell membership</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>ThisCell file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ThisCell file (client)</primary>
+ 
+         <secondary>client machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>CellServDB file (client)</primary>
+ 
+         <secondary>creating</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>database server machine</primary>
+ 
+         <secondary>entry in client CellServDB file</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>CellServDB file (client)</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>CellServDB file</secondary>
+ 
+         <tertiary>creating during initial installation</tertiary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ145">
+     <title>Loading and Creating Client Files</title>
+ 
+     <para>If you are using a non-packaged distribution (that is, one provided as
+     a tarball) you should now copy files from the istribution to the 
+     <emphasis role="bold">/usr/vice/etc</emphasis> directory. On some platforms 
+     that use a dynamic loader program to incorporate AFS modifications into the 
+     kernel, you have already copied over some the files.
+     Copying them again does no harm.</para>
+ 
+     <para>Every AFS client machine has a copy of the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file on its local disk
+     to define the machine's cell membership for the AFS client programs that run on it. Among other functions, this file determines
+     the following: <itemizedlist>
+         <listitem>
+           <para>The cell in which users authenticate when they log onto the machine, assuming it is using an AFS-modified login
+           utility</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The cell in which users authenticate by default when they issue the <emphasis role="bold">aklog</emphasis>
+           command</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The cell membership of the AFS server processes that the AFS command interpreters on this machine contact by
+           default</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Similarly, the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on a client machine's local disk lists the
+     database server machines in each cell that the local Cache Manager can contact. If there is no entry in the file for a cell, or
+     the list of database server machines is wrong, then users working on this machine cannot access the cell. The chapter in the
+     <emphasis>OpenAFS Administration Guide</emphasis> about administering client machines explains how to maintain the file after
+     creating it. A version of the client <emphasis role="bold">CellServDB</emphasis> file was created during the installation of
+     your cell's first machine (in <link linkend="HDRWQ66">Creating the Client CellServDB File</link>). It is probably also
+     appropriate for use on this machine.</para>
+ 
+     <para>Remember that the Cache Manager consults the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file only at
+     reboot, when it copies the information into the kernel. For the Cache Manager to perform properly, the <emphasis
+     role="bold">CellServDB</emphasis> file must be accurate at all times. Refer to the chapter in the <emphasis>OpenAFS
+     Administration Guide</emphasis> about administering client machines for instructions on updating this file, with or without
+     rebooting. <orderedlist>
+         <listitem>
+           <para>If you have not already done so, unpack the distribution 
+           tarball for this machine's system type into a suitable location on 
+           the filesystem, such as <emphasis role="bold">/tmp/afsdist</emphasis>.
+           If you use a different location, substitue that in the examples that 
+           follow.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Copy files to the local <emphasis role="bold">/usr/vice/etc</emphasis> directory.</para>
+ 
+           <para>This step places a copy of the AFS initialization script (and related files, if applicable) into the <emphasis
+           role="bold">/usr/vice/etc</emphasis> directory. In the preceding instructions for incorporating AFS into the kernel, you
+           copied the script directly to the operating system's conventional location for initialization files. When you incorporate
+           AFS into the machine's startup sequence in a later step, you can choose to link the two files.</para>
+ 
+           <para>On some system types that use a dynamic kernel loader program, you previously copied AFS library files into a
+           subdirectory of the <emphasis role="bold">/usr/vice/etc</emphasis> directory. On other system types, you copied the
+           appropriate AFS library file directly to the directory where the operating system accesses it. The following commands do
+           not copy or recopy the AFS library files into the <emphasis role="bold">/usr/vice/etc</emphasis> directory, because on
+           some system types the library files consume a large amount of space. If you want to copy them, add the <emphasis
+           role="bold">-r</emphasis> flag to the first <emphasis role="bold">cp</emphasis> command and skip the second <emphasis
+           role="bold">cp</emphasis> command.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">cd /cdrom/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/root.client/usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -p  *  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">cp -rp  C  /usr/vice/etc</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file. <programlisting>
+    # <emphasis role="bold">echo "</emphasis><replaceable>cellname</replaceable><emphasis role="bold">" &gt; /usr/vice/etc/ThisCell</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the 
+           <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file. Use a 
+           network file transfer program such as 
+           <emphasis role="bold">sftp</emphasis> or 
+           <emphasis role="bold">scp</emphasis> to copy it from one of the 
+           following sources, which are listed in decreasing order of 
+           preference: <itemizedlist>
+               <listitem>
+                 <para>Your cell's central <emphasis role="bold">CellServDB</emphasis> source file (the conventional location is
+                 <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+                 role="bold">/common/etc/CellServDB</emphasis>)</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The global <emphasis role="bold">CellServDB</emphasis> 
+                 file maintained at grand.central.org</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>An existing client machine in your cell</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>The <emphasis role="bold">CellServDB.sample</emphasis> 
+                 file included in the
+                 <replaceable>sysname</replaceable><emphasis role="bold">/root.client/usr/vice/etc</emphasis> 
+                 directory of each OpenAFS distribution; add an entry for the 
+                 local cell by following the instructions in 
+                 <link linkend="HDRWQ66">Creating the Client CellServDB File</link>
+                 </para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>client cache</primary>
+ 
+       <see>cache</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS cache</primary>
+ 
+       <see>cache</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>disk cache</primary>
+ 
+       <see>cache</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>memory cache</primary>
+ 
+       <see>cache</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cache</primary>
+ 
+       <secondary>requirements</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cache</primary>
+ 
+       <secondary>choosing size</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>requirements</primary>
+ 
+       <secondary>cache</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/vice/etc/cacheinfo</primary>
+ 
+       <see>cacheinfo file</see>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cacheinfo file</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>cacheinfo</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>usr/vice/cache directory</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>/usr/vice/cache</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>cache</primary>
+ 
+       <secondary>configuring</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>configuring</primary>
+ 
+       <secondary>cache</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting</primary>
+ 
+       <secondary>cache size and location</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>cache size and location</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ146">
+     <title>Configuring the Cache</title>
+ 
+     <para>The Cache Manager uses a cache on the local disk or in machine memory to store local copies of files fetched from file
+     server machines. As the <emphasis role="bold">afsd</emphasis> program initializes the Cache Manager, it sets basic cache
+     configuration parameters according to definitions in the local <emphasis role="bold">/usr/vice/etc/cacheinfo</emphasis> file.
+     The file has three fields: <orderedlist>
+         <listitem>
+           <para>The first field names the local directory on which to mount the AFS filespace. The conventional location is the
+           <emphasis role="bold">/afs</emphasis> directory.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The second field defines the local disk directory to use for the disk cache. The conventional location is the
+           <emphasis role="bold">/usr/vice/cache</emphasis> directory, but you can specify an alternate directory if another
+           partition has more space available. There must always be a value in this field, but the Cache Manager ignores it if the
+           machine uses a memory cache.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The third field specifies the number of kilobyte (1024 byte) blocks to allocate for the cache.</para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <para>The values you define must meet the following requirements. <itemizedlist>
+         <listitem>
+           <para>On a machine using a disk cache, the Cache Manager expects always to be able to use the amount of space specified in
+           the third field. Failure to meet this requirement can cause serious problems, some of which can be repaired only by
+           rebooting. You must prevent non-AFS processes from filling up the cache partition. The simplest way is to devote a
+           partition to the cache exclusively.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The amount of space available in memory or on the partition housing the disk cache directory imposes an absolute
+           limit on cache size.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The maximum supported cache size can vary in each AFS release; see the <emphasis>OpenAFS Release Notes</emphasis>
+           for the current version.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>For a disk cache, you cannot specify a value in the third field that exceeds 95% of the space available on the
+           partition mounted at the directory named in the second field. If you violate this restriction, the <emphasis
+           role="bold">afsd</emphasis> program exits without starting the Cache Manager and prints an appropriate message on the
+           standard output stream. A value of 90% is more appropriate on most machines. Some operating systems (such as AIX) do not
+           automatically reserve some space to prevent the partition from filling completely; for them, a smaller value (say, 80% to
+           85% of the space available) is more appropriate.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>For a memory cache, you must leave enough memory for other processes and applications to run. If you try to allocate
+           more memory than is actually available, the <emphasis role="bold">afsd</emphasis> program exits without initializing the
+           Cache Manager and produces the following message on the standard output stream. <programlisting>
+    afsd: memCache allocation failure at <replaceable>number</replaceable> KB
+ </programlisting></para>
+ 
+           <para>The <replaceable>number</replaceable> value is how many kilobytes were allocated just before the failure, and so
+           indicates the approximate amount of memory available.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>Within these hard limits, the factors that determine appropriate cache size include the number of users working on the
+     machine, the size of the files with which they work, and (for a memory cache) the number of processes that run on the machine.
+     The higher the demand from these factors, the larger the cache needs to be to maintain good performance.</para>
+ 
+     <para>Disk caches smaller than 10 MB do not generally perform well. Machines serving multiple users usually perform better with
+     a cache of at least 60 to 70 MB. The point at which enlarging the cache further does not really improve performance depends on
+     the factors mentioned previously and is difficult to predict.</para>
+ 
+     <para>Memory caches smaller than 1 MB are nonfunctional, and the performance of caches smaller than 5 MB is usually
+     unsatisfactory. Suitable upper limits are similar to those for disk caches but are probably determined more by the demands on
+     memory from other sources on the machine (number of users and processes). Machines running only a few processes possibly can use
+     a smaller memory cache.</para>
+ 
+     <sect2 id="HDRWQ147">
+       <title>Configuring a Disk Cache</title>
+ 
+       <note>
+         <para>Not all file system types that an operating system supports are necessarily supported for use as the cache partition.
+         For possible restrictions, see the <emphasis>OpenAFS Release Notes</emphasis>.</para>
+       </note>
+ 
+       <para>To configure the disk cache, perform the following procedures: <orderedlist>
+           <listitem>
+             <para>Create the local directory to use for caching. The following instruction shows the conventional location,
+             <emphasis role="bold">/usr/vice/cache</emphasis>. If you are devoting a partition exclusively to caching, as
+             recommended, you must also configure it, make a file system on it, and mount it at the directory created in this step.
+             <programlisting>
+    # <emphasis role="bold">mkdir /usr/vice/cache</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Create the <emphasis role="bold">cacheinfo</emphasis> file to define the configuration parameters discussed
+             previously. The following instruction shows the standard mount location, <emphasis role="bold">/afs</emphasis>, and the
+             standard cache location, <emphasis role="bold">/usr/vice/cache</emphasis>. <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:</emphasis><replaceable>#blocks</replaceable><emphasis role="bold">" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting></para>
+ 
+             <para>The following example defines the disk cache size as 50,000 KB:</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:50000" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ148">
+       <title>Configuring a Memory Cache</title>
+ 
+       <para>To configure a memory cache, create the <emphasis role="bold">cacheinfo</emphasis> file to define the configuration
+       parameters discussed previously. The following instruction shows the standard mount location, <emphasis
+       role="bold">/afs</emphasis>, and the standard cache location, <emphasis role="bold">/usr/vice/cache</emphasis> (though the
+       exact value of the latter is irrelevant for a memory cache).</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:</emphasis><replaceable>#blocks</replaceable><emphasis role="bold">" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting>
+ 
+       <para>The following example allocates 25,000 KB of memory for the cache.</para>
+ 
+       <programlisting>
+    # <emphasis role="bold">echo "/afs:/usr/vice/cache:25000" &gt; /usr/vice/etc/cacheinfo</emphasis>
+ </programlisting>
+ 
+       <indexterm>
+         <primary>afs (/afs) directory</primary>
+ 
+         <secondary>creating</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afs (/afs) directory</primary>
+ 
+         <secondary>as root of AFS filespace</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS filespace</primary>
+ 
+         <secondary>root at /afs directory</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>/afs</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afsd</primary>
+ 
+         <secondary>options file (Linux)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>afsd options file (Linux)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>afs</secondary>
+ 
+         <tertiary>afsd options file (Linux)</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afs file</primary>
+ 
+         <secondary>afsd options file (Linux)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>etc/sysconfig/afs</primary>
+ 
+         <see>afs file</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Linux</primary>
+ 
+         <secondary>afsd options file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>afsd options file (Linux)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afsd</primary>
+ 
+         <secondary>command in AFS init. script</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>afsd</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>OPTIONS variable in AFS initialization file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>AFS initialization</secondary>
+ 
+         <see>AFS initialization script</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>scripts</primary>
+ 
+         <secondary>AFS initialization</secondary>
+ 
+         <see>AFS initialization script</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AFS initialization script</primary>
+ 
+         <secondary>setting afsd parameters</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>afsd command parameters</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>variables</primary>
+ 
+         <secondary>OPTIONS (in AFS initialization file)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>environment variables</primary>
+ 
+         <see>variables</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Cache Manager</primary>
+ 
+         <secondary>client machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>configuring</primary>
+ 
+         <secondary>Cache Manager</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>Cache Manager</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>vfs (AIX)</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>vfs file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>etc/vfs file</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>AIX</primary>
+ 
+         <secondary>editing /etc/vfs file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>client machine</primary>
+ 
+         <secondary>vfs file (AIX)</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ149">
+     <title>Configuring the Cache Manager</title>
+ 
+     <para>By convention, the Cache Manager mounts the AFS filespace on the local <emphasis role="bold">/afs</emphasis> directory. In
+     this section you create that directory.</para>
+ 
+     <para>The <emphasis role="bold">afsd</emphasis> program sets several cache configuration parameters as it initializes the Cache
+     Manager, and starts daemons that improve performance. You can use the <emphasis role="bold">afsd</emphasis> command's arguments
+     to override the parameters' default values and to change the number of some of the daemons. Depending on the machine's cache
+     size, its amount of RAM, and how many people work on it, you can sometimes improve Cache Manager performance by overriding the
+     default values. For a discussion of all of the <emphasis role="bold">afsd</emphasis> command's arguments, see its reference page
+     in the <emphasis>OpenAFS Administration Reference</emphasis>.</para>
+ 
+     <para>On platforms using the standard 'afs' initialisation script (this does
+     not apply to Fedora or RHEL based distributions), the 
+     <emphasis role="bold">afsd</emphasis> command line in the AFS 
+     initialization script on each system type includes an
+     <computeroutput>OPTIONS</computeroutput> variable. You can use it to set 
+     nondefault values for the command's arguments, in one
+     of the following ways: <itemizedlist>
+         <listitem>
+           <para>You can create an <emphasis role="bold">afsd</emphasis> <emphasis>options file</emphasis> that sets values for
+           arguments to the <emphasis role="bold">afsd</emphasis> command. If the file exists, its contents are automatically
+           substituted for the <computeroutput>OPTIONS</computeroutput> variable in the AFS initialization script. The AFS
+           distribution for some system types includes an options file; on other system types, you must create it.</para>
+ 
+           <para>You use two variables in the AFS initialization script to specify the path to the options file:
+           <computeroutput>CONFIG</computeroutput> and <computeroutput>AFSDOPT</computeroutput>. On system types that define a
+           conventional directory for configuration files, the <computeroutput>CONFIG</computeroutput> variable indicates it by
+           default; otherwise, the variable indicates an appropriate location.</para>
+ 
+           <para>List the desired <emphasis role="bold">afsd</emphasis> options on a single line in the options file, separating each
+           option with one or more spaces. The following example sets the <emphasis role="bold">-stat</emphasis> argument to 2500,
+           the <emphasis role="bold">-daemons</emphasis> argument to 4, and the <emphasis role="bold">-volumes</emphasis> argument to
+           100.</para>
+ 
+           <programlisting>
+    -stat 2500 -daemons 4 -volumes 100   
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>On a machine that uses a disk cache, you can set the <computeroutput>OPTIONS</computeroutput> variable in the AFS
+           initialization script to one of <computeroutput>$SMALL</computeroutput>, <computeroutput>$MEDIUM</computeroutput>, or
+           <computeroutput>$LARGE</computeroutput>. The AFS initialization script uses one of these settings if the <emphasis
+           role="bold">afsd</emphasis> options file named by the <computeroutput>AFSDOPT</computeroutput> variable does not exist. In
+           the script as distributed, the <computeroutput>OPTIONS</computeroutput> variable is set to the value
+           <computeroutput>$MEDIUM</computeroutput>.</para>
+ 
+           <note>
+             <para>Do not set the <computeroutput>OPTIONS</computeroutput> variable to <computeroutput>$SMALL</computeroutput>,
+             <computeroutput>$MEDIUM</computeroutput>, or <computeroutput>$LARGE</computeroutput> on a machine that uses a memory
+             cache. The arguments it sets are appropriate only on a machine that uses a disk cache.</para>
+           </note>
+ 
+           <para>The script (or on some system types the <emphasis role="bold">afsd</emphasis> options file named by the
+           <computeroutput>AFSDOPT</computeroutput> variable) defines a value for each of <computeroutput>SMALL</computeroutput>,
+           <computeroutput>MEDIUM</computeroutput>, and <computeroutput>LARGE</computeroutput> that sets <emphasis
+           role="bold">afsd</emphasis> command arguments appropriately for client machines of different sizes: <itemizedlist>
+               <listitem>
+                 <para><computeroutput>SMALL</computeroutput> is suitable for a small machine that serves one or two users and has
+                 approximately 8 MB of RAM and a 20-MB cache</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><computeroutput>MEDIUM</computeroutput> is suitable for a medium-sized machine that serves two to six users
+                 and has 16 MB of RAM and a 40-MB cache</para>
+               </listitem>
+ 
+               <listitem>
+                 <para><computeroutput>LARGE</computeroutput> is suitable for a large machine that serves five to ten users and has
+                 32 MB of RAM and a 100-MB cache</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+ 
+         <listitem>
+           <para>You can choose not to create an <emphasis role="bold">afsd</emphasis> options file and to set the
+           <computeroutput>OPTIONS</computeroutput> variable in the initialization script to a null value rather than to the default
+           <computeroutput>$MEDIUM</computeroutput> value. You can then either set arguments directly on the <emphasis
+           role="bold">afsd</emphasis> command line in the script, or set no arguments (and so accept default values for all Cache
+           Manager parameters).</para>
+         </listitem>
+       </itemizedlist>
+       
+       <note>
+         <para>If you are running on a Fedora or RHEL based system, the 
+         openafs-client initialization script behaves differently from that
+         described above. It sources 
+         <emphasis role="bold">/etc/sysconfig/openafs</emphasis>, in which the
+         AFSD_ARGS variable may be set to contain any, or all, of the afsd 
+         options detailed above. Note that this script does not support setting
+         an <computeroutput>OPTIONS</computeroutput> variable, or the 
+         <computeroutput>SMALL</computeroutput>,
+         <computeroutput>MEDIUM</computeroutput> and
+         <computeroutput>LARGE</computeroutput> methods of defining cache size.
+         </para>
+       </note>
+       
+       <orderedlist>
+         <listitem>
+           <para>Create the local directory on which to mount the AFS filespace, by convention <emphasis role="bold">/afs</emphasis>.
+           If the directory already exists, verify that it is empty. <programlisting>
+    # <emphasis role="bold">mkdir /afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On AIX systems, add the following line to the <emphasis role="bold">/etc/vfs</emphasis> file. It enables AIX to
+           unmount AFS correctly during shutdown. <programlisting>
+    afs     4     none     none
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>On non-package based Linux systems, copy the <emphasis role="bold">afsd</emphasis> options file from the <emphasis
+           role="bold">/usr/vice/etc</emphasis> directory to the <emphasis role="bold">/etc/sysconfig</emphasis> directory, removing
+           the <emphasis role="bold">.conf</emphasis> extension as you do so. <programlisting>
+    # <emphasis role="bold">cp /usr/vice/etc/afs.conf /etc/sysconfig/afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Edit the machine's AFS initialization script or <emphasis role="bold">afsd</emphasis> options file to set
+           appropriate values for <emphasis role="bold">afsd</emphasis> command parameters. The appropriate file for each system type
+           is as follows: <itemizedlist>
+               <listitem>
+                 <para>On AIX systems, <emphasis role="bold">/etc/rc.afs</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On HP-UX systems, <emphasis role="bold">/sbin/init.d/afs</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On IRIX systems, <emphasis role="bold">/etc/init.d/afs</emphasis></para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On Fedora and RHEL systems, <emphasis role="bold">/etc/sysconfig/openafs</emphasis></para>
+               </listitem>
+               
+               <listitem>
+                 <para>On Linux systems, <emphasis role="bold">/etc/sysconfig/afs</emphasis> (the <emphasis
+                 role="bold">afsd</emphasis> options file)</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>On Solaris systems, <emphasis role="bold">/etc/init.d/afs</emphasis></para>
+               </listitem>
+             </itemizedlist></para>
+ 
+           <para>Use one of the methods described in the introduction to this section to add the following flags to the <emphasis
+           role="bold">afsd</emphasis> command line. Also set any performance-related arguments you wish. <itemizedlist>
+               <listitem>
+                 <para>Add the <emphasis role="bold">-memcache</emphasis> flag if the machine is to use a memory cache.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Add the <emphasis role="bold">-verbose</emphasis> flag to display a trace of the Cache Manager's
+                 initialization on the standard output stream.</para>
+               </listitem>
+             </itemizedlist></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>AFS initialization script</primary>
+ 
+       <secondary>running</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>client machine</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>running AFS init. script</primary>
+ 
+       <secondary>client machine</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>installing</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>AFS initialization script</primary>
+ 
+       <secondary>adding to machine startup sequence</secondary>
+ 
+       <tertiary>client machine</tertiary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ150">
+     <title>Starting the Cache Manager and Installing the AFS Initialization Script</title>
+ 
+     <para>In this section you run the AFS initialization script to start the Cache Manager. If the script works correctly, perform
+     the steps that incorporate it into the machine's startup and shutdown sequence. If there are problems during the initialization,
+     attempt to resolve them. The AFS Product Support group can provide assistance if necessary.</para>
+ 
+     <para>On machines that use a disk cache, it can take a while for the <emphasis role="bold">afsd</emphasis> program to run the
+     first time on a machine, because it must create all of the <emphasis role="bold">V</emphasis><replaceable>n</replaceable> files
+     in the cache directory. Subsequent Cache Manager initializations do not take nearly as long, because the <emphasis
+     role="bold">V</emphasis><replaceable>n</replaceable> files already exist.</para>
+ 
+     <para>On system types that use a dynamic loader program, you must reboot the machine before running the initialization script,
+     so that it can freshly load AFS modifications into the kernel.</para>
+ 
+     <para>Proceed to the instructions for your system type:</para>
+ 
+     <itemizedlist>
+       <listitem>
+         <para><link linkend="HDRWQ151">Running the Script on AIX Systems</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para><link linkend="HDRWQ153">Running the Script on HP-UX Systems</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para><link linkend="HDRWQ154">Running the Script on IRIX Systems</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para><link linkend="HDRWQ155">Running the Script on Linux Systems</link></para>
+       </listitem>
+ 
+       <listitem>
+         <para><link linkend="HDRWQ156">Running the Script on Solaris Systems</link></para>
+       </listitem>
+     </itemizedlist>
+ 
+     <indexterm>
+       <primary>AIX</primary>
+ 
+       <secondary>AFS initialization script</secondary>
+ 
+       <tertiary>on client machine</tertiary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>rc.afs file (AFS init. file for AIX)</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>rc.afs</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>etc/rc.afs</primary>
+ 
+       <see>rc.afs file</see>
+     </indexterm>
+ 
+     <sect2 id="HDRWQ151">
+       <title>Running the Script on AIX Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/rc.afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Edit the AIX initialization file, <emphasis role="bold">/etc/inittab</emphasis>, adding the following line to invoke
+           the AFS initialization script. Place it just after the line that starts NFS daemons. <programlisting>
+    rcafs:2:wait:/etc/rc.afs &gt; /dev/console 2&gt;&amp;1 # Start AFS services
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc</emphasis> directories. If you want to avoid
+           potential confusion by guaranteeing that they are always the same, create a link between them. You can always retrieve the
+           original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd  /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm  rc.afs</emphasis>
+    # <emphasis role="bold">ln -s  /etc/rc.afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a volume for housing AFS binaries for this machine's system type does not already exist, proceed to <link
+           linkend="HDRWQ157">Setting Up Volumes and Loading Binaries into AFS</link>. Otherwise, the installation is
+           complete.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>afs file</primary>
+ 
+         <secondary>AFS initialization file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>afs</secondary>
+ 
+         <tertiary>AFS initialization file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>HP-UX</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ153">
+       <title>Running the Script on HP-UX Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/sbin/init.d/afs  start</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Change to the <emphasis role="bold">/sbin/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+           -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the HP-UX startup and
+           shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /sbin/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /sbin/rc2.d/S460afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /sbin/rc2.d/K800afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/sbin/init.d</emphasis> directories. If you want
+           to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can always
+           retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /sbin/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a volume for housing AFS binaries for this machine's system type does not already exist, proceed to <link
+           linkend="HDRWQ157">Setting Up Volumes and Loading Binaries into AFS</link>. Otherwise, the installation is
+           complete.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>afs file</primary>
+ 
+         <secondary>AFS initialization file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>afs</secondary>
+ 
+         <tertiary>AFS initialization file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>etc/init.d/afs</primary>
+ 
+         <see>afs file</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>afsclient variable (IRIX)</primary>
+ 
+         <secondary>client machine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>variables</primary>
+ 
+         <secondary>afsclient (IRIX)</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>IRIX</primary>
+ 
+         <secondary>afsclient variable</secondary>
+ 
+         <tertiary>client machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ154">
+       <title>Running the Script on IRIX Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>If you have configured the machine to use the <emphasis role="bold">ml</emphasis> dynamic loader program, reboot the
+           machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis
+           role="bold">afsclient</emphasis> configuration variable. <programlisting>
+    # <emphasis role="bold">/etc/chkconfig -f afsclient on</emphasis> 
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs  start</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Change to the <emphasis role="bold">/etc/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+           -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the IRIX startup and
+           shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /etc/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc2.d/S35afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc0.d/K35afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/init.d</emphasis> directories. If you want
+           to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can always
+           retrieve the original script from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a volume for housing AFS binaries for this machine's system type does not already exist, proceed to <link
+           linkend="HDRWQ157">Setting Up Volumes and Loading Binaries into AFS</link>. Otherwise, the installation is
+           complete.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>afs file</primary>
+ 
+         <secondary>AFS initialization file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>afs</secondary>
+ 
+         <tertiary>AFS initialization file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>etc/rc.d/init.d/afs</primary>
+ 
+         <see>afs file</see>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Linux</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2>
+       <title>Running the Script on Fedora / RHEL Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Run the AFS initialization script. 
+ <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/openafs-client  start</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis role="bold">openafs-client</emphasis>
+           configuration variable. Based on the instruction in the AFS initialization file that begins with the string
+           <computeroutput>#chkconfig</computeroutput>, the command automatically creates the symbolic links that incorporate the
+           script into the Linux startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">/sbin/chkconfig  --add openafs-client</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+     </sect2>
+       
+     <sect2 id="HDRWQ155">
+       <title>Running the Script on other Linux Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -r now</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/rc.d/init.d/afs  start</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">chkconfig</emphasis> command to activate the <emphasis role="bold">afs</emphasis>
+           configuration variable. Based on the instruction in the AFS initialization file that begins with the string
+           <computeroutput>#chkconfig</computeroutput>, the command automatically creates the symbolic links that incorporate the
+           script into the Linux startup and shutdown sequence. <programlisting>
+    # <emphasis role="bold">/sbin/chkconfig  --add afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/rc.d/init.d</emphasis> directories, and
+           copies of the <emphasis role="bold">afsd</emphasis> options file in both the <emphasis
+           role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/sysconfig</emphasis> directories. If you want to avoid
+           potential confusion by guaranteeing that the two copies of each file are always the same, create a link between them. You
+           can always retrieve the original script or options file from the AFS CD-ROM if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc afs.conf</emphasis>
+    # <emphasis role="bold">ln -s  /etc/rc.d/init.d/afs  afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/sysconfig/afs  afs.conf</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a volume for housing AFS binaries for this machine's system type does not already exist, proceed to <link
+           linkend="HDRWQ157">Setting Up Volumes and Loading Binaries into AFS</link>. Otherwise, the installation is
+           complete.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>afs file</primary>
+ 
+         <secondary>AFS initialization file</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>afs</secondary>
+ 
+         <tertiary>AFS initialization file</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>Solaris</primary>
+ 
+         <secondary>AFS initialization script</secondary>
+ 
+         <tertiary>on client machine</tertiary>
+       </indexterm>
+     </sect2>
+ 
+     <sect2 id="HDRWQ156">
+       <title>Running the Script on Solaris Systems</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Reboot the machine and log in again as the local superuser <emphasis role="bold">root</emphasis>. <programlisting>
+    # <emphasis role="bold">cd /</emphasis>
+    # <emphasis role="bold">shutdown -i6 -g0 -y</emphasis>
+    login: <emphasis role="bold">root</emphasis>
+    Password: <replaceable>root_password</replaceable>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Run the AFS initialization script. <programlisting>
+    # <emphasis role="bold">/etc/init.d/afs  start</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Change to the <emphasis role="bold">/etc/init.d</emphasis> directory and issue the <emphasis role="bold">ln
+           -s</emphasis> command to create symbolic links that incorporate the AFS initialization script into the Solaris startup and
+           shutdown sequence. <programlisting>
+    # <emphasis role="bold">cd /etc/init.d</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc3.d/S99afs</emphasis>
+    # <emphasis role="bold">ln -s ../init.d/afs /etc/rc0.d/K66afs</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> There are now copies of the AFS initialization file in both the
+           <emphasis role="bold">/usr/vice/etc</emphasis> and <emphasis role="bold">/etc/init.d</emphasis> directories. If you want
+           to avoid potential confusion by guaranteeing that they are always the same, create a link between them. You can always
+           retrieve the original script from the OpenAFS Binary Distribution if necessary. <programlisting>
+    # <emphasis role="bold">cd /usr/vice/etc</emphasis>
+    # <emphasis role="bold">rm afs.rc</emphasis>
+    # <emphasis role="bold">ln -s  /etc/init.d/afs  afs.rc</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>If a volume for housing AFS binaries for this machine's system type does not already exist, proceed to <link
+           linkend="HDRWQ157">Setting Up Volumes and Loading Binaries into AFS</link>. Otherwise, the installation is
+           complete.</para>
+         </listitem>
+       </orderedlist>
+ 
+       <indexterm>
+         <primary>storing</primary>
+ 
+         <secondary>AFS binaries in volumes</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>volume</secondary>
+ 
+         <tertiary>for AFS binaries</tertiary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>volume</primary>
+ 
+         <secondary>for AFS binaries</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>binaries</primary>
+ 
+         <secondary>storing AFS in volume</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>usr/afsws directory</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>/usr/afsws</secondary>
+       </indexterm>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ157">
+     <title>Setting Up Volumes and Loading Binaries into AFS</title>
+ 
+     <note><para>If you are using an operating system which uses packaged
+     binaries, such as .rpms or .debs, you should allow these package management
+     systems to maintain your AFS binaries, rather than following the 
+     instructions in this section.</para></note>
+     
+     <para>In this section, you link <emphasis role="bold">/usr/afsws</emphasis> on the local disk to the directory in AFS that
+     houses AFS binaries for this system type. The conventional name for the AFS directory is <emphasis
+     role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+     role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis>.</para>
+ 
+     <para>If this machine is an existing system type, the AFS directory presumably already exists. You can simply create a link from
+     the local <emphasis role="bold">/usr/afsws</emphasis> directory to it. Follow the instructions in <link
+     linkend="HDRWQ158">Linking /usr/afsws on an Existing System Type</link>.</para>
+ 
+     <para>If this machine is a new system type (there are no AFS machines of this type in your cell), you must first create and
+     mount volumes to store its AFS binaries, and then create the link from <emphasis role="bold">/usr/afsws</emphasis> to the new
+     directory. See <link linkend="HDRWQ159">Creating Binary Volumes for a New System Type</link>.</para>
+ 
+     <para>You can also store UNIX system binaries (the files normally stored in local disk directories such as <emphasis
+     role="bold">/bin</emphasis>, <emphasis role="bold">/etc</emphasis>, and <emphasis role="bold">/lib</emphasis>) in volumes
+     mounted under <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+     role="bold">/</emphasis><replaceable>sysname</replaceable>. See <link linkend="HDRWQ88">Storing System Binaries in AFS</link>
+     .</para>
+ 
+     <sect2 id="HDRWQ158">
+       <title>Linking /usr/afsws on an Existing System Type</title>
+ 
+       <para>If this client machine is an existing system type, there is already a volume mounted in the AFS filespace that houses
+       AFS client binaries for it. <orderedlist>
+           <listitem>
+             <para>Create <emphasis role="bold">/usr/afsws</emphasis> on the local disk as a symbolic link to the directory <emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/@sys/usr/afsws</emphasis>. You can
+             specify the actual system name instead of <emphasis role="bold">@sys</emphasis> if you wish, but the advantage of using
+             <emphasis role="bold">@sys</emphasis> is that it remains valid if you upgrade this machine to a different system type.
+             <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/@sys/usr/afsws  /usr/afsws</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> If you believe it is helpful to your users to access the AFS documents
+             in a certain format via a local disk directory, create <emphasis role="bold">/usr/afsdoc</emphasis> on the local disk as
+             a symbolic link to the documentation directory in AFS (<emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable>). <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable> <emphasis
+                   role="bold">/usr/afsdoc</emphasis>
+ </programlisting></para>
+ 
+             <para>An alternative is to create a link in each user's home directory to the <emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable> directory.</para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ159">
+       <title>Creating Binary Volumes for a New System Type</title>
+ 
+       <para>If this client machine is a new system type, you must create and mount volumes for its binaries before you can link the
+       local <emphasis role="bold">/usr/afsws</emphasis> directory to an AFS directory.</para>
+ 
+       <para>To create and mount the volumes, you use the 
+       <emphasis role="bold">kinit</emphasis> command to authenticate as an
+       administrator, followed by the <emphasis role="bold">aklog</emphasis> 
+       command to gain tokens, and then issue commands from the 
+       <emphasis role="bold">vos</emphasis> and 
+       <emphasis role="bold">fs</emphasis> command suites. However, the 
+       command binaries are not yet available on this machine (by convention, 
+       they are accessible via the <emphasis role="bold">/usr/afsws</emphasis> 
+       link that you are about to create). You have two choices: 
+       <itemizedlist>
+           <listitem>
+             <para>Perform all steps except the last one (Step <link linkend="LIWQ162">10</link>) on an existing AFS machine. On a
+             file server machine, the <emphasis role="bold">aklog</emphasis>, <emphasis role="bold">fs</emphasis> and <emphasis
+             role="bold">vos</emphasis> binaries reside in the <emphasis role="bold">/usr/afs/bin</emphasis> directory. On client
+             machines, the <emphasis role="bold">aklog</emphasis> and <emphasis role="bold">fs</emphasis> binaries reside in the
+             <emphasis role="bold">/usr/afsws/bin</emphasis> directory and the <emphasis role="bold">vos</emphasis> binary in the
+             <emphasis role="bold">/usr/afsws/etc</emphasis> directory. Depending on how your PATH environment variable is set, you
+             possibly need to precede the command names with a pathname.</para>
+ 
+             <para>If you work on another AFS machine, be sure to substitute the new system type name for the
+             <replaceable>sysname</replaceable> argument in the following commands, not the system type of the machine on which you
+             are issuing the commands.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>Copy the necessary command binaries to a temporary location on the local disk, which enables you to perform the
+             steps on the local machine. The following procedure installs them in the <emphasis role="bold">/tmp</emphasis> directory
+             and removes them at the end. Depending on how your PATH environment variable is set, you possibly need to precede the
+             command names with a pathname.</para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>Perform the following steps to create a volume for housing AFS binaries. <orderedlist>
+           <listitem>
+             <para>Working either on the local machine or another AFS machine, 
+             extract the Open AFS distribtion tarball onto a directory on that 
+             machine. The following instructions assume that you are using the
+             <emphasis role="bold">/tmp/afsdist</emphasis> directory.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If working on the local machine, copy the necessary binaries to a temporary location on the local disk. Substitute
+             a different directory name for <emphasis role="bold">/tmp</emphasis> if you wish. <programlisting>
+    # <emphasis role="bold">cd  /tmp/afsdist/</emphasis><replaceable>new_sysname</replaceable><emphasis role="bold">/root.server/usr/afs/bin</emphasis>
+    # <emphasis role="bold">cp -p  aklog  /tmp</emphasis>
+    # <emphasis role="bold">cp -p  fs  /tmp</emphasis>
+    # <emphasis role="bold">cp -p  vos  /tmp</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Authenticate as the user <emphasis role="bold">admin</emphasis>. 
+ <programlisting>
+    # <emphasis role="bold">kinit admin</emphasis>
+    Password: <replaceable>admin_password</replaceable>
+    # <emphasis role="bold">aklog</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ160" />Issue the <emphasis role="bold">vos create</emphasis> command to create volumes for storing
+             the AFS client binaries for this system type. The following example instruction creates volumes called
+             <replaceable>sysname</replaceable>, <replaceable>sysname</replaceable>.<emphasis role="bold">usr</emphasis>, and
+             <replaceable>sysname</replaceable>.<emphasis role="bold">usr.afsws</emphasis>. Refer to the <emphasis>OpenAFS Release
+             Notes</emphasis> to learn the proper value of <replaceable>sysname</replaceable> for this system type. <programlisting>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable><emphasis
+                   role="bold">.usr</emphasis>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable><emphasis
+                   role="bold">.usr.afsws</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs mkmount</emphasis> command to mount the newly created volumes. Because the
+             <emphasis role="bold">root.cell</emphasis> volume is replicated, you must precede the <emphasis>cellname</emphasis> part
+             of the pathname with a period to specify the read/write mount point, as shown. Then issue the <emphasis role="bold">vos
+             release</emphasis> command to release a new replica of the <emphasis role="bold">root.cell</emphasis> volume, and the
+             <emphasis role="bold">fs checkvolumes</emphasis> command to force the local Cache Manager to access them.
+             <programlisting>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable> <emphasis
+                   role="bold">-vol</emphasis> <replaceable>sysname</replaceable>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                   role="bold">/usr</emphasis>  <emphasis role="bold">-vol</emphasis> <replaceable>sysname</replaceable><emphasis
+                   role="bold">.usr</emphasis>
+    # <emphasis role="bold">fs mkmount -dir /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                   role="bold">/usr/afsws</emphasis> <emphasis role="bold">-vol</emphasis> <replaceable>sysname</replaceable><emphasis
+                   role="bold">.usr.afsws</emphasis>
+    # <emphasis role="bold">vos release root.cell</emphasis>
+    # <emphasis role="bold">fs checkvolumes</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs setacl</emphasis> command to grant the <emphasis role="bold">l</emphasis>
+             (<emphasis role="bold">lookup</emphasis>) and <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>)
+             permissions to the <emphasis role="bold">system:anyuser</emphasis> group on each new directory's ACL. <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable>
+    # <emphasis role="bold">fs setacl  -dir  .  usr  usr/afsws  -acl  system:anyuser rl</emphasis> 
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs setquota</emphasis> command to set an unlimited quota on the volume mounted at
+             the <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis> directory. This
+             enables you to copy all of the appropriate files from the CD-ROM into the volume without exceeding the volume's
+             quota.</para>
+ 
+             <para>If you wish, you can set the volume's quota to a finite value after you complete the copying operation. At that
+             point, use the <emphasis role="bold">vos examine</emphasis> command to determine how much space the volume is occupying.
+             Then issue the <emphasis role="bold">fs setquota</emphasis> command to set a quota that is slightly larger.</para>
+ 
+             <programlisting>
+    # <emphasis role="bold">fs setquota /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                 role="bold">/usr/afsws  0</emphasis>
+ </programlisting>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ161" />Copy the contents of the indicated 
+             directories from the OpenAFS binary distribution into the 
+             <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/usr/afsws</emphasis> directory.
+             <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                   role="bold">/usr/afsws</emphasis>
+    # <emphasis role="bold">cp -rp /cdrom/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/bin  .</emphasis>
+    # <emphasis role="bold">cp -rp /cdrom/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/etc  .</emphasis>
+    # <emphasis role="bold">cp -rp /cdrom/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/include  .</emphasis>
+    # <emphasis role="bold">cp -rp /cdrom/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/lib  .</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Issue the <emphasis role="bold">fs setacl</emphasis> command 
+             to set the ACL on each directory appropriately. If you wish to 
+             enable access to the software for locally authenticated users only, 
+             set the ACL on the <emphasis role="bold">etc</emphasis>, 
+             <emphasis role="bold">include</emphasis>, and 
+             <emphasis role="bold">lib</emphasis> subdirectories to grant the 
+             <emphasis role="bold">l</emphasis> and 
+             <emphasis role="bold">r</emphasis> permissions to the 
+             <emphasis role="bold">system:authuser</emphasis> group rather than 
+             the <emphasis role="bold">system:anyuser</emphasis> group. The
+             <emphasis role="bold">system:anyuser</emphasis> group must retain 
+             the <emphasis role="bold">l</emphasis> and 
+             <emphasis role="bold">r</emphasis> permissions on the 
+             <emphasis role="bold">bin</emphasis> subdirectory to enable 
+             unauthenticated users to access the 
+             <emphasis role="bold">aklog</emphasis> binary. 
+ <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable><emphasis
+                   role="bold">/usr/afsws</emphasis>
+    # <emphasis role="bold">fs setacl  -dir etc include lib  -acl  system:authuser rl</emphasis>  \
+               <emphasis role="bold">system:anyuser none</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para><anchor id="LIWQ162" />Perform this step on the new client machine even if you have performed the previous steps
+             on another machine. Create <emphasis role="bold">/usr/afsws</emphasis> on the local disk as a symbolic link to the
+             directory <emphasis role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/@sys/usr/afsws</emphasis>. You can specify the actual system name instead of <emphasis
+             role="bold">@sys</emphasis> if you wish, but the advantage of using <emphasis role="bold">@sys</emphasis> is that it
+             remains valid if you upgrade this machine to a different system type. <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/@sys/usr/afsws  /usr/afsws</emphasis>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> To enable users to issue commands from the AFS suites (such as
+             <emphasis role="bold">fs</emphasis>) without having to specify a pathname to their binaries, include the <emphasis
+             role="bold">/usr/afsws/bin</emphasis> and <emphasis role="bold">/usr/afsws/etc</emphasis> directories in the PATH
+             environment variable you define in each user's shell initialization file (such as <emphasis
+             role="bold">.cshrc</emphasis>).</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> If you believe it is helpful to your users to access the AFS documents
+             in a certain format via a local disk directory, create <emphasis role="bold">/usr/afsdoc</emphasis> on the local disk as
+             a symbolic link to the documentation directory in AFS (<emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable>). <programlisting>
+    # <emphasis role="bold">ln -s /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable> <emphasis
+                   role="bold">/usr/afsdoc</emphasis>
+ </programlisting></para>
+ 
+             <para>An alternative is to create a link in each user's home directory to the <emphasis
+             role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis
+             role="bold">/afsdoc/</emphasis><replaceable>format_name</replaceable> directory.</para>
+           </listitem>
+ 
+           <listitem>
+             <para><emphasis role="bold">(Optional)</emphasis> If working on the local machine, remove the AFS binaries from the
+             temporary location. They are now accessible in the <emphasis role="bold">/usr/afsws</emphasis> directory.
+             <programlisting>
+    # <emphasis role="bold">cd  /tmp</emphasis>
+    # <emphasis role="bold">rm  klog  fs  vos</emphasis>
+ </programlisting></para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/QuickStartUnix/auqbg008.xml
diff -c /dev/null openafs/doc/xml/QuickStartUnix/auqbg008.xml:1.2.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/QuickStartUnix/auqbg008.xml	Wed May 13 22:26:41 2009
***************
*** 0 ****
--- 1,270 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <appendix id="HDRWQ163">
+   <title>Appendix A. Building OpenAFS from Source Code</title>
+ 
+   <para>This chapter describes how to build OpenAFS from source code. <indexterm>
+       <primary>storing</primary>
+ 
+       <secondary>OpenAFS source in volume</secondary>
+     </indexterm> <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>volume</secondary>
+ 
+       <tertiary>for OpenAFS source</tertiary>
+     </indexterm> <indexterm>
+       <primary>volume</primary>
+ 
+       <secondary>for OpenAFS source</secondary>
+     </indexterm> <indexterm>
+       <primary>source (AFS)</primary>
+ 
+       <secondary>storing in AFS volume</secondary>
+     </indexterm> <indexterm>
+       <primary>files</primary>
+ 
+       <secondary>OpenAFS source</secondary>
+     </indexterm></para>
+ 
+   <sect1 id="HDRWQ164">
+     <title>Loading the Source Files</title>
+ 
+     <para>Working on an AFS client machine, login to AFS as a
+     administrative user, then perform these steps to load the OpenAFS
+     source tree from the OpenAFS Source Distribution.
+     <orderedlist>
+         <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>vos create</secondary>
+ 
+           <tertiary>src.afs volume</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>vos commands</primary>
+ 
+           <secondary>create</secondary>
+ 
+           <tertiary>src.afs volume</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>src.afs volume</primary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>volume</primary>
+ 
+           <secondary>creating</secondary>
+ 
+           <tertiary>src.afs</tertiary>
+         </indexterm>
+ 
+         <indexterm>
+           <primary>creating</primary>
+ 
+           <secondary>src.afs volume</secondary>
+         </indexterm>
+ 
+         <listitem>
+           <para>Create and mount a volume for housing the OpenAFS source tree. These instructions name the volume <emphasis
+           role="bold">src.afs</emphasis> and mount it at the <emphasis
+           role="bold">/afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs/src</emphasis> directory.</para>
+ 
+           <para>Setting the <emphasis role="bold">-maxquota</emphasis> argument to <emphasis role="bold">0</emphasis> (zero) sets an
+           unlimited quota on the volume, which enables you to copy all of the files into the volume without exceeding its quota. If
+           you wish, you can set the volume's quota to a finite value after you complete the copying operation. At that point, use
+           the <emphasis role="bold">vos examine</emphasis> command to determine how much space the volume is occupying. Then issue
+           the <emphasis role="bold">fs setquota</emphasis> command to set a quota that is slightly larger.</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <emphasis
+               role="bold">src.afs -maxquota 0</emphasis> 
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable>
+    # <emphasis role="bold">mkdir afs</emphasis>
+    # <emphasis role="bold">fs mkmount afs/src src.afs</emphasis>
+    # <emphasis role="bold">vos release root.cell</emphasis>
+    # <emphasis role="bold">fs checkvolumes</emphasis>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>Download the latest stable OpenAFS source distribution
+           (openafs-src.<replaceable>X.Y.Z</replaceable>.tar.gz)
+           from <ulink url="http://www.openafs.org/release/latest.html">openafs.org</ulink>
+           to the local <emphasis role="bold">/tmp</emphasis> directory.
+           <indexterm>
+               <primary>downloading</primary>
+ 
+               <secondary>source files from openafs.org</secondary>
+             </indexterm>
+             </para>
+         </listitem>
+ 
+         <listitem>
+           <para>In the local <emphasis role="bold">/tmp</emphasis> directory, unpack the source archive. <programlisting>
+    # <emphasis role="bold">cd /tmp</emphasis>
+    # <emphasis role="bold">gzip -dc openafs-src-<replaceable>X.Y.Z</replaceable>.tar.gz | tar xvf -</emphasis>
+ </programlisting>
+           <indexterm>
+               <primary>unpacking</primary>
+ 
+               <secondary>source files from the archive</secondary>
+             </indexterm>
+             </para>
+         </listitem>
+ 
+         <listitem>
+           <para>Copy the source files from the unpacked archive into the newly created volume. <programlisting>
+    # <emphasis role="bold">cd /tmp/openafs-<replaceable>X.Y.Z</replaceable></emphasis>
+    # <emphasis role="bold">cp -rp  *  /afs/.</emphasis><replaceable>cellname</replaceable>/<emphasis role="bold">afs/src</emphasis>
+ </programlisting></para>
+         </listitem>
+       </orderedlist></para>
+ 
+     <indexterm>
+       <primary>source (AFS)</primary>
+ 
+       <secondary>compiling</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>compiling AFS from source</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>building</primary>
+ 
+       <secondary>AFS from source</secondary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="HDRWQ165">
+     <title>Compiling OpenAFS Binaries Using Configure and Make</title>
+ 
+     <para>The OpenAFS distribution uses the <emphasis role="bold">autoconf</emphasis> program and Makefiles for compiling the OpenAFS software.<orderedlist>
+         <listitem>
+           <para>Create a subdirectory under the <emphasis role="bold">/afs/.</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/afs</emphasis> directory for each system type for which you will build AFS binaries. Creating and mounting a
+           volume for each system type is recommended, but you can also simply use the <emphasis role="bold">mkdir</emphasis>
+           command. If you create a new volume, grant it an unlimited quota to avoid running out of space during the build process.
+           <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs</emphasis>    
+ </programlisting></para>
+ 
+           <para>If creating a new volume:</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">vos create</emphasis> &lt;<replaceable>machine name</replaceable>&gt; &lt;<replaceable>partition name</replaceable>&gt; <replaceable>sysname</replaceable> <emphasis
+               role="bold">-maxquota 0</emphasis>
+    # <emphasis role="bold">fs mkmount</emphasis> <replaceable>sysname</replaceable> <replaceable>sysname</replaceable>    
+ </programlisting>
+ 
+           <para>If not creating a new volume:</para>
+ 
+           <programlisting>
+    # <emphasis role="bold">mkdir</emphasis> <replaceable>sysname</replaceable>
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para>In the directory for each system type, create subdirectories called <emphasis role="bold">dest</emphasis>, <emphasis
+           role="bold">dest/bin</emphasis>, and <emphasis role="bold">obj</emphasis>. If you plan to use the
+           <emphasis>@sys</emphasis> variable in pathnames that refer to these directories, then you must use the conventional system
+           names listed in the <emphasis>OpenAFS Release Notes</emphasis>. <programlisting>
+    # <emphasis role="bold">cd</emphasis> <replaceable>sysname</replaceable>
+    # <emphasis role="bold">mkdir dest</emphasis> 
+    # <emphasis role="bold">mkdir dest/bin</emphasis> 
+    # <emphasis role="bold">mkdir obj</emphasis>
+ </programlisting></para>
+         </listitem>
+ 
+         <listitem>
+           <para>Create the indicated directories and symbolic links in the <emphasis
+           role="bold">/afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs</emphasis> directory.
+           <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs</emphasis>
+    # <emphasis role="bold">ln -s  @sys/dest  dest</emphasis>
+    # <emphasis role="bold">ln -s  @sys/obj  obj</emphasis>
+    # <emphasis role="bold">ln -s  .  PARENT</emphasis>
+    # <emphasis role="bold">ln -s  src/Makefile  Makefile</emphasis>   
+ </programlisting></para>
+ 
+           <para>The following is an example directory listing for the <emphasis
+           role="bold">/afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs</emphasis> directory after
+           completing the preceding steps. It includes two example system types.</para>
+ 
+           <programlisting>
+    lrwxr-xr-x admin   12 Jun 18 11:26 Makefile-&gt;src/Makefile
+    lrwxr-xr-x admin    1 Jun 18 11:26 PARENT -&gt; .
+    lrwxr-xr-x admin    9 Jun 18 11:25 dest -&gt; @sys/dest
+    lrwxr-xr-x admin    8 Jun 18 11:25 obj -&gt; @sys/obj
+    drwxrwxrwx admin 4096 Jun 18 11:24 rcs
+    drwxrwxrwx admin 2048 Jun 18 11:27 rs_aix42
+    drwxrwxrwx admin 2048 Jun 18 11:10 src
+    drwxrwxrwx admin 2048 Jun 18 11:27 sun4x_56
+ </programlisting>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis role="bold">(Optional)</emphasis> By default, the build procedure writes its results into a destination
+           directory for each system type called <emphasis role="bold">/afs/.</emphasis><replaceable>cellname</replaceable><emphasis
+           role="bold">/afs/</emphasis><replaceable>sysname</replaceable><emphasis role="bold">/dest</emphasis>. To write the results
+           to a different destination directory, create a link from the <emphasis role="bold">dest</emphasis> directory to it.
+           <programlisting>
+    # <emphasis role="bold">cd /afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs/</emphasis><replaceable>sysname</replaceable>
+    # <emphasis role="bold">ln -s</emphasis> <replaceable>full_path_of_alternate_directory</replaceable> <emphasis role="bold">dest</emphasis>
+ </programlisting> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary></secondary>
+             </indexterm></para>
+         </listitem>
+ <!--
+     % cd /afs/.rampaginggeek.com/src/afs/@sys
+     % ../src/configure
+     make
+     make dest
+     -->
+         
+         <listitem>
+           <para>For each system type you plan to build, run the following commands on a machine of that system type:</para>
+           <programlisting>
+    # <emphasis role="bold">cd  /afs/</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/</emphasis><replaceable>sysname</replaceable>
+    # <emphasis role="bold">../src/configure</emphasis>
+    # <emphasis role="bold">make</emphasis>
+    # <emphasis role="bold">make dest</emphasis>
+ </programlisting>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>make</secondary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>configure command</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>make command</primary>
+           </indexterm>
+ 
+           <indexterm>
+             <primary>commands</primary>
+ 
+             <secondary>configure</secondary>
+           </indexterm>
+ 
+         </listitem>
+ 
+         <listitem>
+           <para><anchor id="LIWQ166" />Working in the <emphasis
+           role="bold">/afs/.</emphasis><replaceable>cellname</replaceable><emphasis role="bold">/afs</emphasis> directory on a
+           machine of the system type for which you are building AFS, issue the <emphasis role="bold">make install</emphasis>
+           command.</para>
+         </listitem>
+       </orderedlist></para>
+   </sect1>
+ </appendix>
Index: openafs/doc/xml/UserGuide/.cvsignore
diff -c /dev/null openafs/doc/xml/UserGuide/.cvsignore:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/.cvsignore	Mon Jun  1 18:51:32 2009
***************
*** 0 ****
--- 1,4 ----
+ Makefile
+ *.html
+ *.pdf
+ version.xml
Index: openafs/doc/xml/UserGuide/Makefile.in
diff -c /dev/null openafs/doc/xml/UserGuide/Makefile.in:1.1.4.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/Makefile.in	Mon Jun  1 18:41:05 2009
***************
*** 0 ****
--- 1,40 ----
+ # Makefile to build the AFS Admin Guide for Unix.
+ #
+ # This makefile assumes that various utilities are available on the system.
+ # On Debian lenny, installing the packages:
+ #
+ #     dblatex
+ #     docbook-xsl
+ #     libxml2-utils
+ #     xsltproc
+ #
+ # gave me all the utilities needed.
+ #
+ # HTML_XSL is possibly specific to Debian and may need to be modified on other
+ # systems.
+ 
+ all: pdf html
+ 
+ include @TOP_OBJDIR@/src/config/Makefile.config
+ VERSFILE=version
+ include @TOP_OBJDIR@/src/config/Makefile.version
+ 
+ BOOK     = auusg000.xml
+ SRCS     = $(BOOK) auusg003.xml auusg004.xml auusg005.xml auusg006.xml \
+ 	   auusg007.xml auusg008.xml auusg009.xml auusg010.xml auusg011.xml \
+ 	   auusg012.xml
+ HTML_XSL = @HTML_XSL@
+ XSLTPROC = @XSLTPROC@
+ 
+ html: $(SRCS) $(VERSFILE).xml
+ 	$(XSLTPROC) --param navig.graphics 1 \
+ 	    --stringparam navig.graphics.path ../ $(HTML_XSL) $(BOOK)
+ 
+ pdf: $(SRCS) $(VERSFILE).xml
+ 	dblatex $(BOOK)
+ 
+ check:
+ 	xmllint --noout --valid $(BOOK)
+ 
+ clean:
+ 	rm -f *.html *.pdf
Index: openafs/doc/xml/UserGuide/NTMakefile
diff -c /dev/null openafs/doc/xml/UserGuide/NTMakefile:1.1.4.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/NTMakefile	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,72 ----
+ # Copyright 2009, Secure Endpoints Inc.
+ # All Rights Reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # - Redistributions of source code must retain the above copyright notice,
+ #   this list of conditions and the following disclaimer.
+ # - Redistributions in binary form must reproduce the above copyright notice,
+ #   this list of conditions and the following disclaimer in the documentation
+ #   and/or other materials provided with the distribution.
+ # - Neither the name of Secure Endpoints Inc. nor the names of its contributors
+ #   may be used to endorse or promote products derived from this software without
+ #   specific prior written permission from Secure Endpoints Inc..
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ !INCLUDE ..\..\..\src\config\NTMakefile.$(SYS_NAME)
+ !INCLUDE ..\..\..\src\config\NTMakefile.version
+ 
+ !IFNDEF CYGWIN
+ CYGWIN     = c:/cygwin
+ !ENDIF
+ !IFNDEF DOCBOOK_XSL
+ DOCBOOK_XSL = $(CYGWIN)/usr/share/docbook-xsl
+ !ENDIF
+ XSLTPROC   = xsltproc.exe
+ HTML_XSL = $(DOCBOOK_XSL)/html/chunk.xsl
+ HTML_PARMS = --param navig.graphics 1 --stringparam navig.graphics.path ../
+ CHM_XSL    = $(DOCBOOK_XSL)/htmlhelp/htmlhelp.xsl
+ 
+ XMLSRCS = \
+         auusg000.xml \
+         auusg003.xml \
+         auusg004.xml \
+         auusg005.xml \
+         auusg006.xml \
+         auusg007.xml \
+         auusg008.xml \
+         auusg009.xml \
+         auusg010.xml \
+         auusg011.xml \
+         auusg012.xml \
+         auusg013.xml \
+ 
+ index.html: $(XMLSRCS)
+         @echo Building OpenAFS User Guide in HTML format
+         $(XSLTPROC) $(HTML_PARMS) $(HTML_XSL) auusg000.xml 
+ 
+ htmlhelp.chm: $(XMLSRCS)
+         @echo Building OpenAFS User Guide in HTML Help format
+         $(XSLTPROC) $(CHM_XSL) auusg000.xml
+         -hhc.exe htmlhelp.hhp
+         $(DEL) *.html
+         $(DEL) *.hh?
+         $(DEL) *.chw
+ 
+ install: htmlhelp.chm index.html
+ 
+ clean::
+         $(DEL) *.html
+         $(DEL) htmlhelp.chm
\ No newline at end of file
Index: openafs/doc/xml/UserGuide/auusg000.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg000.xml:1.1.10.5
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg000.xml	Thu May 21 13:56:30 2009
***************
*** 0 ****
--- 1,67 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.3//EN"
+ 	"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+ <!ENTITY version SYSTEM "version.xml">
+ <!ENTITY preface SYSTEM "auusg003.xml">
+ <!ENTITY chapter1 SYSTEM "auusg004.xml">
+ <!ENTITY chapter2 SYSTEM "auusg005.xml">
+ <!ENTITY chapter3 SYSTEM "auusg006.xml">
+ <!ENTITY chapter4 SYSTEM "auusg007.xml">
+ <!ENTITY chapter5 SYSTEM "auusg008.xml">
+ <!ENTITY chapter6 SYSTEM "auusg009.xml">
+ <!ENTITY appendixA SYSTEM "auusg010.xml">
+ <!ENTITY appendixB SYSTEM "auusg011.xml">
+ <!ENTITY glossary SYSTEM "auusg012.xml">
+ ]>
+ 
+ <book>
+   <bookinfo>
+     <title>OpenAFS User Guide</title>
+ 
+     <copyright>
+       <year>2000</year>
+ 
+       <holder>IBM Corporation. All Rights Reserved</holder>
+     </copyright>
+ 
+     <revhistory>
+       &version;
+ 
+       <revision>
+         <revnumber>3.6</revnumber>
+ 
+         <date>April 2000</date>
+ 
+         <revremark>First IBM Edition, Document Number GC09-4561-00</revremark>
+        </revision>
+     </revhistory>
+ 
+     <abstract>
+       <para>This edition applies to: <simplelist>
+           <member>OpenAFS for AIX, Version M.n</member>
+           <member>OpenAFS for Digital Unix, Version M.n</member>
+           <member>OpenAFS for HP-UX, Version M.n</member>
+           <member>OpenAFS for Linux, Version M.n</member>
+           <member>OpenAFS for SGI IRIX, Version M.n</member>
+           <member>OpenAFS for Solaris, Version M.n</member>
+         </simplelist></para>
+ 
+       <para>and to all subsequent releases and modifications until otherwise
+       indicated in new editions.This softcopy version is based on the printed
+       edition of this book. Some formatting amendments have been made to make
+       this information more suitable for softcopy.</para>
+     </abstract>
+   </bookinfo>
+ 
+   &preface;
+   &chapter1;
+   &chapter2;
+   &chapter3;
+   &chapter4;
+   &chapter5;
+   &chapter6;
+   &appendixA;
+   &appendixB;
+   &glossary;
+   <index></index>
+ </book>
Index: openafs/doc/xml/UserGuide/auusg003.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg003.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg003.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,152 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <preface id="HDRWQ1">
+   <title>About This Guide</title>
+ 
+   <para>This section describes the purpose, organization, and conventions of this document.</para>
+ 
+   <sect1 id="HDRPREFAUDPUR">
+     <title>Audience and Purpose</title>
+ 
+     <para>This guide describes concepts and procedures for accessing information stored in the AFS filespace. It is intended for AFS
+     users who are familiar with UNIX but not necessarily AFS.</para>
+ 
+     <para>The first chapter describes basic AFS concepts and guidelines for using it, and summarizes some of the differences between
+     the UNIX file system and AFS. The remaining chapters explain how to perform basic AFS functions, including logging in, changing
+     a password, listing information, protecting files, creating groups, and troubleshooting. Concepts important to a specific task
+     or group of related tasks are presented in context, just prior to the procedures. Many examples are provided.</para>
+ 
+     <para>Instructions generally include only the commands and command options necessary for a specific task. For a complete list of
+     AFS commands and description of all options available on every command, see the <emphasis>OpenAFS Administration
+     Reference</emphasis>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRPREFORGAN">
+     <title>Document Organization</title>
+ 
+     <para>This document is divided into the following chapters.</para>
+ 
+     <para><link linkend="HDRWQ2">An Introduction to OpenAFS</link> introduces the basic concepts and functions of AFS. To use AFS
+     successfully, it is important to be familiar with the terms and concepts described in this chapter.</para>
+ 
+     <para><link linkend="HDRWQ20">Using OpenAFS</link> describes how to use AFS's basic features: how to log in and authenticate, unlog,
+     log out, access AFS files and directories in AFS, and change your password.</para>
+ 
+     <para><link linkend="HDRWQ38">Displaying Information about OpenAFS</link> describes how to display information about AFS volume
+     quota and location, file server machine status, and the foreign cells you can access.</para>
+ 
+     <para><link linkend="HDRWQ44">Protecting Your Directories and Files</link> describes how to protect your data using AFS access
+     control lists (ACLs).</para>
+ 
+     <para><link linkend="HDRWQ60">Using Groups</link> describes how to create and manage groups.</para>
+ 
+     <para><link linkend="HDRWQ76">Troubleshooting</link> outlines step-by-step diagnostic and corrective steps for specific
+     problems.</para>
+ 
+     <para><link linkend="HDRWQ80">Appendix A, Using the NFS/AFS Translator</link> describes how to use the NFS/AFS Translator to
+     access the AFS filespace from an NFS client machine.</para>
+ 
+     <para><link linkend="HDRWQ86">Appendix B, OpenAFS Command Syntax and Online Help</link> describes AFS command syntax and how to
+     obtain online information about commands.</para>
+ 
+     <para><link linkend="HDRWQ90">Appendix C, Glossary</link> defines terms used in the <emphasis>OpenAFS User
+     Guide</emphasis>.</para>
+   </sect1>
+ 
+   <sect1 id="HDRUSERFRONTHOWTO">
+     <title>How To Use This Document</title>
+ 
+     <para>Before you begin using OpenAFS, read <link linkend="HDRWQ2">An Introduction to OpenAFS</link>. Next, follow the procedures
+     outlined in <link linkend="HDRWQ20">Using OpenAFS</link> to get started using OpenAFS as an authenticated user. It describes how to
+     access files in the AFS filespace and how to end an AFS session. Consult the other chapters as you need to perform the tasks
+     they describe.</para>
+   </sect1>
+ 
+   <sect1 id="HDRPREFRELATE">
+     <title>Related Documents</title>
+ 
+     <para>The AFS Documentation Kit also includes the following documents:
+ 
+     <itemizedlist>
+       <listitem>
+         <para>The <emphasis>OpenAFS Administration Reference</emphasis> details the syntax of each AFS command and is intended for
+         the experienced AFS administrator, programmer, or user. For each AFS command, the <emphasis>OpenAFS Administration
+         Reference</emphasis> lists the command syntax, aliases and abbreviations, description, arguments, warnings, output,
+         examples, and related topics. Commands are organized alphabetically.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The <emphasis>OpenAFS Administration Guide</emphasis> describes concepts and procedures necessary for administering an
+         AFS cell, as well as more extensive coverage of the topics in the <emphasis>OpenAFS User Guide</emphasis>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The <emphasis>OpenAFS Quick Beginnings</emphasis> provides instructions for installing AFS server and client
+         machines.</para>
+       </listitem>
+     </itemizedlist>
+ </para>
+   </sect1>
+ 
+   <sect1 id="HDRTYPO_CONV">
+     <title>Typographical Conventions</title>
+ 
+     <para>This document uses the following typographical conventions:
+ 
+     <itemizedlist>
+       <listitem>
+         <para>Command and option names appear in <emphasis role="bold">bold type</emphasis> in syntax definitions, examples, and
+         running text. Names of directories, files, machines, partitions, volumes, and users also appear in <emphasis
+         role="bold">bold type</emphasis>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Variable information appears in <emphasis>italic type</emphasis>. This includes user-supplied information on command
+         lines and the parts of prompts that differ depending on who issues the command. New terms also appear in <emphasis>italic
+         type</emphasis>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Examples of screen output and file contents appear in <computeroutput>monospace type</computeroutput>.</para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <para>In addition, the following symbols appear in command syntax definitions, both in the documentation and in AFS online help
+     statements. When issuing a command, do not type these symbols.
+ 
+     <itemizedlist>
+       <listitem>
+         <para>Square brackets <emphasis role="bold">[ ]</emphasis> surround optional items.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Angle brackets <emphasis role="bold">&lt; &gt;</emphasis> surround user-supplied values in AFS commands.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>A superscripted plus sign <emphasis role="bold">+</emphasis> follows an argument that accepts more than one
+         value.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The percent sign <computeroutput>%</computeroutput> represents the regular command shell prompt. Some operating
+         systems possibly use a different character for this prompt.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The number sign <computeroutput>#</computeroutput> represents the command shell prompt for the local superuser
+         <emphasis role="bold">root</emphasis>. Some operating systems possibly use a different character for this prompt.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>The pipe symbol <emphasis role="bold">|</emphasis> in a command syntax statement separates mutually exclusive values
+         for an argument.</para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <para>For additional information on AFS commands, including a description of command string components, acceptable abbreviations
+     and aliases, and how to get online help for commands, see <link linkend="HDRWQ86">Appendix B, OpenAFS Command Syntax and Online
+     Help</link>.</para>
+   </sect1>
+ </preface>
Index: openafs/doc/xml/UserGuide/auusg004.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg004.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg004.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,529 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ2">
+   <title>An Introduction to OpenAFS</title>
+ 
+   <para>This chapter introduces basic AFS concepts and terms. It assumes that you are already familiar with standard UNIX commands,
+   file protection, and pathname conventions.</para>
+ 
+   <sect1 id="HDRWQ3">
+     <title>AFS Concepts</title>
+ 
+     <para>AFS makes it easy for people to work together on the same files, no matter where the files are located. AFS users do not
+     have to know which machine is storing a file, and administrators can move files from machine to machine without interrupting
+     user access. Users always identify a file by the same pathname and AFS finds the correct file automatically, just as happens in
+     the local file system on a single machine. While AFS makes file sharing easy, it does not compromise the security of the shared
+     files. It provides a sophisticated protection scheme. <indexterm><primary>AFS</primary><secondary>sharing information</secondary></indexterm> <indexterm><primary>AFS</primary><secondary>transparent access</secondary></indexterm></para>
+ 
+     <sect2 id="Header_9">
+       <title>Client/Server Computing</title>
+ 
+       <para>AFS uses a <emphasis>client/server computing</emphasis> model. In client/server computing, there are two types of
+       machines. <emphasis>Server machines</emphasis> store data and perform services for client machines. <emphasis>Client
+       machines</emphasis> perform computations for users and access data and services provided by server machines. Some machines act
+       as both clients and servers. In most cases, you work on a client machine, accessing files stored on a file server machine.
+       <indexterm><primary>client/server computing</primary></indexterm> <indexterm><primary>client machine</primary></indexterm> <indexterm><primary>server machines defined</primary></indexterm> <indexterm><primary>machines</primary><secondary>server</secondary></indexterm> <indexterm><primary>machines</primary><secondary>client</secondary></indexterm> <indexterm><primary>communication</primary><secondary>between clients and servers</secondary></indexterm></para>
+     </sect2>
+ 
+     <sect2 id="Header_10">
+       <title>Distributed File Systems</title>
+ 
+       <para>AFS is a <emphasis>distributed file system</emphasis> which joins together the file systems of multiple file server
+       machines, making it as easy to access files stored on a remote file server machine as files stored on the local disk. A
+       distributed file system has two main advantages over a conventional centralized file system: <indexterm><primary>distributed file system</primary></indexterm>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>Increased availability: A copy of a popular file, such as the binary for an application program, can be stored on
+           many file server machines. An outage on a single machine or even multiple machines does not necessarily make the file
+           unavailable. Instead, user requests for the program are routed to accessible machines. With a centralized file system, the
+           loss of the central file storage machine effectively shuts down the entire system.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Increased efficiency: In a distributed file system, the work load is distributed over many smaller file server
+           machines that tend to be more fully utilized than the larger (and usually more expensive) file storage machine of a
+           centralized file system.</para>
+         </listitem>
+       </itemizedlist>
+ </para>
+ 
+       <para>AFS hides its distributed nature, so working with AFS files looks and feels like working with files stored on your local
+       machine, except that you can access many more files. And because AFS relies on the power of users' client machines for
+       computation, increasing the number of AFS users does not slow AFS performance appreciably, making it a very efficient
+       computing environment.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ4">
+       <title>AFS Filespace and Local Filespace</title>
+ 
+       <indexterm><primary>local machine</primary></indexterm>
+ 
+       <para>AFS acts as an extension of your machine's local UNIX file system. Your system administrator creates a directory on the
+       local disk of each AFS client machine to act as a gateway to AFS. By convention, this directory is called <emphasis
+       role="bold">/afs</emphasis>, and it functions as the root of the <emphasis>AFS filespace</emphasis>. <indexterm><primary>AFS</primary><secondary>filespace as extension of local filespace</secondary></indexterm>
+       <indexterm><primary>afs (/afs) directory</primary><secondary>as root of AFS filespace</secondary></indexterm> <indexterm><primary>root of AFS filespace</primary></indexterm></para>
+ 
+       <para>Just like the UNIX file system, AFS uses a hierarchical file structure (a tree). Under the <emphasis
+       role="bold">/afs</emphasis> root directory are subdirectories created by your system administrator, including your home
+       directory. Other directories that are at the same level of the local file system as <emphasis role="bold">/afs</emphasis>,
+       such as <emphasis role="bold">/usr</emphasis>, <emphasis role="bold">/etc</emphasis>, or <emphasis
+       role="bold">/bin</emphasis>, can either be located on your local disk or be links to AFS directories. Files relevant only to
+       the local machine are usually stored on the local machine. All other files can be stored in AFS, enabling many users to share
+       them and freeing the local machine's disk space for other uses.</para>
+ 
+       <note>
+         <para>You can use AFS commands only on files in the AFS filespace or the local directories that are links to the AFS
+         filespace.</para>
+       </note>
+     </sect2>
+ 
+     <sect2 id="HDRWQ5">
+       <title>Cells and Sites</title>
+ 
+       <para>The <emphasis>cell</emphasis> is the administrative domain in AFS. Each cell's administrators determine how client
+       machines are configured and how much storage space is available to each user. The organization corresponding to a cell can be
+       a company, a university department, or any defined group of users. From a hardware perspective, a cell is a grouping of client
+       machines and server machines defined to belong to the same cell. <indexterm><primary>cells</primary><secondary>defined</secondary></indexterm> An AFS <emphasis>site</emphasis> is a
+       grouping of one or more related cells. For example, the cells at the ABC Corporation form a single site. <indexterm><primary>site defined</primary></indexterm></para>
+ 
+       <para>By convention, the subdirectories of the <emphasis role="bold">/afs</emphasis> directory are cellular filespaces, each
+       of which contains subdirectories and files that belong to a single cell. For example, directories and files relevant to the
+       ABC Corporation cell are stored in the subdirectory <emphasis role="bold">/afs/abc.com</emphasis>.</para>
+ 
+       <para>While each cell organizes and maintains its own filespace, it can also connect with the filespace of other AFS cells.
+       The result is a huge filespace that enables file sharing within and across cells. <indexterm><primary>communication</primary><secondary>among cells and sites</secondary></indexterm></para>
+ 
+       <para>The cell to which your client machine belongs is called your <emphasis>local cell</emphasis>. All other cells in the AFS
+       filespace are termed <emphasis>foreign cells</emphasis>. <indexterm><primary>local cell, defined</primary></indexterm> <indexterm><primary>foreign cells</primary><secondary>defined</secondary></indexterm> <indexterm><primary>cells</primary><secondary>local vs. foreign</secondary></indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ6">
+       <title>Volumes and Mount Points</title>
+ 
+       <para>The storage disks in a computer are divided into sections called <emphasis>partitions</emphasis>. AFS further divides
+       partitions into units called <emphasis>volumes</emphasis>, each of which houses a subtree of related files and directories.
+       The volume provides a convenient container for storing related files and directories. Your system administrators can move
+       volumes from one file server machine to another without your noticing, because AFS automatically tracks a volume's location.
+       <indexterm><primary>volumes</primary><secondary>defined</secondary></indexterm> <indexterm><primary>disk partition</primary><secondary>use in AFS</secondary></indexterm></para>
+ 
+       <para>You access the contents of a volume by accessing its <emphasis>mount point</emphasis> in the AFS filespace. A mount
+       point is a special file system element that looks and acts like a regular UNIX directory, but tells AFS the volume's name.
+       When you change to a different directory (by using the <emphasis role="bold">cd</emphasis> command, for example) you sometimes
+       <emphasis>cross</emphasis> a mount point and start accessing the contents of a different volume than before. You normally do
+       not notice the crossing, however, because AFS automatically interprets mount points and retrieves the contents of the new
+       directory from the appropriate volume. You do not need to track which volume, partition, or file server machine is housing a
+       directory's contents. If you are interested, though, you can learn a volume's location; for instructions, see <link
+       linkend="HDRWQ40">Locating Files and Directories</link>. <indexterm><primary>mount points defined</primary></indexterm> <indexterm><primary>volumes</primary><secondary>accessing via mount points</secondary></indexterm></para>
+ 
+       <para>If your system administrator has followed the conventional practice, your home directory corresponds to one volume,
+       which keeps its contents together on one partition of a file server machine. User volumes are typically named <emphasis
+       role="bold">user.</emphasis><replaceable>username</replaceable>. For example, the volume for a user named <emphasis
+       role="bold">smith</emphasis> in the cell <emphasis role="bold">abc.com</emphasis> is called <emphasis
+       role="bold">user.smith</emphasis> and is mounted at the directory <emphasis role="bold">/afs/abc.com/usr/smith</emphasis>.
+       <indexterm><primary>examples</primary><secondary>volume/mount point interaction</secondary></indexterm></para>
+ 
+       <para>Because AFS volumes are stored on different file server machines, when a machine becomes unavailable only the volumes on
+       that machine are inaccessible. Volumes stored on other machines are still accessible. However, if a volume's mount point
+       resides in a volume that is stored on an unavailable machine, the former volume is also inaccessible. For that reason, volumes
+       containing frequently used directories (for example, <emphasis role="bold">/afs</emphasis> and <emphasis
+       role="bold">/afs/</emphasis><replaceable>cellname</replaceable>) are often copied and distributed to many file server
+       machines.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ7">
+       <title>Volume Quotas</title>
+ 
+       <indexterm><primary>volumes</primary><secondary>volume/mount point interaction</secondary></indexterm>
+ 
+       <para>Each volume has a size limit, or <emphasis>quota</emphasis>, assigned by the system administrator. A volume's quota
+       determines the maximum amount of disk space the volume can consume. If you attempt to exceed a volume's quota, you receive an
+       error message. For instructions on checking volume quota, see <link linkend="HDRWQ39">Displaying Volume Quota</link>.</para>
+ 
+       <para>Volumes have completely independent quotas. For example, say that the current working directory is <emphasis
+       role="bold">/afs/abc.com/usr/smith</emphasis>, which is the mount point for the <emphasis role="bold">user.smith</emphasis>
+       volume with 1000 free blocks. You try to copy a 500 block file from the current working directory to the <emphasis
+       role="bold">/afs/abc.com/usr/pat</emphasis> directory, the mount point for the volume <emphasis
+       role="bold">user.pat</emphasis>. However, you get an error message saying there is not enough space. You check the volume
+       quota for <emphasis role="bold">user.pat</emphasis>, and find that the volume only has 50 free blocks.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ8">
+     <title>Using Files in AFS</title>
+ 
+     <sect2 id="HDRWQ9">
+       <title>The Cache Manager</title>
+ 
+       <para>You can access the AFS filespace only when working on an AFS client machine. The <emphasis>Cache Manager</emphasis> on
+       that machine is your agent in accessing information stored in the AFS filespace. When you access a file, the Cache Manager on
+       your client machine requests the file from the appropriate file server machine and stores (<emphasis>caches</emphasis>) a copy
+       of it on your client machine's local disk. Application programs on your client machine use the local, cached copy of the file.
+       This improves performance because it is much faster to use a local file than to send requests for file data across the network
+       to the file server machine. <indexterm><primary>caching files</primary></indexterm> <indexterm><primary>Cache Manager</primary><secondary>described</secondary></indexterm> <indexterm><primary>client machine</primary></indexterm> <indexterm><primary>files</primary><secondary>caching</secondary></indexterm></para>
+ 
+       <para>Because application programs use the cached copy of a file, any changes you make are not necessarily stored permanently
+       to the central version stored on the file server machine until the file closes. At that point, the Cache Manager writes your
+       changes back to the file server machine, where they replace the corresponding parts of the existing file. Some application
+       programs close a file in this way each time you issue their <emphasis role="bold">save</emphasis> command (and then
+       immediately reopen the file so that you can continue working). With other programs, issuing the <emphasis
+       role="bold">save</emphasis> command writes the changes only to the local cached copy. If you use the latter type of text
+       editor, you need to close the file periodically to make sure your changes are stored permanently.</para>
+ 
+       <para>If a file server machine becomes inaccessible, you can continue working with the local, cached copy of a file fetched
+       from that machine, but you cannot save your changes permanently until the server machine is again accessible.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ10">
+       <title>Updating Copies of Cached Files</title>
+ 
+       <indexterm><primary>files</primary><secondary>updating</secondary></indexterm>
+ 
+       <indexterm><primary>callbacks</primary></indexterm>
+ 
+       <para>When the central version of a file changes on the file server machine, the AFS <emphasis>File Server</emphasis> process
+       running on that machine advises all other Cache Managers with copies of that file that their version is no longer valid. AFS
+       has a special mechanism for performing these notifications efficiently. When the File Server sends the Cache Manager a copy of
+       a modifiable file, it also sends a <emphasis>callback</emphasis>. A callback functions as a promise from the File Server to
+       contact the Cache Manager if the centrally stored copy of the file is changed while it is being used. If that happens, the
+       File Server <emphasis>breaks</emphasis> the callback. If you run a program that requests data from the changed file, the Cache
+       Manager notices the broken callback and gets an updated copy of the file from the File Server. Callbacks ensure that you are
+       working with the most recent copy of a file.</para>
+ 
+       <note>
+         <para>The callback mechanism does not guarantee that you immediately see the changes someone else makes to a file you are
+         using. Your Cache Manager does not notice the broken callback until your application program asks it for more data from the
+         file.</para>
+       </note>
+     </sect2>
+ 
+     <sect2 id="Header_18">
+       <title>Multiple Users Modifying Files</title>
+ 
+       <indexterm><primary>files</primary><secondary>denying access</secondary></indexterm>
+ 
+       <indexterm><primary>files</primary><secondary>sharing</secondary></indexterm>
+ 
+       <para>Like a standard UNIX file system, AFS preserves only the changes to a file that are saved last, regardless of who made
+       the changes. When collaborating with someone on the same files, you must coordinate your work to avoid overwriting each
+       other's changes. You can use AFS access control lists (ACLs) to limit the ability of other users to access or change your
+       files, and so prevent them from accidentally overwriting your files. See <link linkend="HDRWQ44">Protecting Your Directories
+       and Files</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ11">
+     <title>AFS Security</title>
+ 
+     <indexterm><primary>AFS</primary><secondary>security</secondary></indexterm>
+ 
+     <indexterm><primary>security in AFS</primary></indexterm>
+ 
+     <para>AFS makes it easy for many users to access the same files, but also uses several mechanisms to ensure that only authorized
+     users access the AFS filespace. The mechanisms include the following:
+ 
+     <itemizedlist>
+       <listitem>
+         <para>Passwords and mutual authentication ensure that only authorized users access AFS filespace</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Access control lists enable users to restrict or permit access to their own directories</para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <sect2 id="HDRWQ12">
+       <title>Passwords and Mutual Authentication</title>
+ 
+       <indexterm><primary>mutual authentication</primary></indexterm>
+ 
+       <indexterm><primary>authentication</primary><secondary>mutual</secondary></indexterm>
+ 
+       <indexterm><primary>password</primary></indexterm>
+ 
+       <para>AFS uses two related mechanisms to ensure that only authorized users access the filespace: passwords and mutual
+       authentication. Both mechanisms require that a user prove his or her identity.</para>
+ 
+       <para>When you first identify yourself to AFS, you must provide the password associated with your username, to prove that you
+       are who you say you are. When you provide the correct password, you become <emphasis>authenticated</emphasis> and your Cache
+       Manager receives a <emphasis>token</emphasis>. A token is a package of information that is scrambled by an AFS authentication
+       program using your AFS password as a key. Your Cache Manager can unscramble the token because it knows your password and AFS's
+       method of scrambling. <indexterm><primary>tokens</primary><secondary>as proof of authentication</secondary></indexterm> <indexterm><primary>authentication</primary><secondary>defined</secondary></indexterm></para>
+ 
+       <para>The token acts as proof to AFS server programs that you are authenticated as a valid AFS user. It serves as the basis
+       for the second means through which AFS creates security, called <emphasis>mutual authentication</emphasis>. Under mutual
+       authentication, both parties communicating across the network prove their identities to one another. AFS requires mutual
+       authentication whenever a server and client (most often, a Cache Manager) communicate with each other.</para>
+ 
+       <para>The mutual authentication protocol that AFS uses is designed to make it very difficult for people to authenticate
+       fraudulently. When your Cache Manager contacts a File Server on your behalf, it sends the token you obtained when you
+       authenticated. The token is encrypted with a key that only an AFS File Server can know. If the File Server can decrypt your
+       token, it can communicate with your Cache Manager. In turn, the Cache Manager accepts the File Server as genuine because the
+       File Server can decrypt and use the information in the token. <indexterm><primary>tokens</primary><secondary>use in mutual authentication</secondary></indexterm></para>
+     </sect2>
+ 
+     <sect2 id="Header_21">
+       <title>Access Control Lists</title>
+ 
+       <indexterm><primary>ACL</primary><secondary>described</secondary></indexterm>
+ 
+       <para>AFS uses <emphasis>access control lists</emphasis> (<emphasis>ACLs</emphasis>) to determine who can access the
+       information in the AFS filespace. Each AFS directory has an ACL to specify what actions different users can perform on that
+       directory and its files. An ACL can contain up to about 20 entries for users, groups, or both; each entry lists a user or
+       group and the permissions it possesses.</para>
+ 
+       <para>The owner of a directory and system administrators can always administer an ACL. Users automatically own their home
+       directories and subdirectories. Other non-owner users can define a directory's ACL only if specifically granted that
+       permission on the ACL. For more information on ACLs, see <link linkend="HDRWQ44">Protecting Your Directories and Files</link>
+       .</para>
+ 
+       <para>A group is composed of one or more users and client machines. If a user belongs to a group that appears on an ACL, the
+       user gets all of the permissions granted to that group, just as if the user were listed directly on the ACL. Similarly, if a
+       user is logged into a client machine that belongs to a group, the user has all of the permissions granted to that group. For
+       instructions on defining and using groups, see <link linkend="HDRWQ60">Using Groups</link>.</para>
+ 
+       <para>All users who can access your cell's filespace, authenticated or not, are automatically assigned to a group called
+       <emphasis role="bold">system:anyuser</emphasis>. For a discussion of placing the <emphasis
+       role="bold">system:anyuser</emphasis> group on ACLs, see <link linkend="HDRWQ51">Extending Access to Users from Foreign
+       Cells</link>.</para>
+ 
+       <note>
+         <para>You can use the UNIX mode bits to control access on specific files within an AFS directory; however, the effect of
+         these mode bits is different under AFS than in the standard UNIX file system. See <link linkend="HDRWQ16">File and Directory
+         Protection</link>.</para>
+       </note>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ13">
+     <title>Differences Between UNIX and AFS</title>
+ 
+     <para>AFS is designed to be similar to the UNIX file system. For instance, many of the basic UNIX file manipulation commands
+     (<emphasis role="bold">cp</emphasis> for copy, <emphasis role="bold">rm</emphasis> for remove, and so on) are the same in AFS as
+     they are as in UNIX. All of your application programs work as they did before. The following sections describe some of the
+     differences between a standard UNIX file system and AFS.</para>
+ 
+     <sect2 id="HDRWQ14">
+       <title>File Sharing</title>
+ 
+       <indexterm><primary>UNIX, differences with AFS</primary><secondary>file transfer</secondary></indexterm>
+ 
+       <indexterm><primary>UNIX, differences with AFS</primary><secondary>sharing files</secondary></indexterm>
+ 
+       <indexterm><primary>files</primary><secondary>sharing</secondary></indexterm>
+ 
+       <para>AFS enables users to share remote files as easily as local files. To access a file on a remote machine in AFS, you
+       simply specify the file's pathname. In contrast, to access a file in a remote machine's UNIX file system, you must log into
+       the remote machine or create a mount point on the local machine that points to a directory in the remote machine's UNIX file
+       system.</para>
+ 
+       <para>AFS users can see and share all the files under the <emphasis role="bold">/afs</emphasis> root directory, given the
+       appropriate privileges. An AFS user who has the necessary privileges can access a file in any AFS cell, simply by specifying
+       the file's pathname. File sharing in AFS is not restricted by geographical distances or operating system differences.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ15">
+       <title>Login and Authentication</title>
+ 
+       <indexterm><primary>UNIX, differences with AFS</primary><secondary>login</secondary></indexterm>
+ 
+       <para>To become an authenticated AFS user, you need to provide a password to AFS.
+ 
+       <itemizedlist>
+         <listitem>
+           <para>On machines that use an AFS-modified login utility, logging in is a one-step process; your initial login
+           automatically authenticates you with AFS.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>On machines that do not use an AFS-modified login utility, you must perform two steps.
+ 
+           <orderedlist>
+             <listitem>
+               <para>Log in to your local machine.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>Issue the <emphasis role="bold">klog</emphasis> command with the <emphasis role="bold">-setpag</emphasis>
+               argument to authenticate with AFS and get your token.</para>
+             </listitem>
+           </orderedlist>
+ </para>
+         </listitem>
+       </itemizedlist>
+ </para>
+ 
+       <para>Your system administrator can tell you whether your machine uses an AFS-modified login utility or not. Then see the
+       login instructions in <link linkend="HDRWQ21">Logging in and Authenticating with AFS</link>.</para>
+ 
+       <para>AFS authentication passwords are stored in special AFS database, rather than in the local password file (<emphasis
+       role="bold">/etc/passwd</emphasis> or equivalent). If your machine uses an AFS-modified login utility, you can change your
+       password with a single command. If your machine does not use an AFS-modified login utility, you must issue separate commands
+       to change your AFS and local passwords. See <link linkend="HDRWQ36">Changing Your Password</link>. <indexterm><primary>UNIX, differences with AFS</primary><secondary>passwords</secondary></indexterm>
+       <indexterm><primary>local password file (/etc/passwd)</primary></indexterm> <indexterm><primary>passwd</primary><secondary>file</secondary></indexterm></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ16">
+       <title>File and Directory Protection</title>
+ 
+       <indexterm><primary>ACL</primary><secondary>compared to UNIX mode bits</secondary></indexterm>
+ 
+       <indexterm><primary>UNIX, differences with AFS</primary><secondary>file access/protection</secondary></indexterm>
+ 
+       <para>AFS does not rely on the mode bit protections of a standard UNIX system (though its protection system does interact with
+       these mode bits). Instead, AFS uses an access control list (ACL) to control access to each directory and its contents. The
+       following list summarizes the differences between the two methods:
+ 
+       <itemizedlist>
+         <listitem>
+           <para>UNIX mode bits specify three types of access permissions: <emphasis role="bold">r</emphasis> (<emphasis
+           role="bold">read</emphasis>), <emphasis role="bold">w</emphasis> (<emphasis role="bold">write</emphasis>), and <emphasis
+           role="bold">x</emphasis> (<emphasis role="bold">execute</emphasis>). An AFS ACL uses seven types of permissions: <emphasis
+           role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>), <emphasis role="bold">l</emphasis> (<emphasis
+           role="bold">lookup</emphasis>), <emphasis role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>), <emphasis
+           role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>), <emphasis role="bold">w</emphasis> (<emphasis
+           role="bold">write</emphasis>), <emphasis role="bold">k</emphasis> (<emphasis role="bold">lock</emphasis>), and <emphasis
+           role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>). For more information, see <link
+           linkend="HDRWQ46">The AFS ACL Permissions</link> and <link linkend="HDRWQ59">How AFS Uses the UNIX Mode
+           Bits</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The three sets of mode bits on each UNIX file or directory enable you to grant permissions to three users or groups
+           of users: the file or directory's owner, the group that owns the file or directory, and all other users. An ACL can
+           accommodate up to about 20 entries, each of which extends certain permissions to a user or group. Unlike standard UNIX, a
+           user can belong to an unlimited number of groups, and groups can be defined by both users and system administrators. See
+           <link linkend="HDRWQ60">Using Groups</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>UNIX mode bits are set individually on each file and directory. An ACL applies to all of the files in a directory.
+           While at first glance the AFS method possibly seems less precise, in actuality (given a proper directory structure) there
+           are no major disadvantages to directory-level protections and they are easier to establish and maintain.</para>
+         </listitem>
+       </itemizedlist>
+ </para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ17">
+       <title>Machine Outages</title>
+ 
+       <para>The kinds of failures you experience when a standard UNIX file system goes down are different than when one or more
+       individual AFS file server machines become unavailable. When a standard UNIX file system is inaccessible, the system simply
+       locks up and you can lose changes to any files with which you were working.</para>
+ 
+       <para>When an AFS file server machine becomes inaccessible, you cannot access the files on that machine. If a copy of the file
+       is available from another file server machine, however, you do not necessarily even notice the server outage. This is because
+       AFS gives your cell's system administrators the ability to store copies of popular programs on multiple file servers. The
+       Cache Manager chooses between the copies automatically; when one copy becomes unavailable, the Cache Manager simply chooses
+       another.</para>
+ 
+       <para>If there are no other copies of a file that is stored on an inaccessible server machine, you can usually continue to use
+       the copy stored in your client machine's local AFS cache. However, you cannot save changes to files stored on an inaccessible
+       file server machine until it is accessible again.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ18">
+       <title>Remote Commands</title>
+ 
+       <para><indexterm><primary>UNIX, differences with AFS</primary><secondary>commands</secondary></indexterm> <indexterm><primary>remote commands</primary></indexterm> <indexterm><primary>commands</primary><secondary>ftp</secondary></indexterm> <indexterm><primary>ftp command</primary></indexterm> <indexterm><primary>commands</primary><secondary>rcp</secondary></indexterm>
+       <indexterm><primary>rcp command</primary></indexterm> <indexterm><primary>commands</primary><secondary>rsh</secondary></indexterm> <indexterm><primary>rsh command</primary></indexterm> The UNIX <emphasis>remote commands</emphasis> enable you
+       to run programs on a remote machine without establishing a connection to it by using a program such as <emphasis
+       role="bold">telnet</emphasis>. Many of the remote commands (such as <emphasis role="bold">ftp</emphasis>, <emphasis
+       role="bold">rcp</emphasis>, and <emphasis role="bold">rsh</emphasis>) remain available in AFS, depending on how your
+       administrators have configured them. If the remote machine has a Cache Manager, your token is used there also and you are
+       authenticated while the remote command runs. If the remote machine does not run a Cache Manager, you receive the following
+       message:</para>
+ 
+       <programlisting>
+    Warning: unable to authenticate.
+ </programlisting>
+ 
+       <para>In this case, you are logged into the remote machine's UNIX file system, but you are not authenticated to AFS. You can
+       access the local files on the remote machine and the AFS directories that grant access to the <emphasis
+       role="bold">system:anyuser</emphasis> group, but you cannot access protected AFS directories.</para>
+     </sect2>
+ 
+     <sect2 id="Header_28">
+       <title>Differences in the Semantics of Standard UNIX Commands</title>
+ 
+       <para>This section summarizes differences in the functionality of some commonly issued UNIX commands.
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">chmod <indexterm><primary>chmod command</primary></indexterm> <indexterm><primary>commands</primary><secondary>chmod</secondary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can use this command to turn on
+             the setuid, setgid or sticky mode bits on AFS files. (For more information about this group, see <link
+             linkend="HDRWQ50">Using the System Groups on ACLs</link>.)</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">chown <indexterm><primary>chown command</primary></indexterm> <indexterm><primary>commands</primary><secondary>chown</secondary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can issue this command on AFS
+             files.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">chgrp <indexterm><primary>chgrp command</primary></indexterm> <indexterm><primary>commands</primary><secondary>chgrp</secondary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>Only members of the <emphasis role="bold">system:administrators</emphasis> group can issue this command on AFS
+             files and directories.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">groups <indexterm><primary>groups command</primary></indexterm> <indexterm><primary>commands</primary><secondary>groups</secondary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>If the user's AFS tokens are identified by a process authentication group (PAG), the output of this command
+             includes two large numbers. For a description of PAGs, see <link linkend="HDRWQ24">Authenticating with
+             AFS</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">inetd <indexterm><primary>inetd command</primary></indexterm> <indexterm><primary>commands</primary><secondary>inetd</secondary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>The AFS version of this daemon authenticates remote issuers of the AFS-modified <emphasis
+             role="bold">rcp</emphasis> and <emphasis role="bold">rsh</emphasis> commands with AFS.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">login utilities <indexterm><primary>login utility</primary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>AFS-modified login utilities both log you into the local UNIX file system and authenticate you with AFS.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">ln <indexterm><primary>ln command</primary></indexterm> <indexterm><primary>commands</primary><secondary>ln</secondary></indexterm> </emphasis></term>
+ 
+           <listitem>
+             <para>You cannot use this command to create a hard link between files that reside in different AFS directories. You must
+             add the <emphasis role="bold">-s</emphasis> option to create a symbolic link instead.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+ </para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ19">
+     <title>Using OpenAFS with NFS</title>
+ 
+     <para>Some cells use the Networking File System (NFS) in addition to AFS. If you work on an NFS client machine, your system
+     administrator can configure it to access the AFS filespace through a program called the <emphasis>NFS/AFS
+     Translator</emphasis><superscript>TM</superscript>. See <link linkend="HDRWQ80">Appendix A, Using the NFS/AFS
+     Translator</link>.</para>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/UserGuide/auusg005.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg005.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg005.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,729 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ20">
+   <title>Using OpenAFS</title>
+ 
+   <para>This chapter explains how to perform four basic AFS tasks: logging in and authenticating with AFS, ending an AFS session,
+   accessing the AFS filespace, and changing your password.</para>
+ 
+   <sect1 id="HDRWQ21">
+     <title>Logging in and Authenticating with AFS</title>
+ 
+     <para>To access the AFS filespace as an authenticated user, you must both log into an AFS client machine's local (UNIX) file
+     system and authenticate with AFS. When you log in, you establish your local system identity. When you authenticate, you prove
+     your identity to AFS and obtain a token, which your Cache Manager uses to prove your authenticated status to the AFS server
+     processes it contacts on your behalf. Users who are not authenticated (who do not have a token) have limited access to AFS
+     directories and files.</para>
+ 
+     <sect2 id="HDRWQ22">
+       <title>Logging In</title>
+ 
+       <indexterm><primary>logging in</primary></indexterm>
+ 
+       <indexterm><primary>login utility</primary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>login</secondary></indexterm>
+ 
+       <para>On machines that use an AFS-modified login utility, you log in and authenticate in one step. On machines that do not use
+       an AFS-modified login utility, you log in and authenticate in separate steps. To determine which type of login utility your
+       machine uses, you can check for AFS tokens after logging in, or ask your system administrator, who can also tell you about any
+       differences between your login procedure and the two methods described here.</para>
+     </sect2>
+ 
+     <sect2 id="Header_33">
+       <title>To Log In Using an AFS-modified Login Utility</title>
+ 
+       <para>Provide your username at the <computeroutput>login:</computeroutput> prompt that appears when you establish a new
+       connection to a machine. Then provide your password at the <computeroutput>Password:</computeroutput> prompt as shown in the
+       following example. (Your password does not echo visibly on the screen.)</para>
+ 
+       <programlisting>
+    login: <replaceable>username</replaceable>
+    Password: <replaceable>password</replaceable>
+ </programlisting>
+ 
+       <para>If you are not sure which type of login utility is running on your machine, it is best to issue the <emphasis
+       role="bold">tokens</emphasis> command to check if you are authenticated; for instructions, see <link linkend="HDRWQ30">To
+       Display Your Tokens</link>. If you do not have tokens, issue the <emphasis role="bold">klog</emphasis> command as described in
+       <link linkend="HDRWQ29">To Authenticate with AFS</link>.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ23">
+       <title>To Log In Using a Two-Step Login Procedure</title>
+ 
+       <para>If your machine does not use an AFS-modified login utility, you must perform a two-step procedure:
+ 
+       <orderedlist>
+         <listitem>
+           <para>Log in to your client machine's local file system by providing a user name and password at the <emphasis
+           role="bold">login</emphasis> program's prompts.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Issue the <emphasis role="bold">klog</emphasis> command to authenticate with AFS. Include the command's <emphasis
+           role="bold">-setpag</emphasis> argument to associate your token with a special identification number called a
+           <emphasis>PAG</emphasis> (for <emphasis>process authentication group</emphasis>). For a description of PAGs, see <link
+           linkend="HDRWQ25">Protecting Your Tokens with a PAG</link>. <programlisting>
+   
+    % <emphasis role="bold">klog -setpag</emphasis>
+    Password: <replaceable>your_AFS_password</replaceable>
+ </programlisting></para>
+         </listitem>
+       </orderedlist>
+ </para>
+ 
+       <note>
+         <para>If your machine uses a two-step login procedure, you can choose to use different passwords for logging in and
+         authenticating. It is simplest to use the same one for both, though. Talk with your system administrator.</para>
+       </note>
+     </sect2>
+ 
+     <sect2 id="HDRWQ24">
+       <title>Authenticating with AFS</title>
+ 
+       <para>To work most effectively in the AFS filespace, you must authenticate with AFS. When you do, your Cache Manager is given
+       a token as proof of your authenticated status. It uses your token when requesting services from AFS servers, which accept the
+       token as proof of your authenticated status. If you do not have a token, AFS servers consider you to be the <emphasis
+       role="bold">anonymous</emphasis> user and your access to AFS filespace is limited: you have only the ACL permissions granted
+       to the <emphasis role="bold">system:anyuser</emphasis> group. <indexterm><primary>authentication</primary><secondary>tokens as proof</secondary></indexterm> <indexterm><primary>tokens</primary><secondary>as proof of authentication</secondary></indexterm> <indexterm><primary>Cache Manager</primary><secondary>tokens, use of</secondary></indexterm></para>
+ 
+       <para>You can obtain new tokens (reauthenticate) at any time, even after using an AFS-modified login utility, which logs you
+       in and authenticates you in one step. Issue the <emphasis role="bold">klog</emphasis> command as described in <link
+       linkend="HDRWQ29">To Authenticate with AFS</link>.</para>
+ 
+       <sect3 id="HDRWQ25">
+         <title>Protecting Your Tokens with a PAG</title>
+ 
+         <para>To make your access to AFS as secure as possible, it is best to associate your tokens with a unique identification
+         number called a <emphasis>PAG</emphasis> (for <emphasis>process authentication group</emphasis>). <indexterm><primary>PAG</primary></indexterm>
+         <indexterm><primary>process authentication group (PAG)</primary></indexterm> <indexterm><primary>setpag argument to klog command</primary></indexterm> AFS-modified login utilities automatically create a PAG and associate the new
+         token with it. To create a PAG when you use the two-step login procedure, include the <emphasis role="bold">klog</emphasis>
+         command's <emphasis role="bold">-setpag</emphasis> flag. If you do not use this flag, your tokens are associated with your
+         UNIX UID number instead. This type of association has two potential drawbacks:
+ 
+         <itemizedlist>
+           <listitem>
+             <para>Anyone who can assume your local UNIX identity can use your tokens. The local superuser <emphasis
+             role="bold">root</emphasis> can always use the UNIX <emphasis role="bold">su</emphasis> command to assume your UNIX UID,
+             even without knowing your password.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>In some environments, certain programs cannot use your tokens even when it is appropriate for them to do so. For
+             example, printing commands such as <emphasis role="bold">lp</emphasis> or <emphasis role="bold">lpr</emphasis> possibly
+             cannot access the files you want to print, because they cannot use your tokens.</para>
+           </listitem>
+         </itemizedlist>
+ </para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ26">
+         <title>Obtaining Tokens For Foreign Cells</title>
+ 
+         <indexterm><primary>authentication</primary><secondary>in a foreign cell</secondary></indexterm>
+ 
+         <para>A token is valid only in one cell (the cell whose AFS authentication service issued it). The AFS server processes in
+         any other cell consider you to be the <emphasis role="bold">anonymous</emphasis> user unless you have an account in the cell
+         and authenticate with its AFS authentication service.</para>
+ 
+         <para>To obtain tokens in a foreign cell, use the <emphasis role="bold">-cell</emphasis> argument to the <emphasis
+         role="bold">klog</emphasis> command. You can have tokens for your home cell and one or more foreign cells at the same
+         time.</para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ27">
+         <title>The One-Token-Per-Cell Rule</title>
+ 
+         <para>You can have only one token per cell for each PAG you have obtained on a client machine. If you already have a token
+         for a particular cell and issue the <emphasis role="bold">klog</emphasis> command, the new token overwrites the existing
+         one. Getting a new token is useful if your current token is almost expired but you want to continue accessing AFS files. For
+         a discussion of token expiration, see <link linkend="HDRWQ28">Token Lifetime</link>.</para>
+ 
+         <para>To obtain a second token for the same cell, you must either login on a different machine or establish another separate
+         connection to the machine where you already have a token (by using the <emphasis role="bold">telnet</emphasis> utility, for
+         example). You get a new PAG for each separate machine or connection, and can use the associated tokens only while working on
+         that machine or connection.</para>
+       </sect3>
+ 
+       <sect3 id="Header_39">
+         <title>Obtaining Tokens as Another User</title>
+ 
+         <indexterm><primary>authentication</primary><secondary>as another user</secondary></indexterm>
+ 
+         <para>You can authenticate as another username if you know the associated password. (It is, of course, unethical to use
+         someone else's tokens without permission.) If you use the <emphasis role="bold">klog</emphasis> command to authenticate as
+         another AFS username, you retain your own local (UNIX) identity, but the AFS server processes recognize you as the other
+         user. The new token replaces any token you already have for the relevant cell (for the reason described in <link
+         linkend="HDRWQ27">The One-Token-Per-Cell Rule</link>).</para>
+       </sect3>
+ 
+       <sect3 id="HDRWQ28">
+         <title>Token Lifetime</title>
+ 
+         <indexterm><primary>tokens</primary><secondary>lifetime</secondary></indexterm>
+ 
+         <indexterm><primary>lifetime of tokens</primary></indexterm>
+ 
+         <para>Tokens have a limited lifetime. To determine when your tokens expire, issue the <emphasis
+         role="bold">tokens</emphasis> command as described in <link linkend="HDRWQ30">To Display Your Tokens</link>. If you are ever
+         unable to access AFS in a way that you normally can, issuing the <emphasis role="bold">tokens</emphasis> command tells you
+         whether an expired token is a possible reason.</para>
+ 
+         <para>Your cell's administrators set the default lifetime of your token. The AFS authentication service never grants a token
+         lifetime longer than the default, but you can request a token with a shorter lifetime. See the <emphasis
+         role="bold">klog</emphasis> reference page in the <emphasis>OpenAFS Administration Reference</emphasis> to learn how to use
+         its <emphasis role="bold">-lifetime</emphasis> argument for this purpose.</para>
+       </sect3>
+ 
+       <sect3 id="Header_41">
+         <title>Authenticating for DFS Access</title>
+ 
+         <indexterm><primary>commands</primary><secondary>dlog</secondary></indexterm>
+ 
+         <indexterm><primary>commands</primary><secondary>dpass</secondary></indexterm>
+ 
+         <indexterm><primary>dlog command</primary></indexterm>
+ 
+         <indexterm><primary>dpass command</primary></indexterm>
+ 
+         <indexterm><primary>authentication</primary><secondary>with DCE for DFS access</secondary></indexterm>
+ 
+         <para>If your machine is configured to access a DCE cell's DFS filespace by means of the AFS/DFS Migration Toolkit, you can
+         use the <emphasis role="bold">dlog</emphasis> command to authenticate with DCE. The <emphasis role="bold">dlog</emphasis>
+         command has no effect on your ability to access AFS filespace.</para>
+ 
+         <para>If your system administrator has converted your AFS account to a DCE account and you are not sure of your DCE
+         password, use the <emphasis role="bold">dpass</emphasis> command to display it. You must be authenticated as the AFS user
+         whose AFS account was converted to a DCE account, and be able to provide the correct AFS password. Like the <emphasis
+         role="bold">dlog</emphasis> command, the <emphasis role="bold">dpass</emphasis> command has no functionality with respect to
+         AFS.</para>
+ 
+         <para>For more information on using the <emphasis role="bold">dlog</emphasis> and <emphasis role="bold">dpass</emphasis>
+         commands, see your system administrator.</para>
+       </sect3>
+     </sect2>
+ 
+     <sect2 id="HDRWQ29">
+       <title>To Authenticate with AFS</title>
+ 
+       <indexterm><primary>klog command</primary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>klog</secondary></indexterm>
+ 
+       <indexterm><primary>tokens</primary><secondary>getting</secondary></indexterm>
+ 
+       <para>If your machine is not using an AFS-modified login utility, you must authenticate after login by issuing the <emphasis
+       role="bold">klog</emphasis> command. You can also issue this command at any time to obtain a token with a later expiration
+       date than your current token.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">klog</emphasis> [<emphasis role="bold">-setpag</emphasis>] [<emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell name</replaceable>&gt;]
+    Password: <replaceable>your_AFS_password</replaceable>
+ </programlisting>
+ 
+       <para>where
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">-setpag</emphasis></term>
+ 
+           <listitem>
+             <para>Associates the resulting tokens with a PAG (see <link linkend="HDRWQ25">Protecting Your Tokens with a PAG</link>).
+             Include this flag the first time you obtain a token for a particular cell during a login session or connection. Do not
+             include it when refreshing the token for a cell during the same session.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-cell</emphasis></term>
+ 
+           <listitem>
+             <para>Names the cell for which to obtain the token. You must have an account in the cell.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+ </para>
+ 
+       <para>Your password does not echo visibly appear on the screen. When the command shell prompt returns, you are an
+       authenticated AFS user. You can use the <emphasis role="bold">tokens</emphasis> command to verify that you are authenticated,
+       as described in the following section.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ30">
+       <title>To Display Your Tokens</title>
+ 
+       <indexterm><primary>checking</primary><secondary>tokens</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>tokens</secondary></indexterm>
+ 
+       <indexterm><primary>tokens</primary><secondary>command</secondary></indexterm>
+ 
+       <indexterm><primary>tokens</primary><secondary>displaying</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>tokens</secondary></indexterm>
+ 
+       <para>Use the <emphasis role="bold">tokens</emphasis> command to display your tokens.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+ </programlisting>
+ 
+       <para>The following output indicates that you have no tokens:</para>
+ 
+       <programlisting>
+    Tokens held by the Cache Manager:
+        --End of list--
+ </programlisting>
+ 
+       <para>If you have one or more tokens, the output looks something like the following example, in which the tokens for AFS UID
+       1022 in the <emphasis role="bold">abc.com</emphasis> cell expire on August 3 at 2:35 p.m. The tokens for AFS UID 9554 in the
+       <emphasis role="bold">stateu.edu</emphasis> cell expire on August 4 at 1:02 a.m.</para>
+ 
+       <programlisting>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 1022) tokens for afs@abc.com [Expires Aug   3 14:35]
+    User's (AFS ID 9554) tokens for afs@stateu.edu [Expires Aug   4  1:02] 
+       --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_44">
+       <title>Example: Authenticating in the Local Cell</title>
+ 
+       <indexterm><primary>examples</primary><secondary>authenticating</secondary></indexterm>
+ 
+       <para>Suppose that user <emphasis role="bold">terry</emphasis> cannot save a file. He uses the <emphasis
+       role="bold">tokens</emphasis> command and finds that his tokens have expired. He reauthenticates in his local cell under his
+       current identity by issuing the following command:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">klog</emphasis>
+    Password:  <replaceable>terry's_password</replaceable>
+ </programlisting>
+ 
+       <para>The he issues the <emphasis role="bold">tokens</emphasis> command to make sure he is authenticated.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 4562) tokens for afs@abc.com [Expires Jun 22 14:35]
+       --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_45">
+       <title>Example: Authenticating as a Another User</title>
+ 
+       <indexterm><primary>examples</primary><secondary>authenticating as another user</secondary></indexterm>
+ 
+       <para>Now <emphasis role="bold">terry</emphasis> authenticates in his local cell as another user, <emphasis
+       role="bold">pat</emphasis>. The new token replaces <emphasis role="bold">terry</emphasis>'s existing token, because the Cache
+       Manager can store only one token per cell per login session on a machine.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">klog pat</emphasis>
+    Password: <replaceable>pat's_password</replaceable>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 4278) tokens for afs@abc.com [Expires Jun 23 9:46]
+       --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_46">
+       <title>Example: Authenticating in a Foreign Cell</title>
+ 
+       <indexterm><primary>examples</primary><secondary>authenticating in a foreign cell</secondary></indexterm>
+ 
+       <para>Now <emphasis role="bold">terry</emphasis> authenticates in the <emphasis role="bold">stateu.edu</emphasis> cell where
+       his account is called <emphasis role="bold">ts09</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">klog  ts09 -cell stateu.edu</emphasis>
+    Password: <replaceable>ts09's_password</replaceable>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 4562) tokens for afs@abc.com [Expires Jun 22 14:35]
+    User's (AFS ID 8346) tokens for afs@stateu.edu [Expires Jun 23  1:02]
+        --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ31">
+       <title>Limits on Failed Authentication Attempts</title>
+ 
+       <indexterm><primary>authentication</primary><secondary>limits on consecutive failed attempts</secondary></indexterm>
+ 
+       <para>Your system administrator can choose to limit the number of times that you fail to provide the correct password when
+       authenticating with AFS (using either an AFS-modified login utility or the <emphasis role="bold">klog</emphasis> command). If
+       you exceed the limit, the AFS authentication service refuses further authentication attempts for a period of time set by your
+       system administrator. The purpose of this limit is to prevent unauthorized users from breaking into your account by trying a
+       series of passwords.</para>
+ 
+       <para>To determine if your user account is subject to this limit, ask your system administrator or issue the <emphasis
+       role="bold">kas examine</emphasis> command as described in <link linkend="HDRWQ32">To Display Your Failed Authentication Limit
+       and Lockout Time</link>.</para>
+ 
+       <para>The following message indicates that you have exceeded the limit on failed authentication attempts.</para>
+ 
+       <programlisting>
+    Unable to authenticate to AFS because ID is locked - see your system admin
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ32">
+       <title>To Display Your Failed Authentication Limit and Lockout Time</title>
+ 
+       <indexterm><primary>kas commands</primary><secondary>examine</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>kas examine</secondary></indexterm>
+ 
+       <indexterm><primary>limits on authentication attempts</primary></indexterm>
+ 
+       <indexterm><primary>users</primary><secondary>account lockout time</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">kas examine</emphasis> command to determine if there is a limit on the number of
+       unsuccessful authentication attempts for your user account and any associated lockout time. You can examine only your own
+       account. The fourth line of the output reports the maximum number of times you can provide an incorrect password before being
+       locked out of your account. The <computeroutput>lock time</computeroutput> field on the next line reports how long the AFS
+       authentication service refuses authentication attempts after the limit is exceeded.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">kas examine</emphasis> <replaceable>your_username</replaceable>
+    Password for <replaceable>your_username</replaceable>: <replaceable>your_AFS_password</replaceable>
+ </programlisting>
+ 
+       <para>The following example displays the output for the user <emphasis role="bold">pat</emphasis>, who is allowed nine failed
+       authentication attempts. The lockout time is 25.5 minutes.</para>
+ 
+       <programlisting>
+    User data for pat
+     key (15) cksum is 3414844392,  last cpw: Thu Oct 21 16:05:44 1999
+     password will expire:  Fri Nov 26 20:44:36 1999
+     9 consecutive unsuccessful authentications are permitted.
+     The lock time for this user is 25.5 minutes.
+     User is not locked.
+     entry never expires. Max ticket lifetime 100.00 hours.
+     last mod on Wed Aug 18 08:22:29 1999 by admin
+     permit password reuse
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ33">
+     <title>Exiting an AFS Session</title>
+ 
+     <indexterm><primary>tokens</primary><secondary>destroying</secondary></indexterm>
+ 
+     <indexterm><primary>unauthenticating</primary></indexterm>
+ 
+     <indexterm><primary>exiting an AFS session</primary></indexterm>
+ 
+     <indexterm><primary>logging out</primary></indexterm>
+ 
+     <indexterm><primary>quitting an AFS session</primary></indexterm>
+ 
+     <para>Because logging in and authenticating with AFS are distinct operations, you must both logout and unauthenticate (issue the
+     <emphasis role="bold">unlog</emphasis> command to discard your tokens) when exiting an AFS session. Simply logging out does not
+     necessarily destroy your tokens.</para>
+ 
+     <para>You can use the <emphasis role="bold">unlog</emphasis> command any time you want to unauthenticate, not just when logging
+     out. For instance, it is a good practice to unauthenticate before leaving your machine unattended, to prevent other users from
+     using your tokens during your absence. When you return to your machine, issue the <emphasis role="bold">klog</emphasis> command
+     to reauthenticate, as described in <link linkend="HDRWQ29">To Authenticate with AFS</link>.</para>
+ 
+     <para>Do not issue the <emphasis role="bold">unlog</emphasis> command when you are running jobs that take a long time to
+     complete, even if you are logging out. Such processes must have a token during the entire time they need authenticated access to
+     AFS.</para>
+ 
+     <para>If you have tokens from multiple cells and want to discard only some of them, include the <emphasis
+     role="bold">unlog</emphasis> command's <emphasis role="bold">-cell</emphasis> argument.</para>
+ 
+     <sect2 id="Header_50">
+       <title>To Discard Tokens</title>
+ 
+       <indexterm><primary>commands</primary><secondary>unlog</secondary></indexterm>
+ 
+       <indexterm><primary>unlog command</primary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">unlog</emphasis> command to discard your tokens:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">unlog -cell</emphasis>  &lt;<replaceable>cell name</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>Omit the <emphasis role="bold">-cell</emphasis> argument to discard all of your tokens, or use it to name each cell for
+       which to discard tokens. It is best to provide the full name of each cell (such as <emphasis role="bold">stateu.edu</emphasis>
+       or <emphasis role="bold">abc.com</emphasis>).</para>
+ 
+       <para>You can issue the <emphasis role="bold">tokens</emphasis> command to verify that your tokens were destroyed, as in the
+       following example.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+       --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_51">
+       <title>Example: Unauthenticating from a Specific Cell</title>
+ 
+       <indexterm><primary>examples</primary><secondary>unauthenticating from selected cells</secondary></indexterm>
+ 
+       <para>In the following example, a user has tokens in both the <emphasis role="bold">accounting</emphasis> and <emphasis
+       role="bold">marketing</emphasis> cells at her company. She discards the token for the <emphasis
+       role="bold">acctg.abc.com</emphasis> cell but keeps the token for the <emphasis role="bold">mktg.abc.com</emphasis>
+       cell.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 35) tokens for afs@acctg.abc.com [Expires Nov 10 22:30]
+    User's (AFS ID 674) tokens for afs@mktg.abc.com [Expires Nov 10 18:44]
+       --End of list--
+    % <emphasis role="bold">unlog -cell acctg.abc.com</emphasis>
+    % <emphasis role="bold">tokens</emphasis>
+    Tokens held by the Cache Manager:
+    User's (AFS ID 674) tokens for afs@mktg.abc.com [Expires Nov 10 18:44]
+       --End of list--
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_52">
+       <title>To Log Out</title>
+ 
+       <para>After you have unauthenticated, log out by issuing the command appropriate for your machine type, which is possibly one
+       of the following.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">logout</emphasis>
+ </programlisting>
+ 
+       <para>or</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">exit</emphasis>
+ </programlisting>
+ 
+       <para>or</para>
+ 
+       <programlisting>
+    % &lt;<emphasis role="bold">Ctrl-d</emphasis>&gt;
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ34">
+     <title>Accessing the AFS Filespace</title>
+ 
+     <indexterm><primary>files</primary><secondary>accessing AFS</secondary></indexterm>
+ 
+     <indexterm><primary>directories</primary><secondary>accessing AFS</secondary></indexterm>
+ 
+     <para>While you are logged in and authenticated, you can access files in AFS just as you do in the UNIX file system. The only
+     difference is that you can access potentially many more files. Just as in the UNIX file system, you can only access those files
+     for which you have permission. AFS uses access control lists (ACLs) to control access, as described in <link
+     linkend="HDRWQ44">Protecting Your Directories and Files</link>.</para>
+ 
+     <sect2 id="Header_54">
+       <title>AFS Pathnames</title>
+ 
+       <indexterm><primary>pathnames</primary></indexterm>
+ 
+       <para>AFS pathnames look very similar to UNIX file system names. The main difference is that every AFS pathname begins with
+       the AFS root directory, which is called <emphasis role="bold">/afs</emphasis> by convention. Having <emphasis
+       role="bold">/afs</emphasis> at the top of every AFS cell's filespace links together their filespaces into a global filespace.
+       <indexterm><primary>AFS</primary><secondary>accessing filespace</secondary></indexterm> <indexterm><primary>access to AFS filespace</primary><secondary>format of pathnames</secondary></indexterm> <indexterm><primary>afs (/afs) directory</primary><secondary>as root of AFS filespace</secondary></indexterm> <indexterm><primary>format of AFS pathnames</primary></indexterm></para>
+ 
+       <para><emphasis role="bold">Note for Windows users:</emphasis> Windows uses a backslash (&nbsp;<emphasis
+       role="bold">\</emphasis>&nbsp;) rather than a forward slash (&nbsp;<emphasis role="bold">/</emphasis>&nbsp;) to separate the
+       elements in a pathname. Otherwise, your access to AFS filespace is much the same as for users working on UNIX machines.</para>
+ 
+       <para>The second element in AFS pathnames is generally a cell's name. For example, the ABC Corporation cell is called
+       <emphasis role="bold">abc.com</emphasis> and the pathname of every file in its filespace begins with the string <emphasis
+       role="bold">/afs/abc.com</emphasis>. Some cells also create a directory at the second level with a shortened name (such as
+       <emphasis role="bold">abc</emphasis> for <emphasis role="bold">abc.com</emphasis> or <emphasis role="bold">stateu</emphasis>
+       for <emphasis role="bold">stateu.edu</emphasis>), to reduce the amount of typing necessary. Your system administrator can tell
+       you if your cell's filespace includes shortened names like this. The rest of the pathname depends on how the cell's
+       administrators organized its filespace.</para>
+ 
+       <para>To access directories and files in AFS you must both specify the correct pathname and have the required permissions on
+       the ACL that protects the directory and the files in it.</para>
+     </sect2>
+ 
+     <sect2 id="Header_55">
+       <title>Example: Displaying the Contents of Another User's Directory</title>
+ 
+       <para>The user <emphasis role="bold">terry</emphasis> wants to look for a file belonging to another user, <emphasis
+       role="bold">pat</emphasis>. He issues the <emphasis role="bold">ls</emphasis> command on the appropriate pathname.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">ls /afs/abc.com/usr/pat/public</emphasis>
+    doc/                    directions/
+    guide/                  jokes/
+    library/
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ35">
+       <title>Accessing Foreign Cells</title>
+ 
+       <indexterm><primary>foreign cells</primary><secondary>accessing</secondary></indexterm>
+ 
+       <indexterm><primary>system:anyuser group</primary><secondary>controlling access by foreign users</secondary></indexterm>
+ 
+       <para>You can access files not only in your own cell, but in any AFS cell that you can reach via the network, regardless of
+       geographical location. There are two additional requirements:
+ 
+       <itemizedlist>
+         <listitem>
+           <para>Your Cache Manager's list of foreign cells must include the cell you want to access. Only the local superuser
+           <emphasis role="bold">root</emphasis> can edit the list of cells, but anyone can display it. See <link
+           linkend="HDRWQ42">Determining Access to Foreign Cells</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The ACL on the directory that houses the file, and on every parent directory in the pathname, must grant you the
+           necessary permissions. The simplest way for the directory's owner to extend permission to foreign users is to put an entry
+           for the <emphasis role="bold">system:anyuser</emphasis> group on the ACL.</para>
+ 
+           <para>The alternative is for the foreign cell's administrator to create an account for you, essentially making you a local
+           user in the cell. The directory's owner creates an ACL entry for you as for any other local user. To authenticate in the
+           foreign cell, issue the <emphasis role="bold">klog</emphasis> command with the <emphasis role="bold">-cell</emphasis>
+           argument.</para>
+         </listitem>
+       </itemizedlist>
+ </para>
+ 
+       <para>For further discussion of directory and file protection, see <link linkend="HDRWQ44">Protecting Your Directories and
+       Files</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ36">
+     <title>Changing Your Password</title>
+ 
+     <para>In cells that use an AFS-modified login utility, the password is the same for both logging in and authenticating with AFS.
+     In this case, you use a single command, <emphasis role="bold">kpasswd</emphasis>, to change the password.</para>
+ 
+     <para>If your machine does not use an AFS-modified login utility, there are separate passwords for logging into the local file
+     system and authenticating with AFS. (The two passwords can be the same or different, at your discretion.) In this case, use the
+     <emphasis role="bold">kpasswd</emphasis> command to change your AFS password and the UNIX <emphasis
+     role="bold">passwd</emphasis> command to change your UNIX password.</para>
+ 
+     <para>Your system administrator can improve cell security by configuring several features that guide your choice of password.
+     Keep them in mind when you issue the <emphasis role="bold">kpasswd</emphasis> command:
+ 
+     <itemizedlist>
+       <listitem>
+         <para>Limiting the amount of time your password is valid. This improves your cell's security by limiting the amount of time
+         an unauthorized user has to try to guess your password. Your system administrator needs to tell you when your password is
+         due to expire so that you can change it in time. The administrator can configure the AFS-modified login utility to report
+         this information automatically each time you log in. You can also use the <emphasis role="bold">kas examine</emphasis>
+         command to display the password expiration date, as instructed in <link linkend="HDRWQ37">To Display Password Expiration
+         Date and Reuse Policy</link>.</para>
+ 
+         <para>You can change your password prior to the expiration date, but your system administrator can choose to set a minimum
+         time between password changes. The following message indicates that the minimum time has not yet passed.</para>
+ 
+         <programlisting>
+    kpasswd:  password was not changed because you changed it too 
+    recently; see your system administrator
+ </programlisting>
+       </listitem>
+ 
+       <listitem>
+         <para>Enforcing password quality standards, such as a minimum length or inclusion of nonalphabetic characters. The
+         administrator needs to tell you about such requirements so that you do not waste time picking unacceptable passwords.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Rejecting a password that is too similar to the last 20 passwords you used. You can use the <emphasis role="bold">kas
+         examine</emphasis> command to check whether this policy applies to you, as instructed in <link linkend="HDRWQ37">To Display
+         Password Expiration Date and Reuse Policy</link>. The following message indicates that the password you have chosen is too
+         similar to a previous password. <programlisting>
+    kpasswd:  Password was not changed because it seems like a reused password
+ </programlisting></para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <sect2 id="HDRWQ37">
+       <title>To Display Password Expiration Date and Reuse Policy</title>
+ 
+       <indexterm><primary>kas commands</primary><secondary>examine</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>kas examine</secondary></indexterm>
+ 
+       <indexterm><primary>password</primary><secondary>expiration date, displaying</secondary></indexterm>
+ 
+       <indexterm><primary>password</primary><secondary>reuse policy, displaying</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>password expiration date</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>password reuse policy</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">kas examine</emphasis> command to display your password expiration date and reuse
+       policy. You can examine only your own account. The third line of the output reports your password's expiration date. The last
+       line reports the password reuse policy that applies to you.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">kas examine</emphasis> <replaceable>your_username</replaceable>
+    Password for <replaceable>your_username</replaceable>: <replaceable>your_AFS_password</replaceable>
+ </programlisting>
+ 
+       <para>The following example displays the output for the user <emphasis role="bold">pat</emphasis>.</para>
+ 
+       <programlisting>
+    User data for pat
+     key (15) cksum is 3414844392,  last cpw: Thu Oct 21 16:05:44 1999
+     password will expire:  Fri Nov 26 20:44:36 1999
+     9 consecutive unsuccessful authentications are permitted.
+     The lock time for this user is 25.5 minutes.
+     User is not locked.
+     entry never expires. Max ticket lifetime 100.00 hours.
+     last mod on Wed Aug 18 08:22:29 1999 by admin
+     don't permit password reuse
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_59">
+       <title>To Change Your AFS Password</title>
+ 
+       <indexterm><primary>password</primary><secondary>changing AFS</secondary></indexterm>
+ 
+       <indexterm><primary>changing</primary><secondary>AFS password</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>kpasswd</secondary></indexterm>
+ 
+       <indexterm><primary>kpasswd command</primary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">kpasswd</emphasis> command, which prompts you to provide your old and new passwords and
+       to confirm the new password. The passwords do not echo visibly on the screen.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">kpasswd</emphasis>
+    Old password: <replaceable>current_password</replaceable>
+    New password (RETURN to abort): <replaceable>new_password</replaceable>
+    Retype new password: <replaceable>new_password</replaceable>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_60">
+       <title>To Change Your UNIX Password</title>
+ 
+       <para><indexterm><primary>commands</primary><secondary>passwd</secondary></indexterm> <indexterm><primary>passwd</primary><secondary>command</secondary></indexterm> <indexterm><primary>password</primary><secondary>changing UNIX</secondary></indexterm> <indexterm><primary>changing</primary><secondary>UNIX password</secondary></indexterm> Issue the UNIX <emphasis
+       role="bold">passwd</emphasis> command, which prompts you to provide your old and new passwords and to confirm the new
+       password. The passwords do not echo visibly on the screen. On many machines, the <emphasis role="bold">passwd</emphasis>
+       resides in the <emphasis role="bold">/bin</emphasis> directory, and you possibly need to type the complete pathname.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">passwd</emphasis>
+    Changing password for <replaceable>username</replaceable>.
+    Old password: <replaceable>current_password</replaceable>
+    New password: <replaceable>new_password</replaceable>
+    Retype new passwd: <replaceable>new_password</replaceable>
+ </programlisting>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/UserGuide/auusg006.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg006.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg006.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,515 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ38">
+   <title>Displaying Information about OpenAFS</title>
+ 
+   <para>This chapter explains how to display information that can help you use AFS more effectively. It includes the following
+   sections.
+ 
+   <simplelist>
+     <member><link linkend="HDRWQ39">Displaying Volume Quota</link></member>
+ 
+     <member><link linkend="HDRWQ40">Locating Files and Directories</link>.</member>
+ 
+     <member><link linkend="HDRWQ41">Checking the Status of Server Machines</link></member>
+ 
+     <member><link linkend="HDRWQ42">Determining Access to Foreign Cells</link></member>
+ 
+     <member><link linkend="HDRWQ43">Displaying Server Preference Ranks</link></member>
+   </simplelist>
+ </para>
+ 
+   <sect1 id="HDRWQ39">
+     <title>Displaying Volume Quota</title>
+ 
+     <para>By convention, the files in your home directory are stored together in a single volume. (For information about volumes,
+     see <link linkend="HDRWQ6">Volumes and Mount Points</link>.) To allocate your cell's available disk space as fairly as possible,
+     your system administrators impose a size limit, or <emphasis>quota</emphasis>, on each volume. You cannot store more data in a
+     volume than its quota allows. If a volume is close to its quota, you sometimes cannot save changes you have made to files stored
+     in the volume.</para>
+ 
+     <para>The amount of space available on the partition that houses the volume also limits how large the volume can grow. If the
+     disk partition is full, you can become unable to save changes to a file even though the volume is not close to its quota.
+     <indexterm><primary>volume quota</primary></indexterm> <indexterm><primary>disk partition</primary><secondary>consequences when full</secondary></indexterm></para>
+ 
+     <para>Check the quota on your home volume periodically to make sure you have adequate space. Also, if you encounter problems
+     saving a file, check the quota of the volume in which the file is stored. Use the following commands to display volume
+     quota.
+ 
+     <itemizedlist>
+       <listitem>
+         <para>The <emphasis role="bold">fs quota</emphasis> command lists the percentage of the volume quota used.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>Both the <emphasis role="bold">fs listquota</emphasis> and <emphasis role="bold">fs examine</emphasis> commands list
+         the volume name, its maximum size (quota), and its current size. They also report the following additional
+         information.
+ 
+         <itemizedlist>
+           <listitem>
+             <para>The <emphasis role="bold">fs listquota</emphasis> command lists the percentage used of both the volume and the
+             partition.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The <emphasis role="bold">fs examine</emphasis> command lists the partition's size, the amount of space currently
+             used, and any messages associated with the volume.</para>
+           </listitem>
+         </itemizedlist>
+ </para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <sect2 id="Header_63">
+       <title>To Display Percentage of Quota Used</title>
+ 
+       <indexterm><primary>fs commands</primary><secondary>quota</secondary></indexterm>
+ 
+       <indexterm><primary>volume quota</primary><secondary>displaying percentage used</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>fs quota</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>percentage of volume quota used</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs quota</emphasis> command to display the percentage of the quota currently used for
+       the volume that contains a specified directory or file.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs quota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;<superscript>+</superscript>]
+ </programlisting>
+ 
+       <para>where <replaceable>dir/file path</replaceable> specifies the pathname of a file or directory in each volume for which to
+       display quota information. If you do not provide a pathname, the output reports quota information for the volume that contains
+       the current working directory.</para>
+     </sect2>
+ 
+     <sect2 id="Header_64">
+       <title>Example: Displaying Percentage of Quota Used</title>
+ 
+       <para><indexterm><primary>examples</primary><secondary>displaying volume quota percentage used</secondary></indexterm> The following example displays the percentage of quota used for the volumes that contain two user
+       home directories in the ABC Corporation cell.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">cd /afs/abc.com/usr</emphasis>
+    % <emphasis role="bold">fs quota terry pat</emphasis>
+    34% of quota used.
+    85% of quota used.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_65">
+       <title>To Display Quota and Other Information about a Volume</title>
+ 
+       <indexterm><primary>fs commands</primary><secondary>listquota</secondary></indexterm>
+ 
+       <indexterm><primary>volume quota</primary><secondary>displaying with other information</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>fs listquota</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>volume quota with other information</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>disk partition percentage space used</secondary></indexterm>
+ 
+       <indexterm><primary>disk partition</primary><secondary>displaying percentage of space used</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs listquota</emphasis> command to display the following information:
+ 
+       <itemizedlist>
+         <listitem>
+           <para>The name of the volume that houses each specified file or directory</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The quota, expressed as a number of kilobytes (<computeroutput>1024</computeroutput> indicates one megabyte)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The current size of the volume (the number of kilobytes of currently used)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The percentage of the quota used</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The percentage of space used on the disk partition housing the volume</para>
+         </listitem>
+       </itemizedlist>
+ </para>
+ 
+       <para>The command's syntax is as follows.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listquota</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;<superscript>+</superscript>]
+ </programlisting>
+ 
+       <para>where <replaceable>dir/file path</replaceable> specifies the pathname of a file or directory in each volume for which to
+       display quota information. If you do not provide a pathname, the output reports quota information for the volume that contains
+       the current working directory.</para>
+     </sect2>
+ 
+     <sect2 id="Header_66">
+       <title>Example: Display Quota and Other Information about a Volume</title>
+ 
+       <indexterm><primary>examples</primary><secondary>displaying volume quota and other information</secondary></indexterm>
+ 
+       <para>The following example displays quota information about the volume that houses the home directory of user <emphasis
+       role="bold">terry</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listquota ~terry</emphasis>
+    Volume Name     Quota    Used    % Used   Partition 
+    user.terry      10000    3400       34%         86% 
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_67">
+       <title>To Display Quota and Other Information about a Volume and Partition</title>
+ 
+       <indexterm><primary>fs commands</primary><secondary>examine</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>fs examine</secondary></indexterm>
+ 
+       <indexterm><primary>volume quota</primary><secondary>displaying with other information</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>volume quota with other information</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>disk partition space available and total size</secondary></indexterm>
+ 
+       <indexterm><primary>disk partition</primary><secondary>displaying space available and total size</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs examine</emphasis> command to display the following information about a volume and
+       the partition it resides on:
+ 
+       <itemizedlist>
+         <listitem>
+           <para>The volume's ID number (abbreviated in the output as <computeroutput>vid</computeroutput>)</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The volume name</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The volume's quota and current size, in kilobytes</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The number of kilobyte blocks available on the disk partition housing the volume and the total size of that
+           partition</para>
+         </listitem>
+ 
+         <listitem>
+           <para>An <emphasis>off-line message</emphasis> associated with the volume, if any, as set by a system administrator</para>
+         </listitem>
+       </itemizedlist>
+ </para>
+ 
+       <para>The command's syntax is as follows.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs examine</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;<superscript>+</superscript>]
+ </programlisting>
+ 
+       <para>where <replaceable>dir/file path</replaceable> specifies the pathname of a file or directory in each volume for which to
+       display quota information. If you do not provide a pathname, the output reports quota information for the volume that contains
+       the current working directory.</para>
+     </sect2>
+ 
+     <sect2 id="Header_68">
+       <title>Example: Displaying Quota and Other Information about a Volume and Partition</title>
+ 
+       <indexterm><primary>examples</primary><secondary>displaying volume information</secondary></indexterm>
+ 
+       <para>The following example displays quota and other information about the volume that houses the current working
+       directory.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs examine</emphasis>
+    Volume status for vid = 536871122 named user.terry
+    Current disk quota is 10000
+    Current blocks used are 5745
+    The partition has 1593 blocks available out of 99162
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ40">
+     <title>Locating Files and Directories</title>
+ 
+     <indexterm><primary>files</primary><secondary>displaying location</secondary></indexterm>
+ 
+     <indexterm><primary>directories</primary><secondary>displaying location</secondary></indexterm>
+ 
+     <para>Normally, you do not need to know which file server machine stores the volume containing a file or directory. Given the
+     pathname to a file, the Cache Manager on your client machine automatically accesses the appropriate server machine.</para>
+ 
+     <para>If you become unable to access a file, however, it can be useful to know which file server machine houses it. You can then
+     check whether the File Server process or machine is functioning correctly, as described in <link linkend="HDRWQ41">Checking the
+     Status of Server Machines</link>. Or, if your system administrators schedule downtime for a machine, you can learn whether the
+     outage is likely to prevent you from accessing certain files.</para>
+ 
+     <sect2 id="Header_70">
+       <title>To Display a File or Directory's Location</title>
+ 
+       <indexterm><primary>fs commands</primary><secondary>whereis</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>fs whereis</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>directory/file location</secondary></indexterm>
+ 
+       <indexterm><primary>displaying</primary><secondary>file or directory location</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs whereis</emphasis> command to display the file server machine on which a file or
+       directory is stored.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs whereis</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;<superscript>+</superscript>]
+ </programlisting>
+ 
+       <para>where <replaceable>dir/file path</replaceable> specifies the pathname of each file or directory for which you want
+       location information. If you do not provide a pathname, the output reports the machine housing the volume that contains the
+       current working directory.</para>
+ 
+       <para>If the output mentions more than one machine, there is a copy of the volume at each site (the volume is
+       <emphasis>replicated</emphasis>). Your system administrators can choose to replicate volumes that contain information many
+       people need to use, both for load balancing reasons and to make the information available even if there is an outage on one
+       machine that houses the volume.</para>
+     </sect2>
+ 
+     <sect2 id="Header_71">
+       <title>Example: Displaying Directory Location</title>
+ 
+       <indexterm><primary>examples</primary><secondary>locating multiple files</secondary></indexterm>
+ 
+       <para>The following example displays the names of the server machines that house the home volumes for users <emphasis
+       role="bold">terry</emphasis> and <emphasis role="bold">pat</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">cd /afs/abc.com/usr</emphasis>
+    % <emphasis role="bold">fs whereis terry pat</emphasis>
+    File /afs/abc.com/usr/terry is on host fs2.abc.com
+    File /afs/abc.com/usr/pat is on host fs3.abc.com
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ41">
+     <title>Checking the Status of Server Machines</title>
+ 
+     <indexterm><primary>file server machines</primary><secondary>checking status</secondary></indexterm>
+ 
+     <indexterm><primary>status of file server machines</primary></indexterm>
+ 
+     <indexterm><primary>saving files</primary><secondary>on inaccessible file server machines</secondary></indexterm>
+ 
+     <para>Sometimes one or more server machines in your cell become inaccessible due to hardware problems, software problems, or
+     routine maintenance. During the outage, you cannot access files stored on those machines or save any changes you have made to
+     files that are stored on those machines. (Your Cache Manager possibly has copies of the files stored locally, which you can
+     still work with.)</para>
+ 
+     <para>To check the status of server machines, use the <emphasis role="bold">fs checkservers</emphasis> command. If a server
+     machine has more than one network interface address (is <emphasis>multihomed</emphasis>), the Cache Manager sends the
+     status-checking message to all of the machine's interfaces. If at least one of the server's interfaces replies, the command's
+     output reports the machine as accessible. If there is no reply from any of the interfaces, the output reports the machine as
+     inaccessible but displays only one of the interfaces (usually the one with the best preference rank; see <link
+     linkend="HDRWQ43">Displaying Server Preference Ranks</link>).</para>
+ 
+     <para>To check the status of different groups of server machines, combine the <emphasis role="bold">fs checkservers</emphasis>
+     command's options as indicated:
+ 
+     <itemizedlist>
+       <listitem>
+         <para>To check file server machines in the local cell only, do not include any options</para>
+       </listitem>
+ 
+       <listitem>
+         <para>To check file server machines in a particular foreign cell only, include the <emphasis role="bold">-cell</emphasis>
+         argument</para>
+       </listitem>
+ 
+       <listitem>
+         <para>To check every file server machine that your Cache Manager has contacted in any cell, include the <emphasis
+         role="bold">-all</emphasis> flag</para>
+       </listitem>
+     </itemizedlist>
+ </para>
+ 
+     <para>It can take several minutes for the command shell prompt to return, because the <emphasis role="bold">fs</emphasis>
+     command interpreter waits a timeout period before concluding that an unresponsive machine is really inaccessible. To have the
+     command shell prompt return immediately, add the ampersand (<emphasis role="bold">&amp;</emphasis>), which runs the <emphasis
+     role="bold">fs checkservers</emphasis> command in the background.</para>
+ 
+     <sect2 id="Header_73">
+       <title>To Check File Server Machine Status</title>
+ 
+       <indexterm><primary>fs commands</primary><secondary>checkservers</secondary></indexterm>
+ 
+       <indexterm><primary>commands</primary><secondary>fs checkservers</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs checkservers</emphasis> command to check the status of file server machines.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs checkservers</emphasis> [<emphasis role="bold">-cell</emphasis> &lt;<replaceable>cell to check</replaceable>&gt;] [<emphasis
+           role="bold">-all</emphasis>]  [<emphasis role="bold">&amp;</emphasis>]
+ </programlisting>
+ 
+       <para>where
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">-cell</emphasis></term>
+ 
+           <listitem>
+             <para>Names each cell for which to check server machine status. Do not combine this argument and the <emphasis
+             role="bold">-all</emphasis> flag.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-all</emphasis></term>
+ 
+           <listitem>
+             <para>Checks the status of all server machines. Do not combine this flag and the <emphasis role="bold">-cell</emphasis>
+             argument.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+ </para>
+ 
+       <para>The following message indicates that all server machines replied to the Cache Manager's status-checking message:</para>
+ 
+       <programlisting>
+    All servers are running.
+ </programlisting>
+ 
+       <para>Otherwise, a message like the following lists the inaccessible machines:</para>
+ 
+       <programlisting>
+    These servers unavailable due to network or server problems: <replaceable>list of machines</replaceable>.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_74">
+       <title>Example: Checking Server Machine Status</title>
+ 
+       <indexterm><primary>examples</primary><secondary>checking status of file servers</secondary></indexterm>
+ 
+       <para>The following example checks the status of every file server machine the Cache Manager has contacted in any cell. Two
+       machines are not responding.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs checkservers -all &amp;</emphasis>
+    These servers unavailable due to network or server problems: 
+       fs1.abc.com server7.stateu.edu.
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ42">
+     <title>Determining Access to Foreign Cells</title>
+ 
+     <indexterm><primary>foreign cells</primary><secondary>enabling access</secondary></indexterm>
+ 
+     <para>The Cache Manager maintains a list of foreign cells that it knows how to reach. A cell must appear in the list for you to
+     access its AFS filespace. (In addition, the ACL on each directory in the pathname to the file must grant you the necessary
+     permissions, and your system administrator must mount the cell in the local AFS filespace--by convention, just under the
+     <emphasis role="bold">/afs</emphasis> directory.)</para>
+ 
+     <sect2 id="Header_76">
+       <title>To Display Foreign Cells</title>
+ 
+       <indexterm><primary>commands</primary><secondary>fs listcells</secondary></indexterm>
+ 
+       <indexterm><primary>fs commands</primary><secondary>listcells</secondary></indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs listcells</emphasis> command to display the cells you can access from this client
+       machine. It can take several minutes for the command shell prompt to return. The Cache Manager stores the machines as IP
+       addresses, but has the addresses translated to names before displaying them. To have the command shell prompt return
+       immediately, use the ampersand (<emphasis role="bold">&amp;</emphasis>) to run the <emphasis role="bold">fs
+       listcells</emphasis> command in the background as in the following example.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listcells &amp;</emphasis>
+    Cell abc.com  on hosts 
+         db1.abc.com
+         db2.abc.com
+         db3.abc.com
+    Cell test.abc.com on hosts 
+         test4.abc.com.
+    Cell stateu.edu on hosts 
+         sv5.stateu.edu.
+         sv2.stateu.edu.
+         sv11.stateu.edu.
+    Cell def.com on hosts 
+         serverA.def.com 
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ43">
+     <title>Displaying Server Preference Ranks</title>
+ 
+     <indexterm><primary>commands</primary><secondary>fs getserverprefs</secondary></indexterm>
+ 
+     <indexterm><primary>fs commands</primary><secondary>getserverprefs</secondary></indexterm>
+ 
+     <indexterm><primary>Cache Manager</primary><secondary>displaying file server preferences</secondary></indexterm>
+ 
+     <para>The Cache Manager stores a list of preference ranks for file server machines. When it needs to access a file or directory,
+     the Cache Manager compares the ranks of the file server machines that house the relevant volume. It first tries to access the
+     volume on the machine with the best rank. (If a file server machine is multihomed--has more than one network interface--the
+     Cache Manager actually assigns a separate rank to each interface.)</para>
+ 
+     <para>The Cache Manager assigns a default rank to a file server machine interface by comparing its own IP address to the
+     interface's IP address. It assigns a better rank to interfaces that are on its own subnetwork or network than to interfaces on
+     other networks. Therefore, the ranks bias the Cache Manager to fetch files from file server machines that are close in terms of
+     network distance, which tends to reduce network traffic and help the Cache Manager deliver data to applications more
+     quickly.</para>
+ 
+     <para>The Cache Manager stores each rank as a pairing of a file server machine interface's IP address and an integer rank from
+     the range <emphasis role="bold">0</emphasis> to <emphasis role="bold">65,534</emphasis>. A lower number is a better rank. To
+     display the server preference ranks on the local client machine, use the <emphasis role="bold">fs getserverprefs</emphasis>
+     command.</para>
+ 
+     <para>The Cache Manager stores a separate but similar set of ranks for Volume Location (VL) Servers, which tell the Cache
+     Manager the location of volumes that house files and directories. To display those ranks, add the <emphasis
+     role="bold">-vlservers</emphasis> flag to the <emphasis role="bold">fs getserverprefs</emphasis> command.</para>
+ 
+     <para>If the default ranks do not seem to result in the best performance, your system administrator can change them. Ask your
+     system administrator about the ranks if appropriate.</para>
+ 
+     <sect2 id="Header_78">
+       <title>To Display Server Preference Ranks</title>
+ 
+       <para>Issue the <emphasis role="bold">fs getserverprefs</emphasis> command to display the file server machine preference ranks
+       used by the Cache Manager on the local machine. To display VL Server ranks, add the <emphasis
+       role="bold">-vlservers</emphasis> flag. By default, the Cache Manager has the IP address of each interface translated into a
+       hostname before displaying it. To bypass the translation and display IP addresses, include the <emphasis
+       role="bold">-numeric</emphasis> flag. This can significantly speed up the command's output.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs getserverprefs</emphasis> [<emphasis role="bold">-numeric</emphasis>] [<emphasis role="bold">-vlservers</emphasis>]
+ </programlisting>
+ 
+       <para>The following example displays the file server machine preference ranks for a client machine in the <emphasis
+       role="bold">abc.com</emphasis> cell. The ranks of the file server machines in that cell are lower than the ranks of the file
+       server machines from the foreign cell, <emphasis role="bold">def.com</emphasis>. Because the <emphasis
+       role="bold">-numeric</emphasis> flag is not used, the output displays hostnames. The appearance of an IP address for two
+       machines indicates that translating them was not possible.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs getserverprefs</emphasis>
+    fs2.abc.com           20007
+    fs3.abc.com           30002
+    fs1.abc.com           20011
+    fs4.abc.com           30010
+    server1.def.com       40002
+    192.12.105.34         40000
+    server6.def.com       40012
+    192.12.105.37         40005
+ </programlisting>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/UserGuide/auusg007.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg007.xml:1.2.4.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg007.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,1568 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ44">
+   <title>Protecting Your Directories and Files</title>
+ 
+   <para>This chapter explains how to protect AFS files and directories by defining permissions on an access control list.</para>
+ 
+   <sect1 id="HDRWQ45">
+     <title>Access Control Lists</title>
+ 
+     <indexterm>
+       <primary>protection</primary>
+ 
+       <secondary>for files and directories</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>access to AFS filespace</primary>
+ 
+       <secondary>granting and denying to users</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>setting access control list</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>described</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>access control list</primary>
+ 
+       <see>ACL</see>
+     </indexterm>
+ 
+     <para>AFS augments and refines the standard UNIX scheme for controlling access to files and directories. Instead of using mode
+     bits to define access permissions for individual files, as UNIX does, AFS stores an <emphasis>access control list</emphasis>
+     (<emphasis>ACL</emphasis>) with each directory. It defines which users and groups can access the directory and the files it
+     contains, and in what manner. An ACL can store up to about 20 entries, each of which pairs a user or group and a set of
+     permissions. AFS defines seven permissions rather than the three that UNIX uses.</para>
+ 
+     <para>Another refinement to the standard UNIX protection scheme is that users can define their own protection
+     <emphasis>groups</emphasis> and then place the groups on ACLs as though they were individual users. A group can include both
+     users and machines. Each user who belongs to a group inherits all of the permissions granted to the group on the ACL. Similarly,
+     all users who are logged into a machine that belongs to a group inherits all of the permissions granted to the group. You can
+     create groups to place on ACLs and also use groups that other users have created. To learn more about group creation, see <link
+     linkend="HDRWQ60">Using Groups</link>.</para>
+ 
+     <para>In addition, AFS defines two system groups called <emphasis role="bold">system:anyuser</emphasis> and <emphasis
+     role="bold">system:authuser</emphasis>. By placing them on ACLs, you can grant access to large numbers of users at once. See
+     <link linkend="HDRWQ50">Using the System Groups on ACLs</link>.</para>
+ 
+     <para>Although AFS uses ACLs to protect files and directories, it also uses the UNIX mode bits to a limited extent. See <link
+     linkend="HDRWQ59">How AFS Uses the UNIX Mode Bits</link>.</para>
+ 
+     <sect2 id="Header_81">
+       <title>Directory Level Access Control</title>
+ 
+       <para>As noted, AFS associates an ACL with each directory, and it applies to all of the files stored in the directory. Files
+       do not have separate ACLs. Defining access at the directory level has several consequences: <itemizedlist>
+           <listitem>
+             <para>The permissions on a directory's ACL apply to all of the files in the directory. When you move a file to a
+             different directory, you effectively change its permissions to those on its new directory's ACL. Changing a directory's
+             ACL changes the protection on all the files in it.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>When you create a subdirectory, it inherits the current ACL of its parent directory. You can then set the
+             subdirectory's ACL to be different from its parent's. However, do not make the ACL on the parent directory more
+             restrictive than on a subdirectory, because that can prevent users from accessing the subdirectory even when they have
+             the necessary permissions on its ACL. Specifically, a user must have the <emphasis role="bold">l</emphasis> (<emphasis
+             role="bold">lookup</emphasis>) permission (defined in <link linkend="HDRWQ46">The AFS ACL Permissions</link>) on the
+             parent directory to reach its subdirectories. <indexterm>
+                 <primary>subdirectories, accessing</primary>
+               </indexterm> <indexterm>
+                 <primary>access to AFS filespace</primary>
+ 
+                 <secondary>controlling at directory level</secondary>
+               </indexterm></para>
+           </listitem>
+         </itemizedlist></para>
+ 
+       <para>As a general rule, it makes sense to grant fairly liberal access to your home directory. If you need to protect certain
+       files more closely, place them in subdirectories that have more restrictive ACLs.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ46">
+     <title>The AFS ACL Permissions</title>
+ 
+     <indexterm>
+       <primary>access permissions on ACL</primary>
+ 
+       <seealso>permissions on ACL</seealso>
+ 
+       <seealso>ACL</seealso>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>permissions on ACL</primary>
+ 
+       <secondary>defined</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>permissions defined</secondary>
+     </indexterm>
+ 
+     <para>There are seven standard AFS ACL permissions. Functionally, they fall into two groups: one that applies to the directory
+     itself and one that applies to the files.</para>
+ 
+     <sect2 id="HDRWQ47">
+       <title>The Four Directory Permissions</title>
+ 
+       <para>The four permissions in this group are meaningful with respect to the directory itself. For example, the <emphasis
+       role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) permission does not control addition of data to a file, but
+       rather creation of a new file or subdirectory. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">The l (lookup) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission functions as something of a gate keeper for access to the directory and its files, because a
+               user must have it in order to exercise any other permissions. In particular, a user must have this permission to
+               access anything in the directory's subdirectories. <indexterm>
+                   <primary>lookup ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>l ACL permission</primary>
+                 </indexterm></para>
+ 
+               <para>This permission enables a user to issue the following commands: <itemizedlist>
+                   <listitem>
+                     <para>The <emphasis role="bold">ls</emphasis> command to list the names of the files and subdirectories in the
+                     directory</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>The <emphasis role="bold">ls -ld</emphasis> command to obtain complete status information for the
+                     directory element itself</para>
+                   </listitem>
+ 
+                   <listitem>
+                     <para>The <emphasis role="bold">fs listacl</emphasis> command to examine the directory's ACL</para>
+                   </listitem>
+                 </itemizedlist></para>
+ 
+               <para>This permission does not enable a user to read the contents of a file in the directory or to issue the <emphasis
+               role="bold">ls -l</emphasis> or <emphasis role="bold">fs listacl</emphasis> commands with a filename as the argument.
+               Those operations require the <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permission,
+               which is described in <link linkend="HDRWQ48">The Three File Permissions</link>.</para>
+ 
+               <para>Similarly, this permission does not enable a user to issue the <emphasis role="bold">ls</emphasis>, <emphasis
+               role="bold">ls -l</emphasis>, <emphasis role="bold">ls -ld</emphasis>, or <emphasis role="bold">fs listacl</emphasis>
+               commands against a subdirectory of the directory. Those operations require the <emphasis role="bold">l</emphasis>
+               permission on the ACL of the subdirectory itself.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The i (insert) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission enables a user to add new files to the directory, either by creating or copying, and to create
+               new subdirectories. It does not extend into any subdirectories, which are protected by their own ACLs. <indexterm>
+                   <primary>insert ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>i ACL permission</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The d (delete) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission enables a user to remove files and subdirectories from the directory or move them into other
+               directories (assuming that the user has the <emphasis role="bold">i</emphasis> permission on the ACL of the other
+               directories). <indexterm>
+                   <primary>delete ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>d ACL permission</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The a (administer) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission enables a user to change the directory's ACL. Members of the <emphasis
+               role="bold">system:administrators</emphasis> group implicitly have this permission on every directory (that is, even
+               if that group does not appear on the ACL). Similarly, the owner of a directory implicitly has this permission on its
+               ACL and those of all directories below it. <indexterm>
+                   <primary>administer ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>a ACL permission</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ48">
+       <title>The Three File Permissions</title>
+ 
+       <para>The three permissions in this group are meaningful with respect to files in a directory, rather than the directory
+       itself or its subdirectories. <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">The r (read) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission enables a user to read the contents of files in the directory and to issue the <emphasis
+               role="bold">ls -l</emphasis> command to stat the file elements. <indexterm>
+                   <primary>read ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>r ACL permission</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The w (write) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission enables a user to modify the contents of files in the directory and to issue the <emphasis
+               role="bold">chmod</emphasis> command to change their UNIX mode bits. <indexterm>
+                   <primary>write ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>w ACL permission</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">The k (lock) permission</emphasis></term>
+ 
+             <listitem>
+               <para>This permission enables a user to run programs that issue system calls to lock files in the directory.
+               <indexterm>
+                   <primary>k ACL permission</primary>
+                 </indexterm> <indexterm>
+                   <primary>lock ACL permission</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="Header_85">
+       <title>The Eight Auxiliary Permissions</title>
+ 
+       <indexterm>
+         <primary>auxiliary ACL permissions</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>auxiliary permissions</secondary>
+       </indexterm>
+ 
+       <para>AFS provides eight additional permissions that do not have a defined meaning. They are denoted by the uppercase letters
+       <emphasis role="bold">A</emphasis>, <emphasis role="bold">B</emphasis>, <emphasis role="bold">C</emphasis>, <emphasis
+       role="bold">D</emphasis>, <emphasis role="bold">E</emphasis>, <emphasis role="bold">F</emphasis>, <emphasis
+       role="bold">G</emphasis>, and <emphasis role="bold">H</emphasis>.</para>
+ 
+       <para>Your system administrator can choose to write application programs that assign a meaning to one or more of the
+       permissions, and then place them on ACLs to control file access by those programs. Use the <emphasis role="bold">fs
+       listacl</emphasis> and <emphasis role="bold">fs setacl</emphasis> commands to display and set the auxiliary permissions on
+       ACLs just like the standard seven.</para>
+     </sect2>
+ 
+     <sect2 id="Header_86">
+       <title>Shorthand Notation for Sets of Permissions</title>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>shorthand notation for grouping sets of permissions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>shorthand notation for ACL permissions</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>permissions on ACL</primary>
+ 
+         <secondary>shorthand for</secondary>
+       </indexterm>
+ 
+       <para>You can combine the seven permissions in any way in an ACL entry, but certain combinations are more useful than others.
+       Four of the more common combinations have corresponding shorthand forms. When using the <emphasis role="bold">fs
+       setacl</emphasis> command to define ACL entries, you can provide either one or more of the individual letters that represent
+       the permissions, or one of the following shorthand forms: <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">all</emphasis></term>
+ 
+             <listitem>
+               <para>Represents all seven standard permissions (<emphasis role="bold">rlidwka</emphasis>) <indexterm>
+                   <primary>all shorthand for ACL permissions</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">none</emphasis></term>
+ 
+             <listitem>
+               <para>Removes the entry from the ACL, leaving the user or group with no permission <indexterm>
+                   <primary>none shorthand for ACL permissions</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">read</emphasis></term>
+ 
+             <listitem>
+               <para>Represents the <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) and <emphasis
+               role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permissions <indexterm>
+                   <primary>read shorthand for ACL permissions</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">write</emphasis></term>
+ 
+             <listitem>
+               <para>Represents all permissions except <emphasis role="bold">a</emphasis> (<emphasis
+               role="bold">administer</emphasis>): <emphasis role="bold">rlidwk</emphasis> <indexterm>
+                   <primary>write shorthand for ACL permissions</primary>
+                 </indexterm></para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ49">
+       <title>About Normal and Negative Permissions</title>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>normal vs. negative permissions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>normal permissions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>negative permissions</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>permissions on ACL</primary>
+ 
+         <secondary>normal vs. negative</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>normal ACL permissions</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>normal ACL permissions</primary>
+ 
+         <secondary>setting</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>negative ACL permissions</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <para>ACLs enable you both to grant and to deny access to a directory and the files in it. To grant access, use the <emphasis
+       role="bold">fs setacl</emphasis> command to create an ACL entry that associates a set of permissions with a user or group, as
+       described in <link linkend="HDRWQ54">Changing an ACL</link>. When you use the <emphasis role="bold">fs listacl</emphasis>
+       command to display an ACL (as described in <link linkend="HDRWQ52">Displaying an ACL</link>), such entries appear underneath
+       the following header, which uses the term <emphasis>rights</emphasis> to refer to permissions:</para>
+ 
+       <programlisting>
+    Normal rights
+ </programlisting>
+ 
+       <para>There are two ways to deny access: <indexterm>
+           <primary>negative ACL permissions</primary>
+ 
+           <secondary>setting</secondary>
+         </indexterm> <orderedlist>
+           <listitem>
+             <para>The recommended method is simply to omit an entry for the user or group from the ACL, or to omit the appropriate
+             permissions from an entry. Use the <emphasis role="bold">fs setacl</emphasis> command to remove or edit an existing
+             entry. In most cases, this method is enough to prevent access of certain kinds or by certain users. You must take care,
+             however, not to grant the undesired permissions to any groups to which such users belong.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>The more explicit method for denying access is to place an entry on the <emphasis>negative permissions</emphasis>
+             section of an ACL, by including the <emphasis role="bold">-negative</emphasis> flag to the <emphasis role="bold">fs
+             setacl</emphasis> command. For instructions, see <link linkend="HDRWQ56">To Add, Remove, or Edit Negative ACL
+             Permissions</link>. The <emphasis role="bold">fs listacl</emphasis> command displays the negative permissions section of
+             an ACL underneath the following header: <programlisting>
+    Negative rights
+ </programlisting></para>
+ 
+             <para>When determining what type of access to grant to a user, AFS first examines all of the entries in the normal
+             permissions section of the ACL. It then subtracts any permissions associated with the user (or with groups to which the
+             user belongs) on the negative permissions section of the ACL. Therefore, negative permissions always cancel out normal
+             permissions.</para>
+ 
+             <para>Negative permissions can be confusing, because they reverse the usual meaning of the <emphasis role="bold">fs
+             setacl</emphasis> command. In particular, combining the <emphasis role="bold">none</emphasis> shorthand and the
+             <emphasis role="bold">-negative</emphasis> flag is a double negative: by removing an entry from the negative permissions
+             section of the ACL, you enable a user once again to obtain permissions via entries in the normal permissions section.
+             Combining the <emphasis role="bold">all</emphasis> shorthand with the <emphasis role="bold">-negative</emphasis> flag
+             explicitly denies all permissions.</para>
+ 
+             <para>It is useless to create an entry in the negative permissions section if an entry in the normal permissions section
+             grants the denied permissions to the <emphasis role="bold">system:anyuser</emphasis> group. In this case, users can
+             obtain the permissions simply by using the <emphasis role="bold">unlog</emphasis> command to discard their tokens. When
+             they do so, AFS recognizes them as the <emphasis role="bold">anonymous</emphasis> user, who belongs to the <emphasis
+             role="bold">system:anyuser</emphasis> group but does not match the entries on the negative permissions section of the
+             ACL.</para>
+           </listitem>
+         </orderedlist></para>
+     </sect2>
+ 
+     <sect2 id="Header_88">
+       <title>Setting DFS ACLs</title>
+ 
+       <para>If your machine is configured to access a DCE cell's DFS filespace via the AFS/DFS Migration Toolkit, then you can use
+       the AFS <emphasis role="bold">fs listacl</emphasis> and <emphasis role="bold">fs setacl</emphasis> commands to display and set
+       the ACLs on DFS directories and files that you own. However, DFS uses a slightly different set of permissions and a different
+       syntax for ACL entries. See the DFS documentation or ask your system administrator.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ50">
+     <title>Using the System Groups on ACLs</title>
+ 
+     <para><indexterm>
+         <primary>system groups</primary>
+ 
+         <secondary>using on ACLs</secondary>
+       </indexterm> <indexterm>
+         <primary>system:anyuser group</primary>
+ 
+         <secondary>using on ACLs</secondary>
+       </indexterm> <indexterm>
+         <primary>system:authuser group</primary>
+       </indexterm> <indexterm>
+         <primary>system:administrators group</primary>
+       </indexterm> AFS defines two <emphasis>system groups</emphasis> that grant access to a large number of users at once when
+     placed on an ACL. However, you cannot control the membership of these groups, so consider carefully what kind of permissions you
+     wish to give them. (You do control the membership of the groups you own; see <link linkend="HDRWQ60">Using Groups</link>.)
+     <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">system:anyuser</emphasis></term>
+ 
+           <listitem>
+             <para>Includes anyone who can access the cell's file tree, including users who have tokens in the local cell, users who
+             have logged in on a local AFS client machine but have not obtained tokens (such as the local superuser <emphasis
+             role="bold">root</emphasis>), and users who have connected to a local machine from outside the cell. Creating an ACL
+             entry for this group is the only way to extend access to AFS users from foreign cells, unless your system administrator
+             creates local authentication accounts for them. <indexterm>
+                 <primary>ACL</primary>
+ 
+                 <secondary>foreign users on</secondary>
+               </indexterm></para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">system:authuser</emphasis></term>
+ 
+           <listitem>
+             <para>Includes all users who have a valid AFS token obtained from the local cell's AFS authentication service.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist></para>
+ 
+     <para>The third system group, <emphasis role="bold">system:administrators</emphasis>, includes a small group of administrators
+     who have extensive permissions in the cell. You do not generally need to put this group on your ACLs, because its members always
+     have the <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission on every ACL, even if the
+     group does not appear on it.</para>
+ 
+     <sect2 id="Header_90">
+       <title>Enabling Access to Subdirectories</title>
+ 
+       <indexterm>
+         <primary>subdirectories, accessing</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>access to AFS filespace</primary>
+ 
+         <secondary>controlling for subdirectories</secondary>
+       </indexterm>
+ 
+       <para>A user must have the <emphasis role="bold">l</emphasis> permission on a directory to access its subdirectories in any
+       way. Even if users have extensive permissions on a subdirectory, they cannot access it if the parent directory's ACL does not
+       grant the <emphasis role="bold">l</emphasis> permission.</para>
+ 
+       <para>You can grant the <emphasis role="bold">l</emphasis> permission in one of three ways: grant it to a system group
+       (<emphasis role="bold">system:anyuser</emphasis> or <emphasis role="bold">system:authuser</emphasis>), grant it to individual
+       users, or grant it to one or more groups of users defined by you or other users (see <link linkend="HDRWQ60">Using
+       Groups</link>). Granting the <emphasis role="bold">l</emphasis> permission to the <emphasis
+       role="bold">system:anyuser</emphasis> group is the easiest option and is generally secure because the permission only enables
+       users to list the contents of the directory, not to read the files in it. If you want to enable only locally authenticated
+       users to list a directory's contents, substitute the <emphasis role="bold">system:authuser</emphasis> group for the <emphasis
+       role="bold">system:anyuser</emphasis> group. Your system administrator has possibly already created an entry on your home
+       directory's ACL that grants the <emphasis role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions to the
+       <emphasis role="bold">system:anyuser</emphasis> group.</para>
+     </sect2>
+ 
+     <sect2 id="Header_91">
+       <title>Extending Access to Service Processes</title>
+ 
+       <indexterm>
+         <primary>access to AFS filespace</primary>
+ 
+         <secondary>enabling for service processes</secondary>
+       </indexterm>
+ 
+       <para>It is sometimes necessary to grant more extensive permissions to the <emphasis role="bold">system:anyuser</emphasis>
+       group so that processes that provide printing and mail delivery service can work correctly. For example, printing processes
+       sometimes need the <emphasis role="bold">r</emphasis> permission in addition to the <emphasis role="bold">l</emphasis>
+       permission. A mail delivery process possibly needs the <emphasis role="bold">i</emphasis> permission to place new messages in
+       your mail directory. Your system administrator has probably already created the necessary ACL entries. If you notice an ACL
+       entry for which the purpose is unclear, check with your system administrator before removing it.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ51">
+       <title>Extending Access to Users from Foreign Cells</title>
+ 
+       <para><indexterm>
+           <primary>access to AFS filespace</primary>
+ 
+           <secondary>enabling for users from foreign cells</secondary>
+         </indexterm> The only way to grant access to users from foreign cells who do not have an account in your cell is to put the
+       <emphasis role="bold">system:anyuser</emphasis> group on an ACL. Remember, however, that such an entry extends access to
+       everyone who can reach your cell, not just the AFS users from foreign cells that you have in mind.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ52">
+     <title>Displaying an ACL</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>permissions on ACL</primary>
+ 
+       <secondary>displaying</secondary>
+     </indexterm>
+ 
+     <para>To display the ACL associated with a file or directory, issue the <emphasis role="bold">fs listacl</emphasis>
+     command.</para>
+ 
+     <para><emphasis role="bold">Note for AFS/DFS Migration Toolkit users:</emphasis> If the machine on which you issue the <emphasis
+     role="bold">fs listacl</emphasis> command is configured to access a DCE cell's DFS filespace via the AFS/DFS Migration Toolkit,
+     you can use the command to display the ACL on DFS files and directories. To display a DFS directory's Initial Container or
+     Initial Object ACL instead of the regular one, include the <emphasis role="bold">fs listacl</emphasis> command's <emphasis
+     role="bold">-id</emphasis> or <emphasis role="bold">-if</emphasis> flag. For more information, ask your system administrator.
+     The <emphasis role="bold">fs</emphasis> command interpreter ignores the <emphasis role="bold">-id</emphasis> and <emphasis
+     role="bold">-if</emphasis> flags if you include them when displaying an AFS ACL.</para>
+ 
+     <sect2 id="HDRWQ53">
+       <title>To display an ACL</title>
+ 
+       <orderedlist>
+         <listitem>
+           <para>Issue the <emphasis role="bold">fs listacl</emphasis> command. <indexterm>
+               <primary>fs commands</primary>
+ 
+               <secondary>listacl</secondary>
+             </indexterm> <indexterm>
+               <primary>commands</primary>
+ 
+               <secondary>fs listacl</secondary>
+             </indexterm> <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;<superscript>+</superscript>]
+ </programlisting></para>
+ 
+           <para>where</para>
+ 
+           <variablelist>
+             <varlistentry>
+               <term><emphasis role="bold">la</emphasis></term>
+ 
+               <listitem>
+                 <para>Is an acceptable alias for <emphasis role="bold">listacl</emphasis> (and <emphasis
+                 role="bold">lista</emphasis> is the shortest acceptable abbreviation).</para>
+               </listitem>
+             </varlistentry>
+ 
+             <varlistentry>
+               <term><emphasis role="bold"><replaceable>dir/file path</replaceable></emphasis></term>
+ 
+               <listitem>
+                 <para>Names one or more files or directories for which to display the ACL. For a file, the output displays the ACL
+                 on its directory. If you omit this argument, the output is for the current working directory. Partial pathnames are
+                 interpreted relative to the current working directory. You can also use the following notation on its own or as part
+                 of a pathname: <variablelist>
+                     <varlistentry>
+                       <term><emphasis role="bold">.</emphasis></term>
+ 
+                       <listitem>
+                         <para>(A single period). Specifies the current working directory.</para>
+                       </listitem>
+                     </varlistentry>
+ 
+                     <varlistentry>
+                       <term><emphasis role="bold">..</emphasis></term>
+ 
+                       <listitem>
+                         <para>(Two periods). Specifies the current working directory's parent directory.</para>
+                       </listitem>
+                     </varlistentry>
+ 
+                     <varlistentry>
+                       <term><emphasis role="bold">*</emphasis></term>
+ 
+                       <listitem>
+                         <para>(The asterisk). Specifies each file and subdirectory in the current working directory. The ACL
+                         displayed for a file is always the same as for its directory, but the ACL for each subdirectory can
+                         differ.</para>
+                       </listitem>
+                     </varlistentry>
+                   </variablelist></para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </listitem>
+       </orderedlist>
+ 
+       <para>The output for each file or directory specified as <replaceable>dir/file path</replaceable> begins with the following
+       header to identify it:</para>
+ 
+       <programlisting>
+    Access list for  <replaceable>dir/file path</replaceable> is
+ </programlisting>
+ 
+       <para>The <computeroutput>Normal rights</computeroutput> header appears on the next line, followed by lines that each pair a
+       user or group name and a set of permissions. The permissions appear as the single letters defined in <link
+       linkend="HDRWQ46">The AFS ACL Permissions</link>, and always in the order <emphasis role="bold">rlidwka</emphasis>. If there
+       are any negative permissions, the <computeroutput>Negative rights</computeroutput> header appears next, followed by pairs of
+       negative permissions.</para>
+ 
+       <para>If the following error message appears instead of an ACL, you do not have the permissions needed to display an ACL. To
+       specify a directory name as the <replaceable>dir/file path</replaceable> argument, you must have the <emphasis
+       role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission on the ACL. To specify a filename, you must also
+       have the <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) permission on its directory's ACL.</para>
+ 
+       <programlisting>
+    fs: You don't have the required access permissions on '<replaceable>dir/file path</replaceable>'
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_95">
+       <title>Example: Displaying the ACL on One Directory</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying ACL for single directory</secondary>
+       </indexterm>
+ 
+       <para>The following example displays the ACL on user <emphasis role="bold">terry</emphasis>'s home directory in the ABC
+       Corporation cell:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs la /afs/abc.com/usr/terry</emphasis>
+    Access list for /afs/abc.com/usr/terry is
+    Normal rights:
+       system:authuser rl
+       pat rlw
+       terry rlidwka
+    Negative rights:
+       terry:other-dept rl
+       jones rl
+ </programlisting>
+ 
+       <para>where <emphasis role="bold">pat</emphasis>, <emphasis role="bold">terry</emphasis>, and <emphasis
+       role="bold">jones</emphasis> are individual users, <emphasis role="bold">system:authuser</emphasis> is a system group, and
+       <emphasis role="bold">terry:other-dept</emphasis> is a group that <emphasis role="bold">terry</emphasis> owns. The list of
+       normal permissions grants all permissions to <emphasis role="bold">terry</emphasis>, the <emphasis role="bold">rlw</emphasis>
+       permissions to <emphasis role="bold">pat</emphasis>, and the <emphasis role="bold">rl</emphasis> permissions to the members of
+       the <emphasis role="bold">system:authuser</emphasis> group.</para>
+ 
+       <para>The list of negative permissions denies the <emphasis role="bold">rl</emphasis> permissions to <emphasis
+       role="bold">jones</emphasis> and the members of the <emphasis role="bold">terry:other-dept</emphasis> group. These entries
+       effectively prevent them from accessing <emphasis role="bold">terry</emphasis>'s home directory in any way; they cancel out
+       the <emphasis role="bold">rl</emphasis> permissions extended to the <emphasis role="bold">system:authuser</emphasis> group,
+       which is the only entry on the normal permissions section of the ACL that possibly applies to them.</para>
+     </sect2>
+ 
+     <sect2 id="Header_96">
+       <title>Example: Displaying the ACLs on Multiple Directories</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying ACLs for multiple directories</secondary>
+       </indexterm>
+ 
+       <para>The following example illustrates how you can specify pathnames in different ways, and the appearance of the output for
+       multiple directories. It displays the ACL for three directories: the current working directory (which is a subdirectory of
+       user <emphasis role="bold">terry</emphasis>'s home directory), the home directory for user <emphasis
+       role="bold">pat</emphasis>, and another subdirectory of <emphasis role="bold">terry</emphasis>'s home directory called
+       <emphasis role="bold">plans</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listacl  .  /afs/abc.com/usr/pat  ../plans</emphasis>
+    Access list for . is
+    Normal rights:
+       system:anyuser rl
+       pat:dept rliw
+    Access list for /afs/abc.com/usr/pat is
+    Normal rights:
+       system:anyuser rl
+       pat rlidwka
+       terry rliw 
+    Access list for ../plans is
+    Normal rights:
+       terry rlidwka
+       pat rlidw
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ54">
+     <title>Changing an ACL</title>
+ 
+     <indexterm>
+       <primary>changing</primary>
+ 
+       <secondary>ACLs</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>setting permissions on ACL</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>setting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>permissions on ACL</primary>
+ 
+       <secondary>setting</secondary>
+     </indexterm>
+ 
+     <para>To add, remove, or edit ACL entries, use the <emphasis role="bold">fs setacl</emphasis> command. By default, the command
+     manipulates entries on the normal permissions section of the ACL. To manipulate entries on the negative permissions section,
+     include the <emphasis role="bold">-negative</emphasis> flag as instructed in <link linkend="HDRWQ56">To Add, Remove, or Edit
+     Negative ACL Permissions</link>.</para>
+ 
+     <para>You can change any ACL on which you already have the <emphasis role="bold">a</emphasis> permission. You always have the
+     <emphasis role="bold">a</emphasis> permission on the ACL of every directory that you own, even if you accidentally remove that
+     permission from the ACL. (The <emphasis role="bold">ls -ld</emphasis> command reports a directory's owner.) Your system
+     administrator normally designates you as the owner of your home directory and its subdirectories, and you possibly own other
+     directories also.</para>
+ 
+     <para>If an ACL entry already exists for the user or group you specify, then the new permissions completely replace the existing
+     permissions rather than being added to them. In other words, when issuing the <emphasis role="bold">fs setacl</emphasis>
+     command, you must include all permissions that you want to grant to a user or group.</para>
+ 
+     <para><emphasis role="bold">Note for AFS/DFS Migration Toolkit users:</emphasis> If the machine on which you issue the <emphasis
+     role="bold">fs setacl</emphasis> command is configured to access a DCE cell's DFS filespace via the AFS/DFS Migration Toolkit,
+     you can use the command to set the ACL on DFS files and directories. To set a DFS directory's Initial Container or Initial
+     Object ACL instead of the regular one, include the <emphasis role="bold">fs setacl</emphasis> command's <emphasis
+     role="bold">-id</emphasis> or <emphasis role="bold">-if</emphasis> flag. For more information, ask your system administrator.
+     The <emphasis role="bold">fs</emphasis> command interpreter ignores the <emphasis role="bold">-id</emphasis> and <emphasis
+     role="bold">-if</emphasis> flags if you include them when setting an AFS ACL.</para>
+ 
+     <sect2 id="HDRWQ55">
+       <title>To Add, Remove, or Edit Normal ACL Permissions</title>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>ACL entry in normal permissions section</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>creating normal entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>ACL entry to normal permissions section</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>granting access to AFS filespace</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>access to AFS filespace</primary>
+ 
+         <secondary>ACL entries control</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>granting access</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>granting access</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs setacl</emphasis> command to edit entries in the normal permissions section of the
+       ACL. To remove an entry, specify the <emphasis role="bold">none</emphasis> shorthand as the permissions. If an ACL entry
+       already exists for a user or group, the permissions you specify completely replace those in the existing entry. <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>fs setacl</secondary>
+         </indexterm> <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>setacl</secondary>
+         </indexterm></para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl  -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;<superscript>+</superscript> <emphasis
+           role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">sa</emphasis></term>
+ 
+             <listitem>
+               <para>Is an acceptable alias for <emphasis role="bold">setacl</emphasis> (and <emphasis role="bold">seta</emphasis> is
+               the shortest acceptable abbreviation).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-dir</emphasis></term>
+ 
+             <listitem>
+               <para>Names one or more directories to which to apply the ACL entries defined by the <emphasis
+               role="bold">-acl</emphasis> argument. Partial pathnames are interpreted relative to the current working directory. You
+               can also use the following notation on its own or as part of a pathname: <variablelist>
+                   <varlistentry>
+                     <term><emphasis role="bold">.</emphasis></term>
+ 
+                     <listitem>
+                       <para>(A single period). If used by itself, sets the ACL on the current working directory.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">..</emphasis></term>
+ 
+                     <listitem>
+                       <para>(Two periods). If used by itself, sets the ACL on the current working directory's parent
+                       directory.</para>
+                     </listitem>
+                   </varlistentry>
+ 
+                   <varlistentry>
+                     <term><emphasis role="bold">*</emphasis></term>
+ 
+                     <listitem>
+                       <para>(The asterisk). Sets the ACL on each of the subdirectories in the current working directory. You must
+                       precede it with the <emphasis role="bold">-dir</emphasis> switch, since it potentially designates multiple
+                       directories. The <emphasis role="bold">fs</emphasis> command interpreter generates the following error message
+                       for each file in the directory: <programlisting>
+    fs: '<replaceable>filename</replaceable>': Not a directory
+ </programlisting></para>
+                     </listitem>
+                   </varlistentry>
+                 </variablelist></para>
+ 
+               <para>If you specify only one directory (or file) name, you can omit the <emphasis role="bold">-dir</emphasis> and
+               <emphasis role="bold">-acl</emphasis> switches. For more on omitting switches, see <link linkend="HDRWQ86">Appendix B,
+               OpenAFS Command Syntax and Online Help</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-acl</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies one or more ACL entries, each of which pairs a user or group name and a set of permissions. Separate
+               the pairs, and the two parts of each pair, with one or more spaces.</para>
+ 
+               <para>To define the permissions, provide either:</para>
+ 
+               <itemizedlist>
+                 <listitem>
+                   <para>One or more of the letters that represent the standard or auxiliary permissions (<emphasis
+                   role="bold">rlidwka</emphasis> and <emphasis role="bold">ABCDEFGH</emphasis>), in any order</para>
+                 </listitem>
+ 
+                 <listitem>
+                   <para>One of the four shorthand notations: <itemizedlist>
+                       <listitem>
+                         <para><emphasis role="bold">all</emphasis> (equals <emphasis role="bold">rlidwka</emphasis>)</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">none</emphasis> (removes the entry)</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">read</emphasis> (equals <emphasis role="bold">rl</emphasis>)</para>
+                       </listitem>
+ 
+                       <listitem>
+                         <para><emphasis role="bold">write</emphasis> (equals <emphasis role="bold">rlidwk</emphasis>)</para>
+                       </listitem>
+                     </itemizedlist></para>
+                 </listitem>
+               </itemizedlist>
+ 
+               <para>On a single command line, you can combine user and group entries. Also, you can both combine individual letters
+               and use the shorthand notations, but not within a single pair.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="Header_99">
+       <title>Example: Adding a Single ACL Entry</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>adding a user to an ACL</secondary>
+       </indexterm>
+ 
+       <para>Either of the following example commands grants user <emphasis role="bold">pat</emphasis> the <emphasis
+       role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions on the ACL of the <emphasis
+       role="bold">notes</emphasis> subdirectory of the current working directory. They illustrate how it is possible to omit the
+       <emphasis role="bold">-dir</emphasis> and <emphasis role="bold">-acl</emphasis> switches when you name only one
+       directory.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs sa notes pat rl</emphasis>
+    % <emphasis role="bold">fs sa notes pat read</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_100">
+       <title>Example: Setting Several ACL Entries on One Directory</title>
+ 
+       <para>The following example edits the ACL for the current working directory. It removes the entry for the <emphasis
+       role="bold">system:anyuser</emphasis> group, and adds two entries: one grants all permissions except <emphasis
+       role="bold">a</emphasis> to the members of the <emphasis role="bold">terry:colleagues</emphasis> group and the other grants
+       the <emphasis role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions to the <emphasis
+       role="bold">system:authuser</emphasis> group.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs sa  -dir . -acl  system:anyuser none  terry:colleagues write</emphasis>  \
+             <emphasis role="bold">system:authuser rl</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ56">
+       <title>To Add, Remove, or Edit Negative ACL Permissions</title>
+ 
+       <indexterm>
+         <primary>creating</primary>
+ 
+         <secondary>ACL entry in negative permissions section</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>creating negative entry</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>adding</primary>
+ 
+         <secondary>ACL entry to negative permissions section</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>denying access with negative ACL entry</primary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>denying access</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>denying access</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs setacl</emphasis> command with the <emphasis role="bold">-negative</emphasis> flag to
+       edit entries in the negative permissions section of the ACL. To remove an entry, specify the <emphasis
+       role="bold">none</emphasis> shorthand as the permissions. If an ACL entry already exists for a user or group, the permissions
+       you specify completely replace those in the existing entry. <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>setacl</secondary>
+ 
+           <tertiary>with -negative flag</tertiary>
+         </indexterm> <indexterm>
+           <primary>commands</primary>
+ 
+           <secondary>fs setacl</secondary>
+         </indexterm></para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl  -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;<superscript>+</superscript> <emphasis
+           role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;<superscript>+</superscript>  <emphasis
+           role="bold">-negative</emphasis> 
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">sa</emphasis></term>
+ 
+             <listitem>
+               <para>Is an acceptable alias for <emphasis role="bold">setacl</emphasis> (and <emphasis role="bold">seta</emphasis> is
+               the shortest acceptable abbreviation).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-dir</emphasis></term>
+ 
+             <listitem>
+               <para>Names one or more directories to which to apply the negative ACL entries defined by the <emphasis
+               role="bold">-acl</emphasis> argument. For a detailed description of acceptable values, see <link linkend="HDRWQ55">To
+               Add, Remove, or Edit Normal ACL Permissions</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-acl</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies one or more ACL entries, each of which pairs a user or group name and a set of permissions. Separate
+               the pairs, and the two parts of each pair, with one or more spaces. For a detailed description of acceptable values,
+               see <link linkend="HDRWQ55">To Add, Remove, or Edit Normal ACL Permissions</link>. Keep in mind that the usual meaning
+               of each permission is reversed.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-negative</emphasis></term>
+ 
+             <listitem>
+               <para>Places the entries defined by the <emphasis role="bold">-acl</emphasis> argument on the negative permissions
+               section of the ACL for each directory named by the <emphasis role="bold">-dir</emphasis> argument.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="Header_102">
+       <title>Example: Setting an Entry in the Negative Permissions Section</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>creating entry on negative permissions section of ACL</secondary>
+       </indexterm>
+ 
+       <para>User <emphasis role="bold">terry</emphasis> has granted all access permissions except <emphasis role="bold">a</emphasis>
+       to the group <emphasis role="bold">terry:team</emphasis> on her <emphasis role="bold">plans</emphasis> subdirectory.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">cd /afs/abc.com/usr/terry</emphasis>
+    % <emphasis role="bold">fs listacl plans</emphasis>
+    Access control list for plans is
+    Normal rights:
+       system:anyuser rl
+       terry:team rlidwk
+       terry  rlidwka
+ </programlisting>
+ 
+       <para>However, <emphasis role="bold">terry</emphasis> notices that one of the members of the group, user <emphasis
+       role="bold">pat</emphasis>, has been making inappropriate changes to files. To prevent this without removing <emphasis
+       role="bold">pat</emphasis> from the group or changing the permissions for the <emphasis role="bold">terry:team</emphasis>
+       group, <emphasis role="bold">terry</emphasis> creates an entry on the negative permissions section of the ACL that denies the
+       <emphasis role="bold">w</emphasis> and <emphasis role="bold">d</emphasis> permissions to <emphasis
+       role="bold">pat</emphasis>:</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl plans pat wd -negative</emphasis>
+    % <emphasis role="bold">fs listacl plans</emphasis>
+    Access control list for plans is
+    Normal rights:
+       system:anyuser rl
+       terry:team rlidwk
+       terry: rlidwka
+    Negative rights:
+       pat wd
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_103">
+       <title>Example: Restoring Access by Removing an Entry from the Negative Permissions Section</title>
+ 
+       <para>In the previous example, user <emphasis role="bold">terry</emphasis> put <emphasis role="bold">pat</emphasis> on the
+       negative permissions section of ACL for the <emphasis role="bold">plans</emphasis> subdirectory. But the result has been
+       inconvenient and <emphasis role="bold">pat</emphasis> has promised not to change files any more. To enable <emphasis
+       role="bold">pat</emphasis> to exercise all permissions granted to the members of the <emphasis
+       role="bold">terry:team</emphasis> group, <emphasis role="bold">terry</emphasis> removes the entry for <emphasis
+       role="bold">pat</emphasis> from the negative permissions section of the ACL.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl plans pat  none -negative</emphasis>
+    % <emphasis role="bold">fs listacl plans</emphasis>
+    Access control list for plans is
+    Normal rights:
+       system:anyuser rl
+       terry:team rlidwk
+       terry  rlidwka
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ57">
+     <title>Completely Replacing an ACL</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>replacing all entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>clearing</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>replacing</primary>
+ 
+       <secondary>all entries on ACL</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>erasing all ACL entries</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>clearing all ACL entries</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>all ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>replacing ACL</secondary>
+     </indexterm>
+ 
+     <para>It is sometimes simplest to clear an ACL completely before defining new permissions on it, for instance if the mix of
+     normal and negative permissions makes it difficult to understand how their interaction affects access to the directory. To clear
+     an ACL completely while you define new entries, include the <emphasis role="bold">-clear</emphasis> flag on the <emphasis
+     role="bold">fs setacl</emphasis> command. When you include this flag, you can create entries on either the normal permissions or
+     the negative permissions section of the ACL, but not on both at once.</para>
+ 
+     <para>Remember to create an entry for yourself. As the owner of the directory, you always have the <emphasis
+     role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission required to replace a deleted entry, but the
+     effects the effects of a missing ACL entry can be confusing enough to make it difficult to realize that the problem is a missing
+     entry. In particular, the lack of the <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>) permission
+     prevents you from using any shorthand notation in pathnames (such as a period for the current working directory or two periods
+     for the parent directory).</para>
+ 
+     <sect2 id="Header_105">
+       <title>To Replace an ACL Completely</title>
+ 
+       <para>Issue the <emphasis role="bold">fs setacl</emphasis> command with the <emphasis role="bold">-clear</emphasis> flag to
+       clear the ACL completely before setting either normal or negative permissions. Because you need to grant the owner of the
+       directory all permissions, it is better in most cases to set normal permissions at this point. <indexterm>
+           <primary>fs commands</primary>
+ 
+           <secondary>setacl</secondary>
+ 
+           <tertiary>completely replacing ACL</tertiary>
+         </indexterm></para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl  -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;<superscript>+</superscript> <emphasis
+           role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;<superscript>+</superscript> <emphasis
+           role="bold">-clear</emphasis>  [<emphasis role="bold">-negative</emphasis>]
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">sa</emphasis></term>
+ 
+             <listitem>
+               <para>Is an acceptable alias for <emphasis role="bold">setacl</emphasis> (and <emphasis role="bold">seta</emphasis> is
+               the shortest acceptable abbreviation).</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-dir</emphasis></term>
+ 
+             <listitem>
+               <para>Names one or more directories to which to apply the ACL entries defined by the <emphasis
+               role="bold">-acl</emphasis> argument. For a detailed description of acceptable values, see <link linkend="HDRWQ55">To
+               Add, Remove, or Edit Normal ACL Permissions</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-acl</emphasis></term>
+ 
+             <listitem>
+               <para>Specifies one or more ACL entries, each of which pairs a user or group name and a set of permissions. Separate
+               the pairs, and the two parts of each pair, with one or more spaces. Remember to grant all permissions to the owner of
+               the directory. For a detailed description of acceptable values, see <link linkend="HDRWQ55">To Add, Remove, or Edit
+               Normal ACL Permissions</link>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-clear</emphasis></term>
+ 
+             <listitem>
+               <para>Removes all entries from each ACL before creating the entries indicated by the <emphasis
+               role="bold">-acl</emphasis> argument.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-negative</emphasis></term>
+ 
+             <listitem>
+               <para>Places the entries defined by the <emphasis role="bold">-acl</emphasis> argument on the negative permissions
+               section of each ACL.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="Header_106">
+       <title>Example: Replacing an ACL</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>replacing an ACL</secondary>
+       </indexterm>
+ 
+       <para>The following example clears the ACL on the current working directory and creates entries that grant all permissions to
+       user <emphasis role="bold">terry</emphasis> and all permissions except <emphasis role="bold">a</emphasis> to user <emphasis
+       role="bold">pat</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs setacl . terry all pat write -clear</emphasis>
+    % <emphasis role="bold">fs listacl .</emphasis>
+    Access control list for . is
+    Normal rights:
+      terry rlidwka
+      pat rlidwk
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ58">
+     <title>Copying ACLs Between Directories</title>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>copying between directories</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>ACL as copy of another</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>copying</primary>
+ 
+       <secondary>ACL between directories</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>directories</primary>
+ 
+       <secondary>copying ACLs between</secondary>
+     </indexterm>
+ 
+     <para>The <emphasis role="bold">fs copyacl</emphasis> command copies a source directory's ACL to one or more destination
+     directories. It does not affect the source ACL at all, but changes each destination ACL as follows: <itemizedlist>
+         <listitem>
+           <para>If an entry on the source ACL does not exist on the destination ACL, the command copies it to the destination
+           ACL.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If an entry on the destination ACL does not also exist on the source ACL, the command does not remove it unless you
+           include the <emphasis role="bold">-clear</emphasis> flag, which overwrites the destination ACL completely.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>If an entry is on both ACLs, the command changes the destination ACL entry to match the source ACL entry.</para>
+         </listitem>
+       </itemizedlist></para>
+ 
+     <para>To copy an ACL, you must have the <emphasis role="bold">l</emphasis> permission on the source ACL and the <emphasis
+     role="bold">a</emphasis> permission on each destination ACL. If you identify the source directory by naming a file in it, you
+     must also have the <emphasis role="bold">r</emphasis> permission on the source ACL. To display the permissions you have on the
+     two directories, use the <emphasis role="bold">fs listacl</emphasis> command as described in <link linkend="HDRWQ52">Displaying
+     an ACL</link>.</para>
+ 
+     <para><emphasis role="bold">Note for AFS/DFS Migration Toolkit users:</emphasis> If the machine on which you issue the <emphasis
+     role="bold">fs copyacl</emphasis> command is configured for access to a DCE cell's DFS filespace via the AFS/DFS Migration
+     Toolkit, you can use the command to copy ACLs between DFS files and directories also. The command includes <emphasis
+     role="bold">-id</emphasis> and <emphasis role="bold">-if</emphasis> flags for altering a DFS directory's Initial Container and
+     Initial Object ACLs as well as its regular ACL; for details, ask your system administrator. You cannot copy ACLs between AFS and
+     DFS directories, because they use different ACL formats. The <emphasis role="bold">fs</emphasis> command interpreter ignores the
+     <emphasis role="bold">-id</emphasis> and <emphasis role="bold">-if</emphasis> flags if you include them when copying AFS
+     ACLs.</para>
+ 
+     <sect2 id="Header_108">
+       <title>To Copy an ACL Between Directories</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs copyacl</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>copyacl</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs copyacl</emphasis> command to copy a source ACL to the ACL on one or more destination
+       directories.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs copyacl -fromdir</emphasis> &lt;<replaceable>source directory</replaceable>&gt; <emphasis role="bold">-todir</emphasis> &lt;<replaceable>destination directory</replaceable>&gt;<superscript>+</superscript>  \
+                 [<emphasis role="bold">-clear</emphasis>]
+ </programlisting>
+ 
+       <para>where <variablelist>
+           <varlistentry>
+             <term><emphasis role="bold">co</emphasis></term>
+ 
+             <listitem>
+               <para>Is the shortest acceptable abbreviation for <emphasis role="bold">copyacl</emphasis>.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-fromdir</emphasis></term>
+ 
+             <listitem>
+               <para>Names the source directory from which to copy the ACL. Partial pathnames are interpreted relative to the current
+               working directory. If this argument names a file, the ACL is copied from its directory.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-todir</emphasis></term>
+ 
+             <listitem>
+               <para>Names each destination directory to which to copy the source ACL. Partial pathnames are interpreted relative to
+               the current working directory. Filenames are not acceptable.</para>
+             </listitem>
+           </varlistentry>
+ 
+           <varlistentry>
+             <term><emphasis role="bold">-clear</emphasis></term>
+ 
+             <listitem>
+               <para>Completely overwrites each destination directory's ACL with the source ACL.</para>
+             </listitem>
+           </varlistentry>
+         </variablelist></para>
+     </sect2>
+ 
+     <sect2 id="Header_109">
+       <title>Example: Copying an ACL from One Directory to Another</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>copying ACL between directories</secondary>
+       </indexterm>
+ 
+       <para>In this example, user <emphasis role="bold">terry</emphasis> copies the ACL from her home directory (the current working
+       directory) to its <emphasis role="bold">plans</emphasis> subdirectory. She begins by displaying both ACLs.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listacl . plans</emphasis>
+    Access list for . is
+    Normal rights:
+       terry rlidwka
+       pat rlidwk
+       jones rl
+    Access list for plans is
+    Normal rights:
+       terry rlidwka
+       pat rl
+       smith rl   
+      
+   % <emphasis role="bold">fs copyacl -from . -to plans</emphasis>
+    
+    % <emphasis role="bold">fs listacl . plans</emphasis>
+    Access list for . is
+    Normal rights:
+       terry rlidwka
+       pat rlidwk
+       jones rl
+    Access list for plans is
+    Normal rights:
+       terry rlidwka
+       pat rlidwk
+       jones rl
+       smith rl   
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ59">
+     <title>How AFS Uses the UNIX Mode Bits</title>
+ 
+     <indexterm>
+       <primary>UNIX, differences with AFS</primary>
+ 
+       <secondary>mode bits, interpretation</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>mode bits (UNIX)</primary>
+ 
+       <secondary>interpretation in AFS</secondary>
+     </indexterm>
+ 
+     <para>Although AFS protects data primarily with ACLs rather than mode bits, it does not ignore the mode bits entirely. An
+     explanation of how mode bits work in the UNIX file system is outside the scope of this document, and the following discussion
+     assumes you understand them; if necessary, see your UNIX documentation. Also, the following discussion does not cover the
+     setuid, setgid or sticky bits. If you need to understand how those bits work on AFS files, see the <emphasis>OpenAFS
+     Administration Guide</emphasis> or ask your system administrator.</para>
+ 
+     <para>AFS uses the UNIX mode bits in the following way:</para>
+ 
+     <itemizedlist>
+       <listitem>
+         <para>It uses the initial bit to distinguish files and directories. This is the bit that appears first in the output from
+         the <emphasis role="bold">ls -l</emphasis> command and shows the hyphen (<computeroutput>-</computeroutput>) for a file or
+         the letter <computeroutput>d</computeroutput> for a directory.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>It does not use any of the mode bits on a directory. The AFS ACL alone controls directory access.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>For a file, the owner (first) set of bits interacts with the ACL entries that apply to the file in the following way.
+         AFS does not use the group or world (second and third sets) of mode bits at all. <itemizedlist>
+             <listitem>
+               <para>If the first <emphasis role="bold">r</emphasis> mode bit is not set, no one (including the owner) can read the
+               file, no matter what permissions they have on the ACL. If the bit is set, users also need the <emphasis
+               role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions on the ACL of the file's directory to read
+               the file.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>If the first <emphasis role="bold">w</emphasis> mode bit is not set, no one (including the owner) can modify the
+               file. If the <emphasis role="bold">w</emphasis> bit is set, users also need the <emphasis role="bold">w</emphasis> and
+               <emphasis role="bold">l</emphasis> permissions on the ACL of the file's directory to modify the file.</para>
+             </listitem>
+ 
+             <listitem>
+               <para>There is no ACL permission directly corresponding to the <emphasis role="bold">x</emphasis> mode bit, but to
+               execute a file stored in AFS, the user must also have the <emphasis role="bold">r</emphasis> and <emphasis
+               role="bold">l</emphasis> permissions on the ACL of the file's directory.</para>
+             </listitem>
+           </itemizedlist></para>
+       </listitem>
+     </itemizedlist>
+ 
+     <para>When you issue the UNIX <emphasis role="bold">chmod</emphasis> command on an AFS file or directory, AFS changes the bits
+     appropriately. To change a file's mode bits, you must have the AFS <emphasis role="bold">w</emphasis> permission on the ACL of
+     the file's directory. To change a directory's mode bits, you must have the <emphasis role="bold">d</emphasis>, <emphasis
+     role="bold">i</emphasis>, and <emphasis role="bold">l</emphasis> permissions on its ACL. <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>chmod</secondary>
+       </indexterm> <indexterm>
+         <primary>chmod command</primary>
+       </indexterm></para>
+ 
+     <sect2 id="Header_111">
+       <title>Example: Disabling Write Access for a File</title>
+ 
+       <para><indexterm>
+           <primary>examples</primary>
+ 
+           <secondary>using chmod</secondary>
+         </indexterm></para>
+ 
+       <para>Suppose <emphasis role="bold">terry</emphasis> is chairing a committee that is writing a proposal. As each section is
+       approved, she turns off write access to that file to prevent further changes. For example, the following <emphasis
+       role="bold">chmod</emphasis> command turns off the <emphasis role="bold">w</emphasis> mode bits on the file <emphasis
+       role="bold">proposal.chap2</emphasis>. This makes it impossible for anyone to change the file, no matter what permissions are
+       granted on the directory ACL.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">chmod -w proposal.chap2</emphasis>
+    % <emphasis role="bold">ls -l</emphasis>
+    -rw-r--r--  1 terry     573 Nov 10 09:57 conclusion
+    -r--r--r--  1 terry     573 Nov 15 10:34 intro
+    -r--r--r--  1 terry     573 Dec  1 15:07 proposal.chap2
+    -rw-r--r--  1 terry     573 Nov 10 09:57 proposal.chap3
+    -rw-r--r--  1 terry     573 Nov 10 09:57 proposal.chap4
+ </programlisting>
+     </sect2>
+   </sect1>
+ </chapter>
Index: openafs/doc/xml/UserGuide/auusg008.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg008.xml:1.1.10.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg008.xml	Mon May 11 11:12:32 2009
***************
*** 0 ****
--- 1,1516 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ60">
+   <title>Using Groups</title>
+ 
+   <para>This chapter explains how to create groups and discusses different ways to use them.</para>
+ 
+   <sect1 id="HDRWQ61">
+     <title>About Groups</title>
+ 
+     <para>An AFS <emphasis>group</emphasis> is a list of specific users that you can place on access control lists (ACLs). Groups
+     make it much easier to maintain ACLs. Instead of creating an ACL entry for every user individually, you create one entry for a
+     group to which the users belong. Similarly, you can grant a user access to many directories at once by adding the user to a
+     group that appears on the relevant ACLs.</para>
+ 
+     <para>AFS client machines can also belong to a group. Anyone logged into the machine inherits the permissions granted to the
+     group on an ACL, even if they are not authenticated with AFS. In general, groups of machines are useful only to system
+     administrators, for specialized purposes like complying with licensing agreements your cell has with software vendors. Talk with
+     your system administrator before putting a client machine in a group or using a machine group on an ACL. <indexterm>
+         <primary>machines</primary>
+ 
+         <secondary>as members of groups</secondary>
+       </indexterm> <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>machines as members</secondary>
+       </indexterm></para>
+ 
+     <para>To learn about AFS file protection and how to add groups to ACLs, see <link linkend="HDRWQ44">Protecting Your Directories
+     and Files</link>.</para>
+ 
+     <sect2 id="HDRWQ62">
+       <title>Suggestions for Using Groups Effectively</title>
+ 
+       <para>There are three typical ways to use groups, each suited to a particular purpose: private use, shared use, and group use.
+       The following are only suggestions. You are free to use groups in any way you choose.</para>
+ 
+       <itemizedlist>
+         <listitem>
+           <para><emphasis>Private use</emphasis>: you create a group and place it on the ACL of directories you own, without
+           necessarily informing the group's members that they belong to it. Members notice only that they can or cannot access the
+           directory in a certain way. You retain sole administrative control over the group, since you are the owner. <indexterm>
+               <primary>private use of group</primary>
+             </indexterm> <indexterm>
+               <primary>groups</primary>
+ 
+               <secondary>private use</secondary>
+             </indexterm></para>
+ 
+           <para>The existence of the group and the identity of its members is not necessarily secret. Other users can see the
+           group's name on an ACL when they use the <emphasis role="bold">fs listacl</emphasis> command, and can use the <emphasis
+           role="bold">pts membership</emphasis> command to display + the groups to which they themselves belong. You can, however,
+           limit who can display the members of the group, as described in <link linkend="HDRWQ74">Protecting Group-Related
+           Information</link>.</para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>Shared use</emphasis>: you inform the group's members that they belong to the group, but you are the
+           group's sole owner and administrator. For example, the manager of a work group can create a group of all the members in
+           the work group, and encourage them to use it on the ACLs of directories that house information they want to share with
+           other members of the group. <indexterm>
+               <primary>shared use of group</primary>
+             </indexterm> <indexterm>
+               <primary>groups</primary>
+ 
+               <secondary>shared use</secondary>
+             </indexterm> <note>
+               <para>If you place a group owned by someone else on your ACLs, the group's owner can change the group's membership
+               without informing you. Someone new can gain or lose access in a way you did not intend and without your
+               knowledge.</para>
+             </note></para>
+         </listitem>
+ 
+         <listitem>
+           <para><emphasis>Group use</emphasis>: you create a group and then use the <emphasis role="bold">pts chown</emphasis>
+           command to assign ownership to a group--either another group or the group itself (the latter type is a
+           <emphasis>self-owned</emphasis> group). You inform the members of the owning group that they all can administer the owned
+           group. For instructions for the <emphasis role="bold">pts chown</emphasis> command, see <link linkend="HDRWQ73">To Change
+           a Group's Owner</link>. <indexterm>
+               <primary>group use of group</primary>
+             </indexterm> <indexterm>
+               <primary>self-owned group</primary>
+             </indexterm> <indexterm>
+               <primary>groups</primary>
+ 
+               <secondary>group use</secondary>
+             </indexterm> <indexterm>
+               <primary>groups</primary>
+ 
+               <secondary>group-owned groups</secondary>
+             </indexterm> <indexterm>
+               <primary>groups</primary>
+ 
+               <secondary>self-owned groups</secondary>
+             </indexterm></para>
+ 
+           <para>The main advantage of designating a group as an owner is that several people share responsibility for administering
+           the group. A single person does not have to perform all administrative tasks, and if the group's original owner leaves the
+           cell, there are still other people who can administer it.</para>
+ 
+           <para>However, everyone in the owner group can make changes that affect others negatively: adding or removing people from
+           the group inappropriately or changing the group's ownership to themselves exclusively. These problems can be particularly
+           sensitive in a self-owned group. Using an owner group works best if all the members know and trust each other; it is
+           probably wise to keep the number of people in an owner group small.</para>
+         </listitem>
+       </itemizedlist>
+     </sect2>
+ 
+     <sect2 id="HDRWQ63">
+       <title>Group Names</title>
+ 
+       <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>naming conventions</secondary>
+       </indexterm>
+ 
+       <para>The groups you create must have names with two parts, in the following format:</para>
+ 
+       <para><replaceable>owner_name</replaceable><emphasis role="bold">:</emphasis><replaceable>group_name</replaceable></para>
+ 
+       <para>The <replaceable>owner_name</replaceable> prefix indicates which user or group owns the group (naming rules appear in
+       <link linkend="HDRWQ69">To Create a Group</link>). The <replaceable>group_name</replaceable> part indicates the group's
+       purpose or its members' common interest. Group names must always be typed in full, so a short
+       <replaceable>group_name</replaceable> is most practical. However, names like <emphasis role="bold">terry:1</emphasis> and
+       <emphasis role="bold">terry:2</emphasis> that do not indicate the group's purpose are less useful than names like <emphasis
+       role="bold">terry:project</emphasis>.</para>
+ 
+       <para>Groups that do not have the <replaceable>owner_name</replaceable> prefix possibly appear on some ACLs; they are created
+       by system administrators only. All of the groups you create must have an <replaceable>owner_name</replaceable> prefix.</para>
+     </sect2>
+ 
+     <sect2 id="Header_116">
+       <title>Group-creation Quota</title>
+ 
+       <indexterm>
+         <primary>group-creation quota</primary>
+ 
+         <secondary>defined</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>creation quota</secondary>
+       </indexterm>
+ 
+       <para>By default, you can create 20 groups, but your system administrators can change your <emphasis>group-creation
+       quota</emphasis> if appropriate. When you create a group, your group quota decrements by one. When a group that you created is
+       deleted, your quota increments by one, even if you are no longer the owner. You cannot increase your quota by transferring
+       ownership of a group to someone else, because you are always recorded as the creator.</para>
+ 
+       <para>If you exhaust your group-creation quota and need to create more groups, ask your system administrator. For instructions
+       for displaying your group-creation quota, see <link linkend="HDRWQ67">To Display A Group Entry</link>.</para>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ64">
+     <title>Displaying Group Information</title>
+ 
+     <indexterm>
+       <primary>displaying</primary>
+ 
+       <secondary>group information</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>displaying information</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>users</primary>
+ 
+       <secondary>displaying group information</secondary>
+     </indexterm>
+ 
+     <para>You can use the following commands to display information about groups and the users who belong to them:</para>
+ 
+     <itemizedlist>
+       <listitem>
+         <para>To display the members of a group, or the groups to which a user belongs, use the <emphasis role="bold">pts
+         membership</emphasis> command.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>To display the groups that a user or group owns, use the <emphasis role="bold">pts listowned</emphasis>
+         command.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>To display general information about a user or group, including its name, AFS ID, creator, and owner, use the
+         <emphasis role="bold">pts examine</emphasis> command.</para>
+       </listitem>
+     </itemizedlist>
+ 
+     <note>
+       <para>The <emphasis role="bold">system:anyuser</emphasis> and <emphasis role="bold">system:authuser</emphasis> system groups
+       do not appear in a user's list of group memberships, and the <emphasis role="bold">pts membership</emphasis> command does not
+       display their members. For more information on the system groups, see <link linkend="HDRWQ50">Using the System Groups on
+       ACLs</link>.</para>
+     </note>
+ 
+     <sect2 id="HDRWQ65">
+       <title>To Display Group Membership</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts membership</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>membership</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts membership</emphasis> command to display the members of a group, or the groups to
+       which a user belongs.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts membership</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>where <replaceable>user or group name or id</replaceable> specifies the name or AFS UID of each user for which to
+       display group membership, or the name or AFS GID of each group for which to display the members. If identifying a group by its
+       AFS GID, precede the GID with a hyphen (<emphasis role="bold">-</emphasis>) to indicate that it is a negative number.</para>
+     </sect2>
+ 
+     <sect2 id="Header_119">
+       <title>Example: Displaying the Members of a Group</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying members of a group</secondary>
+       </indexterm>
+ 
+       <para>The following example displays the members of the group <emphasis role="bold">terry:team</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts membership terry:team</emphasis>
+    Members of terry:team (id: -286) are:
+      terry
+      smith 
+      pat
+      johnson
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_120">
+       <title>Example: Displaying the Groups to Which a User Belongs</title>
+ 
+       <para>The following example displays the groups to which users <emphasis role="bold">terry</emphasis> and <emphasis
+       role="bold">pat</emphasis> belong.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts membership terry pat</emphasis>
+    Groups terry (id: 1022) is a member of:
+      smith:friends
+      pat:accounting
+      terry:team
+    Groups pat (id: 1845) is a member of:
+      pat:accounting
+      sam:managers
+      terry:team
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ66">
+       <title>To Display the Groups a User or Group Owns</title>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>groups owned by a group</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts listowned</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>users</primary>
+ 
+         <secondary>listing groups owned</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>listing groups owned</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>listowned</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts listowned</emphasis> command to display the groups that a user or group owns.</para>
+ 
+       <programlisting>
+    %  <emphasis role="bold">pts listowned</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>where <replaceable>user or group name or id</replaceable> specifies the name or AFS UID of each user, or the name or AFS
+       GID of each group, for which to display group ownership. If identifying a group by its AFS GID, precede the GID with a hyphen
+       (<emphasis role="bold">-</emphasis>) to indicate that it is a negative number.</para>
+     </sect2>
+ 
+     <sect2 id="Header_122">
+       <title>Example: Displaying the Groups a Group Owns</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying groups a group owns</secondary>
+       </indexterm>
+ 
+       <para>The following example displays the groups that the group <emphasis role="bold">terry:team</emphasis> owns.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts listowned -286</emphasis>
+    Groups owned by terry:team (id: -286) are:
+      terry:project
+      terry:planners
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_123">
+       <title>Example: Displaying the Groups a User Owns</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying groups a user owns</secondary>
+       </indexterm>
+ 
+       <para>The following example displays the groups that user <emphasis role="bold">pat</emphasis> owns.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts listowned pat</emphasis>
+    Groups owned by pat (id: 1845) are:
+       pat:accounting
+       pat:plans
+    
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ67">
+       <title>To Display A Group Entry</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts examine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>examine</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>group owner</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>group creator</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>displaying</primary>
+ 
+         <secondary>group-creation quota</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>owner, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>creator, displaying</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>users</primary>
+ 
+         <secondary>displaying number of group memberships</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>group-creation quota</primary>
+ 
+         <secondary>displaying</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts examine</emphasis> command to display general information about a user or group,
+       including its name, AFS ID, creator, and owner.</para>
+ 
+       <programlisting>
+    %  <emphasis role="bold">pts examine</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>where <replaceable>user or group name or id</replaceable> specifies the name or AFS UID of each user, or the name or AFS
+       GID of each group, for which to display group-related information. If identifying a group by its AFS GID, precede the GID with
+       a hyphen (<emphasis role="bold">-</emphasis>) to indicate that it is a negative number.</para>
+ 
+       <para>The output includes information in the following fields:</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>Name</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>For users, this is the character string typed when logging in. For machines, the name is the IP address; a zero in
+             address field acts as a wildcard, matching any value. For most groups, this is a name of the form
+             <replaceable>owner_name</replaceable><emphasis role="bold">:</emphasis><replaceable>group_name</replaceable>. Some
+             groups created by your system administrator do not have the <replaceable>owner_name</replaceable> prefix. See <link
+             linkend="HDRWQ63">Group Names</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>id</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>This is a unique identification number that the AFS server processes use internally. It is similar in function to
+             a UNIX UID, but operates in AFS rather than the UNIX file system. Users and machines have positive integer AFS user IDs
+             (UIDs), and groups have negative integer AFS group IDs (GIDs). <indexterm>
+                 <primary>AFS</primary>
+ 
+                 <secondary>UIDs and GIDs</secondary>
+               </indexterm> <indexterm>
+                 <primary>GID, AFS</primary>
+               </indexterm> <indexterm>
+                 <primary>UID, AFS</primary>
+               </indexterm></para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>owner</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>This is the user or group that owns the entry and so can administer it.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>creator</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>The name of the user who issued the <emphasis role="bold">pts createuser</emphasis> and <emphasis role="bold">pts
+             creategroup</emphasis> command to create the entry. This field is useful mainly as an audit trail and cannot be
+             changed.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>membership</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>For users and machines, this indicates how many groups the user or machine belongs to. For groups, it indicates
+             how many members belong to the group. This number cannot be set explicitly.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>flags</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>This field indicates who is allowed to list certain information about the entry or change it in certain ways. See
+             <link linkend="HDRWQ74">Protecting Group-Related Information</link>.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><computeroutput>group quota</computeroutput></emphasis></term>
+ 
+           <listitem>
+             <para>This field indicates how many more groups a user is allowed to create. It is set to 20 when a user entry is
+             created. The creation quota for machines or groups is meaningless because it not possible to authenticate as a machine
+             or group.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_125">
+       <title>Example: Listing Information about a Group</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying information about group</secondary>
+       </indexterm>
+ 
+       <para>The following example displays information about the group <emphasis role="bold">pat:accounting</emphasis>, which
+       includes members of the department that <emphasis role="bold">pat</emphasis> manages. Notice that the group is self-owned,
+       which means that all of its members can administer it.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts examine pat:accounting</emphasis>
+    Name: pat:accounting, id: -673, owner: pat:accounting, creator: pat,
+      membership: 15, flags: S-M--, group quota: 0
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_126">
+       <title>Example: Listing Group Information about a User</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>displaying group information about a user</secondary>
+       </indexterm>
+ 
+       <para>The following example displays group-related information about user <emphasis role="bold">pat</emphasis>. The two most
+       interesting fields are <computeroutput>membership</computeroutput>, which shows that <emphasis role="bold">pat</emphasis>
+       belongs to 12 groups, and <computeroutput>group quota</computeroutput>, which shows that <emphasis role="bold">pat</emphasis>
+       can create another 17 groups.</para>
+ 
+       <programlisting>
+   % <emphasis role="bold">pts examine pat</emphasis>
+    Name: pat, id: 1045, owner: system:administrators, creator: admin, 
+      membership: 12, flags: S-M--, group quota: 17
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ68">
+     <title>Creating Groups and Adding Members</title>
+ 
+     <indexterm>
+       <primary>adding</primary>
+ 
+       <secondary>users to groups</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>creating</primary>
+ 
+       <secondary>groups</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>creating</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>adding members</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>owner as administrator</secondary>
+     </indexterm>
+ 
+     <para>Use the <emphasis role="bold">pts creategroup</emphasis> command to create a group and the <emphasis role="bold">pts
+     adduser</emphasis> command to add members to it. Users and machines can belong to groups, but other groups cannot.</para>
+ 
+     <para>When you create a group, you normally become its owner automatically. This means you alone can administer it: add and
+     remove members, change the group's name, transfer ownership of the group, or delete the group entirely. If you wish, you can
+     designate another owner when you create the group, by including the <emphasis role="bold">-owner</emphasis> argument to the
+     <emphasis role="bold">pts creategroup</emphasis> command. If you assign ownership to another group, the owning group must
+     already exist and have at least one member. You can also change a group's ownership after creating it by using the <emphasis
+     role="bold">pts chown</emphasis> command as described in <link linkend="HDRWQ72">Changing a Group's Owner or Name</link>.</para>
+ 
+     <sect2 id="HDRWQ69">
+       <title>To Create a Group</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts creategroup</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>creategroup</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts creategroup</emphasis> command to create a group. Your group-creation quota
+       decrements by one for each group.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts creategroup -name</emphasis> &lt;<replaceable>group name</replaceable>&gt;+ [<emphasis role="bold">-owner</emphasis> &lt;<replaceable>owner of the group</replaceable>&gt;]
+ </programlisting>
+ 
+       <para>where</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">cg</emphasis></term>
+ 
+           <listitem>
+             <para>Is an alias for <emphasis role="bold">creategroup</emphasis> (and <emphasis role="bold">createg</emphasis> is the
+             shortest acceptable abbreviation).</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-name</emphasis></term>
+ 
+           <listitem>
+             <para>Names each group to create. The name must have the following format:</para>
+ 
+             <para><replaceable>owner_name</replaceable><emphasis
+             role="bold">:</emphasis><replaceable>group_name</replaceable></para>
+ 
+             <para>The <replaceable>owner_name</replaceable> prefix must accurately indicate the group's owner. By default, you are
+             recorded as the owner, and the <replaceable>owner_name</replaceable> must be your AFS username. You can include the
+             <emphasis role="bold">-owner</emphasis> argument to designate another AFS user or group as the owner, as long as you
+             provide the required value in the <replaceable>owner_name</replaceable> field: <indexterm>
+                 <primary>groups</primary>
+ 
+                 <secondary>rules for assigning ownership</secondary>
+               </indexterm> <indexterm>
+                 <primary>rules for assigning group names</primary>
+               </indexterm></para>
+ 
+             <itemizedlist>
+               <listitem>
+                 <para>If the owner is a user, it must be the AFS username.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If the owner is another regular group, it must match the owning group's <replaceable>owner_name</replaceable>
+                 field. For example, if the owner is the group <emphasis role="bold">terry:associates</emphasis>, the owner field
+                 must be <emphasis role="bold">terry</emphasis>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>If the owner is a group without an <replaceable>owner_name</replaceable> prefix, it must be the owning group's
+                 name.</para>
+               </listitem>
+             </itemizedlist>
+ 
+             <para>The name can include up to 63 characters including the colon. Use numbers and lowercase letters, but no spaces or
+             punctuation characters other than the colon.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-owner</emphasis></term>
+ 
+           <listitem>
+             <para>Is optional and assigns ownership to a user other than yourself, or to a group. If you specify a group, it must
+             already exist and have at least one member. (This means that to make a group self-owned, you must issue the <emphasis
+             role="bold">pts chown</emphasis> command after using this command to create the group, and the <emphasis role="bold">pts
+             adduser</emphasis> command to add a member. See <link linkend="HDRWQ72">Changing a Group's Owner or Name</link>.)</para>
+ 
+             <para>Do not name a machine as the owner. Because no one can authenticate as a machine, there is no way to administer a
+             group owned by a machine.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_129">
+       <title>Example: Creating a Group</title>
+ 
+       <para><indexterm>
+           <primary>examples</primary>
+ 
+           <secondary>creating a group</secondary>
+         </indexterm></para>
+ 
+       <para>In the following example user <emphasis role="bold">terry</emphasis> creates a group to include all the other users in
+       his work team, and then examines the new group entry.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts creategroup terry:team</emphasis>
+    group terry:team has id -286
+    % <emphasis role="bold">pts examine terry:team</emphasis>
+    Name: terry:team, id: -286, owner: terry, creator: terry, 
+      membership: 0, flags: S----, group quota: 0.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="HDRWQ70">
+       <title>To Add Members to a Group</title>
+ 
+       <indexterm>
+         <primary>groups</primary>
+ 
+         <secondary>adding members</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts adduser</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>adduser</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>users</primary>
+ 
+         <secondary>adding as group members</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts adduser</emphasis> command to add one or more users to one or more groups. You can
+       always add members to a group you own (either directly or because you belong to the owning group). If you belong to a group,
+       you can add members if its fourth privacy flag is the lowercase letter <emphasis role="bold">a</emphasis>; see <link
+       linkend="HDRWQ74">Protecting Group-Related Information</link>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts adduser -user</emphasis> &lt;<replaceable>user name</replaceable>&gt;<superscript>+</superscript> <emphasis
+           role="bold">-group</emphasis> &lt;<replaceable>group name</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>You must add yourself to groups that you own, if that is appropriate. You do not belong automatically just because you
+       own the group.</para>
+ 
+       <note>
+         <para>If you already have a token when you are added to a group, you must issue the <emphasis role="bold">klog</emphasis>
+         command to reauthenticate before you can exercise the permissions granted to the group on ACLs.</para>
+       </note>
+ 
+       <para>where</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">-user</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the username of each user to add to the groups named by the <emphasis role="bold">-group</emphasis>
+             argument. Groups cannot belong to other groups.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-group</emphasis></term>
+ 
+           <listitem>
+             <para>Names each group to which to add users.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_131">
+       <title>Example: Adding Members to a Group</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>adding members to a group</secondary>
+       </indexterm>
+ 
+       <para>In this example, user <emphasis role="bold">terry</emphasis> adds himself, <emphasis role="bold">pat</emphasis>,
+       <emphasis role="bold">indira</emphasis>, and <emphasis role="bold">smith</emphasis> to the group he just created, <emphasis
+       role="bold">terry:team</emphasis>, and then verifies the new list of members.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts adduser -user terry pat indira smith -group terry:team</emphasis>
+    % <emphasis role="bold">pts members terry:team</emphasis>
+    Members of terry:team (id: -286) are:
+      terry
+      pat
+      indira
+      smith
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ71">
+     <title>Removing Users from a Group and Deleting a Group</title>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>removing members</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>deleting</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>users from groups</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>deleting groups</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>users from groups</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>users</primary>
+ 
+       <secondary>removing from groups</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>removing</primary>
+ 
+       <secondary>obsolete ACL entries</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>ACL</primary>
+ 
+       <secondary>removing obsolete entries</secondary>
+     </indexterm>
+ 
+     <para>You can use the following commands to remove groups and their members:</para>
+ 
+     <itemizedlist>
+       <listitem>
+         <para>To remove a user from a group, use the <emphasis role="bold">pts removeuser</emphasis> command</para>
+       </listitem>
+ 
+       <listitem>
+         <para>To delete a group entirely, use the <emphasis role="bold">pts delete</emphasis> command</para>
+       </listitem>
+ 
+       <listitem>
+         <para>To remove deleted groups from ACLs, use the <emphasis role="bold">fs cleanacl</emphasis> command</para>
+       </listitem>
+     </itemizedlist>
+ 
+     <para>When a group that you created is deleted, your group-creation quota increments by one, even if you no longer own the
+     group.</para>
+ 
+     <para>When a group or user is deleted, its AFS ID appears on ACLs in place of its AFS name. You can use the <emphasis
+     role="bold">fs cleanacl</emphasis> command to remove these obsolete entries from ACLs on which you have the <emphasis
+     role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission.</para>
+ 
+     <sect2 id="Header_133">
+       <title>To Remove Members from a Group</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts removeuser</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>removeuser</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts removeuser</emphasis> command to remove one or more members from one or more groups.
+       You can always remove members from a group that you own (either directly or because you belong to the owning group). If you
+       belong to a group, you can remove members if its fifth privacy flag is the lowercase letter <emphasis
+       role="bold">r</emphasis>; see <link linkend="HDRWQ74">Protecting Group-Related Information</link>. (To display a group's
+       owner, use the <emphasis role="bold">pts examine</emphasis> command as described in <link linkend="HDRWQ67">To Display A Group
+       Entry</link>.)</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts removeuser -user</emphasis>  &lt;<replaceable>user name</replaceable>&gt;<superscript>+</superscript>  <emphasis
+           role="bold">-group</emphasis> &lt;<replaceable>group name</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>where</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">-user</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the username of each user to remove from the groups named by the <emphasis role="bold">-group</emphasis>
+             argument.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-group</emphasis></term>
+ 
+           <listitem>
+             <para>Names each group from which to remove users.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_134">
+       <title>Example: Removing Group Members</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>removing group members</secondary>
+       </indexterm>
+ 
+       <para>The following example removes user <emphasis role="bold">pat</emphasis> from both the <emphasis
+       role="bold">terry:team</emphasis> and <emphasis role="bold">terry:friends</emphasis> groups.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts removeuser  pat -group terry:team terry:friends</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_135">
+       <title>To Delete a Group</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts delete</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>delete</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts delete</emphasis> command to delete a group. You can always delete a group that you
+       own (either directly or because you belong to the owning group). To display a group's owner, use the <emphasis role="bold">pts
+       examine</emphasis> command as described in <link linkend="HDRWQ67">To Display A Group Entry</link>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts delete</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+       <para>where <replaceable>user or group name or id</replaceable> specifies the name or AFS UID of each user, or the name or AFS
+       GID of each group, to delete. If identifying a group by its AFS GID, precede the GID with a hyphen (<emphasis
+       role="bold">-</emphasis>) to indicate that it is a negative number.</para>
+     </sect2>
+ 
+     <sect2 id="Header_136">
+       <title>Example: Deleting a Group</title>
+ 
+       <para><indexterm>
+           <primary>examples</primary>
+ 
+           <secondary>deleting a group</secondary>
+         </indexterm></para>
+ 
+       <para>In the following example, the group <emphasis role="bold">terry:team</emphasis> is deleted.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts delete terry:team</emphasis>
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_137">
+       <title>To Remove Obsolete ACL Entries</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>fs cleanacl</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>fs commands</primary>
+ 
+         <secondary>cleanacl</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">fs cleanacl</emphasis> command to remove obsolete entries from ACLs after the
+       corresponding user or group has been deleted.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs cleanacl</emphasis> [&lt;<replaceable>dir/file path</replaceable>&gt;<superscript>+</superscript>]
+ </programlisting>
+ 
+       <para>where <replaceable>dir/file path</replaceable> name each directory for which to clean the ACL. If you omit this
+       argument, the current working directory's ACL is cleaned.</para>
+ 
+       <para><indexterm>
+           <primary>examples</primary>
+ 
+           <secondary>removing deleted groups from ACLs</secondary>
+         </indexterm></para>
+     </sect2>
+ 
+     <sect2 id="Header_138">
+       <title>Example: Removing an Obsolete ACL Entry</title>
+ 
+       <para>After the group <emphasis role="bold">terry:team</emphasis> is deleted, its AFS GID (-286) appears on ACLs instead of
+       its name. In this example, user <emphasis role="bold">terry</emphasis> cleans it from the ACL on the plans directory in his
+       home directory.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">fs listacl plans</emphasis>
+    Access list for plans is
+    Normal rights:
+      terry rlidwka
+      -268 rlidwk
+      sam rliw
+    % <emphasis role="bold">fs cleanacl plans</emphasis>
+    % <emphasis role="bold">fs listacl plans</emphasis>
+    Access list for plans is
+    Normal rights:
+      terry rlidwka
+      sam rliw
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ72">
+     <title>Changing a Group's Owner or Name</title>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>changing name</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>changing</primary>
+ 
+       <secondary>group owner</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>changing</primary>
+ 
+       <secondary>group name</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>changing owner</secondary>
+     </indexterm>
+ 
+     <para>To change a group's owner, use the <emphasis role="bold">pts chown</emphasis> command. To change its name, use the
+     <emphasis role="bold">pts rename</emphasis> command.</para>
+ 
+     <para>You can change the owner or name of a group that you own (either directly or because you belong to the owning group). You
+     can assign group ownership to another user, another group, or the group itself. If you are not already a member of the group and
+     need to be, use the <emphasis role="bold">pts adduser</emphasis> command before transferring ownership, following the
+     instructions in <link linkend="HDRWQ70">To Add Members to a Group</link>.</para>
+ 
+     <para>The <emphasis role="bold">pts chown</emphasis> command automatically changes a group's
+     <replaceable>owner_name</replaceable> prefix to indicate the new owner. If the new owner is a group, only its
+     <replaceable>owner_name</replaceable> prefix is used, not its entire name. However, the change in
+     <replaceable>owner_name</replaceable> prefix command does not propagate to any groups owned by the group whose owner is
+     changing. If you want their <replaceable>owner_name</replaceable> prefixes to indicate the correct owner, you must use the
+     <emphasis role="bold">pts rename</emphasis> command.</para>
+ 
+     <para>Otherwise, you normally use the <emphasis role="bold">pts rename</emphasis> command to change only the
+     <replaceable>group_name</replaceable> part of a group name (the part that follows the colon). You can change the
+     <replaceable>owner_name</replaceable> prefix only to reflect the actual owner.</para>
+ 
+     <sect2 id="HDRWQ73">
+       <title>To Change a Group's Owner</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts chown</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>chown</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts chown</emphasis> command to change a group's name.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts chown</emphasis>  &lt;<replaceable>group name</replaceable>&gt; &lt;<replaceable>new owner</replaceable>&gt;
+ </programlisting>
+ 
+       <para>where</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold"><replaceable>group name</replaceable></emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the current name of the group to which to assign a new owner.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><replaceable>new owner</replaceable></emphasis></term>
+ 
+           <listitem>
+             <para>Names the user or group that is to own the group.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_141">
+       <title>Example: Changing a Group's Owner to Another User</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>changing group owner</secondary>
+       </indexterm>
+ 
+       <para>In the following example, user <emphasis role="bold">pat</emphasis> transfers ownership of the group <emphasis
+       role="bold">pat:staff</emphasis> to user <emphasis role="bold">terry</emphasis>. Its name changes automatically to <emphasis
+       role="bold">terry:staff</emphasis>, as confirmed by the <emphasis role="bold">pts examine</emphasis> command.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts chown pat:staff terry</emphasis>
+    % <emphasis role="bold">pts examine terry:staff</emphasis> 
+    Name: terry:staff, id: -534, owner: terry, creator: pat, 
+      membership: 15, flags: SOm--, group quota: 0.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_142">
+       <title>Example: Changing a Group's Owner to Itself</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>creating a self-owned group</secondary>
+       </indexterm>
+ 
+       <para>In the following example, user <emphasis role="bold">terry</emphasis> makes the <emphasis
+       role="bold">terry:team</emphasis> group a self-owned group. Its name does not change because its
+       <replaceable>owner_name</replaceable> prefix is already <emphasis role="bold">terry</emphasis>.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts chown terry:team terry:team</emphasis>
+    % <emphasis role="bold">pts examine terry:team</emphasis>
+    Name: terry:team, id: -286, owner: terry:team, creator: terry, 
+      membership: 6, flags: SOm--, group quota: 0.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_143">
+       <title>Example: Changing a Group's Owner to a Group</title>
+ 
+       <para>In this example, user <emphasis role="bold">sam</emphasis> transfers ownership of the group <emphasis
+       role="bold">sam:project</emphasis> to the group <emphasis role="bold">smith:cpa</emphasis>. Its name changes automatically to
+       <emphasis role="bold">smith:project</emphasis>, because <emphasis role="bold">smith</emphasis> is the
+       <replaceable>owner_name</replaceable> prefix of the group that now owns it. The <emphasis role="bold">pts examine</emphasis>
+       command displays the group's status before and after the change.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts examine sam:project</emphasis>
+    Name: sam:project, id: -522, owner: sam, creator: sam, 
+      membership: 33, flags: SOm--, group quota: 0.
+    % <emphasis role="bold">pts chown sam:project smith:cpa</emphasis>
+    % <emphasis role="bold">pts examine smith:project</emphasis>
+    Name: smith:project, id: -522, owner: smith:cpa, creator: sam, 
+      membership: 33, flags: SOm--, group quota: 0.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_144">
+       <title>To Change a Group's Name</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts rename</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>rename</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts rename</emphasis> command to change a group's name.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts rename</emphasis>  &lt;<replaceable>old name</replaceable>&gt; &lt;<replaceable>new name</replaceable>&gt;
+ </programlisting>
+ 
+       <para>where</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold"><replaceable>old name</replaceable></emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the group's current name.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold"><replaceable>new name</replaceable></emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the complete new name to assign to the group. The <replaceable>owner_name</replaceable> prefix must
+             correctly indicate the group's owner.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_145">
+       <title>Example: Changing a Group's <replaceable>group_name</replaceable> Suffix</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>changing group name</secondary>
+       </indexterm>
+ 
+       <para>The following example changes the name of the <emphasis role="bold">smith:project</emphasis> group to <emphasis
+       role="bold">smith:fiscal-closing</emphasis>. The group's <replaceable>owner_name</replaceable> prefix remains <emphasis
+       role="bold">smith</emphasis> because its owner is not changing.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts examine smith:project</emphasis>
+    Name: smith:project, id: -522, owner: smith:cpa, creator: sam, 
+      membership: 33, flags: SOm--, group quota: 0.
+    % <emphasis role="bold">pts rename smith:project smith:fiscal-closing</emphasis>
+    % <emphasis role="bold">pts examine smith:fiscal-closing</emphasis>
+    Name: smith:fiscal-closing, id: -522, owner: smith:cpa, creator: sam, 
+      membership: 33, flags: SOm--, group quota: 0.
+ </programlisting>
+     </sect2>
+ 
+     <sect2 id="Header_146">
+       <title>Example: Changing a Group's <replaceable>owner_name</replaceable> Prefix</title>
+ 
+       <para>In a previous example, user <emphasis role="bold">pat</emphasis> transferred ownership of the group <emphasis
+       role="bold">pat:staff</emphasis> to user <emphasis role="bold">terry</emphasis>. Its name changed automatically to <emphasis
+       role="bold">terry:staff</emphasis>. However, a group that <emphasis role="bold">terry:staff</emphasis> owns is still called
+       <emphasis role="bold">pat:plans</emphasis>, because the change to a group's <replaceable>owner_name</replaceable> that results
+       from the <emphasis role="bold">pts chown</emphasis> command does not propagate to any groups it owns. In this example, a
+       member of <emphasis role="bold">terry:staff</emphasis> uses the <emphasis role="bold">pts rename</emphasis> command to change
+       the name to <emphasis role="bold">terry:plans</emphasis> to reflect its actual ownership.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts examine pat:plans</emphasis> 
+    Name: pat:plans, id: -535, owner: terry:staff, creator: pat, 
+      membership: 8, flags: SOm--, group quota: 0.
+    % <emphasis role="bold">pts rename pat:plans terry:plans</emphasis>
+    % <emphasis role="bold">pts examine terry:plans</emphasis> 
+    Name: terry:plans, id: -535, owner: terry:staff, creator: pat, 
+      membership: 8, flags: SOm--, group quota: 0.
+ </programlisting>
+     </sect2>
+   </sect1>
+ 
+   <sect1 id="HDRWQ74">
+     <title>Protecting Group-Related Information</title>
+ 
+     <indexterm>
+       <primary>protection</primary>
+ 
+       <secondary>group-related information</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>groups</primary>
+ 
+       <secondary>privacy flags</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>privacy flags on groups</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>s privacy flag on groups</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>o privacy flag on groups</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>m privacy flag on groups</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>a privacy flag on groups</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>r privacy flag on groups</primary>
+     </indexterm>
+ 
+     <para>A group's <emphasis>privacy flags</emphasis> control who can administer it in various ways. The privacy flags appear in
+     the <computeroutput>flags</computeroutput> field of the output from the <emphasis role="bold">pts examine</emphasis> command
+     command; see <link linkend="HDRWQ67">To Display A Group Entry</link>. To set the privacy flags for a group you own, use the
+     <emphasis role="bold">pts setfields</emphasis> command as instructed in <link linkend="HDRWQ75">To Set a Group's Privacy
+     Flags</link>.</para>
+ 
+     <sect2 id="HDRPRIVACY-FLAGS">
+       <title>Interpreting the Privacy Flags</title>
+ 
+       <para>The five privacy flags always appear, and always must be set, in the following order:</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">s</emphasis></term>
+ 
+           <listitem>
+             <para>Controls who can issue the <emphasis role="bold">pts examine</emphasis> command to display the entry.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">o</emphasis></term>
+ 
+           <listitem>
+             <para>Controls who can issue the <emphasis role="bold">pts listowned</emphasis> command to list the groups that a user
+             or group owns.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">m</emphasis></term>
+ 
+           <listitem>
+             <para>Controls who can issue the <emphasis role="bold">pts membership</emphasis> command to list the groups a user or
+             machine belongs to, or which users or machines belong to a group.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">a</emphasis></term>
+ 
+           <listitem>
+             <para>Controls who can issue the <emphasis role="bold">pts adduser</emphasis> command to add a user or machine to a
+             group.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">r</emphasis></term>
+ 
+           <listitem>
+             <para>Controls who can issue the <emphasis role="bold">pts removeuser</emphasis> command to remove a user or machine
+             from a group.</para>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+ 
+       <para>Each flag can take three possible types of values to enable a different set of users to issue the corresponding
+       command:</para>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>A hyphen (<emphasis role="bold">-</emphasis>) means that the group's owner can issue the command, along with the
+           administrators who belong to the <emphasis role="bold">system:administrators</emphasis> group.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The lowercase version of the letter means that members of the group can issue the command, along with the users
+           indicated by the hyphen.</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The uppercase version of the letter means that anyone can issue the command.</para>
+         </listitem>
+       </itemizedlist>
+ 
+       <para>For example, the flags <computeroutput>SOmar</computeroutput> on a group entry indicate that anyone can examine the
+       group's entry and list the groups that it owns, and that only the group's members can list, add, or remove its members.</para>
+ 
+       <para>The default privacy flags for groups are <computeroutput>S-M--</computeroutput>, meaning that anyone can display the
+       entry and list the members of the group, but only the group's owner and members of the <emphasis
+       role="bold">system:administrators</emphasis> group can perform other functions.</para>
+     </sect2>
+ 
+     <sect2 id="HDRWQ75">
+       <title>To Set a Group's Privacy Flags</title>
+ 
+       <indexterm>
+         <primary>commands</primary>
+ 
+         <secondary>pts setfields</secondary>
+       </indexterm>
+ 
+       <indexterm>
+         <primary>pts commands</primary>
+ 
+         <secondary>setfields</secondary>
+       </indexterm>
+ 
+       <para>Issue the <emphasis role="bold">pts setfields</emphasis> command to set the privacy flags on one or more groups.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts setfields -nameorid</emphasis> &lt;<replaceable>user or group name or id</replaceable>&gt;<superscript>+</superscript>
+                    <emphasis role="bold">-access</emphasis> &lt;<replaceable>set privacy flags</replaceable>&gt;
+ </programlisting>
+ 
+       <para>where</para>
+ 
+       <variablelist>
+         <varlistentry>
+           <term><emphasis role="bold">-nameorid</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the name or AFS GID of each group for which to set the privacy flags. If identifying a group by its AFS
+             GID, precede the GID with a hyphen (<emphasis role="bold">-</emphasis>) to indicate that it is a negative number.</para>
+           </listitem>
+         </varlistentry>
+ 
+         <varlistentry>
+           <term><emphasis role="bold">-access</emphasis></term>
+ 
+           <listitem>
+             <para>Specifies the privacy flags to set for each group. Observe the following rules:</para>
+ 
+             <itemizedlist>
+               <listitem>
+                 <para>Provide a value for all five flags in the order <emphasis role="bold">somar</emphasis>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Set the first flag to lowercase <emphasis role="bold">s</emphasis> or uppercase <emphasis
+                 role="bold">S</emphasis> only.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Set the second flag to the hyphen (<emphasis role="bold">-</emphasis>) or uppercase <emphasis
+                 role="bold">O</emphasis> only. For groups, AFS interprets the hyphen as equivalent to lowercase <emphasis
+                 role="bold">o</emphasis> (that is, members of a group can always list the groups that it owns).</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Set the third flag to the hyphen (<emphasis role="bold">-</emphasis>), lowercase <emphasis
+                 role="bold">m</emphasis>, or uppercase <emphasis role="bold">M</emphasis>.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Set the fourth flag to the hyphen (<emphasis role="bold">-</emphasis>), lowercase <emphasis
+                 role="bold">a</emphasis>, or uppercase <emphasis role="bold">A</emphasis>. The uppercase <emphasis
+                 role="bold">A</emphasis> is not a secure choice, because it permits anyone to add members to the group.</para>
+               </listitem>
+ 
+               <listitem>
+                 <para>Set the fifth flag to the hyphen (<emphasis role="bold">-</emphasis>) or lowercase <emphasis
+                 role="bold">r</emphasis> only.</para>
+               </listitem>
+             </itemizedlist>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+     </sect2>
+ 
+     <sect2 id="Header_150">
+       <title>Example: Setting a Group's Privacy Flags</title>
+ 
+       <indexterm>
+         <primary>examples</primary>
+ 
+         <secondary>setting group's privacy flags</secondary>
+       </indexterm>
+ 
+       <para>The following example sets the privacy flags on the <emphasis role="bold">terry:team</emphasis> group to set the
+       indicated pattern of administrative privilege.</para>
+ 
+       <programlisting>
+    % <emphasis role="bold">pts setfields terry:team -access SOm--</emphasis>
+   
+ </programlisting>
+ 
+       <itemizedlist>
+         <listitem>
+           <para>Everyone can issue the <emphasis role="bold">pts examine</emphasis> command to display general information about it
+           (uppercase <emphasis role="bold">S</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Everyone can issue the <emphasis role="bold">pts listowned</emphasis> command to display the groups it owns
+           (uppercase <emphasis role="bold">O</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>The members of the group can issue the <emphasis role="bold">pts membership</emphasis> command to display the
+           group's members (lowercase <emphasis role="bold">m</emphasis>).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Only the group's owner, user <emphasis role="bold">terry</emphasis>, can issue the <emphasis role="bold">pts
+           adduser</emphasis> command to add members (the hyphen).</para>
+         </listitem>
+ 
+         <listitem>
+           <para>Only the group's owner, user <emphasis role="bold">terry</emphasis>, can issue the <emphasis role="bold">pts
+           removeuser</emphasis> command to remove members (the hyphen).</para>
+         </listitem>
+       </itemizedlist>
+     </sect2>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/UserGuide/auusg009.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg009.xml:1.1.10.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg009.xml	Mon May 11 11:12:32 2009
***************
*** 0 ****
--- 1,325 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <chapter id="HDRWQ76">
+   <title>Troubleshooting</title>
+ 
+   <para>This chapter explains how to investigate and solve some problems you can sometimes encounter when working with AFS files. To
+   use the instructions, find the heading that describes your problem or matches the error message you received.</para>
+ 
+   <sect1 id="HDRWQ77">
+     <title>Problem: Cannot Access, Copy, or Save File</title>
+ 
+     <para><indexterm>
+         <primary>troubleshooting</primary>
+ 
+         <secondary>inability to access, copy or save file</secondary>
+       </indexterm> <indexterm>
+         <primary>files</primary>
+ 
+         <secondary>inability to access, copy or save</secondary>
+       </indexterm> <indexterm>
+         <primary>saving files</primary>
+ 
+         <secondary>inability to</secondary>
+       </indexterm> <indexterm>
+         <primary>copying</primary>
+ 
+         <secondary>files, inability to</secondary>
+       </indexterm> <indexterm>
+         <primary>directories</primary>
+ 
+         <secondary>inability to access</secondary>
+       </indexterm> <indexterm>
+         <primary>access to AFS filespace</primary>
+ 
+         <secondary>failures, troubleshooting</secondary>
+       </indexterm></para>
+ 
+     <orderedlist>
+       <listitem>
+         <para><anchor id="LINOSAVE-TOKENS" />Issue the <emphasis role="bold">tokens</emphasis> command to verify that you have valid
+         tokens. For complete instructions, see <link linkend="HDRWQ30">To Display Your Tokens</link>. <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+ </programlisting></para>
+ 
+         <itemizedlist>
+           <listitem>
+             <para>If your tokens are valid, proceed to Step <link linkend="LINOSAVE-FSCHECKS">2</link>.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If your do not have tokens for the relevant cell, or they are expired, issue the <emphasis
+             role="bold">klog</emphasis> command to authenticate. For complete instructions, see <link linkend="HDRWQ29">To
+             Authenticate with AFS</link>. Then try accessing or saving the file again. If you are not successful, proceed to Step
+             <link linkend="LINOSAVE-FSCHECKS">2</link>. <programlisting>
+    % <emphasis role="bold">klog</emphasis>
+ </programlisting></para>
+           </listitem>
+         </itemizedlist>
+       </listitem>
+ 
+       <listitem>
+         <para><anchor id="LINOSAVE-FSCHECKS" />Issue the <emphasis role="bold">fs checkservers</emphasis> command to check the
+         status of file server machines. For complete instructions, see <link linkend="HDRWQ41">Checking the Status of Server
+         Machines</link>. <programlisting>
+    % <emphasis role="bold">fs checkservers &amp;</emphasis>
+ </programlisting></para>
+ 
+         <itemizedlist>
+           <listitem>
+             <para>If the following message appears, proceed to Step <link linkend="LINOSAVE-PERMS">3</link>. <programlisting>
+    All servers are running.
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>Output like the following indicates that your Cache Manager cannot reach the indicated file server machines.
+             <programlisting>
+    These servers unavailable due to network or server problem:  
+    <replaceable>list of machines</replaceable>.
+ </programlisting></para>
+ 
+             <para>Issue the <emphasis role="bold">fs whereis</emphasis> command to check if the file you are attempting to access or
+             save is stored on one of the inaccessible file server machines. For complete instructions, see <link
+             linkend="HDRWQ40">Locating Files and Directories</link>.</para>
+ 
+             <programlisting>
+    % <emphasis role="bold">fs whereis</emphasis> &lt;<replaceable>dir/file path</replaceable>&gt;
+ </programlisting>
+ 
+             <para>If your file is stored on an inaccessible machine, then you cannot access the file or save it back to the File
+             Server until the machine is again accessible. If your file is on a machine that is not listed as inaccessible, proceed
+             to Step <link linkend="LINOSAVE-PERMS">3</link>.</para>
+           </listitem>
+         </itemizedlist>
+       </listitem>
+ 
+       <listitem>
+         <para><anchor id="LINOSAVE-PERMS" />Issue the <emphasis role="bold">fs listacl</emphasis> command to verify that you have
+         the permissions you need for accessing, copying, or saving the file. For complete instructions, see <link
+         linkend="HDRWQ53">To display an ACL</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> &lt;<replaceable>dir/file path</replaceable>&gt;
+ </programlisting></para>
+ 
+         <para>You need the indicated permissions:</para>
+ 
+         <itemizedlist>
+           <listitem>
+             <para>To access, copy, or save a file, you must have the <emphasis role="bold">l</emphasis> (<emphasis
+             role="bold">lookup</emphasis>) permission on the directory and on all directories above it in the pathname.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To save changes to an existing file, you must in addition have the <emphasis role="bold">w</emphasis> (<emphasis
+             role="bold">write</emphasis>) permission. To create a new file, you must in addition have the <emphasis
+             role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>) and <emphasis role="bold">w</emphasis>
+             permissions.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>To copy a file between two directories, you must in addition have the <emphasis role="bold">r</emphasis>
+             (<emphasis role="bold">read</emphasis>) permission on the source directory and the <emphasis role="bold">i</emphasis>
+             permission on the destination directory.</para>
+           </listitem>
+         </itemizedlist>
+ 
+         <para>If you do not have the necessary permissions but own the directory, you always have the <emphasis
+         role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission even if you do not appear on the ACL.
+         Issue the <emphasis role="bold">fs setacl</emphasis> command to grant yourself the necessary permissions. For complete
+         instructions, see <link linkend="HDRWQ54">Changing an ACL</link>.</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">fs setacl  -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt;<superscript>+</superscript> <emphasis
+             role="bold">-acl</emphasis> &lt;<replaceable>access list entries</replaceable>&gt;<superscript>+</superscript>
+ </programlisting>
+ 
+         <para>If you do not have the necessary permissions and do not own the directory, ask the owner or a system administrator to
+         grant them to you. If they add you to a group that has the required permissions, you must issue the <emphasis
+         role="bold">klog</emphasis> command to reauthenticate before you can exercise them.</para>
+ 
+         <para>If you still cannot access the file even though you have the necessary permissions, contact your system administrator
+         for help in investigating further possible causes of your problem. If you still cannot copy or save the file even though you
+         have the necessary permissions, proceed to Step <link linkend="LINOSAVE-QUOTA">4</link>.</para>
+       </listitem>
+ 
+       <listitem>
+         <para><anchor id="LINOSAVE-QUOTA" />If copying a file, issue the <emphasis role="bold">fs listquota</emphasis> command to
+         check whether the volume into which you are copying it, or the partition that houses that volume, is almost full. For
+         saving, check the volume and partition that contain the directory into which you are saving the file. For complete
+         instructions, see <link linkend="HDRWQ39">Displaying Volume Quota</link>. <programlisting>
+    % <emphasis role="bold">fs listquota</emphasis>  &lt;<replaceable>dir/file path</replaceable>&gt;
+ </programlisting></para>
+ 
+         <para>The command produces output as in the following example:</para>
+ 
+         <programlisting>
+    % <emphasis role="bold">fs listquota /afs/abc.com/usr/terry</emphasis>
+    Volume Name     Quota    Used    % Used   Partition 
+    user.terry      10000    3400       34%         86% 
+ </programlisting>
+ 
+         <itemizedlist>
+           <listitem>
+             <para>If the value in the <computeroutput>Partition</computeroutput> field is not close to 100%, the partition is not
+             almost full. Check the value in the <computeroutput>% Used</computeroutput> field. If it is close to 100%, then the
+             volume is almost full. If possible, delete files from the volume that are no longer needed, or ask your system
+             administrator to increase the volume's quota.</para>
+ 
+             <para>If the value in the <computeroutput>% Used</computeroutput> field is not close to 100% (is, say, 90% or less),
+             then it is unlikely that you are exceeding the volume's quota, unless the file is very large or the volume's quota is
+             small. Contact your system administrator for help in investigating further possible causes of your problem.</para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the value in the <computeroutput>Partition</computeroutput> field is very close to 100%, the partition is
+             possibly nearly full. However, server machine partitions are usually very large and can still have enough space for an
+             average file when nearly full. You can either ask your system administrator about the partition's status, or issue the
+             <emphasis role="bold">fs examine</emphasis> command. The final line in its output reports how many kilobyte blocks are
+             still available on the partition. For complete instructions, see <link linkend="HDRWQ39">Displaying Volume Quota</link>.
+             <programlisting>
+    % <emphasis role="bold">fs examine</emphasis>  &lt;<replaceable>dir/file path</replaceable>&gt;
+ </programlisting></para>
+ 
+             <para>If there is enough free space on the partition but you still cannot save the file, ask your system administrator
+             for help in investigating further possible causes of your problem.</para>
+           </listitem>
+         </itemizedlist>
+       </listitem>
+     </orderedlist>
+   </sect1>
+ 
+   <sect1 id="HDRWQ78">
+     <title>Problem: Accidentally Removed Your Entry from an ACL</title>
+ 
+     <para><indexterm>
+         <primary>troubleshooting</primary>
+ 
+         <secondary>accidental removal from ACL</secondary>
+       </indexterm> <indexterm>
+         <primary>ACL</primary>
+ 
+         <secondary>accidentally removed yourself</secondary>
+       </indexterm></para>
+ 
+     <orderedlist>
+       <listitem>
+         <para>If you own the directory from which you have accidentally removed your ACL entry, then you actually still have the
+         <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>) permission even if it does not appear on
+         the ACL. You normally own your home directory and all of its subdirectories, for instance. Issue the <emphasis
+         role="bold">fs setacl</emphasis> command to grant yourself all other permissions. For complete instructions, see <link
+         linkend="HDRWQ55">To Add, Remove, or Edit Normal ACL Permissions</link>. <programlisting>
+    % <emphasis role="bold">fs setacl  -dir</emphasis> &lt;<replaceable>directory</replaceable>&gt; <emphasis role="bold">-acl &lt;</emphasis><replaceable>your_username</replaceable>&gt; <emphasis
+               role="bold">all</emphasis>
+ </programlisting></para>
+ 
+         <para>For <replaceable>directory</replaceable>, provide the complete pathname to the directory (for example, <emphasis
+         role="bold">/afs/abc.com/usr/</emphasis><replaceable>your_username</replaceable>). This is necessary because AFS cannot
+         interpret pathname abbreviations if you do not have the <emphasis role="bold">l</emphasis> (<emphasis
+         role="bold">lookup</emphasis>) permission.</para>
+       </listitem>
+ 
+       <listitem>
+         <para>If you do not own the directory, issue the <emphasis role="bold">fs listacl</emphasis> to check if any remaining
+         entries grant you the permissions you need (perhaps you belong to one or more groups that appear on the ACL). For complete
+         instructions, see <link linkend="HDRWQ53">To display an ACL</link>. <programlisting>
+    % <emphasis role="bold">fs listacl</emphasis> &lt;<replaceable>dir/file path</replaceable>&gt;
+ </programlisting></para>
+ 
+         <itemizedlist>
+           <listitem>
+             <para>The following message displays the directory's ACL. If you need permissions that no entry currently grants you,
+             ask the directory's owner or your system administrator for help. <programlisting>
+    Access list for &lt;<replaceable>dir/file path</replaceable>&gt; is
+    Normal rights
+    <replaceable>list of entries</replaceable>
+ </programlisting></para>
+           </listitem>
+ 
+           <listitem>
+             <para>If the command returns the following error message instead of an ACL, then you do not have the <emphasis
+             role="bold">l</emphasis> permission. <programlisting>
+    fs: You don't have the required access rights on '<replaceable>dir/file path</replaceable>'
+ </programlisting></para>
+ 
+             <para>Ask the directory's owner or your system administrator to grant you the permissions you need. If they add you to a
+             group that has the required permissions, you must issue the <emphasis role="bold">klog</emphasis> command to
+             reauthenticate before you can exercise them.</para>
+           </listitem>
+         </itemizedlist>
+       </listitem>
+     </orderedlist>
+   </sect1>
+ 
+   <sect1 id="HDRWQ79">
+     <title>Error Message: "afs: Lost contact with fileserver"</title>
+ 
+     <indexterm>
+       <primary>troubleshooting</primary>
+ 
+       <secondary>error messages</secondary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>error messages, troubleshooting</primary>
+     </indexterm>
+ 
+     <indexterm>
+       <primary>lost contact with fileserver (error message)</primary>
+     </indexterm>
+ 
+     <para>Issue the <emphasis role="bold">fs checkservers</emphasis> command to check the status of file server machines. For
+     complete instructions, see <link linkend="HDRWQ41">Checking the Status of Server Machines</link>.</para>
+ 
+     <programlisting>
+    % <emphasis role="bold">fs checkservers &amp;</emphasis>
+ </programlisting>
+ 
+     <itemizedlist>
+       <listitem>
+         <para>If the following message appears, ask your system administrator for assistance in diagnosing the cause of the
+         <computeroutput>Lost contact</computeroutput> error message. <programlisting>
+    All servers are running.
+ </programlisting></para>
+       </listitem>
+ 
+       <listitem>
+         <para>Output like the following indicates that your Cache Manager cannot reach the indicated file server machines. You must
+         wait until they are again accessible before continuing to work with the files that are stored on them. <programlisting>
+    These servers unavailable due to network or server problem: 
+    <replaceable>list_of_machines</replaceable>.
+ </programlisting></para>
+       </listitem>
+     </itemizedlist>
+ 
+     <indexterm>
+       <primary>connection timed out (error message)</primary>
+     </indexterm>
+   </sect1>
+ 
+   <sect1 id="Header_155">
+     <title>Error Message: "<replaceable>command</replaceable>: Connection timed out"</title>
+ 
+     <para>Issue the <emphasis role="bold">fs checkservers</emphasis> command as described in <link linkend="HDRWQ79">Error Message:
+     afs: Lost contact with fileserver</link>. <indexterm>
+         <primary>you don't have the required access rights (error message)</primary>
+       </indexterm></para>
+   </sect1>
+ 
+   <sect1 id="Header_156">
+     <title>Error Message: "fs: You don't have the required access rights on '<replaceable>file</replaceable>'"</title>
+ 
+     <para>You do not have the ACL permissions you need to perform the operation you are attempting. If you own the directory and
+     have accidentally removed yourself from the ACL, see <link linkend="HDRWQ78">Problem: Accidentally Removed Your Entry from an
+     ACL</link>. Otherwise, ask the directory's owner or your system administrator to grant you the appropriate permissions.
+     <indexterm>
+         <primary>afs: failed to store file (error message)</primary>
+       </indexterm> <indexterm>
+         <primary>failed to store file (error message)</primary>
+       </indexterm></para>
+   </sect1>
+ 
+   <sect1 id="Header_157">
+     <title>Error Message: "afs: failed to store file"</title>
+ 
+     <para>Follow the instructions in <link linkend="HDRWQ77">Problem: Cannot Access, Copy, or Save File</link>.</para>
+   </sect1>
+ </chapter>
\ No newline at end of file
Index: openafs/doc/xml/UserGuide/auusg010.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg010.xml:1.1.10.2
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg010.xml	Mon May 11 11:12:32 2009
***************
*** 0 ****
--- 1,180 ----
+ <?xml version="1.0" encoding="utf-8"?>
+     <appendix id="HDRWQ80"><title>Using the NFS/AFS Translator</title>
+     <para>
+ <indexterm><primary>NFS</primary><secondary>accessing AFS from client</secondary></indexterm>
+  
+ <indexterm><primary>NFS/AFS Translator</primary></indexterm>
+  
+ <indexterm><primary>AFS</primary><secondary>accessing from NFS client machine</secondary></indexterm>
+  
+ <indexterm><primary>access to AFS filespace</primary><secondary>from NFS client machines</secondary></indexterm>
+  Some
+     cells use the Network File System (NFS) in addition to AFS. If you work on an NFS client machine, your system
+     administrator can configure it to access the AFS filespace through a program called the <emphasis>NFS/AFS
+     Translator</emphasis><superscript>TM</superscript>. If you have an AFS account, you can access AFS as an
+     authenticated user while working on your NFS client machine. Otherwise, you access AFS as the
+     <emphasis role="bold">anonymous</emphasis> user.</para>
+     <note>
+         <para>Acceptable NFS/AFS Translator performance requires that NFS is functioning correctly.</para>
+     </note>
+     <sect1 id="HDRWQ81"><title>Requirements for Using the NFS/AFS Translator</title>
+     <para>
+ <indexterm><primary>NFS</primary><secondary>issuing AFS commands on NFS client machine</secondary></indexterm>
+  
+ <indexterm><primary>commands</primary><secondary>AFS, issuing on NFS client machine</secondary></indexterm>
+  For you to use the NFS/AFS Translator, your system
+     administrator must configure the following types of machines as indicated:</para>
+     <itemizedlist>
+       <listitem><para>An <emphasis>NFS/AFS translator machine</emphasis> is an AFS client machine that also acts as an
+       NFS server machine. Its Cache Manager acts as the surrogate Cache Manager for your NFS client machine. Ask your
+       system administrator which translator machines you can use.</para></listitem>
+       <listitem><para>Your NFS client machine must have an NFS mount to a translator machine. Most often, your system
+       administrator mounts the translator machine's <emphasis role="bold">/afs</emphasis> directory and names the mount
+       <emphasis role="bold">/afs</emphasis> as well. This enables you to access the entire AFS filespace using standard
+       AFS pathnames. It is also possible to create mounts directly to subdirectories of
+       <emphasis role="bold">/afs</emphasis>, and to give NFS mounts different names on the NFS client
+       machine.</para></listitem>
+     </itemizedlist>
+     <para>Your access to AFS is much more extensive if you have an AFS user account. If you do not, the AFS servers
+     recognize you as the <emphasis role="bold">anonymous</emphasis> user and only grant you the access available to
+     members of the <emphasis role="bold">system:anyuser</emphasis> group.</para>
+     <para>If your NFS client machine uses an operating system that AFS supports, your system administrator can
+     configure it to enable you to issue many AFS commands on the machine. Ask him or her about the configuration and
+     which commands you can issue.</para>
+     </sect1><sect1 id="Header_160"><title>Accessing AFS via the Translator</title>
+     
+ <indexterm><primary>authentication</primary><secondary>to AFS on NFS client machines</secondary></indexterm>
+  
+     <para>If you do not have an AFS account or choose not to access AFS as an authenticated user, then all you do to
+     access AFS is provide the pathname of the relevant file. Its ACL must grant the necessary permissions to the
+     <emphasis role="bold">system:anyuser</emphasis> group.</para>
+     <para>If you have an AFS account and want to access AFS as an authenticated user, the best method depends on
+     whether your NFS machine is a supported type. If it is, use the instructions in <link linkend="HDRWQ82">To
+     Authenticate on a Supported Operating System</link>. If it is not a supported type, use the instructions in
+     <link linkend="HDRWQ83">To Authenticate on an Unsupported Operating System</link>.</para>
+     <sect2 id="HDRWQ82"><title>To Authenticate on a Supported Operating System</title>
+     <orderedlist>
+       <listitem><para>Log into the NFS client machine using your NFS username.</para></listitem>
+       <listitem><para>
+         Issue the <emphasis role="bold">klog</emphasis> command. For complete instructions, see
+         <link linkend="HDRWQ29">To Authenticate with AFS</link>. 
+ <programlisting>
+    % <emphasis role="bold">klog -setpag</emphasis>
+ </programlisting>
+       </para></listitem>
+     </orderedlist>
+     </sect2><sect2 id="HDRWQ83"><title>To Authenticate on an Unsupported Operating System</title>
+     <orderedlist>
+       <listitem><para>Log onto the NFS client machine using your NFS username.</para></listitem>
+       <listitem><para><anchor id="LINFS-TELNET" />Establish a connection to the NFS/AFS translator machine you are
+       using (for example, using the <emphasis role="bold">telnet</emphasis> utility) and log onto it using your AFS
+       username (which is normally the same as your NFS username).</para></listitem>
+       <listitem><para>
+         If the NFS/AFS translator machine uses an AFS-modified login utility, then you obtained AFS tokens in Step
+         <link linkend="LINFS-TELNET">2</link>. To check, issue the <emphasis role="bold">tokens</emphasis> command,
+         which is described fully in <link linkend="HDRWQ30">To Display Your Tokens</link>. 
+ <programlisting>
+    % <emphasis role="bold">tokens</emphasis>
+ </programlisting>
+         If you do not have tokens, issue the <emphasis role="bold">klog</emphasis> command, which is described fully in
+         <link linkend="HDRWQ29">To Authenticate with AFS</link>. 
+ <programlisting>
+    % <emphasis role="bold">klog -setpag</emphasis>
+ </programlisting>
+       </para></listitem>
+       <listitem><para>
+         <anchor id="LINFS-KNFS" />Issue the <emphasis role="bold">knfs</emphasis> command to associate your AFS tokens
+         with your UNIX UID on the NFS client machine where you are working. This enables the Cache Manager on the
+         translator machine to use the tokens properly when you access AFS from the NFS client machine. 
+         </para><para>If your NFS client machine is a system type for which AFS defines a system name, it can make sense
+         to add the <emphasis role="bold">-sysname</emphasis> argument. This argument helps the Cache Manager access
+         binaries specific to your NFS client machine, if your system administrator has used the
+         <emphasis>@sys</emphasis> variable in pathnames. Ask your system administrator if this argument is useful for
+         you. 
+ <indexterm><primary>knfs command</primary></indexterm>
+  
+ <indexterm><primary>commands</primary><secondary>knfs</secondary></indexterm>
+ </para>
+ <programlisting>
+    % <emphasis role="bold">knfs</emphasis> &lt;<replaceable>host name</replaceable>&gt; [&lt;<replaceable>user ID (decimal)</replaceable>&gt;]  \
+           [<emphasis role="bold">-sysname</emphasis> &lt;<replaceable>host's '@sys' value</replaceable>&gt;]
+ </programlisting>
+         <para>where</para>
+         <variablelist>
+           <varlistentry><term><emphasis role="bold"><replaceable>host name</replaceable></emphasis></term>
+           <listitem><para>Specifies the fully-qualified hostname of your NFS client machine (such as
+           <emphasis role="bold">nfs52.abc.com</emphasis>).</para></listitem></varlistentry>
+           <varlistentry><term><emphasis role="bold"><replaceable>user ID</replaceable></emphasis></term>
+           <listitem><para>Specifies your UNIX UID or equivalent (not your username) on the NFS client machine. If your
+           system administrator has followed the conventional practice, then your UNIX and AFS UIDs are the same. If you
+           do not know your local UID on the NFS machine, ask your system administrator for assistance. Your system
+           administrator can also explain the issues you need to be aware of if your two UIDs do not match, or if you
+           omit this argument.</para></listitem></varlistentry>
+           <varlistentry><term><emphasis role="bold">-sysname</emphasis></term>
+           <listitem><para>Specifies your NFS client machine's system type name.</para></listitem></varlistentry>
+         </variablelist>
+       </listitem>
+       <listitem><para><anchor id="LINFS-LOGOUT" />(<emphasis role="bold">Optional</emphasis>) Log out from the
+       translator machine, but do not unauthenticate.</para></listitem>
+       <listitem><para>Work on the NFS client machine, accessing AFS as necessary.</para></listitem>
+       <listitem><para>
+         When you are finished accessing AFS, issue the <emphasis role="bold">knfs</emphasis> command on the translator
+         machine again. Provide the same <replaceable>host name</replaceable> and <replaceable>user ID</replaceable>
+         arguments as in Step <link linkend="LINFS-KNFS">4</link>, and add the <emphasis role="bold">-unlog</emphasis>
+         flag to destroy your tokens. If you logged out from the translator machine in Step
+         <link linkend="LINFS-LOGOUT">5</link>, then you must first reestablish a connection to the translator machine
+         as in Step <link linkend="LINFS-TELNET">2</link>. 
+ <programlisting>
+    % <emphasis role="bold">knfs</emphasis> &lt;<replaceable>host name</replaceable>&gt; [&lt;<replaceable>user ID (decimal)</replaceable>&gt;] <emphasis role="bold">-unlog</emphasis>
+ </programlisting>
+       </para></listitem>
+     </orderedlist>
+     </sect2></sect1><sect1 id="HDRWQ84"><title>Troubleshooting the NFS/AFS Translator</title>
+     <para>Acceptable performance by the NFS/AFS translator depends for the most part on NFS. Sometimes, problems that
+     appear to be AFS file server outages, broken connections, or inaccessible files are actually caused by NFS
+     outages.</para>
+     <para>This section describes some common problems and their possible causes. If other problems arise, contact your
+     system administrator, who can ask the AFS Product Support group for assistance if necessary.</para>
+     <note>
+         <para>To avoid degrading AFS performance, the Cache Manager on the translator machine does not immediately
+         send changes made on NFS client machines to the File Server. Instead, it checks every 60 seconds for such
+         changes and sends them then. It can take longer for changes made on an NFS client machine to be saved than for
+         changes made on an AFS client machine. The save operation must complete before the changes are visible on NFS
+         client machines that are using a different translator machine or on AFS client machines.</para>
+     </note>
+     <sect2 id="HDRWQ85"><title>Your NFS Client Machine is Frozen</title>
+     <para>If your system administrator has used the recommended options when creating an NFS mount to an NFS/AFS
+     translator machine, then the mount is both <emphasis>hard</emphasis> and <emphasis>interruptible</emphasis>:</para>
+     <itemizedlist>
+       <listitem><para>A hard mount means that the NFS client retries its requests if it does not receive a response
+       within the expected time frame. This is useful because requests have to pass through both the NFS and AFS client
+       software, which can sometimes take longer than the NFS client expects. However, it means that if the NFS/AFS
+       translator machine actually becomes inaccessible, your NFS client machine can become inoperative
+       (<emphasis>freeze</emphasis> or <emphasis>hang</emphasis>).</para></listitem>
+       <listitem><para>If the NFS mount is interruptible, then in the case of an NFS/AFS translator machine outage you
+       can press &lt;<emphasis role="bold">Ctrl-c</emphasis>&gt; or another interrupt signal to halt the NFS client's
+       repeated attempts to access AFS. You can then continue to work locally, or can NFS-mount another translator
+       machine. If the NFS mount is not interruptible, you must actually remove the mount to the inaccessible translator
+       machine.</para></listitem>
+     </itemizedlist>
+     </sect2><sect2 id="Header_165"><title>NFS/AFS Translator Reboots</title>
+     <para>If you have authenticated to AFS and your translator machine reboots, you must issue the
+     <emphasis role="bold">klog</emphasis> command (and <emphasis role="bold">knfs</emphasis> command, if appropriate)
+     to reauthenticate. If you used the <emphasis role="bold">knfs</emphasis> command's
+     <emphasis role="bold">-sysname</emphasis> argument to define your NFS client machine's system name, use it
+     again.</para>
+     </sect2><sect2 id="Header_166"><title>System Error Messages</title>
+     <para>This section explains possible meanings for NFS error messages you receive while accessing AFS
+     filespace.</para>
+     <para><computeroutput>stale NFS client</computeroutput></para>
+     <para><computeroutput>Getpwd: can't read</computeroutput></para>
+     <para>Both messages possibly means that your translator machine was rebooted and cannot determine the pathname to
+     the current working directory. To reestablish the path, change directory and specify the complete pathname starting
+     with <emphasis role="bold">/afs</emphasis>.</para>
+     <para><computeroutput>NFS server <replaceable>translator_machine</replaceable> is not responding still
+     trying</computeroutput>.</para>
+     <para>The NFS client is not getting a response from the NFS/AFS translator machine. If the NFS mount to the
+     translator machine is a hard mount, your NFS client continues retrying the request until it gets a response (see
+     <link linkend="HDRWQ85">Your NFS Client Machine is Frozen</link>). If the NFS mount to the translator machine is a
+     soft mount, the NFS client stops retrying after a certain number of attempts (three by default).</para>
+ </sect2></sect1></appendix>
Index: openafs/doc/xml/UserGuide/auusg011.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg011.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg011.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,333 ----
+ <?xml version="1.0" encoding="utf-8"?>
+     <appendix id="HDRWQ86"><title>OpenAFS Command Syntax and Online Help</title>
+     
+ <indexterm><primary>syntax of AFS commands described</primary></indexterm>
+  
+     <para>The AFS commands available to you are used to authenticate, list AFS information, protect directories, create
+     and manage groups, and create and manage ACLs. There are three general types of commands available to all AFS
+     users: file server commands, protection server commands, and miscellaneous commands. This chapter discusses the
+     syntax of these AFS commands, the rules that must be followed when issuing them, and ways of accessing help
+     relevant to them.</para>
+     <sect1 id="HDRWQ87"><title>OpenAFS Command Syntax</title>
+     <para>
+ <indexterm><primary>commands</primary><secondary>syntax for AFS</secondary></indexterm>
+  Most AFS commands use the following syntax:</para>
+ <programlisting>
+    <emphasis role="bold">command_suite operation_code -switch</emphasis> &lt;<replaceable>value</replaceable>&gt;<superscript>[+]</superscript>  <emphasis role="bold">-flag</emphasis>
+ </programlisting>
+     <para>The <emphasis>command suite</emphasis> indicates the general type of command and the server process that
+     performs the command. Regular AFS users have access to two main command suites and a miscellaneous set of commands:
+     
+ <indexterm><primary>commands</primary><secondary>suite organization for AFS</secondary></indexterm>
+  
+ <indexterm><primary>suite, defined for AFS command</primary></indexterm>
+ </para>
+     <itemizedlist>
+       <listitem><para>The <emphasis role="bold">fs</emphasis> command suite is used to issue file server commands that
+       interact with the File Server process.</para></listitem>
+       <listitem><para>The <emphasis role="bold">pts</emphasis> command suite is used to issue protection-related
+       commands.</para></listitem>
+       <listitem><para>The miscellaneous commands are not associated with any command suite.</para></listitem>
+     </itemizedlist>
+     <para>The <emphasis>operation code</emphasis> indicates the action that the command performs. Miscellaneous
+     commands have operation codes only. 
+ <indexterm><primary>operation codes in AFS commands</primary><secondary>defined</secondary></indexterm>
+ </para>
+     <para>A command can have multiple <emphasis>options</emphasis>, which can be <emphasis>arguments</emphasis> or
+     <emphasis>flags</emphasis>:</para>
+     <itemizedlist>
+       <listitem><para>Arguments are used to supply additional information for use by the command.
+       
+ <indexterm><primary>arguments to AFS commands</primary></indexterm>
+  They consist of a paired <emphasis>switch</emphasis> and <emphasis>instance</emphasis>.
+       
+ <indexterm><primary>switches on AFS commands</primary><secondary>defined</secondary></indexterm>
+  
+ <indexterm><primary>instances to AFS commands</primary></indexterm>
+  A switch defines the type of argument and is always preceded
+       by a hyphen; arguments can take multiple instances if a plus sign (+) appears after the instance. An instance
+       represents some variable piece of information that is used by the command. Arguments can be optional or
+       required.</para></listitem>
+       <listitem><para>Flags are used to direct a command to perform in a specific way (for example, to generate a
+       specific type of output). 
+ <indexterm><primary>flags on AFS commands</primary></indexterm>
+  Flags are always preceded by a hyphen and are always
+       optional.</para></listitem>
+     </itemizedlist>
+     <sect2 id="Header_169"><title>Command Syntax Example</title>
+     <para>In the following AFS command</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -dir $HOME -acl pat all terry none -negative</emphasis>
+ </programlisting>
+     <itemizedlist>
+       <listitem><para><emphasis role="bold">fs</emphasis> is the command suite.</para></listitem>
+       <listitem><para><emphasis role="bold">setacl</emphasis> is the <emphasis>operation code</emphasis>, which directs
+       the File Server process to set an access control list.</para></listitem>
+       <listitem><para>
+         <emphasis role="bold">-dir $HOME</emphasis> and <emphasis role="bold">-acl pat all terry none</emphasis> are
+         <emphasis>arguments</emphasis>. 
+         </para><itemizedlist>
+           <listitem><para><emphasis role="bold">-dir</emphasis> and <emphasis role="bold">-acl</emphasis> are switches;
+           <emphasis role="bold">-dir</emphasis> indicates the name of the directory on which to set the ACL, and
+           <emphasis role="bold">-acl</emphasis> defines the entries to set on it.</para></listitem>
+           <listitem><para><emphasis role="bold">$HOME</emphasis> and <emphasis role="bold">pat all terry
+           none</emphasis> are <emphasis>instances</emphasis> of the arguments. <emphasis role="bold">$HOME</emphasis>
+           defines a specific directory for the directory argument. The <emphasis role="bold">-acl</emphasis> argument
+           has two instances specifying two ACL entries: <emphasis role="bold">pat all</emphasis> and
+           <emphasis role="bold">terry none</emphasis>.</para></listitem>
+         </itemizedlist>
+       </listitem>
+       <listitem><para><emphasis role="bold">-negative</emphasis> is a flag; it directs the command to put the access
+       list entries on the negative rather than the normal permissions list.</para></listitem>
+     </itemizedlist>
+     </sect2></sect1><sect1 id="HDRWQ88"><title>Rules for Using OpenAFS Commands</title>
+     <para>This section describes the rules to follow when using AFS commands.</para>
+     <sect2 id="Header_171"><title>Spaces and Lines</title>
+     <para>Separate each command element (command suite, operation code, switches, instances, and flags) with a space.
+     Multiple instances of an argument are also separated by a space.</para>
+     <para>Type all AFS commands on one line, followed by a carriage return. Some commands in this document appear on
+     more than one line, but that is for legibility only.</para>
+     </sect2><sect2 id="Header_172"><title>Abbreviations and Aliases for Operation Codes</title>
+     
+ <indexterm><primary>operation codes in AFS commands</primary><secondary>abbreviating</secondary></indexterm>
+  
+     <para>You can type operation codes in one of three ways:</para>
+     <itemizedlist>
+       <listitem><para>You can type the operation code in full.</para></listitem>
+       <listitem><para>You can abbreviate the operation code to the shortest form that distinguishes it from the other
+       operation codes in its command suite.</para></listitem>
+       <listitem><para>You can use the alias for the operation code, if one exists.</para></listitem>
+     </itemizedlist>
+     <para>For example, the <emphasis role="bold">fs listacl</emphasis> command can be issued as follows:</para>
+     <itemizedlist>
+       <listitem><para><emphasis role="bold">fs listacl</emphasis> (full command)</para></listitem>
+       <listitem><para><emphasis role="bold">fs lista</emphasis> (abbreviation)</para></listitem>
+       <listitem><para><emphasis role="bold">fs la</emphasis> (alias)</para></listitem>
+     </itemizedlist>
+     <para>The <emphasis>OpenAFS Administration Reference</emphasis> provides information on the full and abbreviated
+     command syntax as well as any aliases for all of the commands discussed in this guide.</para>
+     </sect2><sect2 id="Header_173"><title>Omitting Argument Switches</title>
+     
+ <indexterm><primary>switches on AFS commands</primary><secondary>omitting</secondary></indexterm>
+  
+     <para>You can omit an argument's switch if the command takes only one argument, or if the following conditions are
+     met.</para>
+     <itemizedlist>
+       <listitem><para>All of the command's required arguments appear in the order prescribed by the syntax
+       statement.</para></listitem>
+       <listitem><para>No switches are used on any arguments, even if they are in the correct order.</para></listitem>
+       <listitem><para>There is only one value for each argument. The important exception to this condition is if the
+       final required argument accepts multiple values; in this case, it is acceptable to provide multiple values
+       without providing the switch.</para></listitem>
+     </itemizedlist>
+     <para>For example, the following two commands are equivalent:</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -dir /afs/abc.com/usr/terry/private -acl pat rl</emphasis>
+    % <emphasis role="bold">fs setacl /afs/abc.com/usr/terry/private pat rl</emphasis>
+ </programlisting>
+     <para>However, the following is not an acceptable short form because the arguments are not in the prescribed
+     order:</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -acl pat rl /afs/abc.com/usr/terry/private</emphasis>
+ </programlisting>
+     </sect2><sect2 id="Header_174"><title>Shortening Switches and Flags</title>
+     <para>
+ <indexterm><primary>switches on AFS commands</primary><secondary>abbreviating</secondary></indexterm>
+  If you are required to use a switch, or if you decide to use a flag, you can often
+     shorten the name of that switch or flag provided that the shortened form still distinguishes it from the command's
+     other flags and switches.</para>
+     <para>For example, when you issue the <emphasis role="bold">fs setacl</emphasis> command, you can abbreviate all of
+     the switches and flags of the command to their initial letter because they all begin with a different letter.
+     However, when you issue the <emphasis role="bold">knfs</emphasis> command, the
+     <emphasis role="bold">-host</emphasis> argument and <emphasis role="bold">-help</emphasis> flag both begin with the
+     letter <emphasis role="bold">h</emphasis>, so the shortest unambiguous abbreviations are
+     <emphasis role="bold">-ho</emphasis> and <emphasis role="bold">-he</emphasis> respectively.</para>
+     </sect2><sect2 id="Header_175"><title>Shortening Directory References</title>
+     <para>
+ <indexterm><primary>directories</primary><secondary>shorthand notation for referencing</secondary></indexterm>
+  Most AFS command arguments that require directory or pathnames instances accept one
+     or more of the following short forms:</para>
+     <itemizedlist>
+       <listitem><para>A single period (<emphasis role="bold">.</emphasis>) indicates the current working
+       directory.</para></listitem>
+       <listitem><para>Two periods (<emphasis role="bold">..</emphasis>) indicate the parent directory of the current
+       working directory.</para></listitem>
+       <listitem><para>The $HOME environment variable indicates the issuer's home directory.</para></listitem>
+     </itemizedlist>
+     <para>For example, if the user <emphasis role="bold">terry</emphasis> wants to grant
+     <emphasis role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>) and <emphasis role="bold">l</emphasis>
+     (<emphasis role="bold">lookup</emphasis>) permissions on his home directory to his manager
+     <emphasis role="bold">pat</emphasis>, <emphasis role="bold">terry</emphasis> can issue the following
+     command.</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -dir $HOME -acl pat rl</emphasis>
+ </programlisting>
+     <para>If the current working directory is <emphasis role="bold">terry</emphasis>'s home directory, he can issue the
+     following command.</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -dir  .  -acl pat rl</emphasis> 
+ </programlisting>
+     <para>Both of the previous examples are acceptable short forms for the following command:</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -dir /afs/abc.com/usr/terry -acl pat rl</emphasis>
+ </programlisting>
+     </sect2></sect1><sect1 id="Header_176"><title>Commonly Used fs and pts Commands</title>
+     <para>This section provides additional information on the commonly used AFS <emphasis role="bold">fs</emphasis> and
+     <emphasis role="bold">pts</emphasis> commands. For more detailed information, see the <emphasis>OpenAFS
+     Administration Reference</emphasis>.</para>
+     <sect2 id="Header_177"><title>About the fs Commands</title>
+     
+ <indexterm><primary>fs commands</primary><secondary>introduction</secondary></indexterm>
+  
+     <para>Some <emphasis role="bold">fs</emphasis> commands extend UNIX file system semantics by invoking file-related
+     functions that UNIX does not provide (setting access control lists, for example). Other
+     <emphasis role="bold">fs</emphasis> commands help you control the performance of the Cache Manager running on your
+     local client machine. 
+ <indexterm><primary>fs commands</primary><secondary>help flag</secondary></indexterm>
+  
+ <indexterm><primary>fs commands</primary><secondary>getting help</secondary></indexterm>
+ </para>
+     <para>All <emphasis role="bold">fs</emphasis> commands accept the optional <emphasis role="bold">-help</emphasis>
+     flag. It has the same function as the <emphasis role="bold">fs help</emphasis> command: it prints a command's
+     online help message on the screen. Do not provide other options at the same time as this flag. It overrides them,
+     and the only effect of issuing the command is to display the help message. 
+ <indexterm><primary>fs commands</primary><secondary>privileges required</secondary></indexterm>
+ </para>
+     <para>The privilege required for issuing <emphasis role="bold">fs</emphasis> commands varies. The necessary
+     privileges for the <emphasis role="bold">fs</emphasis> commands described in this guide include the
+     following:</para>
+     <itemizedlist>
+       <listitem><para>Having certain permissions on a directory's access control list. For example, creating and
+       removing mount points requires <emphasis role="bold">a</emphasis> (<emphasis role="bold">administer</emphasis>),
+       <emphasis role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>), and
+       <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>) permissions for the directory in
+       which the mount point resides.</para></listitem>
+       <listitem><para>Belonging to the <emphasis role="bold">system:administrators</emphasis> group (see
+       <link linkend="HDRWQ50">Using the System Groups on ACLs</link>).</para></listitem>
+       <listitem><para>No privilege. Many <emphasis role="bold">fs</emphasis> commands simply list information and so do
+       not require any special privilege.</para></listitem>
+     </itemizedlist>
+     </sect2><sect2 id="Header_178"><title>About the pts Commands</title>
+     
+ <indexterm><primary>pts commands</primary><secondary>privilege required</secondary></indexterm>
+  
+ <indexterm><primary>Protection Database</primary></indexterm>
+  
+     <para>The <emphasis role="bold">pts</emphasis> command suite is the interface through which you can create
+     protection groups and add members to them. System administrators who belong to a special system group called
+     <emphasis role="bold">system:administrators</emphasis> group can manipulate any group, and also create the user and
+     machine entries that can belong to groups. Users who do not belong to the
+     <emphasis role="bold">system:administrators</emphasis> group can always list the information associated with the
+     group entries they own, as well as their own user entries. Depending on the setting of an entry's privacy flags,
+     regular users can sometimes access and manipulate group entries in certain ways.</para>
+     <para>All <emphasis role="bold">pts</emphasis> commands accept optional arguments and flags. They are listed in the
+     command descriptions in the <emphasis>OpenAFS Administration Reference</emphasis> and are described here in
+     detail:</para>
+     <variablelist>
+       
+ <indexterm><primary>pts commands</primary><secondary>cell argument</secondary></indexterm>
+ 
+       <varlistentry><term><emphasis role="bold">[-cell &lt;<replaceable>cell name</replaceable>&gt;]</emphasis></term>
+       <listitem><para>
+         This argument indicates that the command runs in the indicated cell. The issuer can abbreviate the
+         <replaceable>cell name</replaceable> value to the shortest form that distinguishes it from the other cells
+         listed in the <emphasis role="bold">/usr/vice/etc/CellServDB</emphasis> file on the client machine on which the
+         command is issued. By default, commands are executed in the local cell as defined 
+         </para><itemizedlist>
+           <listitem><para>First, by the value of the environment variable AFSCELL. (This variable is normally not
+           defined by default. If you are working in another, nonlocal cell for an extended period of time, you can set
+           the variable to the name of that cell.)</para></listitem>
+           <listitem><para>Second, in the <emphasis role="bold">/usr/vice/etc/ThisCell</emphasis> file on the client
+           machine on which the command is issued.</para></listitem>
+         </itemizedlist>
+       </listitem></varlistentry>
+     </variablelist>
+     <variablelist>
+       <varlistentry><term><emphasis role="bold">[-force]</emphasis></term>
+       <listitem><para>This flag directs the <emphasis role="bold">pts</emphasis> command interpreter to continue
+       executing the command, if possible, even if it encounters problems during the command's execution.
+       
+ <indexterm><primary>pts commands</primary><secondary>force flag</secondary></indexterm>
+  The command interpreter performs as much of the requested operation as possible, rather
+       than halting if it encounters a problem. The command interpreter reports any errors it encounters during the
+       command's execution. This flag is especially useful if you provide many instances for an argument; if one of the
+       instances is invalid, the command reports the error and proceeds with the remaining
+       arguments.</para></listitem></varlistentry>
+     </variablelist>
+     <variablelist>
+       <varlistentry><term><emphasis role="bold">[-help] 
+ <indexterm><primary>pts commands</primary><secondary>help flag</secondary></indexterm>
+ 
+       
+ <indexterm><primary>pts commands</primary><secondary>getting help</secondary></indexterm>
+ </emphasis></term>
+       <listitem><para>This flag has the same function as the <emphasis role="bold">pts help</emphasis> command: it
+       prints the command's online help message on the screen. Do not provide other options at the same time as this
+       flag. It overrides them, and the only effect of issuing the command is to display the help
+       message.</para></listitem></varlistentry>
+     </variablelist>
+     </sect2></sect1><sect1 id="HDRWQ89"><title>Getting Help in AFS</title>
+     
+ <indexterm><primary>help</primary><secondary>online for AFS commands</secondary></indexterm>
+  
+ <indexterm><primary>online help</primary></indexterm>
+  
+     <para>AFS online help consists of basic syntax messages. The AFS distribution also includes help in HTML format
+     which your system administrator can make available to you.</para>
+     <sect2 id="Header_180"><title>Displaying Command Syntax and Aliases</title>
+     
+ <indexterm><primary>apropos operation code</primary></indexterm>
+  
+ <indexterm><primary>help</primary><secondary>operation code in AFS command suites</secondary></indexterm>
+  
+ <indexterm><primary>help</primary><secondary>examples</secondary></indexterm>
+  
+     <para>To display a brief description of a command, its syntax statement, and alias if any, use the
+     <emphasis role="bold">help</emphasis> operation code. For example, to display the online help entry for the
+     <emphasis role="bold">fs listacl</emphasis> command, enter the following command:</para>
+ <programlisting>
+    % <emphasis role="bold">fs help listacl</emphasis>
+    fs listacl: list access control list 
+    aliases: la
+    Usage: fs listacl  [-path &lt;dir/file path&gt;+]  [-id] [-if] [-help]
+ </programlisting>
+     <para>To display the syntax statement only, use the <emphasis role="bold">-help</emphasis> flag, which is available
+     on most AFS commands. For example, to display the syntax statement for the <emphasis role="bold">fs
+     setacl</emphasis> command, enter the following command:</para>
+ <programlisting>
+    % <emphasis role="bold">fs setacl -help</emphasis>
+    Usage: fs setacl -dir &lt;directory&gt;+ -acl &lt;access list entries&gt;+ [-clear] [-negative] 
+    [-id] [-if] [-help]
+ </programlisting>
+     </sect2><sect2 id="Header_181"><title>Displaying Operation Code Descriptions</title>
+     <para>To display a short description of all of a command suite's operation codes, issue the
+     <emphasis role="bold">help</emphasis> operation code without any other arguments. For example, the
+     <emphasis role="bold">fs help</emphasis> command displays a short description of every operation code in the
+     <emphasis role="bold">fs</emphasis> command suite. 
+ <indexterm><primary>keyword for apropos command</primary></indexterm>
+ </para>
+     <para>To display a list of the commands in a command suite that concern a certain type of object, provide a
+     relevant keyword argument to the <emphasis role="bold">apropos</emphasis> operation code. For example, if you want
+     to set an ACL but cannot remember which <emphasis role="bold">fs</emphasis> command to use, issue the following
+     command:</para>
+ <programlisting>
+    % <emphasis role="bold">fs apropos set</emphasis>
+    setacl: set access control list
+    setcachesize: set cache size
+    setcell: set cell status
+    setclientaddrs: set client network interface addresses
+    setquota: set volume quota
+    setserverprefs: set file server ranks
+    setvol: set volume status
+    sysname: get/set sysname (i.e. @sys) value
+ </programlisting>
+     <para>The following message indicates that there are no commands whose names or descriptions include the keyword
+     string you have provided:</para>
+ <programlisting>
+    Sorry, no commands found
+ </programlisting>
+     <note>
+         <para>If the keyword you provide has spaces in it, enclose it in double quotes (<emphasis role="bold">"
+         "</emphasis>).</para>
+     </note>
+ </sect2></sect1></appendix>
Index: openafs/doc/xml/UserGuide/auusg012.xml
diff -c /dev/null openafs/doc/xml/UserGuide/auusg012.xml:1.1.10.3
*** /dev/null	Thu Jun 11 11:13:02 2009
--- openafs/doc/xml/UserGuide/auusg012.xml	Wed May 13 22:26:44 2009
***************
*** 0 ****
--- 1,735 ----
+ <?xml version="1.0" encoding="UTF-8"?>
+ <glossary id="HDRWQ90">
+   <title>Glossary</title>
+ 
+   <glossdiv>
+     <title>A</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">a (administer) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The ACL permission that allows the possessor to change the entries on the ACL .</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">a Privacy Flag</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The fourth privacy flag on a group, which enables the possessor to add members to it.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Access Control List (ACL)</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A list associated with an AFS directory that specifies what actions a user or group can perform on the directory and
+         the files in it. There are seven access permissions: <emphasis role="bold">a</emphasis> (<emphasis
+         role="bold">administer</emphasis>), <emphasis role="bold">d</emphasis> (<emphasis role="bold">delete</emphasis>), <emphasis
+         role="bold">i</emphasis> (<emphasis role="bold">insert</emphasis>), <emphasis role="bold">k</emphasis> (<emphasis
+         role="bold">lock</emphasis>), <emphasis role="bold">l</emphasis> (<emphasis role="bold">lookup</emphasis>), <emphasis
+         role="bold">r</emphasis> (<emphasis role="bold">read</emphasis>), and <emphasis role="bold">w</emphasis> (<emphasis
+         role="bold">write</emphasis>).</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">ACL Entry</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>An entry on an ACL that pairs a user or group with specific access permissions.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Alias</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>An alternative name for an AFS command.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">all ACL Shorthand</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A shorthand notation used with the <emphasis role="bold">fs setacl</emphasis> command to represent all seven
+         permissions.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Anonymous</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The identity assigned to a user who does not have a valid token for the local cell.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Argument</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The portion of a command that names an entity to be affected by the command. Arguments consist of two parts: a
+         <emphasis>switch</emphasis> and one or more <emphasis>instances</emphasis>. Some AFS commands take one or more
+         arguments.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Authenticate</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>To become recognized as a valid AFS user by providing the correct password. Authenticate by logging onto a machine
+         that uses an AFS-modified login utility or by issuing the <emphasis role="bold">klog</emphasis> command. Only authenticated
+         users can perform most AFS actions.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>B</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Byte, kilobyte</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A unit of measure used to measure usage of space in a volume or on a partition. A kilobyte block is equal to 1024
+         bytes.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>C</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Cache Manager</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A set of modifications to the operating system on a client machine which enables users on the machine to access files
+         stored in AFS. The Cache Manager requests files from the File Server and stores (<emphasis>caches</emphasis>) a copy of each
+         file on the client machine's local disk. Application programs then use the cached copy, which eliminates repeated network
+         requests to file server machines.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Cached File</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A copy of a file that the Cache Manager stores on a workstation's local disk.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Callback</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A promise from the File Server to contact the Cache Manager if the centrally stored copy of the file changes while the
+         Cache Manager has a cached copy. If the file is altered, the File Server <emphasis>breaks</emphasis> the callback. The next
+         time an application program asks for data from the file, the Cache Manager notices the broken callback and retrieves an
+         updated copy of the file from the File Server. Callbacks ensure the user is working with the most recent copy of a
+         file.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Cell</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>An independently administered site running AFS, consisting of a collection of file server machines and client machines
+         defined to belong to the cell. A machine can belong to only one cell at a time.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Client Machines</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>Computers that perform computations for users. Users normally work on a client machine, accessing files stored on a
+         file server machine.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Client/Server Computing</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A computing system in which two types of computers (client machines and server machines) perform different specialized
+         functions.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Command</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A string of characters indicating an action for an AFS server to perform. For a description of AFS command syntax, see
+         <link linkend="HDRWQ86">Appendix B, OpenAFS Command Syntax and Online Help</link>.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Command Suite</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A group of AFS commands with related functions. The command suite name is the first word in many AFS commands.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Complete Pathname</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A full specification of a file's location in AFS, starting at the root of the filespace (by convention mounted at the
+         <emphasis role="bold">/afs</emphasis> directory) and specifying all the directories the Cache Manager must pass through to
+         access the file. The names of the directories are separated by slashes.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>D</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">d (delete) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The ACL permission that enables the possessor to remove elements from a directory.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Directory</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A logical structure containing a collection of files and other directories.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Distributed File System</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A file system that joins the file systems of individual machines. Files are stored on different machines in the
+         network but are accessible from all machines.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>F</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">File</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A collection of information stored and retrieved as a unit.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">File Server Machine</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A type of machine that stores files and transfers them to client machines on request.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Flag</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>Part of a command that determines how the command executes, or the type of output it produces.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Foreign Cell</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A cell other than the cell to which the client machine belongs. If the client machine is appropriately configured,
+         users can access the AFS filespace in foreign cells as well as the local cell, and can authenticate in foreign cells in
+         which they have AFS accounts.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>G</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A defined list of users, which can be placed on a directory's ACL to extend a set of permissions to all of its members
+         at once.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Group-owned Group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A group owned by another group. All members of the owning group can administer the owned group; the members of the
+         owned group do not have administer permissions themselves.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>H</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Hierarchical File Structure</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A method of storing data in directories that are organized in a tree structure.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Home Directory</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A directory owned by a user and dedicated to storage of the user's personal files.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>I</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">i (insert) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The ACL permission that enables the possessor to add files or subdirectories to a directory.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Instance</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The part of a command string that defines the entity to affect.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>K</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">k (lock) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>See the k (lock) Permission entry. The ACL permission that enables programs to place advisory locks on a file.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Kilobyte</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A unit of measure used to measure usage of space in a volume or on a partition. A kilobyte is equal to 1024 bytes. The
+         term <emphasis>kilobyte block</emphasis> is sometimes used when referring to disk space.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>L</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">l (lookup) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The ACL permission that enables the possessor to list the contents of a directory and display its ACL.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Local Cell</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The cell to which the user's account and client machine belong.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">lock Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>See the <emphasis role="bold">k (lock) Permission</emphasis> entry.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Login</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The process of establishing a connection to a client machine's local file system as a specific user.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Logout</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The process of ending a connection to the local file system.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>M</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">m Privacy Flag</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The third privacy flag on a group, which enables the possessor to list the members of a group or the groups to which a
+         user belongs.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Mode Bits</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A set of permissions that the UNIX file system associates with a file or directory to control access to it. They
+         appear in the first field of the output from the <emphasis role="bold">ls -l</emphasis> command.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Mount Point</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A special type of directory that associates a location in the AFS file space with a volume. It acts like a standard
+         UNIX directory in that users can change directory to it and list its contents with the UNIX <emphasis
+         role="bold">cd</emphasis> and <emphasis role="bold">ls</emphasis> commands.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Mutual Authentication</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A procedure through which two parties prove their identities to one another. AFS server and client processes normally
+         mutually authenticate as they establish a connection.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>N</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">NFS/AFS Translator</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A program that enables users on NFS client machines to access files in the AFS filespace.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">none ACL Shorthand</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A shorthand notation used with the <emphasis role="bold">fs setacl</emphasis> command to delete an entry from an
+         ACL.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>O</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">o Privacy Flag</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The second privacy flag on a group, which enables the possessor to list groups owned by the user or group.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Operation Code</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The second word in an AFS command that belongs to a suite. It indicates the command's function.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Owner of a Group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The person or group who can administer a group.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>P</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Parent Directory</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The directory in which a directory or file resides.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Partition</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A logical section of a disk in a computer.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Password</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A unique, user-defined string of characters validating the user's system identity. The user must correctly enter the
+         password in order to be authenticated.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A certain type of access granted on an ACL. Anyone who possesses the permission can perform the action.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>Q</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Quota</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The size limit of a volume, assigned by the system administrator and measured in kilobyte blocks.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>R</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">r (read) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The ACL permission that enables the possessor to examine the contents of a file.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">r Privacy Flag</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The fifth privacy flag on a group, which enables the possessor to remove members from it.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">read ACL Shorthand</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A shorthand notation used with the <emphasis role="bold">fs setacl</emphasis> command to represent the <emphasis
+         role="bold">r</emphasis> and <emphasis role="bold">l</emphasis> permissions.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Relative Pathname</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A pathname that does not begin at the root of the AFS or local filespace and so represents a file or directory's
+         location with respect to the current working directory.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Remote Commands</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>Commands used to run programs on a remote machine without establishing a persistent connection to it.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>S</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">s Privacy Flag</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The first privacy flag on a group, which enables the possessor to list general information about it.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Self-owned Group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A group that owns itself, enabling all of its members to administer it.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Server</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A program or machine that provides a specialized service to its clients, such as storing and transferring files or
+         performing authentication.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Subdirectory</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A directory that resides in another directory in the file system hierarchy.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Switch</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The part of a command string defining the type of an argument. It is preceded by a hyphen.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Syntax Statement</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A specification of the options available on a command and their ordering.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">System Administrator</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A user who is authorized to administer an AFS cell.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">System Groups</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>Groups that AFS defines automatically to represent users who share certain characteristics. See the following three
+         entries.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">System:administrators group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A system group that includes users authorized to administer AFS.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">System:anyuser group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A system group that includes everyone who can gain access the cell's AFS filespace. It includes unauthenticated users,
+         who are assigned the identity <emphasis role="bold">anonymous</emphasis>.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">System:authuser group</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A system group that includes all users who currently have valid AFS tokens for the local cell.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>T</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Token</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A collection of data that the AFS server processes accept as evidence that the possessor has successfully proved his
+         or her identity to the cell's AFS authentication service. AFS assigns the identity <emphasis
+         role="bold">anonymous</emphasis> to users who do not have a token.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>U</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">UNIX Mode Bits</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>See the <emphasis role="bold">Mode Bits</emphasis> entry.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Username</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A character string entered at login that uniquely identifies a person in the local cell.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>V</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">Volume</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A structure that AFS uses to group a set of files and directories into a single unit for administrative purposes. The
+         contents of a volume reside on a single disk partition and must be mounted in the AFS filespace to be accessible.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ 
+   <glossdiv>
+     <title>W</title>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">w (write) Permission</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>The ACL permission that enables the possessor to modify the contents of a file.</para>
+       </glossdef>
+     </glossentry>
+ 
+     <glossentry>
+       <glossterm><emphasis role="bold">write ACL Shorthand</emphasis></glossterm>
+ 
+       <glossdef>
+         <para>A shorthand notation used with the <emphasis role="bold">fs setacl</emphasis> command to represent all permissions
+         except the <emphasis role="bold">a</emphasis> permission.</para>
+       </glossdef>
+     </glossentry>
+   </glossdiv>
+ </glossary>
