.TH VENTI 8 .SH NAME venti \- an archival block storage server .SH SYNOPSIS .B venti/venti [ .B -dsw ] [ .B -a .I ventiaddress ] [ .B -B .I blockcachesize ] [ .B -c .I config ] [ .B -C .I cachesize ] [ .B -h .I httpaddress ] [ .B -I .I icachesize ] .PP .B venti/sync [ .B -h .I host ] .SH DESCRIPTION .I Venti is a block storage server intended for archival data. In a Venti server, the SHA1 hash of a block's contents acts as the block identifier for read and write operations. This approach enforces a write-once policy, preventing accidental or malicious destruction of data. In addition, duplicate copies of a block are coalesced, reducing the consumption of storage and simplifying the implementation of clients. .PP Storage for .I venti consists of a data log and an index, both of which can be spread across multiple files. The files containing the data log are themselves divided into self-contained sections called arenas. Each arena contains a large number of data blocks and is sized to facilitate operations such as copying to removable media. The index provides a mapping between the a Sha1 fingerprint and the location of the corresponding block in the data log. .PP The index and data log are typically stored on raw disk partitions. To improve the robustness, the data log should be stored on a device that provides RAID functionality. The index does not require such protection, since if necessary, it can can be regenerated from the data log. The performance of .I venti is typically limited to the random access performance of the index. This performance can be improved by spreading the index accross multiple disks. .PP The storage for .I venti is initialized using .IR fmtarenas , .IR fmtisect , and .I fmtindex (see .IR ventiaux (8)). A configuration file, .IR venti.conf (6), ties the index sections and data arenas together. .PP A Venti server is accessed via an undocumented network protocol. Two client applications are included in this distribution: .IR vac (1) and .IR vacfs (4). .I Vac copies files from a Plan 9 file system to Venti, creating an archive and returning the fingerprint of the root. This archive can be mounted in Plan 9 using .IR vacfs . These two commands enable a rudimentary backup system. A future release will include a Plan 9 file system that uses Venti as a replacement for the WORM device of .IR fs (4). .PP The .I venti server provides rudimentary status information via a built-in http server. The URL files it serves are: .TP .B stats Various internal statistics. .TP .B index An enumeration of the index sections and all non empty arenas, including various statistics. .TP .B storage A summary of the state of the data log. .TP .B xindex An enumeration of the index sections and all non empty arenas, in XML format. .PP Several auxiliary utilities (see .IR ventiaux (8)) aid in maintaining the storage for Venti. With the exception of .I rdarena , these utilities should generally be run after killing the .I venti server. The utilities are: .TP .I checkarenas Check the integrity, and optionally fix, Venti arenas. .TP .I checkindex Check the integrity, and optionally fix, a Venti index. .TP .I buildindex Rebuild a Venti index from scratch. .TP .I rdarena Extract a Venti arena and write to standard output. .PD .PP Options to .I venti are: .TP .BI -a " ventiaddress The network address on which the server listens for incoming connections. The default is .LR tcp!*!venti . .TP .BI -B " blockcachesize The size, in bytes, of memory allocated to caching raw disk blocks. .TP .BI -c " config Specifies the Venti configuration file. Defaults to .LR venti.conf . .TP .BI -C " cachesize The size, in bytes, of memory allocated to caching Venti blocks. .TP .BI -d Produce various debugging information on standard error. .TP .BI -h " httpaddress The network address of Venti's built-in http server. The default is .LR tcp!*!http . .TP .BI -I " icachesize The size, in bytes, of memory allocated to caching the index mapping fingerprints to locations in .IR venti 's data log. .TP .B -s Do not run in the background. Normally, the foreground process will exit once the Venti server is initialized and ready for connections. .TP .B -w Enable write buffering. This option increase the performance of writes to .I venti at the cost of returning success to the client application before the data has been written to disk. The server implements a .I sync rpc that waits for completion of all the writes buffered at the time the rpc was received. Applications such as .IR vac (1) and the .I sync command described below use this rpc to make sure that the data is correctly written to disk. Use of this option is recommended. .PD .PP The units for the various cache sizes above can be specified by appending a .LR k , .LR m , or .LR g to indicate kilobytes, megabytes, or gigabytes respectively. The command line options override options found in the .IR venti.conf (6) file. .PP .I Sync connects to a running Venti server and executes a sync rpc (described with the .B -w option above). If sync exits successfully, it means that all writes buffered at the time the command was issued are now on disk. .SH SOURCE .B /sys/src/cmd/venti .SH "SEE ALSO" .IR venti.conf (6), .IR ventiaux (8), .IR vac (1), .IR vacfs (4). .br Sean Quinlan and Sean Dorward, ``Venti: a new approach to archival storage'', .I "Usenix Conference on File and Storage Technologies" , 2002.