CWFS(4)CWFS(4)NAMEcwfs - cached-worm file server, dump
SYNOPSIScwfs [ -cf ] [ -a announce-string ] ... [ -m device-map ] config-device
Cwfs is a cached-worm file server that runs as a user-mode program and
can maintain file systems created by fs(4), the original Plan 9 file
server that had its own kernel and operated a standalone system with
disks and optical-disc jukebox attached. Unlike fs(4), which could
only accept 9P connections over IL/IPv4 on Ethernets (or over Datakit
and Cyclones, long ago), cwfs accepts 9P connections over any network
medium and protocol that it can announce on, by default TCP (over IPv4
or IPv6). Given suitable 9P clients, one could even run 9P over aan(8)
The stock cwfs implements a 16K file system block size and 32-bit disk
addresses, in order to be compatible with some existing file systems,
notably emelie's. These parameters can be changed by recompilation.
Cwfs expects to find the configuration block on config-device.
-a announce on announce-string instead of
-c use a newer, faster, and incompatible cache-device layout. To
convert an old file system's cache to the new layout, dump the
file system, note the last superblock number, halt cwfs, restart
cwfs with -cf, recover the file system, and start cwfs with -c
-f enter the file server's configuration mode before starting nor‐
-m the file device-map contains a simple device name (e.g., and a
replacement per line. The device name is in the usual filsys
notation of fsconfig(8). The replacement can be the name of an
existing file (which cwfs will not grow) or another such device
name. For example, the file
would map accesses to device to existing file and accesses to
device to device if no file named exists.
The file server normally requires all users except to provide authenti‐
cation tickets on each attach(5). This can be disabled using the
noauth configuration command (see fsconfig(8)).
The group numbered 9999, normally called noworld, is special on the
file server. Any user belonging to that group has attenuated access
privileges. Specifically, when checking such a user's access to files,
the file's permission bits are first ANDed with 0770 for normal files
or 0771 for directories. The effect is to deny world access permis‐
sions to noworld users, except when walking directories.
The user none is always allowed to attach to emelie without authentica‐
tion but has minimal permissions.
Emelie maintains three file systems on a combination of disks and
write-once-read-many (WORM) magneto-optical disks.
other is a simple disk-based file system similar to kfs(4).
main is a worm-based file system with a disk-based look-aside cache.
The disk cache holds modified worm blocks to overcome the write-
once property of the worm. The cache also holds recently
accessed non-modified blocks to speed up the effective access
time of the worm. Occasionally (usually daily at 5AM) the modi‐
fied blocks in the disk cache are dumped. At this time, traffic
to the file system is halted and the modified blocks are rela‐
beled to the unwritten portion of the worm. After the dump, the
file system traffic is continued and the relabeled blocks are
copied to the worm by a background process.
dump Each time the main file system is dumped, its root is appended
to a subdirectory of the dump file system. Since the dump file
system is not mirrored with a disk cache, it is read-only. The
name of the newly added root is created from the date of the
dump: /yyyy/mmdds. Here yyyy is the full year, mm is the month
number, dd is the day number and s is a sequence number if more
than one dump is done in a day. For the first dump, s is null.
For the subsequent dumps s is 1, 2, 3, etc.
The root of the main file system that is frozen on the first
dump of March 1, 1992 will be named /1992/0301/ in the dump file
Changes from fs(4)fs(4)'s IP configuration is ignored and the underlying system's is
Various other fs(4) commands have been omitted since they (or equiva‐
lents) can now be executed directly on the underlying CPU server,
notably date and passwd (see auth/wrkey).
fs(4)'s device names for IDE disks and for Marvell SATA disks are not
supported; use -m to map wren devices to appropriate names under
The file server kernel seems to have scanned PCI buses in reverse order
from the other Plan 9 kernels, so systems with multiple SCSI cards may
find controller numbering reversed. -m can be used to compensate for
this if you don't want to change filsys declarations.
The file server kernel's config field in NVRAM was overloaded in recent
times to hold a secstore(1) key for the CPU hostowner. Since cwfs runs
on a CPU kernel, the location of its configuration block must be sup‐
plied on the command line.
Disk labels are now implemented for l devices. At the first access of
a side, cwfs will attempt to read the label and verify that it has the
correct side number and byte order; if either is wrong, it will issue a
warning. If the label cannot be read, cwfs will attempt to write a new
Place the root of the dump file system on /n/dump and show the modified
times of the MIPS C compiler over all dumps in February, 1992:
ls -l /n/dump/1992/02??/mips/bin/vc
To get only one line of output for each version of the compiler:
ls -lp /n/dump/1992/02??/mips/bin/vc | uniq
SEE ALSOyesterday(1), fs(3), sd(3), fossil(4), fs(4), srv(4), fs(8), fscon‐
Sean Quinlan, ``A Cached WORM File System'', Software - Practice and
Experience, December, 1991
Ken Thompson, Geoff Collyer, ``The 64-bit Standalone Plan 9 File
For the moment, the file server serves both the old (9P1) and new
(9P2000) versions of 9P, deciding which to serve by sniffing the first
packet on each connection.
File system block size and disk address size (32- or 64-bit) are fixed
at compilation time, and this is not easily changed.
Cwfs is probably not the right choice of file server for new file sys‐
tems. It's intended to cope with existing file systems on optical
jukeboxes or images thereof.