123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- .TH CREEPY 4
- .SH NAME
- 9pix, fmt, rip, arch \- creepy file server and WORM archive
- .SH SYNOPSIS
- .B creepy/9pix
- [
- .B -DFLAGS
- ]
- [
- .B -ra
- ]
- [
- .B -c
- .I n
- ]
- [
- .B -A
- .I addr
- ]
- [
- .B -S
- .I srv
- ]
- .I disk
- .PP
- .B creepy/fmt
- [
- .B -DFLAGS
- ]
- [
- .B -wy
- ]
- .I disk
- .PP
- .B creepy/rip
- [
- .B -DFLAGS
- ]
- [
- .B -a
- ]
- [
- .B -c
- .I n
- ]
- [
- .B -A
- .I addr
- ]
- [
- .B -S
- .I srv
- ]
- .I disk
- .PP
- .B creepy/arch
- [
- .B -DFLAGS
- ]
- [
- .I dir
- ]
- .SH DESCRIPTION
- .I Creepy
- is a prototype file server for Nix. It maintains a mutable file tree with unix semantics,
- kept in main memory, served through 9P, see
- .IR intro (5),
- and through IX.
- .PP
- .I Creepy/9pix
- is the main file server program. It serves a file tree through 9P and IX.
- The tree kept in memory is mutable. But frozen versions of the tree are written
- to
- .IR disk ,
- both upon request and also on a periodic basis, to survive power outages and other problems,
- and to be able to operate on trees larger than main memory.
- The tree(s) stored on disk are frozen and cannot be changed once written.
- .PP
- By default the program listens for 9P in the standard TCP port and posts a connection that
- can be mounted at
- .BR /srv/9pix .
- Flags
- .B -A
- and
- .B -S
- may be used to specify an alternate network address and/or
- .IR srv (3)
- file to post. Using these flags prevents
- .I 9pix
- from otherwise
- listening or posting to
- IR srv .
- Flag
- .B -r
- makes the program operate in read-only mode, and flag
- .B -a
- starts the program without requiring authentication to mount the file tree.
- .PP
- The program is aggresive in its usage of memory to keep disk blocks cached for
- further usage. By default it consumes half the memory available when started, or less
- if there is plenty.
- Flag
- .B -c
- can be used to set the size of the cache. Its argument indicates the desired number
- of megabytes to consume for such purpose. More memory will be consumed, e.g., for process
- stacks and protocol messages.
- .PP
- The on-disk image is organized as a log of blocks. When a new
- version of the tree must be written to disk, all blocks that changed are given disk addresses
- and are appended to the log. Once given addresses, they are frozen.
- If new changes are made to the tree, blocks are melted and forget their previous addresses:
- each time they are written again, they are assigned new ones.
- .PP
- When the disk gets full, all reachable blocks are marked and all other blocks are considered
- available for growing the log (this is a description of semantics, not of the implementation). Thus,
- the log is circular but jumps to the next available block each time it grows.
- If, after the mark process, the disk is still full, the file system becomes read only but for removing files.
- .PP
- Before using a disk it must be formatted using
- .IR creepy/fmt .
- This initializes blocks used to store marks for the mark and sweep process and also initializes a
- super block and an empty root directory. Flag
- .B -y
- forces the format even if the disk seems to contain a
- .I fossil (4)
- or
- .I creepy
- partition. Flag
- .B -w
- is used to format the partition for a WORM (described later) and not for a main file tree.
- .PP
- .I Creepy/rip
- is the same file server program, but operates in WORM mode. In this case, no mark and sweep
- for free blocks will ever happen. Blocks are consumed from the disk until it becomes full.
- The file tree served is always read-only.
- .PP
- Operating the WORM to in administrative mode to add more trees or new versions of the
- archived trees does not require any protocol: it can be done using the standard file interface
- used to operate on any other tree, by mounting and changing it.
- .PP
- An alternate mount specifier,
- .IR wormwr ,
- can be used to mount the tree in read-write mode, to update the archive.
- Updating the archive is performed by creating new trees with the conventional
- .BI / treename / year / mmdd
- paths on the WORM. But note that such paths are not enforced by the program at all.
- Before updating a tree in the archive, for a new day, a control request described
- later can be used to link the directory for the previous version of the archive to the new one.
- After that, changes made to files would in effect copy on write all blocks affected, and
- refer to old ones when they did not change.
- .PP
- .I Creepy/arch
- is a program started by
- .I creepy/9pix
- to archive snapshots of the tree into a directory provided by
- .I creepy/rip
- (or by any other file server).
- The program is not expected to be run by users, and speaks a simple protocol through
- its standard input: A block address is written and the block contents are read from it.
- Usually, the standard input is a pipe to
- .IR creepy/9pix .
- The program takes the address of the root directory as kept on disk and then asks the
- file server program for block contents, to archive them into a mounted directory. Thus,
- the tree archived is always consistent because only consistent trees can be read from disk
- (the mutable file tree is kept in memory).
- .PP
- The file tree provided by
- .I 9pix
- and
- .I rip
- has the following layout:
- .EX
- /
- /root
- /cons
- /stats
- .EE
- And, by convention, archives kept in the WORM are expected to have names like:
- .EX
- /root/treename/2012/0425
- /root/treename/2012/0425.1
- /root/treename/2012/0426
- .EE
- .PP
- Using the
- .B main
- attach specifier yields the tree as just shown. Using an empty specifier, or
- .BR root ,
- or
- .B main/active
- yields the tree found at
- .BR /root .
- In
- .I creepy/rip
- the attach specifier
- .B wormwr
- yields the root of the tree in read-write mode.
- .PP
- .IP \(bu
- The root directory is never found on disk. It is a placeholder for the contained files.
- .IP \(bu
- .I Cons
- is a synthesized file used as a console for file system administration, and it is not found
- on disk. It is still subject to file permissions, and coordinates concurrent access to the console
- by different users. The owner of the file server process is always allowed to access the console.
- .IP \(bu
- .I Stats
- is another synthesized file used to report statistics.
- .IP \(bu
- .I Root
- contains the actual file tree. It corresponds to the file tree as seen at this moment
- by file system users. It's semantics are similar to those of a UNIX or Plan 9 file system.
- .PP
- Users and groups can be added by creating and editing
- .B /root/users .
- See an example shown later.
- .PP
- The console accepts the following commands:
- .TP
- .BI allow " " [ uid ]
- Lets
- .I uid
- bypass permissions, or show allowed users if none is given.
- .TP
- .BI disallow " " [ uid ]
- undoes the effect of the previous command for the given
- .I uid
- or for everyone if none is given.
- .TP
- .B halt
- Halts the file system and terminates the processes.
- .TP
- .B stats
- Reports usage statistics.
- .TP
- .B sync
- Synchronizes the disk by writing a new version of the tree to the log.
- .TP
- .BI uname " " [ uid ]
- Reports information about user
- .IR uid .
- .TP
- .B users
- Prints the list of users.
- .TP
- .B who
- Reports the list of network addresses and users currently using the file system.
- .TP
- .BI arch " name hour " [ path ]
- Schedules an archival into the WORM with the given tree
- .I name
- and at the given
- .IR hour .
- By default, the WORM is expected at
- .B /n/rip
- in administrative mode. An optional
- .I path
- may be given to use a different directory.
- .TP
- .B "arch now
- archives the tree. The previous form must be used before to configure
- archival.
- .TP
- .B "arch none
- disables archival (this is the default).
- .TP
- .BI link " src dst
- is used in the WORM to initialize a new archive by linking the one of the
- previous day to a new name, before updating the tree.
- .TP
- .B ?
- Prints the list of known commands. More than those describe here will be shown,
- mostly for debugging.
- .SH EXAMPLES
- .PP
- Format a partition and a WORM
- .EX
- creepy/fmt /dev/sdE0/creepy
- creepy/fmt -w /dev/sdE0/rip
- .EE
- .PP
- Run the file system, mount it, initialize the user list with one from
- .IR fossil ,
- and populate it
- .EX
- creepy/9pix /dev/sdE0/creepy
- mount -c /srv/9pix /n/creepy main
- cp /adm/users /n/creepy/root/users
- echo allow $user >/n/creepy/cons
- dircp /n/dist /n/creepy/root
- .EE
- Run the worm (the previously file server would mount it
- if it finds its file posted in
- .I srv
- and is asked to archive a tree.
- .EX
- creepy/rip /dev/sdE0/rip
- .EE
- .SH SOURCE
- .B /sys/src/cmd/creepy
- .SH SEE ALSO
- .IR fossil (4),
- .IR venti (8).
- .br
- Franciscjo J. Ballesteros and Roger Peppe,
- ``The Design and Implementation of the Creepy File System and the IX File Protocol'',
- 2012.
- .SH BUGS
- Some. But hopefully, with time and testing, less than those still waiting under
- the covers in other popular file server programs we use.
- .PP
- Do not use this for your own files yet. It is experimental and still under testing.
|