tdone - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3aec33fee92d97715e648bd8205823ddc7e5cbba | |
parent 9f95eb6fd6e5fa8a3be78f8b1b85310f50e49380 | |
Author: rsc <devnull@localhost> | |
Date: Mon, 18 Jul 2005 22:41:58 +0000 | |
done | |
Diffstat: | |
M man/man1/0intro.1 | 1 + | |
M man/man1/hist.1 | 7 ++++++- | |
D man/man1/vbackup.1 | 263 -----------------------------… | |
M man/man1/venti.1 | 14 +++++++------- | |
M man/man1/yesterday.1 | 11 +++++------ | |
M man/man3/venti-cache.3 | 68 ++++++++++++++++++++++++++---… | |
M man/man3/venti-client.3 | 24 ++++++++++-------------- | |
M man/man3/venti-conn.3 | 16 ++++++++++++++-- | |
M man/man3/venti-fcall.3 | 28 +++++++++++++++------------- | |
M man/man3/venti-file.3 | 63 ++++++++++++++++-------------… | |
M man/man3/venti-log.3 | 15 +++++++++------ | |
M man/man3/venti-mem.3 | 3 +-- | |
M man/man3/venti-packet.3 | 81 ++++++++++++++++++-----------… | |
M man/man3/venti-server.3 | 8 +++++--- | |
M man/man3/venti-zero.3 | 8 ++++---- | |
M man/man3/venti.3 | 10 +++++----- | |
A man/man7/mpictures.7 | 151 +++++++++++++++++++++++++++++… | |
M man/man7/venti.7 | 39 ++++++++++++++++++-----------… | |
M man/man8/vbackup.8 | 244 ++++++++++++++++++++---------… | |
M man/man8/venti.8 | 71 ++++++++++++++++++++++++-----… | |
20 files changed, 610 insertions(+), 515 deletions(-) | |
--- | |
diff --git a/man/man1/0intro.1 b/man/man1/0intro.1 | |
t@@ -311,6 +311,7 @@ the | |
variable in | |
.IR mk (1), | |
.IR namespace (1), | |
+.IR netfiles (1), | |
.IR page (1), | |
.IR psfonts (1), | |
.IR rio (1), | |
diff --git a/man/man1/hist.1 b/man/man1/hist.1 | |
t@@ -65,11 +65,16 @@ Examine changes in block.c: | |
hist -d block.c | |
.EE | |
.SH FILES | |
+.TF /dump | |
+.TP | |
.B /dump | |
+by convention, root of dump file system | |
+.PD | |
.SH SOURCE | |
.B /home/am3/rsc/src/backup/cmd/history.c | |
.SH SEE ALSO | |
-.IR yesterday (1) | |
+.IR yesterday (1), | |
+.IR vbackup (8) | |
.SH BUGS | |
Should be called | |
.IR history , | |
diff --git a/man/man1/vbackup.1 b/man/man1/vbackup.1 | |
t@@ -1,263 +0,0 @@ | |
-.TH VBACKUP 8 | |
-.SH NAME | |
-vbackup, vcat, vftp, vmount, vmount0, vnfs \- | |
-back up Unix file systems to Venti | |
-.SH SYNOPSIS | |
-.B vbackup | |
-[ | |
-.B -DVnv | |
-] | |
-[ | |
-.B -s | |
-.I secs | |
-] | |
-[ | |
-.B -w | |
-.I n | |
-] | |
-.I disk | |
-[ | |
-.I score | |
-] | |
-.PP | |
-.B vcat | |
-[ | |
-.B -z | |
-] | |
-.I disk | |
-| | |
-.I score | |
-.B > | |
-.I disk | |
-.PP | |
-.B vftp | |
-.I disk | |
-| | |
-.I score | |
-.PP | |
-.B vmount | |
-[ | |
-.B -v | |
-] | |
-.I addr | |
-.I mtpt | |
-.PP | |
-.B vmount0 | |
-[ | |
-.B -v | |
-] | |
-[ | |
-.B -h | |
-.I handle | |
-] | |
-.I addr | |
-.I mtpt | |
-.PP | |
-.B vnfs | |
-[ | |
-.B -LLMRVr | |
-] | |
-[ | |
-.B -a | |
-.I addr | |
-] | |
-[ | |
-.B -m | |
-.I mntaddr | |
-] | |
-[ | |
-.B -b | |
-.I blocksize | |
-] | |
-[ | |
-.B -c | |
-.I cachesize | |
-] | |
-.I config | |
-.SH DESCRIPTION | |
-These programs back up and restore standard | |
-Unix file system images stored in | |
-.IR venti (8). | |
-Images stored in | |
-.I venti | |
-are named by | |
-.IR scores , | |
-which consist of a file system type followed | |
-by a colon and forty hexadecimal digits, as in: | |
-.IP | |
-.EX | |
-ffs:0123456789abcdef0123456789abcdef01234567 | |
-.EE | |
-.PP | |
-(The hexadecimal data is the SHA1 hash of the Venti | |
-root block representing the file system image.) | |
-.PP | |
-These programs expect the environment variable | |
-.B $venti | |
-to be set to the network address of the Venti server to use | |
-(for example, | |
-.B yourhost | |
-or | |
-.BR tcp!yourhost!venti ). | |
-.PP | |
-.I Vbackup | |
-copies the file system stored on | |
-.I disk | |
-to the Venti server and prints the | |
-score for the newly-stored image. | |
-The argument | |
-.I disk | |
-should be a disk or disk partition device | |
-that would be appropriate to pass to | |
-.IR mount (8). | |
-.PP | |
-The optional argument | |
-.I score | |
-is the score of a previous backup of the disk image. | |
-If | |
-.I score | |
-is given, | |
-.I vbackup | |
-will not write to Venti any blocks that have not changed | |
-since the previous backup. | |
-This is only a speed optimization: since the blocks are already | |
-stored on Venti they need not be sent to the Venti server again. | |
-.PP | |
-The options to | |
-.I vbackup | |
-are: | |
-.TP | |
-.B -D | |
-.TP | |
-.B -V | |
-.TP | |
-.B -n | |
-.TP | |
-.B -v | |
-.TP | |
-.B -w \fIn | |
-.TP | |
-.B -s \fIsecs | |
-.PP | |
-.I Vcat | |
-writes the named disk image to standard output. | |
-Unused file system blocks are printed zeroed regardless | |
-of their actual content. | |
-.PP | |
-If the | |
-.B -z | |
-flag is given, | |
-.I vcat | |
-will attempt to seek over unused blocks instead of writing to them. | |
-The | |
-.B -z | |
-flag should only be used when standard output is seekable | |
-.RI ( i.e. , | |
-when it has been redirected to a file or disk). | |
-.PP | |
-.I Vftp | |
-presents the | |
-file system image named by | |
-.I disk | |
-or | |
-.I score | |
-in a shell-like | |
-interactive session. | |
-Type | |
-.B help | |
-at the | |
-.B vftp> | |
-prompt for details. | |
-.PP | |
-.I Vmount | |
-mounts the NFS service at the network connection | |
-.I address | |
-onto | |
-.IR mountpoint . | |
-On most operating systems, | |
-.I vmount | |
-must be run by the user | |
-.BR root . | |
-.PP | |
-.I Vmount0 | |
-is a simple C program that | |
-.I vmount | |
-uses if | |
-.IR mount (8) | |
-does not suffice. | |
-.PP | |
-.I Vnfs | |
-serves, using the | |
-NFS version 3 protocol, | |
-one or more disk images in a synthetic tree defined | |
-by the configuration file | |
-.IR config . | |
-.I Vnfs | |
-announces NFS service at | |
-.IR addr | |
-(default | |
-.BR udp!*!nfs ) | |
-and NFS mount service at | |
-.IR mntaddr | |
-(default | |
-.BR udp!*!\fI999 ), | |
-registering both with the port mapper. | |
-If no port mapper is found running (on port 111), | |
-.I vnfs | |
-starts its own port mapper. | |
-The options are: | |
-.TP | |
-.B -r | |
-Reply to all NFS requests with RPC rejections. | |
-.TP | |
-.B -M | |
-Do not announce an NFS mount service. | |
-.TP | |
-.B -P | |
-Do not register service with the port mapper. | |
-.TP | |
-.B -a | |
- | |
- | |
-.SH EXAMPLES | |
-.PP | |
-Back up the file system stored on | |
-.BR /dev/da0s1a : | |
-.IP | |
-.EX | |
-% vbackup /dev/da0s1a | |
-ffs:0123456789abcdef0123456789abcdef01234567 | |
-% | |
-.EE | |
-.PP | |
-Serve that backup and a few others in a tree reminiscent | |
-of Plan 9's dump file system, but hide each day's contents of | |
-.B /tmp : | |
-.IP | |
-.EX | |
-% cat config | |
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP | |
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP | |
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP | |
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP | |
-hide /*/*/tmp | |
-% vnfs -m -b 16k -c 1k config | |
-% | |
-.EE | |
-.PP | |
-Mount the backups on a client machine using | |
-.IR vmount : | |
-.IP | |
-.EX | |
-# vmount udp!yourserver!nfs /dump | |
-# ls /dump | |
-2005 | |
-# | |
-.EE | |
-.PP | |
-Mount the backups using the standard NFS mount program: | |
-.IP | |
-.EX | |
-# mount -t nfs -o soft,intr,ro,nfsv3,rsize=8192,timeo=100 \ | |
- -o nfsvers=3,nolock,noatime,nodev,nosuid \ | |
-.EE | |
diff --git a/man/man1/venti.1 b/man/man1/venti.1 | |
t@@ -85,7 +85,7 @@ If the | |
.B -z | |
option is given, | |
.I write | |
-truncates the block before writing it to the server. | |
+zero truncates the block before writing it to the server. | |
.PP | |
.I Copy | |
expects | |
t@@ -114,14 +114,15 @@ and | |
.B -r | |
option control | |
.IR copy 's | |
-behavior upon encountering errors while reading | |
-from srchost. | |
+reaction to errors reading | |
+from | |
+.IR srchost . | |
.I Copy | |
always prints information to standard error | |
about each read error. | |
By default, | |
.I copy | |
-immediately exits after printing the first error. | |
+exits after printing the first error. | |
If the | |
.B -i | |
option is given, read errors are ignored. | |
t@@ -138,12 +139,11 @@ It writes the new root score to standard output. | |
.B \*9/src/cmd/venti/cmd | |
.SH SEE ALSO | |
.IR vac (1), | |
-.IR vbackup (1), | |
.IR venti (3), | |
.IR vacfs (4), | |
-.IR vnfs (4), | |
.IR venti (7), | |
+.IR vbackup (8), | |
.IR venti (8) | |
.SH BUGS | |
There should be programs to read and write | |
-streams and directories. | |
+venti files and directories. | |
diff --git a/man/man1/yesterday.1 b/man/man1/yesterday.1 | |
t@@ -84,16 +84,15 @@ Restore your profile from yesterday: | |
yesterday -c ~/.profile | |
.EE | |
.SH FILES | |
+.TF /dump | |
.B /dump | |
+by convention, root of the dump file system | |
+.PD | |
.SH SOURCE | |
.B /usr/local/bin/yesterday | |
.SH SEE ALSO | |
.IR diff (1), | |
-.IR hist (1) | |
+.IR hist (1), | |
+.IR vbackup (8) | |
.SH BUGS | |
-Backups are only available on | |
-.B amsterdam | |
-and | |
-.BR toil . | |
-.PP | |
It's hard to use this command without singing. | |
diff --git a/man/man3/venti-cache.3 b/man/man3/venti-cache.3 | |
t@@ -24,6 +24,8 @@ vtlocaltoglobal \- Venti block cache | |
#include <venti.h> | |
.ta +\w'\fLxxxx 'u | |
.PP | |
+.ft L | |
+.nf | |
typedef struct VtBlock | |
{ | |
uchar *data; | |
t@@ -35,16 +37,13 @@ typedef struct VtBlock | |
.ta +\w'\fLVtBlock* 'u +\w'\fLxxxxxxxx'u | |
.PP | |
.B | |
-VtCache* vtcachealloc(VtConn *z, int blocksize, ulong nblocks, int mode… | |
+VtCache* vtcachealloc(VtConn *z, int blocksize, ulong nblocks); | |
.PP | |
.B | |
void vtcachefree(VtCache *c); | |
.PP | |
.B | |
u32int vtcacheblocksize(VtCache *c); | |
-.br | |
-.B | |
- int (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int)); | |
.PP | |
.B | |
u32int vtglobaltolocal(uchar score[VtScoreSize]) | |
t@@ -72,6 +71,9 @@ int vtblockwrite(VtBlock *b); | |
.PP | |
.B | |
void vtcachesetwrite(VtCache *c, | |
+.br | |
+.B | |
+ int (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int)); | |
.PP | |
.B | |
VtBlock* vtblockcopy(VtBlock *b); | |
t@@ -83,6 +85,37 @@ These functions provide access to a simple in-memory | |
cache of blocks already stored on a Venti server | |
and blocks that will eventually be stored on a Venti server. | |
.PP | |
+A | |
+.B VtBlock | |
+represents a venti data block. | |
+Blocks stored on a venti server, | |
+called | |
+.IR "global blocks" , | |
+are named by the SHA1 hash of their contents. | |
+This hash is recorded as the block's | |
+.IR score . | |
+Such blocks are immutable. | |
+The cache also stores mutable blocks that have not yet been | |
+written to a venti server. These blocks are called | |
+.IR "local blocks" , | |
+and have special scores that are 16 zero bytes | |
+followed by a 4-byte big-endian | |
+.IR address . | |
+The address is an index into the internal set of cache blocks. | |
+.PP | |
+The user-visible contents of a | |
+.B VtBlock | |
+are | |
+.BR data , | |
+a pointer to the data; | |
+.BR type , | |
+the venti block type; | |
+.BR score , | |
+the block's score; | |
+and | |
+.BR addr , | |
+the block's cache address. | |
+.PP | |
.I Vtcachealloc | |
allocates a new cache using the client connection | |
.I z | |
t@@ -99,8 +132,22 @@ of maximum block size | |
frees a cache and all the associated blocks. | |
.PP | |
.I Vtcacheblocksize | |
-.PP | |
-XXX global vs local blocks | |
+returns the cache's maximum block size. | |
+.PP | |
+.I Vtglobaltolocal | |
+returns the local address corresponding to the given | |
+local | |
+.IR score . | |
+If passed a global score, | |
+.I vtglobaltolocal | |
+returns the special constant | |
+.B NilBlock | |
+.RB ( ~0 ). | |
+.I Vtlocaltoglobal | |
+is the opposite, setting | |
+.I score | |
+to the local score for the cache address | |
+.IR local . | |
.PP | |
.I Vtcacheallocblock | |
allocates a new local block with the given | |
t@@ -124,8 +171,9 @@ from the cache, consulting the Venti server | |
if necessary. | |
If passed a local score, | |
.I vtcacheglobal | |
-behaves as | |
-.IR vtcachelocal . | |
+invokes | |
+.I vtcachelocal | |
+appropriately. | |
.PP | |
The block references returned by | |
.IR vtcacheallocblock , | |
t@@ -191,8 +239,8 @@ or, more commonly, that cache blocks are being leaked. | |
.SH SOURCE | |
.B \*9/src/libventi | |
.SH SEE ALSO | |
-.IR venti (1), | |
.IR venti (3), | |
.IR venti-client (3), | |
.IR venti-conn (3), | |
-.IR venti-file (3) | |
+.IR venti-file (3), | |
+.IR venti (7) | |
diff --git a/man/man3/venti-client.3 b/man/man3/venti-client.3 | |
t@@ -8,7 +8,7 @@ vtconnect, vthello, vtread, vtwrite, vtreadpacket, vtwritepack… | |
#include <libc.h> | |
.br | |
#include <venti.h> | |
-.ta +\w'\fLextern int 'u +\w'\fLxxxxxxxx'u | |
+.ta +\w'\fLPacket* 'u +\w'\fLxxxxxxxx'u | |
.PP | |
.B | |
Packet* vtrpc(VtConn *z, Packet *p) | |
t@@ -50,7 +50,7 @@ int vtsync(VtConn *z) | |
int vtping(VtConn *z) | |
.PP | |
.B | |
-extern int ventidoublechecksha1; /* default 1 */ | |
+extern int ventidoublechecksha1; /* default 1 */ | |
.SH DESCRIPTION | |
These routines execute the client side of the | |
.IR venti (7) | |
t@@ -73,10 +73,8 @@ is typically called only indirectly, via the functions belo… | |
.I Vthello | |
executes a | |
.B hello | |
-transaction | |
-(see | |
-.IR venti (7)), setting | |
-.IB z -> sid | |
+transaction, setting | |
+.IB z ->sid | |
to the name used by the server. | |
.I Vthello | |
is typically called only indirectly, via | |
t@@ -103,11 +101,11 @@ reads the block with the given | |
and | |
.I type | |
from the server, | |
-writes the returned data | |
-to | |
+stores the returned data | |
+in memory at | |
.IR buf , | |
-and returns the number of bytes retrieved. | |
-If the stored block has size larger than | |
+and returns the number of bytes read. | |
+If the server's block has size larger than | |
.IR n , | |
.I vtread | |
does not modify | |
t@@ -120,7 +118,7 @@ writes the | |
.I n | |
bytes in | |
.I buf | |
-with type | |
+as a block of the given | |
.IR type , | |
setting | |
.IR score . | |
t@@ -177,7 +175,6 @@ as described in | |
.SH SOURCE | |
.B \*9/src/libventi | |
.SH SEE ALSO | |
-.IR venti (1), | |
.IR venti (3), | |
.IR venti-conn (3), | |
.IR venti-packet (3), | |
t@@ -190,5 +187,4 @@ return nil on error. | |
The other routines return \-1 on error. | |
.PP | |
.I Vtwrite | |
-returns 0 on success, | |
-meaning it wrote the entire block. | |
+returns 0 on success: there are no partial writes. | |
diff --git a/man/man3/venti-conn.3 b/man/man3/venti-conn.3 | |
t@@ -61,6 +61,18 @@ A | |
.B VtConn | |
structure represents a connection to a Venti server | |
(when used by a client) or to a client (when used by a server). | |
+It contains the following user-visible fields: | |
+.BR debug , | |
+a flag enabling debugging prints; | |
+.BR version , | |
+the protocol version in use; | |
+.BR uid , | |
+the (unverified) name of the client; | |
+.BR sid , | |
+the (unverified) name of the server; | |
+and | |
+.BR addr , | |
+the network address of the remote side. | |
.PP | |
.I Vtconn | |
initializes a new connection structure using file descriptors | |
t@@ -81,7 +93,7 @@ exchanges version information with the remote side | |
as described in | |
.IR venti (7). | |
The negotiated version is stored in | |
-.IB z -> version \fR. | |
+.IB z ->version \fR. | |
.PP | |
.I Vtsend | |
writes a packet | |
t@@ -146,7 +158,7 @@ must be the connection structure | |
.I Vtdebug | |
prints the formatted message to standard error | |
when | |
-.IB z -> debug | |
+.IB z ->debug | |
is set. Otherwise it is a no-op. | |
.PP | |
.I Vthangup | |
diff --git a/man/man3/venti-fcall.3 b/man/man3/venti-fcall.3 | |
t@@ -14,7 +14,7 @@ vtputstring, | |
vtrootpack, | |
vtrootunpack, | |
vtparsescore, | |
-vtscorefmt \- Venti external data representation | |
+vtscorefmt \- venti data formats | |
.SH SYNOPSIS | |
.PP | |
.ft L | |
t@@ -31,7 +31,6 @@ enum | |
{ | |
VtEntrySize = 40, | |
VtRootSize = 300, | |
- VtRootVersion = 2, | |
VtScoreSize = 20, | |
}; | |
.PP | |
t@@ -39,9 +38,9 @@ enum | |
.nf | |
typedef struct VtEntry | |
{ | |
- ulong gen; /* generation number */ | |
- ushort psize; /* pointer block size */ | |
- ushort dsize; /* data block size */ | |
+ ulong gen; /* generation number */ | |
+ ushort psize; /* pointer block size */ | |
+ ushort dsize; /* data block size */ | |
uchar type; | |
uchar flags; | |
uvlong size; | |
t@@ -54,9 +53,9 @@ typedef struct VtRoot | |
{ | |
char name[128]; | |
char type[128]; | |
- uchar score[VtScoreSize]; /* to a Dir block */ | |
- ushort blocksize; /* maximum block size */ | |
- uchar prev[VtScoreSize]; /* previous root block */ | |
+ uchar score[VtScoreSize]; /* to a Dir block */ | |
+ ushort blocksize; /* maximum block size */ | |
+ uchar prev[VtScoreSize]; /* previous root block */ | |
} VtRoot; | |
.ta +\w'\fLPacket* 'u | |
.PP | |
t@@ -110,7 +109,7 @@ converts a | |
.B VtEntry | |
structure describing a Venti file | |
(see | |
-.IR venti (1)) | |
+.IR venti (7)) | |
into a 40-byte | |
.RB ( VtEntrySize ) | |
structure at | |
t@@ -150,7 +149,7 @@ frees the strings | |
.IB f ->uid \fR, | |
.IB f ->sid \fR, | |
the buffers | |
-.I f ->crypto | |
+.IB f ->crypto | |
and | |
.IB f ->codec \fR, | |
and the packet | |
t@@ -159,11 +158,11 @@ and the packet | |
The block type enumeration defined in | |
.B <venti.h> | |
(presented in | |
-.IR venti (1)) | |
+.IR venti (7)) | |
differs from the one used on disk and in the network | |
protocol. | |
The disk and network representation uses different | |
-constants does not distinguish between | |
+constants and does not distinguish between | |
.BI VtDataType+ n | |
and | |
.BI VtDirType+ n | |
t@@ -173,7 +172,10 @@ converts a | |
.B <venti.h> | |
enumeration value to the disk value; | |
.I vtfromdisktype | |
-converts a disk value to the enumeration value. | |
+converts a disk value to the enumeration value, | |
+always using the | |
+.B VtDataType | |
+pointers. | |
The | |
.B VtFcall | |
field | |
diff --git a/man/man3/venti-file.3 b/man/man3/venti-file.3 | |
t@@ -1,29 +1,29 @@ | |
.TH VENTI-FILE 3 | |
.SH NAME | |
VtFile, | |
-vtfileopenroot, | |
-vtfilecreateroot, | |
-vtfileopen, | |
-vtfilecreate, | |
vtfileblock, | |
-vtfileread, | |
-vtfilewrite, | |
-vtfileflush, | |
-vtfileincref, | |
-vtfileclose, | |
-vtfilegetentry, | |
-vtfilesetentry, | |
vtfileblockscore, | |
+vtfileclose, | |
+vtfilecreate, | |
+vtfilecreateroot, | |
+vtfileflush, | |
+vtfileflushbefore, | |
vtfilegetdirsize, | |
-vtfilesetdirsize, | |
-vtfileunlock, | |
+vtfilegetentry, | |
+vtfilegetsize, | |
+vtfileincref, | |
vtfilelock, | |
vtfilelock2, | |
-vtfileflushbefore, | |
-vtfiletruncate, | |
-vtfilegetsize, | |
+vtfileopen, | |
+vtfileopenroot, | |
+vtfileread, | |
+vtfileremove, | |
+vtfilesetdirsize, | |
+vtfilesetentry, | |
vtfilesetsize, | |
-vtfileremove \- Venti files | |
+vtfiletruncate, | |
+vtfileunlock, | |
+vtfilewrite \- Venti files | |
.SH SYNOPSIS | |
.ta +\w'\fLVtBlock* 'u | |
.PP | |
t@@ -85,7 +85,8 @@ int vtfilegetentry(VtFile *f, VtEntry *e); | |
int vtfilesetentry(VtFile *f, VtEntry *e); | |
.PP | |
.B | |
-int vtfileblockscore(VtFile *f, u32int n, uchar score[VtScoreSize]); | |
+int vtfileblockscore(VtFile *f, u32int n, | |
+ uchar score[VtScoreSize]); | |
.PP | |
.B | |
int vtfilelock(VtFile *f, int mode); | |
t@@ -98,11 +99,11 @@ void vtfileunlock(VtFile *f); | |
.SH DESCRIPTION | |
These routines provide a simple interface to create and | |
manipulate Venti file trees (see | |
-.IR venti (1)). | |
+.IR venti (7)). | |
.PP | |
.I Vtfilecreateroot | |
creates a new Venti file. | |
-.I Btype | |
+.I Type | |
must be either | |
.B VtDataType | |
or | |
t@@ -111,7 +112,7 @@ specifying a data or directory file. | |
.I Dsize | |
is the block size to use for leaf (data or directory) blocks in the hash tree; | |
.I psize | |
-is the block size to use for intermediate (pointer) blocks. | |
+is the block size to use for internal (pointer) blocks. | |
.PP | |
.I Vtfileopenroot | |
opens an existing Venti file described by | |
t@@ -124,19 +125,19 @@ entry in the directory | |
.IR f . | |
.I Mode | |
should be one of | |
-.IR VtOREAD , | |
-.IR VtOWRITE , | |
+.BR VtOREAD , | |
+.BR VtOWRITE , | |
or | |
-.IR VtORDWR , | |
+.BR VtORDWR , | |
indicating how the returned file is to be used. | |
The | |
-.IR VtOWRITE | |
+.BR VtOWRITE | |
and | |
-.IR VtORDWR | |
+.BR VtORDWR | |
modes can only be used if | |
.IR f | |
is open with mode | |
-.IR VtORDWR . | |
+.BR VtORDWR . | |
.PP | |
.I Vtfilecreate | |
creates a new file in the directory | |
t@@ -239,7 +240,7 @@ Loops that | |
.I vtfilewrite | |
should call | |
.I vtfileflushbefore | |
-regularly to avoid filling the block cache with dirty blocks. | |
+regularly to avoid filling the block cache with unwritten blocks. | |
.PP | |
.I Vtfiletruncate | |
changes the file | |
t@@ -283,7 +284,7 @@ to be | |
returns in | |
.I score | |
the score of the | |
-.I n th | |
+.IR n th | |
block in the file | |
.IR f . | |
.PP | |
t@@ -318,7 +319,7 @@ in the same directory block. | |
.SH SOURCE | |
.B \*9/src/libventi/file.c | |
.SH SEE ALSO | |
-.IR venti (1), | |
.IR venti-cache (3), | |
.IR venti-conn (3), | |
-.IR venti-client (3) | |
+.IR venti-client (3), | |
+.IR venti (7) | |
diff --git a/man/man3/venti-log.3 b/man/man3/venti-log.3 | |
t@@ -50,17 +50,19 @@ extern char *VtServerLog; /* "libventi/server" */ | |
These routines provide an in-memory circular log | |
structure used by the Venti library and the Venti server | |
to record events for debugging purposes. | |
-The logs have textual names represented as UTF strings. | |
+The logs are named by UTF strings. | |
.PP | |
.I Vtlogopen | |
-returns a reference to the log named | |
+returns a reference to the log with the given | |
.I name . | |
If a log with that name does not exist and | |
.I size | |
-is non-zero, a new log capable of holding at | |
+is non-zero, | |
+.I vtlogopen | |
+creates a new log capable of holding at | |
least | |
.I size | |
-bytes is allocated and returned. | |
+bytes and returns it. | |
.I Vtlogclose | |
releases the reference returned by | |
.IR vtlogopen . | |
t@@ -126,8 +128,9 @@ and | |
writes debugging information to the log named | |
.IR VtServerLog , | |
which defaults to the string | |
-.LR libventi/server . | |
+.RB ` libventi/server '. | |
.SH SOURCE | |
.B \*9/src/libventi | |
.SH SEE ALSO | |
-.IR venti (3) | |
+.IR venti (3), | |
+.IR venti (8) | |
diff --git a/man/man3/venti-mem.3 b/man/man3/venti-mem.3 | |
t@@ -39,10 +39,9 @@ On failure, they print an error message and call | |
They do not return. | |
.PP | |
.I Vtbrk | |
-returns a pointer to a new block of at least | |
+returns a pointer to a new, permanently allocated block of at least | |
.I size | |
bytes. | |
-The block cannot be freed. | |
.PP | |
.IR Vtmalloc , | |
.IR vtrealloc , | |
diff --git a/man/man3/venti-packet.3 b/man/man3/venti-packet.3 | |
t@@ -1,11 +1,26 @@ | |
.TH VENTI-PACKET 3 | |
.SH NAME | |
-Packet, packetalloc, packetfree, packetforeign, packetdup, | |
-packetsplit, packetconsume, packettrim, packetheader, | |
-packettrailer, packetprefix, packetappend, packetconcat, | |
-packetpeek, packetcopy, packetfragments, | |
-packetsize, packetasize, packetcompact, packetcmp, | |
-packetstats, packetsha1 \- zero-copy network buffers | |
+Packet, | |
+packetalloc, | |
+packetappend, | |
+packetasize, | |
+packetcmp, | |
+packetconcat, | |
+packetconsume, | |
+packetcopy, | |
+packetdup, | |
+packetforeign, | |
+packetfragments, | |
+packetfree, | |
+packetheader, | |
+packetpeek, | |
+packetprefix, | |
+packetsha1, | |
+packetsize, | |
+packetsplit, | |
+packetstats, | |
+packettrailer, | |
+packettrim \- zero-copy network buffers | |
.SH SYNOPSIS | |
.ft L | |
#include <u.h> | |
t@@ -21,72 +36,73 @@ packetstats, packetsha1 \- zero-copy network buffers | |
Packet* packetalloc(void); | |
.PP | |
.B | |
-void packetfree(Packet *p) | |
+void packetappend(Packet *p, uchar *buf, int n) | |
.PP | |
.B | |
-Packet* packetforeign(uchar *buf, int n, | |
-.br | |
-.B | |
- void (*free)(void *a), void *a) | |
+uint packetasize(Packet *p) | |
.PP | |
.B | |
-Packet* packetdup(Packet *p, int offset, int n) | |
+int packetcmp(Packet *p, Packet *q) | |
.PP | |
.B | |
-Packet* packetsplit(Packet *p, int n) | |
+void packetconcat(Packet *p, Packet *q) | |
.PP | |
.B | |
int packetconsume(Packet *p, uchar *buf, int n) | |
.PP | |
.B | |
-int packettrim(Packet *p, int offset, int n) | |
+int packetcopy(Packet *p, uchar *buf, int offset, int n) | |
.PP | |
.B | |
-uchar* packetheader(Packet *p, int n) | |
+Packet* packetdup(Packet *p, int offset, int n) | |
.PP | |
.B | |
-uchar* packettrailer(Packet *p, int n) | |
+Packet* packetforeign(uchar *buf, int n, | |
+.br | |
+.B | |
+ void (*free)(void *a), void *a) | |
.PP | |
.B | |
-void packetprefix(Packet *p, uchar *buf, int n) | |
+int packetfragments(Packet *p, IOchunk *io, int nio, | |
+.br | |
+.B | |
+ int offset) | |
.PP | |
.B | |
-void packetappend(Packet *p, uchar *buf, int n) | |
+void packetfree(Packet *p) | |
.PP | |
.B | |
-void packetconcat(Packet *p, Packet *q) | |
+uchar* packetheader(Packet *p, int n) | |
.PP | |
.B | |
uchar* packetpeek(Packet *p, uchar *buf, int offset, int n) | |
.PP | |
.B | |
-int packetcopy(Packet *p, uchar *buf, int offset, int n) | |
+void packetprefix(Packet *p, uchar *buf, int n) | |
.PP | |
.B | |
-int packetfragments(Packet *p, IOchunk *io, int nio, | |
-.br | |
-.B | |
- int offset) | |
+void packetsha1(Packet *p, uchar sha1[20]) | |
.PP | |
.B | |
uint packetsize(Packet *p) | |
.PP | |
.B | |
-uint packetasize(Packet *p) | |
+Packet* packetsplit(Packet *p, int n) | |
.PP | |
.B | |
-int packetcmp(Packet *p, Packet *q) | |
+void packetstats(void) | |
.PP | |
.B | |
-void packetstats(void) | |
+uchar* packettrailer(Packet *p, int n) | |
.PP | |
.B | |
-void packetsha1(Packet *p, uchar sha1[20]) | |
+int packettrim(Packet *p, int offset, int n) | |
.SH DESCRIPTION | |
A | |
.B Packet | |
-is a list of blocks of data. | |
-Each block is contiguous in memory, but the entire packet | |
+is a chain of blocks of data. | |
+Each block, called a fragment, | |
+is contiguous in memory, but the entire packet | |
may not be. | |
This representation helps avoid unnecessary memory copies. | |
.PP | |
t@@ -107,7 +123,7 @@ returns the number of data bytes allocated to | |
This may be larger than the number of bytes stored | |
in | |
.IR p | |
-because individual fragments may not be filled. | |
+because fragments may not be filled completely. | |
.PP | |
.I Packetcmp | |
compares the data sections of two packets as | |
t@@ -214,7 +230,7 @@ computes the SHA1 hash of the data contained in | |
.IR p . | |
.PP | |
.I Packetsize | |
-returns the number of bytes of data contained in | |
+returns the length, in bytes, of the data contained in | |
.IR p . | |
.PP | |
.I Packetsplit | |
t@@ -263,4 +279,3 @@ whose return values are described above. | |
When these functions run out of memory, they | |
print error messages and call | |
.IR sysfatal . | |
-They do not return. | |
diff --git a/man/man3/venti-server.3 b/man/man3/venti-server.3 | |
t@@ -110,12 +110,13 @@ is a read-only Venti proxy (it rejects | |
.B write | |
requests). | |
.I Devnull | |
-is a write-only Venti server: it discards all | |
+is a dangerous write-only Venti server: it discards all | |
blocks written to it and returns error on all reads. | |
.SH SOURCE | |
.B \*9/src/libventi | |
.SH SEE ALSO | |
-.IR venti (1), | |
.IR venti (3), | |
.IR venti-conn (3), | |
-.IR venti-packet (3) | |
+.IR venti-packet (3), | |
+.IR venti (7), | |
+.IR venti (8) | |
+\ No newline at end of file | |
diff --git a/man/man3/venti-zero.3 b/man/man3/venti-zero.3 | |
t@@ -30,14 +30,14 @@ returns the size of the | |
buffer pointed to by | |
.I buf | |
ignoring trailing zeros or zero scores, | |
-according to the block type | |
+according to the given | |
.IR type . | |
.PP | |
.I Vtzeroextend | |
pads | |
.I buf | |
with zeros or zero scores, | |
-according to the block type | |
+according to the given | |
.IR type , | |
to grow it from | |
.I size | |
t@@ -52,5 +52,5 @@ is the score of the zero-length block. | |
.br | |
.B \*9/src/libventi/zeroscore.c | |
.SH SEE ALSO | |
-.IR venti (1), | |
-.IR venti (3) | |
+.IR venti (3), | |
+.IR venti (7) | |
diff --git a/man/man3/venti.3 b/man/man3/venti.3 | |
t@@ -1,6 +1,6 @@ | |
.TH VENTI 3 | |
.SH NAME | |
-xxx \- Venti storage server | |
+venti \- archival storage server | |
.SH SYNOPSIS | |
.PP | |
.ft L | |
t@@ -28,7 +28,7 @@ describe routines for writing clients | |
and servers on top of these. | |
.PP | |
.IR Venti-fcall (3) | |
-describes the in-memory representation of Venti protocol messages | |
+describes the C representation of Venti protocol messages | |
and data structures. | |
It also describes routines that convert between the C representation | |
and the network and disk representations. | |
t@@ -37,7 +37,7 @@ and the network and disk representations. | |
describes routines for writing clients that manipulate | |
Venti file trees | |
(see | |
-.IR venti (1)). | |
+.IR venti (7)). | |
.PP | |
.IR Venti-log (3) | |
describes routines to access in-memory log buffers | |
t@@ -51,13 +51,13 @@ routines that abort on error. | |
.PP | |
.IR Venti-packet (3) | |
describes routines for | |
-efficiently manipulating chains of | |
+manipulating zero-copy chains of | |
data buffers. | |
.PP | |
.IR Venti-zero (3) | |
describes routines to zero truncate and zero extend blocks | |
(see | |
-.IR venti (1)). | |
+.IR venti (7)). | |
.SH SOURCE | |
.B \*9/src/libventi | |
.SH SEE ALSO | |
diff --git a/man/man7/mpictures.7 b/man/man7/mpictures.7 | |
t@@ -0,0 +1,151 @@ | |
+.TH MPICTURES 7 | |
+.SH NAME | |
+mpictures \- picture inclusion macros | |
+.SH SYNOPSIS | |
+.B troff -mpictures | |
+[ | |
+.I options | |
+] | |
+.I file ... | |
+.SH DESCRIPTION | |
+.I Mpictures | |
+macros insert PostScript pictures into | |
+.IR troff (1) | |
+documents. | |
+The macros are: | |
+.TP | |
+.BI .BP " source height width position offset flags label | |
+Define a frame and place a picture in it. | |
+Null arguments, represented by \f5""\fR, | |
+are interpreted as defaults. | |
+The arguments are: | |
+.RS | |
+.TP | |
+.I source | |
+Name of a PostScript picture file, optionally | |
+suffixed with | |
+.RI ( n ) | |
+to select page number | |
+.I n | |
+from the file (first page by default). | |
+.PD0 | |
+.TP | |
+.I height | |
+Vertical size of the frame, default | |
+.BR 3.0i . | |
+.TP | |
+.I width | |
+Horizontal size of the frame, current line length by default. | |
+.TP | |
+.I position | |
+.L l | |
+(default), | |
+.LR c , | |
+or | |
+.L r | |
+to left-justify, center, or right-justify the frame. | |
+.TP | |
+.I offset | |
+Move the frame horizontally from the original | |
+.I position | |
+by this amount, default | |
+.BR 0i . | |
+.TP | |
+.I flags | |
+One or more of: | |
+.RS | |
+.PD 0v | |
+.TP | |
+.BI a d | |
+Rotate the picture clockwise | |
+.I d | |
+degrees, default | |
+.IR d =90. | |
+.TP | |
+.B o | |
+Outline the picture with a box. | |
+.TP | |
+.B s | |
+Freely scale both picture dimensions. | |
+.TP | |
+.B w | |
+White out the area to be occupied by the picture. | |
+.TP | |
+.BR l , r , t ,\fPb | |
+Attach the picture to the left right, top, or bottom of the frame. | |
+.RE | |
+.TP | |
+.I label | |
+Place | |
+.I label | |
+at distance | |
+.B 1.5v | |
+below the frame. | |
+.PD | |
+.PP | |
+If there's room, | |
+.B .BP | |
+fills text around the frame. | |
+Everything destined for either side of the frame | |
+goes into a diversion to be retrieved when the accumulated | |
+text sweeps past the trap set by | |
+.B .BP | |
+or when the diversion is explicitly closed | |
+by | |
+.BR .EP . | |
+.RE | |
+.TP | |
+.BI .PI " source height" , width , "yoffset\fB,\fPxoffset flags. | |
+This low-level macro, used by | |
+.BR .BP , | |
+can help do more complex things. | |
+The two arguments not already described are: | |
+.RS | |
+.TP | |
+.I xoffset | |
+Offset the frame from the left margin by this amount, default | |
+.BR 0i . | |
+.PD0 | |
+.TP | |
+.I yoffset | |
+Offset the frame from the current baseline, | |
+measuring positive downward, default | |
+.BR 0i . | |
+.PD | |
+.RE | |
+.TP | |
+.B .EP | |
+End a picture started by | |
+.BR .BP ; | |
+.B .EP | |
+is usually called implicitly by a trap | |
+at frame bottom. | |
+.PP | |
+If a PostScript file lacks page-delimiting comments, | |
+the entire file is included. | |
+If no | |
+.B %%BoundingBox | |
+comment is present, the picture is | |
+assumed to fill an 8.5\(mu11-inch page. | |
+Nothing prevents the picture from being placed off the page. | |
+.SH SEE ALSO | |
+.IR troff (1) | |
+.SH DIAGNOSTICS | |
+A picture file that can't be read by the PostScript | |
+postprocessor is replaced by white space. | |
+.SH BUGS | |
+A picture and associated text silently disappear if | |
+a diversion trap set by | |
+.B .BP | |
+isn't reached. | |
+Call | |
+.B .EP | |
+at the end of the document to retrieve it. | |
+.br | |
+Macros in other packages may break the adjustments | |
+made to the line length and indent when text is being placed | |
+around a picture. | |
+.br | |
+A missing or improper | |
+.B %%BoundingBox | |
+comment may cause the frame to be filled incorrectly. | |
diff --git a/man/man7/venti.7 b/man/man7/venti.7 | |
t@@ -17,19 +17,15 @@ block storage using Venti as well as the Venti network pro… | |
.IR Venti (1) | |
documents some simple clients. | |
.IR Vac (1), | |
-.IR vbackup (1), | |
.IR vacfs (4), | |
and | |
-.IR vnfs (4) | |
+.IR vbackup (8) | |
are more complex clients. | |
.PP | |
.IR Venti (3) | |
describes a C library interface for accessing | |
Venti servers and manipulating Venti data structures. | |
.PP | |
-.IR Venti.conf (7) | |
-describes the Venti server configuration file. | |
-.PP | |
.IR Venti (8) | |
describes the programs used to run a Venti server. | |
.PP | |
t@@ -86,9 +82,20 @@ Scores passed between programs conventionally refer | |
to | |
.B VtRoot | |
blocks, which contain descriptive information | |
-as well as the score of a block containing a small number | |
-of | |
-.B VtEntries . | |
+as well as the score of a directory block containing a small number | |
+of directory entries. | |
+.PP | |
+Conventionally, programs do not mix data and directory entries | |
+in the same file. Instead, they keep two separate files, one with | |
+directory entries and one with metadata referencing those | |
+entries by position. | |
+Keeping this parallel representation is a minor annoyance | |
+but makes it possible for general programs like | |
+.I venti/copy | |
+(see | |
+.IR venti (1)) | |
+to traverse the block tree without knowing the specific details | |
+of any particular program's data. | |
.SS "Block Types | |
To allow programs to traverse these structures without | |
needing to understand their higher-level meanings, | |
t@@ -127,7 +134,7 @@ For example, if a 1024-byte data block contains the | |
followed by 1013 zero bytes, | |
a client would store only the 11-byte block. | |
When the client later read the block from the server, | |
-it would append zeros to the end as necessary to | |
+it would append zero bytes to the end as necessary to | |
reach the expected size. | |
.PP | |
When truncating pointer blocks | |
t@@ -140,12 +147,12 @@ instead of trailing zero bytes. | |
.PP | |
Because of the truncation convention, | |
any file consisting entirely of zero bytes, | |
-no matter what the length, will be represented by the zero score: | |
+no matter what its length, will be represented by the zero score: | |
the data blocks contain all zeros and are thus truncated | |
to the empty block, and the pointer blocks contain all zero scores | |
and are thus also truncated to the empty block, | |
and so on up the hash tree. | |
-.SS NETWORK PROTOCOL | |
+.SS Network Protocol | |
A Venti session begins when a | |
.I client | |
connects to the network address served by a Venti | |
t@@ -163,7 +170,7 @@ The | |
field is a list of acceptable versions separated by | |
colons. | |
The protocol described here is version | |
-.B 02 . | |
+.BR 02 . | |
The client is responsible for choosing a common | |
version and sending it in the | |
.B VtThello | |
t@@ -193,14 +200,14 @@ followed by | |
bytes of data. | |
Text strings are represented similarly, | |
using a two-byte count with | |
-the text itself stored as a UTF-8 encoded sequence | |
+the text itself stored as a UTF-encoded sequence | |
of Unicode characters (see | |
.IR utf (7)). | |
Text strings are not | |
.SM NUL\c | |
-terminated: | |
.I n | |
-counts the bytes of UTF-8 data, which include no final | |
+counts the bytes of UTF data, which include no final | |
zero byte. | |
The | |
.SM NUL | |
t@@ -215,7 +222,7 @@ in the enumeration in the include file | |
.BR <venti.h> . | |
The next byte is an identifying | |
.IR tag , | |
-used to match responses with requests. | |
+used to match responses to requests. | |
The remaining bytes are parameters of different sizes. | |
In the message descriptions, the number of bytes in a field | |
is given in brackets after the field name. | |
t@@ -382,7 +389,7 @@ The | |
message requests a block with the given | |
.I score | |
and | |
-.I type . | |
+.IR type . | |
Use | |
.I vttodisktype | |
and | |
diff --git a/man/man8/vbackup.8 b/man/man8/vbackup.8 | |
t@@ -30,11 +30,6 @@ back up Unix file systems to Venti | |
.B > | |
.I disk | |
.PP | |
-.B vftp | |
-.I disk | |
-| | |
-.I score | |
-.PP | |
.B vmount | |
[ | |
.B -v | |
t@@ -42,30 +37,15 @@ back up Unix file systems to Venti | |
.I addr | |
.I mtpt | |
.PP | |
-.B vmount0 | |
-[ | |
-.B -v | |
-] | |
-[ | |
-.B -h | |
-.I handle | |
-] | |
-.I addr | |
-.I mtpt | |
-.PP | |
.B vnfs | |
[ | |
-.B -LLMRVr | |
+.B -ELLRVr | |
] | |
[ | |
.B -a | |
.I addr | |
] | |
[ | |
-.B -m | |
-.I mntaddr | |
-] | |
-[ | |
.B -b | |
.I blocksize | |
] | |
t@@ -128,46 +108,68 @@ The options to | |
are: | |
.TP | |
.B -D | |
+Turn on debugging output. | |
.TP | |
.B -V | |
+Trace interactions with Venti server. | |
+.TP | |
+.B -m \fImntname | |
+Set backup name | |
+(defaults to | |
+.IR sysname (3)): | |
+this name is used in the printed | |
+.B mount | |
+command. | |
.TP | |
.B -n | |
+No-op mode: do not write any blocks to the server | |
.TP | |
.B -v | |
+Print verbose output. | |
.TP | |
.B -w \fIn | |
+Write parallelism: keep | |
+.I n | |
+writes to the server in progress at a time. | |
.TP | |
.B -s \fIsecs | |
+Status interval: every | |
+.I secs | |
+seconds, print a line tracking progress of the backup. | |
+.PD | |
+.PP | |
+When | |
+.I vbackup | |
+finishes, it prints a single line of the form | |
+.IP | |
+.EX | |
+mount /\fImntname\fL/\fIyyyy\fL/\fImmdd\fL/\fImntpath\fL \fIscore\fL \fIyyyy\f… | |
+.EE | |
+.LP | |
+This line is a valid configuration line for | |
+.I vnfs | |
+.RI ( q.v. ). | |
+.I Mntpath | |
+is the path on which | |
+.I disk | |
+is currently mounted. | |
.PP | |
.I Vcat | |
writes the named disk image to standard output. | |
Unused file system blocks are printed zeroed regardless | |
of their actual content. | |
.PP | |
-If the | |
-.B -z | |
-flag is given, | |
+By default, | |
.I vcat | |
-will attempt to seek over unused blocks instead of writing to them. | |
+will assume that its standard output is seekable | |
+.RI ( i.e., | |
+it has been redirected to a file or disk) | |
+and seek over unused blocks instead of writing to them. | |
The | |
.B -z | |
-flag should only be used when standard output is seekable | |
-.RI ( i.e. , | |
-when it has been redirected to a file or disk). | |
-.PP | |
-.I Vftp | |
-presents the | |
-file system image named by | |
-.I disk | |
-or | |
-.I score | |
-in a shell-like | |
-interactive session. | |
-Type | |
-.B help | |
-at the | |
-.B vftp> | |
-prompt for details. | |
+option causes | |
+.I vcat | |
+to zero unused blocks instead. | |
.PP | |
.I Vmount | |
mounts the NFS service at the network connection | |
t@@ -179,13 +181,6 @@ On most operating systems, | |
must be run by the user | |
.BR root . | |
.PP | |
-.I Vmount0 | |
-is a simple C program that | |
-.I vmount | |
-uses if | |
-.IR mount (8) | |
-does not suffice. | |
-.PP | |
.I Vnfs | |
serves, using the | |
NFS version 3 protocol, | |
t@@ -193,40 +188,123 @@ one or more disk images in a synthetic tree defined | |
by the configuration file | |
.IR config . | |
.I Vnfs | |
-announces NFS service at | |
+serves both NFS mount protocol | |
+and NFS protocol | |
+RPCs at | |
.IR addr | |
(default | |
-.BR udp!*!nfs ) | |
-and NFS mount service at | |
-.IR mntaddr | |
-(default | |
-.BR udp!*!\fI999 ), | |
-registering both with the port mapper. | |
-If no port mapper is found running (on port 111), | |
-.I vnfs | |
-starts its own port mapper. | |
+.BR udp!*!nfs ). | |
The options are: | |
.TP | |
+.B -E | |
+Disable `encrypted' handles. | |
+By default handles are encrypted with a random key to avoid | |
+leaking information about the backed-up file systems. | |
+If encryption is disabled, the NFS handles exposed to the client | |
+may leak information about the root scores of the disks as well | |
+as inode numbers. | |
+.TP | |
+.B -L | |
+Local service only: serve only requests from the loopback interface (127.0.0.1… | |
+.TP | |
+.B -LL | |
+Local service only, with paranoia: serve only requests from loopback, | |
+and only from the first source port that sends a request. | |
+This option is intended to be used to make sure that once the local | |
+host has mounted the service, no other local users can access it. | |
+.TP | |
+.B -R | |
+Print all NFS and NFS mount RPCs to standard error. | |
+.TP | |
+.B -V | |
+Print all Venti transactions to standard error. | |
+.TP | |
+.BI -a " addr | |
+Serve requests on | |
+.IR addr | |
+(see above). | |
+.TP | |
+.BI -b " blocksize | |
+Set block size used by the in-memory venti block cache. | |
+Must be as large as the maximum block size in any | |
+file system mentioned in the configuration. | |
+.TP | |
+.BI -c " cachesize | |
+Set the number of blocks stored by the in-memory venti cache. | |
+.TP | |
.B -r | |
-Reply to all NFS requests with RPC rejections. | |
+Respond to all requests with a Sun RPC rejection. | |
+This is useful during debugging. | |
+.PD | |
+.PP | |
+.I Config | |
+is a text file describing the | |
+backup hierarchy for | |
+.I vnfs | |
+to serve. | |
+Lines beginning with a sharp | |
+.RB ( # ) | |
+are ignored. | |
+The rest of the file is a sequence of commands, one per line. | |
+The commands are: | |
.TP | |
-.B -M | |
-Do not announce an NFS mount service. | |
+.BI mount " mtpt score time | |
+Add the file system with the given | |
+.I score | |
+to the tree at the mount point | |
+.IR mtpt . | |
+The path to the mount point will be created | |
+if necessary. | |
+If | |
+.B /dev/null | |
+is given as the score, an empty file system is mounted at | |
+.IR mtpt , | |
+excluding | |
+.IR mtpt 's | |
+contents from view. | |
+.I Time | |
+is the modification time to return for the directory | |
+.IR mtpt , | |
+either a decimal number of seconds since the epoch | |
+or a string of the form | |
+.IB yyyy / mmdd / hhmm | |
+giving the year, month, day, hour, and minute. | |
+.RI ( Vnfs | |
+does not use the modification time of the root in order | |
+to avoid accessing every mounted file system on common | |
+actions like | |
+.B ls | |
+.B -l | |
+.BR /dump/sys/2005 .) | |
.TP | |
-.B -P | |
-Do not register service with the port mapper. | |
+.BI allow " ip\fR[\fL/\fImask\fR] | |
.TP | |
-.B -a | |
- | |
- | |
+.BI deny " ip\fR[\fL/\fImask\fR] | |
+These two commands define access permissions based on IP address. | |
+The optional | |
+.I mask | |
+can be a decimal number (24) or an equivalent IP mask (255.255.255.0). | |
+Each request is filtered through the rules listed in the configuration file. | |
+The first rule that matches is used. | |
+If any | |
+.B allow | |
+or | |
+.B deny | |
+rules are given, the default action is to reject the request. | |
+In the absence of any rules, the default action is to accept all requests. | |
+.PD | |
.SH EXAMPLES | |
.PP | |
-Back up the file system stored on | |
-.BR /dev/da0s1a : | |
+Running on the server | |
+.IR bob , | |
+back up the file system stored on | |
+.BR /dev/da0s1a , | |
+which is mounted on | |
+.BR /home : | |
.IP | |
.EX | |
% vbackup /dev/da0s1a | |
-ffs:0123456789abcdef0123456789abcdef01234567 | |
+mount /bob/2005/0510/home ffs:0123456789abcdef\fI...\fP 2005/0510/0831 | |
% | |
.EE | |
.PP | |
t@@ -236,12 +314,13 @@ of Plan 9's dump file system, but hide each day's conten… | |
.IP | |
.EX | |
% cat config | |
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP | |
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP | |
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP | |
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP | |
-hide /*/*/tmp | |
-% vnfs -m -b 16k -c 1k config | |
+mount /bob/2005/0510 ffs:0123456789abcdef\fI...\fP 2005/0510/0829 | |
+mount /bob/2005/0510/home ffs:0123456789abcdef\fI...\fP 2005/0510/0831 | |
+mount /bob/2005/0510/tmp /dev/null 1 | |
+mount /bob/2005/0511 ffs:0123456789abcdef\fI...\fP 2005/0511/0827 | |
+mount /bob/2005/0511/home ffs:0123456789abcdef\fI...\fP 2005/0511/0828 | |
+mount /bob/2005/0511/tmp /dev/null 1 | |
+% vnfs -b 16k -c 1k config | |
% | |
.EE | |
.PP | |
t@@ -250,14 +329,11 @@ Mount the backups on a client machine using | |
.IP | |
.EX | |
# vmount udp!yourserver!nfs /dump | |
-# ls /dump | |
-2005 | |
+# ls /dump/bob/2005 | |
+0510 | |
+0511 | |
# | |
.EE | |
.PP | |
-Mount the backups using the standard NFS mount program: | |
-.IP | |
-.EX | |
-# mount -t nfs -o soft,intr,ro,nfsv3,rsize=8192,timeo=100 \ | |
- -o nfsvers=3,nolock,noatime,nodev,nosuid \ | |
-.EE | |
+(Users of fancy shells may need to quote the address argument.) | |
+ | |
diff --git a/man/man8/venti.8 b/man/man8/venti.8 | |
t@@ -1,6 +1,41 @@ | |
.TH VENTI 8 | |
.SH NAME | |
-venti.conf \- venti configuration | |
+venti \- archival storage server | |
+.SH SYNOPSIS | |
+.B venti/venti | |
+[ | |
+.B -Ldsw | |
+] | |
+[ | |
+.B -a | |
+.I address | |
+] | |
+[ | |
+.B -B | |
+.I blockcachesize | |
+] | |
+[ | |
+.B -c | |
+.I config | |
+] | |
+.PP | |
+.B " " | |
+[ | |
+.B -C | |
+.I lumpcachesize | |
+] | |
+[ | |
+.B -h | |
+.I httpaddress | |
+] | |
+[ | |
+.B -I | |
+.I indexcachesize | |
+] | |
+[ | |
+.B -W | |
+.I webroot | |
+] | |
.SH DESCRIPTION | |
Venti is a SHA1-addressed archival storage server. | |
See | |
t@@ -83,12 +118,10 @@ and the total bitmap size | |
.PP | |
The bloom filter should be sized so that | |
.I nhash | |
-\(ti | |
+\(mu | |
.I nblock | |
-\(ti | |
-0.7 | |
\(<= | |
-0.7 \(ti | |
+0.7 \(mu | |
.IR b , | |
where | |
.I nblock | |
t@@ -349,22 +382,17 @@ or | |
(case-insensitive) | |
to indicate kilobytes, megabytes, or gigabytes respectively. | |
.SS Command Line | |
-Options to | |
-.I venti | |
-are: | |
+Many of the options to Venti duplicate parameters that | |
+can be specified in the configuration file. | |
+The command line options override those found in a | |
+configuration file. | |
+Additional options are: | |
.TP | |
.BI -c " config | |
The server configuration file | |
(default | |
.BR venti.conf ) | |
.TP | |
-.BI -o " line | |
-Set a server parameter, using the same syntax | |
-as in the configuration file. | |
-The | |
-.B -o | |
-options override the configuration file. | |
-.TP | |
.B -d | |
Produce various debugging information on standard error. | |
Implies | |
t@@ -413,6 +441,8 @@ Start the server and check the storage statistics: | |
% venti/venti | |
% hget http://$sysname/storage | |
.EE | |
+.SH SOURCE | |
+.B \*9/src/cmd/venti/srv | |
.SH "SEE ALSO" | |
.IR venti (1), | |
.IR venti (3), | |
t@@ -429,3 +459,14 @@ Setting up a venti server is too complicated. | |
.PP | |
Venti should not require the user to decide how to | |
partition its memory usage. | |
+.PP | |
+Users of shells other than | |
+.IR rc (1) | |
+will not be able to use the program names shown. | |
+One solution is to define | |
+.B "V=$PLAN9/bin/venti" | |
+and then substitute | |
+.B $V/ | |
+for | |
+.B venti/ | |
+in the paths above. |