|  | .TH FOSSIL 4 | 
|  | .SH NAME | 
|  | fossil, flchk, flfmt \- archival file server | 
|  | .SH SYNOPSIS | 
|  | .B fossil/fossil | 
|  | [ | 
|  | .B -Dt | 
|  | ] | 
|  | [ | 
|  | .B -c | 
|  | .I cmd | 
|  | ]... | 
|  | [ | 
|  | .B -f | 
|  | .I file | 
|  | ] | 
|  | [ | 
|  | .B -m | 
|  | .I free-memory-percent | 
|  | ] | 
|  | .PP | 
|  | .B fossil/flchk | 
|  | [ | 
|  | .B -f | 
|  | ] | 
|  | [ | 
|  | .B -c | 
|  | .I ncache | 
|  | ] | 
|  | [ | 
|  | .B -h | 
|  | .I host | 
|  | ] | 
|  | .I file | 
|  | .PP | 
|  | .B fossil/flfmt | 
|  | [ | 
|  | .B -y | 
|  | ] | 
|  | [ | 
|  | .B -b | 
|  | .I blocksize | 
|  | ] | 
|  | [ | 
|  | .B -h | 
|  | .I host | 
|  | ] | 
|  | [ | 
|  | .B -l | 
|  | .I label | 
|  | ] | 
|  | [ | 
|  | .B -v | 
|  | .I score | 
|  | ] | 
|  | .I file | 
|  | .PP | 
|  | .B fossil/conf | 
|  | [ | 
|  | .B -w | 
|  | ] | 
|  | .I file | 
|  | [ | 
|  | .I config | 
|  | ] | 
|  | .PP | 
|  | .B fossil/last | 
|  | .I file | 
|  | .SH DESCRIPTION | 
|  | .I Fossil | 
|  | is the main file system for Plan 9. | 
|  | Unlike the Plan 9 file servers of old, | 
|  | .I fossil | 
|  | is a collection of user-space programs that run on a standard Plan 9 kernel. | 
|  | The name of the main fossil file server at Murray Hill is | 
|  | .BR pie . | 
|  | The Plan 9 distribution file server, | 
|  | .BR sources , | 
|  | is also a fossil server. | 
|  | .PP | 
|  | .I Fossil | 
|  | is structured as a magnetic disk write buffer | 
|  | optionally backed by a Venti server for archival storage. | 
|  | It serves the Plan 9 protocol via TCP. | 
|  | A | 
|  | .I fossil | 
|  | file server conventionally presents | 
|  | three trees in the root directory of each file system: | 
|  | .BR active , | 
|  | .BR archive , | 
|  | and | 
|  | .BR snapshot . | 
|  | .B /active | 
|  | is the root of a conventional file system | 
|  | whose blocks are stored in a disk file. | 
|  | In a typical configuration, the file server periodically | 
|  | marks the entire file system copy-on-write, effectively | 
|  | taking a snapshot of the file system at that moment. | 
|  | This snapshot is made available in a name | 
|  | created from the date and time of the snapshot: | 
|  | .BI /snapshot/ yyyy / mmdd / hhmm \fR, | 
|  | where | 
|  | .I yyyy | 
|  | is the full year, | 
|  | .I mm | 
|  | is the month number, | 
|  | .I dd | 
|  | is the day number, | 
|  | .I hh | 
|  | is the hour, | 
|  | and | 
|  | .I mm | 
|  | is the minute. | 
|  | The snapshots in | 
|  | .B /snapshot | 
|  | are ephemeral: eventually they are deleted | 
|  | to reclaim the disk space they occupy. | 
|  | Long-lasting snapshots stored on a Venti server | 
|  | are kept in | 
|  | .B /archive | 
|  | and also named from the date (though not the time) of the snapshot: | 
|  | .BI /archive/ yyyy / mmdds \fR, | 
|  | where | 
|  | .IR yyyy , | 
|  | .IR mm , | 
|  | and | 
|  | .I dd | 
|  | are year, month, and day as before, | 
|  | and | 
|  | .I s | 
|  | is a sequence number if more than one | 
|  | archival snapshot is done in a day. | 
|  | For the first snapshot, | 
|  | .I s | 
|  | is null. | 
|  | For the subsequent snapshots, | 
|  | .I s | 
|  | is | 
|  | .BR .1 , | 
|  | .BR .2 , | 
|  | .BR .3 , | 
|  | etc. | 
|  | The root of the main file system that is frozen | 
|  | for the first archival snapshot of December 15, 2002 | 
|  | will be named | 
|  | .BR /archive/2002/1215/ . | 
|  | .PP | 
|  | The attach name used in | 
|  | .I mount | 
|  | (see | 
|  | .IR bind (1), | 
|  | .IR bind (2) | 
|  | and | 
|  | .IR attach (5)) | 
|  | selects a file system to be served | 
|  | and optionally a subtree, | 
|  | in the format | 
|  | .IB fs \fR[\fB/ dir \fR]. | 
|  | An empty attach name selects | 
|  | .BR main/active . | 
|  | .PP | 
|  | .I Fossil | 
|  | normally requires all users except | 
|  | .L none | 
|  | to provide authentication tickets on each | 
|  | .IR attach (5). | 
|  | To keep just anyone from connecting, | 
|  | .L none | 
|  | is only allowed to attach after another user | 
|  | has successfully attached on the same | 
|  | connection. | 
|  | The other user effectively acts as a chaperone | 
|  | for | 
|  | .LR none . | 
|  | Authentication can be disabled using the | 
|  | .B -A | 
|  | flag to | 
|  | .B open | 
|  | or | 
|  | .B srv | 
|  | (see | 
|  | .IR fossilcons (8)). | 
|  | .PP | 
|  | The groups called | 
|  | .B noworld | 
|  | and | 
|  | .B write | 
|  | are special on the file server. | 
|  | Any user belonging to | 
|  | .B noworld | 
|  | 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 and 0771 for directories. | 
|  | The effect is to deny world access permissions to | 
|  | .B noworld | 
|  | users, except when walking into directories. | 
|  | If the | 
|  | .B write | 
|  | group exists, then the file system appears read-only | 
|  | to users not in the group. | 
|  | This is used to make the Plan 9 distribution file server | 
|  | .RI ( sources.cs.bell-labs.com ) | 
|  | readable by the world but writable only to the developers. | 
|  | .PP | 
|  | .I Fossil | 
|  | starts a new instance of the fossil file server. | 
|  | It is configured mainly through console commands, | 
|  | documented in | 
|  | .IR fossilcons (8). | 
|  | .PP | 
|  | The options are: | 
|  | .TF "-c\fI cmd | 
|  | .PD | 
|  | .TP | 
|  | .B -D | 
|  | Toggle the debugging flag, which is initially off. | 
|  | When the flag is set, information about authentication | 
|  | and all protocol messages are written to standard error. | 
|  | .TP | 
|  | .B -t | 
|  | Start a file server console on | 
|  | .BR /dev/cons . | 
|  | If this option is given, | 
|  | .I fossil | 
|  | does not fork itself into the background. | 
|  | .TP | 
|  | .BI -c " cmd | 
|  | Execute the console command | 
|  | .IR cmd . | 
|  | This option may be repeated to give multiple | 
|  | commands. | 
|  | Typically the only commands given on the | 
|  | command line are | 
|  | .RB `` ".\fI file" ,'' | 
|  | which executes a file containing commands, | 
|  | and | 
|  | .RB `` "srv -p" \fIcons \fR,'' | 
|  | which starts a file server console on | 
|  | .BI /srv/ cons \fR. | 
|  | See | 
|  | .IR fossilcons (8) | 
|  | for more information. | 
|  | .TP | 
|  | .BI -f " file | 
|  | Read and execute console commands stored in the Fossil disk | 
|  | .IR file . | 
|  | .I Conf | 
|  | .RI ( q.v. ) | 
|  | reads and writes the command set stored in the disk. | 
|  | .TP | 
|  | .B -m | 
|  | Allocate | 
|  | .I free-memory-percent | 
|  | percent of the available free RAM for buffers. | 
|  | This overrides all other memory sizing parameters, | 
|  | notably the | 
|  | .B -c | 
|  | option to | 
|  | .BR open . | 
|  | 30% is a reasonable choice. | 
|  | .PD | 
|  | .PP | 
|  | .I Flchk | 
|  | checks the fossil file system stored in | 
|  | .I file | 
|  | for inconsistencies. | 
|  | .I Flchk | 
|  | is deprecated in favor of the console | 
|  | .B check | 
|  | command (see | 
|  | .IR fossilcons (8)). | 
|  | .I Flchk | 
|  | prints | 
|  | .I fossil | 
|  | console commands that may be | 
|  | executed to take care of | 
|  | bad pointers | 
|  | .RB ( clrp ), | 
|  | bad entries | 
|  | .RB ( clre ), | 
|  | bad directory entries | 
|  | .RB ( clri ), | 
|  | unreachable blocks | 
|  | .RB ( bfree ). | 
|  | Console commands are interspersed with | 
|  | more detailed commentary on the file system. | 
|  | The commands are distinguished by being prefixed with | 
|  | sharp signs. | 
|  | Note that all proposed fixes are rather drastic: offending | 
|  | pieces of file system are simply chopped off. | 
|  | .PP | 
|  | .I Flchk | 
|  | does | 
|  | .I not | 
|  | modify the file system, so it is safe to | 
|  | run concurrently with | 
|  | .IR fossil , | 
|  | though in this case | 
|  | the list of unreachable | 
|  | blocks and any inconsistencies involving the active file system | 
|  | should be taken with a grain of salt. | 
|  | .PP | 
|  | The options are: | 
|  | .TF "-h\fI host | 
|  | .PD | 
|  | .TP | 
|  | .B -f | 
|  | Fast mode. | 
|  | By default, | 
|  | .I flchk | 
|  | checks the entire file system image for consistency, | 
|  | which includes all the archives to Venti | 
|  | and can take a very long time. | 
|  | In fast mode, | 
|  | .I flchk | 
|  | avoids walking in Venti blocks | 
|  | whenever possible. | 
|  | .TP | 
|  | .BI -c " ncache | 
|  | Keep a cache of | 
|  | .I ncache | 
|  | (by default, 1000) | 
|  | file system blocks in memory during the check. | 
|  | .TP | 
|  | .BI -h " host | 
|  | Use | 
|  | .I host | 
|  | as the Venti server. | 
|  | .PD | 
|  | .PP | 
|  | .I Flfmt | 
|  | prepares | 
|  | .I file | 
|  | as a new fossil file system. | 
|  | The file system is initialized with three empty directories | 
|  | .BR active , | 
|  | .BR archive , | 
|  | and | 
|  | .BR snapshot , | 
|  | as described above. | 
|  | The options are: | 
|  | .TF "-b\fI blocksize | 
|  | .PD | 
|  | .TP | 
|  | .B -y | 
|  | Yes mode. | 
|  | By default, | 
|  | .I flfmt | 
|  | will prompt for confirmation before formatting | 
|  | a file that already contains a fossil file system, | 
|  | and before formatting a file that is not served | 
|  | directly by a kernel device. | 
|  | If the | 
|  | .B -y | 
|  | flag is given, no such checks are made. | 
|  | .TP | 
|  | .BI -b " blocksize | 
|  | Set the file system block size (by default, 8192). | 
|  | .TP | 
|  | .BI -h " host | 
|  | Use | 
|  | .I host | 
|  | as the Venti server. | 
|  | .TP | 
|  | .BI -l " label | 
|  | Set the textual label on the file system to | 
|  | .IR label . | 
|  | The label is only a comment. | 
|  | .TP | 
|  | .BI -v " score | 
|  | Initialize the file system using the vac file | 
|  | system stored on Venti at | 
|  | .IR score . | 
|  | The score should have been generated by | 
|  | .I fossil | 
|  | rather than by | 
|  | .IR vac (1), | 
|  | so that the appropriate snapshot metadata is present. | 
|  | .PD | 
|  | .PP | 
|  | .I Conf | 
|  | reads or writes the configuration branded on the Fossil disk | 
|  | .IR file . | 
|  | By default, it reads the configuration from the disk and prints it to | 
|  | standard output. | 
|  | If the | 
|  | .B -w | 
|  | flag is given, | 
|  | .I conf | 
|  | reads a new configuration from | 
|  | .I config | 
|  | (or else from standard input) | 
|  | and writes it to the disk. | 
|  | Inside the configuration file, the argument | 
|  | .L * | 
|  | may be used to stand in for the name of the disk holding the configuration. | 
|  | The Plan 9 kernel boot process runs | 
|  | .RB `` fossil | 
|  | .B -f | 
|  | .IR disk '' | 
|  | to start a Fossil file server. | 
|  | The disk is just a convenient place to store configuration | 
|  | information. | 
|  | .PP | 
|  | .I Last | 
|  | prints the vac score that resulted after the most recent archival snapshot | 
|  | of the fossil in | 
|  | .I file. | 
|  | .SH EXAMPLES | 
|  | .PP | 
|  | Place the root of the archive file system on | 
|  | .B /n/dump | 
|  | and show the modified times of the MIPS C compiler | 
|  | over all dumps in December 2002: | 
|  | .IP | 
|  | .EX | 
|  | 9fs dump | 
|  | ls -l /n/dump/2002/12*/mips/bin/vc | 
|  | .EE | 
|  | .PP | 
|  | To get only one line of output for each version of the compiler: | 
|  | .IP | 
|  | .EX | 
|  | ls -lp /n/dump/2002/12*/mips/bin/vc | uniq | 
|  | .EE | 
|  | .ne 14 | 
|  | .PP | 
|  | Initialize a new file system, start the server with permission | 
|  | checking turned off, create a users file, and mount the server: | 
|  | .IP | 
|  | .EX | 
|  | fossil/flfmt /dev/sdC0/fossil | 
|  | fossil/conf -w /dev/sdC0/fossil <<EOF | 
|  | fsys main config | 
|  | fsys main open -AWP | 
|  | fsys main | 
|  | create /active/adm adm sys d775 | 
|  | create /active/adm/users adm sys 664 | 
|  | users -w | 
|  | srv -p fscons | 
|  | srv fossil | 
|  | EOF | 
|  | fossil/fossil -f /dev/sdC0/fossil | 
|  | mount /srv/fossil /n/fossil | 
|  | .EE | 
|  | .LP | 
|  | See the discussion of the | 
|  | .B users | 
|  | and | 
|  | .B uname | 
|  | commands in | 
|  | .IR fossilcons (8) | 
|  | for more about the user table. | 
|  | .ne 3 | 
|  | .PP | 
|  | Perhaps because the disk has been corrupted or replaced, | 
|  | format a new file system using the last archive score printed | 
|  | on the console: | 
|  | .IP | 
|  | .EX | 
|  | fossil/flfmt -v b9b3...5559 /dev/sdC0/fossil | 
|  | .EE | 
|  | .LP | 
|  | Note that while | 
|  | .B /snapshot | 
|  | will be lost, | 
|  | .B /active | 
|  | and | 
|  | .B /archive | 
|  | will be restored to their contents at the time of the | 
|  | last archival snapshot. | 
|  | .ne 3 | 
|  | .PP | 
|  | Blindly accept the changes prescribed by | 
|  | .I flchk | 
|  | (not recommended): | 
|  | .IP | 
|  | .EX | 
|  | fossil/flchk /dev/sdC0/fossil | sed -n 's/^# //p' >>/srv/fscons | 
|  | .EE | 
|  | .LP | 
|  | A better strategy is to vet the output, | 
|  | filter out any suggestions you're not comfortable with, | 
|  | and then use the | 
|  | .I sed | 
|  | command to prepare the script. | 
|  | .SH SOURCE | 
|  | .B /sys/src/cmd/fossil | 
|  | .SH SEE ALSO | 
|  | .IR yesterday (1), | 
|  | .IR fs (3), | 
|  | .IR fs (4), | 
|  | .IR srv (4), | 
|  | .IR fossilcons (8), | 
|  | .IR loadfossil (8), | 
|  | .IR venti (8) | 
|  | .SH BUGS | 
|  | It is possible that the disk format (but not the Venti format) | 
|  | will change in the future, to make the disk a full cache | 
|  | rather than just a write buffer. | 
|  | Changing to the new format will require reformatting | 
|  | the disk as in the example above, | 
|  | but note that this will preserve most of the file system | 
|  | (all but | 
|  | .BR /snapshot ) | 
|  | with little effort. | 
|  | .PP | 
|  | The | 
|  | .B -m | 
|  | option currently assumes a block size of 8K bytes, | 
|  | and a single file system per | 
|  | .I fossil | 
|  | instance. |