fs, exsort - file server maintenance
help [ command ... ]
create path uid gid perm [lad]
date [[+-] seconds]
flag flag [ channel ]
newuser name [options]
stats [[-] flags...]
wormcp [ funit tunit [nblock]]
wormeject [ tunit ]
wormingest [ tunit ]
wormoffline [ tunit ]
wormonline [ tunit ]
disk/exsort [-w] [file]
Except for exsort, these commands are available only on the console of an fs(4) file
The console requires the machine's password to be supplied before accepting commands.
Typing a control-D will cause the server to request the password again.
Help prints a `usage string' for the named commands, by default all commands. Also, many
commands print menus of their options if given incorrect or incomplete parameters.
Arp has two subcommands: print prints the contents of the ARP cache and flush flushes it.
Cfs changes the current file system, that is, the file tree to which commands (check,
clri, create, newuser, profile, remove, and users) apply. The initial filesystem is main.
Check verifies the consistency of the current file system. With no options it checks and
reports the status. It suspends service while running. Options are:
rdall Read every block in the file system (can take a long time). Normally, check will
stop short of the actual contents of a file and just verify the block addresses.
tag Fix bad tags; each block has a tag that acts as a backwards pointer for consistency
ream Fix bad tags and also clear the contents of blocks that have bad tags.
pfile Print every file name.
pdir Print every directory name.
free Rebuild the list of free blocks with all blocks that are not referenced. This
option is only useful on non-cache/WORM file systems.
bad Each block address that is out of range or duplicate is cleared. Note that only
the second and subsequent use of a block is cleared. Often the problems in a file
system are caused by one bad file that has a lot of garbage block addresses. In
such a case, it is wiser to use check to find the bad file (by number of diagnostic
messages) and then use clri to clear the addresses in that file. After that, check
can be used to reclaim the free list.
touch Cause every directory and indirect block not on the current WORM disk to be
advanced to the current WORM on the next dump. This is a discredited idea to try
to keep operating on the knee of the cache working set. Buy more cache disk.
Clri clears the internal directory entry and abandons storage associated with files. It
ignores the usual rules for sanity, such as checking against removing a non-empty direc-
tory. A subsequent check free will place the abandoned storage in the free list.
Cpu prints the CPU utilization and state of the processes in the file server. If the name
of a process type argument is given, then CPU utilization for only those processes is
Create creates a file on the current file system. Uid and gid are names or numbers from
/adm/users. Perm is the low 9 bits of the permission mode of the file, in octal. An
optional final l, a, or d creates a locked file, append-only file, or directory.
Cwcmd controls the cached WORM file systems. The subcommands are:
mvstate state1 state2 [platter]
States are none, dirty, dump, dump1, error, read, and write. A mvstate dump1 dump
will cause I/O errors in the last dump to be retried. A mvstate dump1 write will
cause I/O errors in the last dump to be retried in reallocated slots in the next
dump. A mvstate read none will flush the cache associated with the WORM. A mvs-
tate dump write aborts the background process dumping to WORM; as a consequence it
leaves holes in the dump file system. Other uses are possible but arcane. The
optional platter limits affected blocks to those on that platter.
prchain [start] [back]
Print the chain of superblocks for the directory containing the roots of the dumped
file systems, starting at block number start (default 0) going forward (backwards
if back is supplied).
Copy the block numbers, in native endian longwords, of blocks in the read state to
the file /adm/cache for use by disk/exsort. If an argument is given, then that
percent (most recently used) of each cache bucket is copied.
Read /adm/cache and for every block there on WORM disk dskno, read the block from
WORM to the cache. If dskno is not supplied, all blocks in /adm/cache are read.
Suspend (0) or restart (1) the background dump process.
Verify that the superblock on the WORM is readable, ignoring the cached copy.
acct Prints how many times each user has caused the system to allocate new space on the
WORM; the units are megabytes.
Clears the accounting records for acct.
Cycl controls the Cyclone fiber link to the main CPU server. The one subcommand is
reboot, which reinitializes the Cyclone board and connection.
Date prints the current date. It may be adjusted using +-seconds. With no sign, it sets
the date to the absolute number of seconds since 00:00 Jan 1, 1970 GMT; with a sign it
trims the current time.
Duallow sets permissions such that the named user can read and search any directories.
This is the permission necessary to do a du(1) command anywhere in the file system to dis-
cover disk usage.
Dump starts a dump to WORM immediately for all file systems that have a WORM associated.
File service is suspended while the cache is scanned; service resumes when the copy to
Files prints for every connection the number of allocated fids.
Flag toggles flags, initially all off:
arp Report ARP activity.
attach Report as connections are made to the file server.
chat (Very noisy.) Print all 9P messages to and from the server.
dkit Report Datakit activity.
route Report received RIP packets.
ro Report I/O on the WORM device.
If given a second numeric channel argument, as reported by who, the flag is altered only
on that connection.
Halt does a sync and halts the machine, returning to the boot ROM.
Newuser requires a name argument. With no options it adds user name, with group leader
name, to /adm/users and makes the directory /usr/name owned by user and group name. The
? Print the entry for name.
: Add a group: add the name to /adm/users but don't create the directory. By conven-
tion, groups are numbered starting from 10000, users from 0.
Rename existing user name to newname.
Change the leader of name to leader. If leader is missing, remove the existing
Add member to the member list of name.
Remove existing member from the member list of name.
After a successful newuser command the file server overwrites /adm/users to reflect the
internal state of the user table.
Noattach disables attach(5) messages, in particular for system maintenance. Previously
attached connections are unaffected. Another noattach will enable normal behavior.
Passwd sets the machine's password and writes it in non-volatile RAM.
Profile 0 clears the profiling buffer and enables profiling; profile 1 stops profiling and
writes the data to /adm/kprofdata for use by kprof (see prof(1)). If a number is not
specified, the profiling state toggles.
Remove removes files.
Route maintains an IP routing table. The subcommands are:
add dest gate [mask]
Add a static route from IP address dest using gateway gate with an optional subnet
Delete an entry from the routing table.
print Display the contents of the routing table.
ripon Enables the table to be filled from RIP packets.
ripoff Disables the table from being updated by RIP packets.
The stat commands are connected with a service or device identified by the last character
of the name: c, Cyclone fiber link; d, SCSI targets; e, Eagle Ethernet controller; j,
Jaguar SCSI/VME disk controller; k, Datakit; l, LANCE Ethernet controller; w, cached WORM.
The Statp command prints statistics about processes; an optional argument identifies the
process to be displayed; stata prints overall statistics about the file system. The stats
command takes an optional argument identifying the characters of stat commands to run.
The option is remembered and becomes the default for subsequent stats commands if it
begins with a minus sign.
Sync writes dirty blocks in memory to the magnetic disk cache.
Time reports the time required to execute the command.
Trace with no options prints the set of queue-locks held by each process in the file
server. If things are quiescent, there should be no output. With an argument number it
prints a stack traceback of that process.
Users uses the contents of file (default /adm/users) to initialize the file server's
internal representation of the users structure. Incorrectly formatted entries in file
will be ignored. If file is explicitly default, the system builds a minimal functional
users table internally; this can help recover from disasters. If the file cannot be read,
you must run
for the system to function. The default table looks like this:
Vcache displays statistics about the virtual buffer cache on machines with mapped caches
such as the Sparcstation 2.
Version reports when the file server was last compiled and last rebooted.
Who reports, one per line, the names of users connected to the file server and the status
of their connections. The first number printed on each line is the channel number of the
connection. If users are given the output selects connections owned by those users.
Wormcp copies from WORM disk funit to WORM disk tunit nblock native blocks (default the
whole disk). If tunit is written, wormcp guarantees the written data is equal to the data
on funit and stops if not. Wormcp does a binary search to find the lowest unwritten block
on tunit at which to start the copy. With no arguments, wormcp stops a running copy.
Wormeject moves the WORM disk in slot tunit to the output shelf.
Wormingest moves the WORM disk from the input shelf to slot tunit.
Wormoffline will take the designated WORM controller out of service. This is done in
software by ignoring that logical unit when changing platters. Note that the controller
will be restored on a reboot.
Wormonline will restore the designated unit to service.
When the file server boots, it prints the message
for config mode hit a key within 5 seconds
If a character is typed within 5 seconds of the message appearing, the server will enter
config mode. See fsconfig(8) for the commands available in config mode. The system also
enters config mode if, at boot time, the non-volatile RAM does not appear to contain a
Exsort is a regular command to be run on a CPU server, not on the file server console. It
reads the named file (default /adm/cache) and sorts the cache disk block numbers contained
therein. It assumes the numbers are 4-byte integers and guesses the endianness by looking
at the data. It then prints statistics about the cache. With option -w it writes the
sorted data back to file.
Ken Thompson, ``The Plan 9 File Server''.