| 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. |