| .TH VENTI 1 |
| .SH NAME |
| read, write, copy \- simple Venti clients |
| .SH SYNOPSIS |
| .B venti/read |
| [ |
| .B -h |
| .I host |
| ] |
| [ |
| .B -t |
| .I type |
| ] |
| .I score |
| .br |
| .B venti/write |
| [ |
| .B -z |
| ] |
| [ |
| .B -h |
| .I host |
| ] |
| [ |
| .B -t |
| .I type |
| ] |
| .br |
| .B venti/copy |
| [ |
| .B -fimrVv |
| ] |
| [ |
| .B -t |
| .I type |
| ] |
| .I srchost |
| .I dsthost |
| .I score |
| .SH DESCRIPTION |
| Venti is a SHA1-addressed block storage server. |
| See |
| .IR venti (7) |
| for a full introduction. |
| .PP |
| .I Read |
| reads a block with the given |
| .I score |
| and numeric |
| .I type |
| from the server |
| .I host |
| and prints the block to standard output. |
| If the |
| .B -h |
| option is omitted, |
| .I read |
| consults the environment variable |
| .B $venti |
| for the name of the Venti server. |
| If the |
| .B -t |
| option is omitted, |
| .I read |
| will try each type, one at a time, until it finds |
| one that works. |
| It prints the corresponding |
| .B read |
| .B -t |
| command to standard error |
| to indicate the type of the block. |
| .PP |
| .I Write |
| writes at most 56 kilobytes of data from standard input |
| to the server |
| .I host |
| and prints the resulting score to standard output. |
| If the |
| .B -t |
| option is omitted, |
| .I write |
| uses type 0, |
| denoting a data block. |
| If the |
| .B -z |
| option is given, |
| .I write |
| zero truncates the block before writing it to the server. |
| .PP |
| .I Copy |
| expects |
| .I score |
| to be the score of a |
| .B VtRoot |
| block. |
| It copies the entire tree of blocks reachable from |
| the root block from the server |
| .I srchost |
| to the server |
| .IR dsthost . |
| .PP |
| Venti's blocks are arranged in a directed acyclic graph (see venti(6)); |
| there may be multiple paths from a root score to an |
| interior block (for example, if the same file contents are stored |
| under multiple names in an archive). |
| .I Copy |
| runs more efficiently if it does not copy blocks |
| (and all their children) multiple times. |
| The |
| .B -f |
| option causes |
| .I copy |
| to assume that if a block already exists on the destination |
| Venti server, all its children also exist and need not be considered. |
| The |
| .B -m |
| option causes |
| .I copy |
| to maintain an in-memory list of blocks it has copied |
| and avoid considering the same block multiple times. |
| The |
| .B -f |
| option is only useful if the destination Venti server is |
| known not to have lost any blocks due to disk corruption |
| or other failures. |
| The |
| .B -m |
| option is only useful if enough memory is available to |
| hold the block list, which typically requires about 1% |
| of the total number of bytes being copied. |
| .PP |
| The |
| .B -i |
| and |
| .B -r |
| options control |
| .IR copy 's |
| reaction to errors reading |
| from |
| .IR srchost . |
| .I Copy |
| always prints information to standard error |
| about each read error. |
| By default, |
| .I copy |
| exits after printing the first error. |
| If the |
| .B -i |
| option is given, read errors are ignored. |
| This is dangerous behavior because it breaks the |
| assumption made by `fast' mode. |
| If the |
| .B -r |
| option is given, |
| .I copy |
| replaces pointers to unreadable blocks with |
| pointers to the zero block. |
| It writes the new root score to standard output. |
| The |
| .B -v |
| option prints scores as it copies them, total writes, and other |
| debugging information. |
| The |
| .B -V |
| option prints debugging information about the Venti protocol |
| messages send/received. |
| .SH SOURCE |
| .B \*9/src/cmd/venti |
| .SH SEE ALSO |
| .IR vac (1), |
| .IR venti (3), |
| .IR vacfs (4), |
| .IR venti (7), |
| .IR vbackup (8), |
| .IR venti (8), |
| .IR venti-fmt (8) |
| .SH BUGS |
| There should be programs to read and write |
| venti files and directories. |