.TH RVM 1 "02 December 2003"
.SH NAME
.PP
rvm \- rsync vault manager
.SH SYNOPSIS
.PP
.RS 0
.TP 4
.B rvm
[
.I action
]
.br
[
.B --timestamp
.I timestamp
]
.br
[
.B --no-default-config
]
.br
[ [
.B --config
.I config-file
] ... ]
.br
[ [
.B --job
.I job-file
] ... ]
.br
.RE
.SH DESCRIPTION
.PP
Rvm is an archive manager that uses rsync to create and maintain a list of
archives that span one or more archive vaults. A vault is defined as a
directory on a logical partition that holds one or more archives. An archive
is defined as a subdirectory on a vault, with a time stamp for a name, that
holds the files and directories backed up from one or more archive jobs.
Files in newer archives that are identical to files in older archives may be
optionally replaced with hard links to save space.
.SH COMMAND LINE ACTION OPTIONS
.PP
Rvm will expect one action command line option to be given. Actions are
mutually exclusive. If multiple action options appear on the command line,
only the last option encountered will be taken.
.PP
.B --archive
.br
.RS 2
.PP
Create a new archive or update the files in an existing archive. Whether an
existing archive is updated or a new archive is created depends on the
.B timestamp-resolution
configuration command, and the timestamp of the last archive created. If an
archive is found with the same timestamp as the one generated at execution
time, then that archive is used regardless of the vault on which it appears.
.PP
If the
.B link-catalog-dir
configuration command is used, then the link catalog is updated after all
archive jobs have been processed.
.RE
.B --relink
.br
.RS 2
.PP
Update the link catalog. Do not create a new archive or refresh any existing
archive. This option requires that the configuration command
.B link-catalog-dir
appear somewhere in the configuration file(s). This command is not required
and has no default value. If no value is specified in a configuration file
then rvm will take no action.
.RE
.B --check-config
.br
.RS 2
.PP
Load the configuration file(s) and perform all configuration checks, but do
nothing more. Rvm will print an error on standard error and exit with an
error code if any problems were found with the configuration settings. Rvm
will print nothing and exit with a successful exit code if there are no
problems.
.RE
.B --help
.br
.RS 2
.PP
Print the version number and a synopsis of command line options, then exit.
.RE
.B --version
.br
.RS 2
.PP
Print the version number then exit.
.RE
.SH COMMAND LINE OPTIONS
.PP
The following command line options are used in conjunction with one of the
action options to direct rvm's behavior.
.B --timestamp
.I timestamp
.br
.RS 2
.PP
Override the default timestamp generated at execution time and force rvm to
use the given
.I timestamp
instead. This option may only be used on the command line once. If it appears
multiple times then only the last timestamp given will be used.
.PP
Timestamps must be specified in the form of:
.PP
.RS 2
[
.B YYYY
[ -
.B MM
[ -
.B DD
[ .
.B HH
[
.B MM
[
.B SS
]]]]]]
.RE
.PP
Where:
.RS 2
.TP 2
.B YYYY
A four-digit year.
.TP 2
.B MM
A two-digit month.
.TP 2
.B DD
A two-digit day of the month.
.TP 2
.B HH
A two-digit hour of the day, in 24-hour format (00-23).
.TP 2
.B MM
A two-digit minute.
.TP 2
.B SS
A two-digit second.
.RE
.PP
No spaces are allowed. The number of segments specified in the timestamp will
override any
.B timestamp-resolution
setting that may appear in the configuration files. Caution should be used by
the archive manager when specifying custom timestamps on the command line, as
specifying a timestamp of lesser resolution than the timestamp resolution
normally used from the configuration file(s), could result in the archive
generated from the custom timestamp being the first archive deleted by rvm
later when the vault exceeds it's overflow threshold.
.RE
.B --no-default-config
.br
.RS 2
.PP
Do not attempt to read configuration information from the default
configuration file @CONFIGFILE@. This command line option must be used in
conjunction with the
.B --config
command line option to tell rvm to read another configuration file instead of
the default configuration file. Rvm will exit with an error if no
configuration files are read.
.RE
.B --config
.I config-file
.br
.RS 2
.PP
Read configuration information from
.IR config-file .
If used without the
.B --no-default-config
option, rvm will read the configuration file
.I config-file
after attempting to read the default configuration file @CONFIGFILE@. If used
with
.BR --no-default-config ,
rvm will read only
.IR config-file ,
and will not read @CONFIGFILE@. Multiple uses of this command line option
will result in rvm reading each file passed on the command line in the order
given.
.PP
If
.I config-file
is a relative pathname, then it is assumed to be relative to the location from
which rvm is executed. If
.I config-file
contains wildcard characters, then all files that match will be read in
alphabetical order. Note that wildcard characters must either be
quoted or escaped or the shell may expand it's value before passing the
command line to rvm, which may result in undesired behavior.
.PP
This command line option may be used multiple times to have rvm read several
configuration files.
.RE
.B --job
.I job-file
.br
.RS 2
.PP
Read the contents of
.I job-file
as the contents of an archive job block. This command line option is
synonymous with the
.B read-job
configuration command. Contents of the file
.I job-file
should not be enclosed in a
.BR ...
block, as a job context is already implied. If a beginning or ending job block
command is found in the
.I job-file
file, then rvm will exit with an error.
.PP
If
.I job-file
is a relative pathname, then it is assumed to be relative to the location from
which rvm is executed. If
.I job-file
contains wildcard characters, then all files that match will be read in
alphabetical order, each as a separate job. Note that wildcard characters
given on the command line must either be quoted or escaped or the shell may
expand it's value before passing the command line to rvm, which may result in
undesired behavior.
.PP
This command line option may be used multiple times to have rvm read several
job files.
.RE
.SH TERMINOLOGY
.PP
.B Archive Administrator
.br
.RS 2
.PP
The user in charge of setup and maintenance of rvm and all associated files
and directories.
.RE
.B Configuration File
.br
.RS 2
.PP
A file used to change rvm's behavior. Multiple configuration files may be
used, and each file may include the contents of other files. By default rvm
will look for the file @CONFIGFILE@, unless told to do otherwise by the
.B --no-default-config
command line option. Rvm may also be told to read extra configuration files
with the
.B --config
and
.B --job
command line options.
.RE
.B Vault
.br
.RS 2
.PP
A repository for archives. A vault is merely a directory under which archives
are created and maintained. One or more vaults may be used. When using
multiple vaults it is recommended that each vault be located either on
separate physical devices, or at least separate logical partitions, for
increased reliability in the event of disk corruption or failure.
.RE
.B Archive
.br
.RS 2
.PP
An archive is a subdirectory within a vault, with a time-sensitive directory
name, that houses the files and directories from one or more archive jobs.
The name of the archive subdirectory is generated from the timestamp created
at the time that rvm is executed. An archive may optionally contain hardlinks
from files within to files in an older archive if the file has not changed.
.RE
.B Archive Job
.br
.RS 2
.PP
An archive job consists of files and directories that are to be backed up from
some source. A job may consist of local files and directories, or files and
directories mounted over NFS or Samba, or files and directory located on a
remote host accessible by rsync via RSH or SSH, or files and directories
located on an rsync server. The files and directories backed up from the
specified source may be stored in a user-configurable subdirectory tree under
the archive directory.
.RE
.SH EXECUTION
.PP
When rvm is executed it will first set default values for all configuration
settings. Next rvm will parse command line options.
.PP
If rvm was executed with the
.B --help
or
.B --version
command line options, then rvm will print out it's version number, and
optionally a usage summary, then exit.
.PP
If any other action options were selected, then rvm will next try to read
configuration files. If the
.B --no-default-config
command line option was used then rvm will not try to read the default
configuration file, @CONFIGFILE@. Otherwise, rvm will attempt to locate and
read this file first. If this file cannot be found, rvm will exit with an
error. Next, if any
.B --config
or
.B --job
command line options were used then rvm will attempt to find and read those
configuration files. If any errors were detected in any of the configuration
files found then rvm will exit with an error.
.PP
If rvm was executed with the
.B --check-config
option, then rvm will exit after successfully reading all configuration files.
.PP
If the
.B --relink
action was selected, and a valid directory was given for
.B link-catalog-dir
in the configuration file(s), then rvm will rebuild the link catalog directory
and exit.
.PP
If the
.B --archive
action was selected, then rvm will begin the archiving process. Rvm will next
select a vault and prepare that vault for a new archive. Vault selection may
be modified with the
.B vault-selection-behavior
configuration command. Vaults may be selected round-robin style, where each
vault listed in rvm's configuration files will be used in turn, or vaults may
be selected on the grounds of which vault has the most free space available.
.PP
Vault preparation involves checking the vault for available space, as
specified with the
.B vault-overflow-blocks
and
.B vault-overflow-inodes
configuration commands. If the filesystem on which the selected vault resides
has fewer than the specified percentage of free blocks or inodes, then the
vault is considered to have exceeded it's overflow threshold. If this
condition occurs, then rvm will take the action specified by the
.B vault-overflow-behavior
configuration command. Depending on this configuration setting, rvm may take
one of three actions. By default, rvm will simply exit with an error. Rvm
may also be instructed to delete the oldest archive found on the selected
vault and re-check the filesystem's available space. If, after deleting the
oldest archive found, the filesystem's used space has fallen below the
overflow threshold, then rvm will continue with execution; otherwise rvm will
exit with an error. Lastly, and most dangerously, rvm may be instructed to
continue deleting old archives until either sufficient space is found or the
vault runs out of old archives.
.PP
After vault selection and preparation, rvm will create a new archive
subdirectory on the vault using either the timestamp given by the
.B --timestamp
command line option, or a generated timestamp constructed according to the
.B timestamp-resolution
configuration command. For the duration of the archival process the archive
subdirectory name will be appended with the extension ".incomplete".
.PP
Next rvm will spawn children to process archiving jobs. Each child will
handle a single job and archive all the paths associated with that job, and
then send a report back to the parent rvm process. By default, rvm will only
spawn one child process at a time unless specified otherwise with the
.B rsync-parallel
configuration command. If the
.B rsync-hardlink
command appears in the job configuration for this job, or in a previous
default job configuration, then the child rvm process will select an older
archive on the same vault to use as a hardlink source for rsync. This can
save space within the vault by hardlinking files that have not changed from
one invocation of rvm to the next.
.PP
Each child will interpret rsync's output and exit
codes, and if unsuccessful, the child may retry the command a certain number
of times before giving up, as specified by the
.B rsync-retry-count
and
.B rsync-behavior
configuration commands.
.PP
After all jobs have completed rvm will rename the archive directory, removing
the ".incomplete" extension. Then, rvm may optionally create or update the
link catalog directory, if
.B link-catalog-dir
configuration command was found in the configuration file(s).
.PP
Finally, rvm will generate a report that it will print to standard output and
save to a file in the log directory.
.SH EXIT CODES
.PP
Exit codes returned by rvm are:
.TP 2
0
Successful completion of all archive jobs.
.TP 2
1
A configuration error occurred.
.TP 2
2
The selected vault is full.
.TP 2
3
One or more archive jobs failed.
.TP 2
4
An internal or fatal error occurred.
.SH CONFIGURATION
.PP
Rvm is configured through the use of one or more configuration files. By
default rvm will search for the file @CONFIGFILE@, unless this behavior is
overridden by the use of the
.B --no-default-config
command line option. If @CONFIGFILE@ does not exist then rvm will search for
files passed to it using the
.B --config
and
.B --job
command line options. If no configuration files can be found then rvm will
exit with an error.
.PP
Blank lines and lines that begin with a '#' are ignored.
.PP
A configuration file may include the contents of another file, or a
configuration file may include the contents of all files that match a wildcard
filename. Included files may in turn include more files. (Note that reading
the contents of included files is done recursively, meaning that it is
possible for rvm to exceed it's stack size, resulting in an error.)
.PP
All configurable settings are listed on a single line in the form of
keyword-value pairs unless specified otherwise. Each line begins with a
case-insensitive keyword followed by a value and a newline character '\\n'.
White space is ignored except for certain values that may be specified using
double quotes. Some configuration commands are required to appear in a
configuration file, others have default values that are assumed. Some
configuration commands may be used multiple times, for others, multiple use
will override that command's previous settings.
.PP
Configuration commands are context-sensitive. A configuration file consists of
three sections: a global section, one or more default sections, and one or
more job sections. Some configuration commands are allowed in any context,
while others may only be used in a default or job context.
.SH CONFIGURATION COMMANDS USED IN ANY CONTEXT
.PP
These are commands that may appear anywhere in a configuration file in any
context.
.B include
.I path
.RS 4
.PP
Stop reading the current configuration file and read the contents of the file
.IR path .
When finished, continue reading the current file.
.PP
If
.I path
is a relative pathname, then it is assumed to be relative to the directory of
the configuration file in which this command is found. This is in contrast to
the
.B --config
and
.B --job
command line options, where a relative pathname is assumed to be relative to
the directory from which rvm is executed.
.PP
If
.I path
contains wildcard characters, then each matching file found will be read in
alphabetical order. If no files are found, then rvm will exit with an error.
Included files may in turn contain commands to include other files. Multiple
uses of this command are allowed. This command is not required, and has no
default value.
.PP
When including the contents of another file, rvm behaves as though the file
included were literally pasted into the current file at the current location.
If an included file changes the configuration context then the new context
remains in effect when rvm finishes reading the included file and continues
with the current file. This must be taken into account when authoring
configuration files or at best, an error will occur, and at worst, confusing
and undesired effects may occur.
.RE
.SH GLOBAL CONTEXT CONFIGURATION COMMANDS
.PP
When rvm begins reading the first configuration file it assumes a global
context until a default or job context is specified. Global commands affect
the overall behavior of rvm, such as the method used to select vaults, the
location of the local rsync binary, or the number of jobs to process in
parallel. This is in contrast to default or job contexts, where commands
affect the behavior of rvm's children as they process a particular job.
.BR ...
.RS 4
.PP
Configuration settings in a default context are specified by placing those
settings inside a default block. A default block begins with the text
"" on a line by itself, and ends with the text "" on
another line by itself. Lines in between are applied to the default settings.
These default settings will be assumed by all jobs that follow until another
default block is encountered. Commands given in a default block may be
overridden by commands found within a job block, but this override will not
affect other jobs that follow.
.PP
The settings used in a default block are only changed by the appearance of
another default block. When another default block is encountered, all default
settings not specified in the new default block are reset, settings from
previous default blocks do not carry over into the new default block.
.PP
This command is not required, and if not used the following values are
assumed:
.PP
.RS 2
.br
archive-path hostname/path
.br
rsync-behavior * = retry
.br
rsync-behavior 0 = ok
.br
rsync-behavior 1 = fail
.br
rsync-behavior 2 = fail
.br
rsync-behavior 4 = fail
.br
rsync-behavior 23 = retry-without-hardlinks
.br
rsync-behavior 124 = fail
.br
rsync-behavior 125 = fail
.br
rsync-behavior 126 = fail
.br
rsync-behavior 127 = fail
.br
rsync-connection-type remote
.br
rsync-hardlink yes
.br
rsync-retry-count 3
.br
#
.br
# 14400 = 60 sec/min * 60 min/hr * 4 = 4 hours
.br
#
.br
rsync-timeout 14400
.br
.br
.RE
.PP
Default values may themselves be reset to rvm's built-in default values by
specifying an empty default block, like so:
.PP
.RS 2
.br
.br
.RE
.RE
.B include-job
.I path
.RS 4
.PP
Stop reading the current configuration file, assume a job context, and read
the contents of the file
.IR path .
When finished, switch back to a global context and continue reading the
current configuration file.
.PP
This command may be thought of as a one line short cut for the following:
.PP
.RS 2
.br
include
.I path
.br
.RE
.PP
If
.I path
is a relative pathname, then it is assumed to be relative to the directory of
the configuration file in which this command appears. This is in contrast to
the
.B --job
command line option, where
.I job-file
is assumed to be relative to the location from which rvm is executed.
.PP
If
.I path
contains wildcard characters, then each matching file found will be included
in alphabetical order as a separate job. If no matching files are found then
rvm will exit with an error.
.PP
Multiple uses of this command will append new jobs to the job list.
.RE
.BR ...
.RS 4
.PP
Configuration settings in a job context are specified by placing those
settings inside a job block. A job block begins with the text "" on a
line by itself, and ends with the text "" on another line by itself.
When rvm encounters a job block in a configuration file a new job is created
and appended to the job list. The newly created job will assume default
values either from rvm or from the last default block encountered. After
default values have been assigned then the commands inside the job block are
read and their settings applied.
.RE
.B link-catalog-dir
.I path
.RS 4
.PP
If this command is found, then rvm will create a catalog of all archives from
all vaults in the directory
.I path
using relative symbolic links. If
.I path
does not exist, then rvm will exit with an error. If
.I path
is a relative pathname, then it is assumed to be relative to the location from
which rvm is executed.
.PP
This command is not required and has no default value. Multiple uses of
this command will overwrite any previous value.
.PP
.BR NOTICE :
If the archive administrator chooses to export the
.I path
directory to other hosts,
then all vault directories must also be exported. Also, these directories
must be mounted on remote machines in such a way that will preserve the
validity of the relative symbolic links in
.IR path .
.RE
.B log-dir
.I path
.RS 4
.PP
Create log files under the directory
.IR path .
Rvm will use @LOGDIR@ if no other setting is found. Multiple uses of this
command will overwrite any previous value. If
.I path
is a relative pathname, then it is assumed to be relative to the location from
which rvm is executed.
.RE
.B delete-old-log-files
.I bool
.RS 4
Enable or disable deletion of old log files. If rvm deletes an archive to
make more space in a vault, then, if delete-old-log-files is enabled, rvm will
also search for and delete the archive's log file from the log directory.
.PP
Valud values for
.I bool
are
.br
.RS 2
"y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or "on"|"off"
.RE
.PP
.PP
This command is not required. Rvm will use "on" if no other setting is found.
Multiple uses of this command will overwrite any previous value within the
same context.
.RE
.B delete-old-report-files
.I bool
.RS 4
Enable or disable deletion of old report files. If rvm deletes an archive to
make more space in a vault, then, if delete-old-report-files is enabled, rvm
will also search for and delete the archive's report file from the log
directory.
.PP
Valud values for
.I bool
are
.br
.RS 2
"y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or "on"|"off"
.RE
.PP
.PP
This command is not required. Rvm will use "on" if no other setting is found.
Multiple uses of this command will overwrite any previous value within the
same context.
.RE
.B logging-level
.I option
.RS 4
.PP
Specify the degree of verbosity used when writing to the log file. Valid
values for
.I option
are:
.RS 0
.TP 2
.B manager
Log only the messages that come from the controlling parent rvm process.
.TP 2
.B child
Log messages from the controlling parent and from child rvm processes.
.TP 2
.B rsync
Log all messages from rvm and from rsync.
.RE
.PP
Rvm will use the default value of "child" if no other setting is provided.
Multiple use of this command will overwrite any previous value.
.RE
.B error-logging-level
.I option
.RS 4
.PP
Specify the degree of verbosity used when writing to the log file when
retrying a failed rsync command. Valid values are the same as for the
.B logging-level
command above.
.PP
Rvm will use the default value of "rsync" if no other setting is provided.
Multiple use of this command will overwrite any previous value.
.RE
.B rsync-local-path
.I path
.RS 4
.PP
Specify the location of the rsync program on the local host. The value for
.I path
should be an absolute pathname.
.PP
At the time that rvm is compiled, if rsync was found in the one of the
directories specified by the PATH environment variable, then that value will
be used by default. Otherwise, if rsync could not be found at compile time,
and
.B rsync-local-path
is not specified, rvm will exit with an error.
.PP
Multiple uses of this command will overwrite any previous value.
.RE
.B rsync-parallel
.I integer
.RS 4
.PP
The number of jobs rvm is to process in parallel. Rvm will spawn up to
.I integer
child processes to handle jobs from the job list. When one job completes that
child will exit and another child process will be created to handle the next
available job. If rvm encounters an error when attempting to create a child
process, then rvm will print an error message to the log file and attempt to
create a new process again at a later time.
.PP
Valid values are any integer greater than 0. Rvm will assume the default
value of 1 if no other setting is found. Multiple uses of this command
overwrite any previous value.
.RE
.B io-poll-interval
.I integer
.RS 4
.PP
The number of seconds to sleep between polling for I/O from child processes.
Valid values are any positive integer value including 0. Rvm will assume the
default value of 1 if no other setting is found. Multiple uses of this
command overwrite any previous value.
.RE
.B timestamp-resolution
.I option
.RS 4
.PP
A configuration setting specifying the depth of resolution used in creating
timestamps. Valid values for
.I option
are:
.RS 0
.TP 2
.B year
Use a four-digit year as the archive timestamp.
.br
Example: 2003
.TP 2
.B month
Same as year, followed by '-' and a two-digit month.
.br
Example: 2003-09
.TP 2
.B day
Same as month, followed by '-' and a two-digit day of the month.
.br
Example: 2003-09-10
.TP 2
.B hour
Same as day, followed by '.' and a two-digit hour in 24-hour format.
.br
Example: 2003-09-10.13
.TP 2
.B minute
Same as hour, followed by a two-digit minute.
.br
Example: 2003-09-10.1359
.TP 2
.B second
Same as minute, followed by a two-digit second.
.br
Example: 2003-09-10.135933
.RE
.PP
Timestamps are used to generate archive directory names and the basename used
for log files and report files. A new timestamp is generated each time rvm is
executed. The timestamp resolution setting allows the archive administrator
to control to what degree timestamps are created. For instance, a timestamp
resolution of "year" would result in a new archive being created once a year.
If rvm is then run a second time within the same year then rvm will update the
existing archive rather than create a new archive. At the other end of the
scale, a timestamp resolution of "second" would result in a new archive being
created each second (or more likely, each time rvm is run, since rvm will
probably take longer than one second to complete an archive of any significant
size).
.PP
The default value used is "day". Multiple uses of this command will overwrite
any previous value.
.PP
.BR NOTICE :
Care should be taken when modifying this value. If rvm is executed twice with
the same
.B timestamp-resolution
period, and the first instance of rvm has not completed, then that archive may
be corrupted.
.RE
.B vault
.I path
.RS 4
.PP
Designate the directory
.I path
to use as a vault. More than one vault may exist on the same
logical disk partition, although it is recommended that vaults exist on
separate physical devices, or at least on separate logical partitions. This
is for the safety and integrity of the archives in the event of disk
corruption or failure.
.PP
If
.I path
is a relative pathname, then it is assumed to be relative to the location from
which rvm is executed. If
.I path
does not exist then rvm will exit with an error. If
.I path
contains wildcard characters, then all matching pathnames are used as vaults.
If no matching pathnames are found then rvm will exit with an error.
.PP
Once rvm has finished reading all of it's configuration files, if no usable
vaults exist then rvm will exit with an error.
.PP
Multiple uses of this command will add to the list of vaults.
.RE
.B vault-overflow-behavior
.I keyword
.RS 4
.PP
Define how rvm should handle a vault that is approaching maximum capacity.
Valid values for
.I keyword
are:
.RS 0
.TP 2
.B quit
If there is insufficient space available on the selected vault then exit with
an error.
.TP 2
.B delete-oldest
If there is insufficient space available on the selected vault, then delete
the oldest archive from the vault and check for available space again. If,
after deleting the oldest archive, there is still insufficient space, exit
with an error. Only one archive deletion is allowed per execution, after that
rvm will exit with an error if there is insufficient space.
.TP 2
.B delete-until-free
If there is insufficient space available on the selected vault, then delete
the oldest archive from the vault and check for available space again. If
there is still insufficient space in the vault, then continue deleting the
oldest archive found until either sufficient space is available or there are
no old archives left. If there is still insufficient space, then exit with an
error. Caution should be used by the archive administrator when using this
setting.
.PP
Rvm will assume a value of
.B quit
by default. Multiple uses of this command
overwrite any previous value.
.PP
.BR NOTICE :
Rvm will check the free space on the selected vault several times during
execution. If a child process exits with an error, the vault is checked to
see if it has exceeded it's overflow threshold. If so, and
.B vault-overflow-behavior
is set to either "delete-oldest" or "delete-until-free", then rvm will attempt
to remove the oldest archive in the vault and retry the failed job. If, during archival, the size of an archive increases dramatically (to 50% of a
vault's capacity or more) then the use of "delete-oldest" or
"delete-until-free" could cause rvm to continually delete older archives,
which may not be the desired behavior.
.RE
.RE
.B vault-overflow-blocks
.I integer
.RS 4
.PP
Define for rvm a threshold used to decide when a vault has become alarmingly
close to full capacity. Rvm is to consider the selected vault to have
exceeded it's overflow capacity if there is less than
.I integer
percent of free blocks left on the logical partition in which the vault
resides. The value for
.I integer
must be between 0 and 50 inclusively.
.PP
Rvm will use a default value of 15 if no other setting is found. Multiple
uses of this command will overwrite any previous value.
.RE
.B vault-overflow-inodes
.I integer
.RS 4
.PP
Define for rvm a threshold used to decide when a vault has become alarmingly
close to full capacity. Rvm is to consider the selected vault to have
exceeded it's overflow capacity if there is less than
.I integer
percent of free inodes left on the logical partition in which the vault
resides. The value for
.I integer
must be between 0 and 50 inclusively.
.PP
Rvm will use a default value of 15 if no other setting is found. Multiple
uses of this command will overwrite any previous value.
.PP
.BR NOTICE :
Some filesystems do not use inodes, such as FAT formatted filesystems used by
Windows. If such a filesystem is used to house a vault then the operating
system may report that there are 0 free inodes available. For such
filesystems it is required that
.B vault-overflow-inodes
be set to 0 to avoid erroneous filesystem overflow errors.
.RE
.B vault-selection-behavior
.I keyword
.RS 4
.PP
Specify the method by which rvm is to select the next vault from the list of
available vaults. Valid values for
.I keyword
are:
.RS 0
.TP 2
.B max-free
Determine the amount of free space available on each vault and choose the
vault with the most free space. If all vaults are equally filled, then fall
back to using the round-robin method.
.TP 2
.B round-robin
Determine the last vault used the last time rvm was executed and select the
next vault from the list of available vaults. If the last vault in the list
was the last vault used, then begin again with the first vault in the list.
.RE
.PP
Rvm will use the default value "round-robin" if no other setting is found.
Multiple uses of this command overwrite any previous value.
.RE
.B vault-locking
.I bool
.RS 4
Turn on or off vault locking to prevent subsequent instances of rvm from using
the same vault while this instance of rvm is still running.
.PP
If disabled, rvm will not attempt to lock a vault, and rvm will ignore any
locks created by other instances of rvm. (Note: This could be dangerous.)
.PP
If enabled, then rvm will lock the vault that it's using. Subsequent
instances of rvm run with vault-locking enabled will check to see if a vault
is locked when selecting a vault. The behavior of rvm under vault-locking is
as follows:
.RS 0
.TP 2
-
If a locked vault contains an archive with the same timestamp as the one being
used by rvm, then rvm will exit with an error.
.TP 2
-
Otherwise, if a vault is locked, then that vault is ignored during the vault
selection process, and the next best vault will be chosen instead.
.TP 2
-
Otherwise, if all vaults are locked, then rvm will exit with an error.
.RE
.PP
Valid values for
.I bool
are:
.br
.RS 2
"y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or "on"|"off"
.RE
.PP
.PP
This command is not required. Rvm will use "on" if no other setting is found.
Multiple uses of this command will overwrite any previous value within the
same context.
.RE
.SH DEFAULT CONTEXT CONFIGURATION COMMANDS
.PP
Configuration commands in a default context specify a default behavior to be
assumed for subsequent archive jobs. Multiple default contexts may be used to
set and reset default values. When multiple default contexts are used, all
values from the previous default context are cleared. When default settings
are reset, all subsequent jobs are assigned values from the new default
settings, while previous jobs are left unaffected.
.B archive-path
.IR keyword [/ keyword ...]
.RS 4
.PP
This command specifies how rvm should generate the archive job subdirectory
under which to store files and directories backed up from this archive job.
The complete path to an archive job's files follows from the root of the
filesystem, down the path of the selected vault, into the archive
subdirectory, and then down this user-specific path.
.PP
The value for this command consists of one or more options separated by a
directory slash character with no whitespaces allowed in between. Valid
values for
.I keyword
are:
.RS 0
.TP 2
.B jobname
The name assigned to this job.
.TP 2
.B groupname
The group name assigned to this job.
.TP 2
.B hostname
The remote machine's host name.
.TP 2
.B pathname
The path currently being archived. Each job may specify multiple paths,
therefore the value of archive-path must be calculated for each path listed in a
job.
.TP 2
.B permutation
A permutation of the path currently being archived. The permutation process
removes any preceding or trailing slashes, and changes all intermediate
slashes in the path name to dashes. An example permutation of the path
"/var/spool/cron/crontabs" would be "var-spool-cron-crontabs".
.TP 2
.I (literal)
A literal string may be used by surrounding the string with double quotes.
Directory slash characters are not allowed within the string, and double
quotes within the string must be escaped by preceding them with a '\\'
character. An example could be:
.RS 2
archive-path groupname/"Samba-Mounted-Hosts"/permutation
.RE
.RE
.PP
Rvm will use the default value "hostname/pathname" if no other setting is
found. Multiple uses of this command will overwrite any previous values
within the same context.
.PP
.BR NOTICE :
Great care should be taken when using this command, as incorrect settings
could result in a corrupted archive. Consider the following configuration:
.br
.RS 2
vault /export/vault1
.br
.br
archive-path groupname
.br
.br
.br
.br
groupname cartoon
.br
hostname ren
.br
path /var/spool/cron/crontabs
.br
.br
.br
groupname cartoon
.br
hostname stimpy
.br
path /var/spool/cron/crontabs
.br
.br
.RE
.PP
For the above configuration, files from the host ren:/var/spool/cron/crontabs
and files from the host stimpy:/var/spool/cron/crontabs are both placed in the
directory
.RI /export/vault1/ timestamp /cartoon/.
If both ren and stimpy contain crontabs for root, then root's crontab file
from stimpy will overwrite root's crontab file from ren, resulting in a
corrupted archive.
.RE
.B clear
.I keyword
.RS 4
.PP
Erase a previous default value for a specific configuration setting. This
override does not change default settings nor affect subsequent jobs, only the
current job is affected. Valid values for
.I keyword
are:
.RS 0
.TP 2
.B archive-path
Clear the default archive-path value.
.TP 2
.B exclude-from
Clear the list of files in the exclude list.
.TP 2
.B groupname
Clear the default groupname.
.TP 2
.B hostname
Clear the default hostname.
.TP 2
.B include-from
Clear the list of files in the include list.
.TP 2
.B jobname
Clear the job name.
.TP 2
.B paths
Clear the list of paths to be archived.
.TP 2
.B rsync-behavior
Clear the rsync behavior table.
.TP 2
.B rsync-options
Clear the list of options to pass to the rsync binary.
.TP 2
.B rsync-remote-user
Clear the username to pass to rsync to use when connecting to a remote
machine.
.TP 2
.B rsync-remote-port
Clear the port number to pass to rsync to use when connecting to a remote
machine.
.TP 2
.B rsync-remote-path
Clear the pathname of rsync on the remote machine.
.TP 2
.B rsync-remote-path
Clear the module name used when starting an rsync server on a remote machine
over a shell connection.
.RE
.PP
This command can be used to override default values either set by rvm or set
in the last default context.
.RE
.B exclude-from
.I path
.RS 4
.PP
Specify a file to pass to the rsync program using the --exclude-from command
line option. The rsync man page should be consulted on the syntax and usage
of this file. When rvm constructs the command line to pass to rsync, files
listed in the exclude-from list are passed before files listed in the
include-from list.
.PP
If
.I path
is a relative pathname, then it is assumed to be relative to the directory of
the configuration file in which this command appears. If
.I path
contains wildcard characters, then all matching files will be passed to rsync
in alphabetical order, each using a separate --exclude-from command line
option. If no matching files are found then rvm will exit with an error.
.PP
Multiple uses of this command will generate a list of pathnames within the
current context, all of which will be passed to rsync, each on a separate
--exclude-from command line option.
.RE
.B groupname
.I name
.RS 4
.PP
This configuration setting assigns a group name to a job. The value of
.I name
may be any string of valid filename characters except a directory slash.
.PP
This command is only required if the "groupname" keyword is used by
.BR archive-path .
.PP
Multiple uses of this command will overwrite any previous values within the
same context.
.RE
.B hostname
.I name
.RS 4
.PP
Assign a hostname to a job. If rsync must connect to a remote host for this
job, then it will connect to
.IR name .
.PP
This command is only required if:
.RS 2
.TP 2
-
This job either must connect to a remote host via RSH or SSH, or to an rsync
server, as specified by the
.B rsync-connection-type
command.
.TP 2
-
The "hostname" keyword is used by
.B archive-path
(which it is by default).
.RE
.PP
Multiple uses of this command will overwrite any previous value within the
same context.
.RE
.RE
.B include-from
.I path
.RS 4
.PP
Specify a file to pass to the rsync program using the --include-from command
line option. The rsync man page should be consulted on the syntax and usage
of this file. When rvm constructs the command line to pass to rsync, files
listed in the exclude-from list are passed before files listed in the
include-from list.
.PP
If
.I path
is a relative pathname, then it is assumed to be relative to the directory of
the configuration file in which this command appears. If
.I path
contains wildcard characters, then all matching files will be passed to rsync
in alphabetical order, each using a separate --include-from command line
option. If no matching files are found then rvm will exit with an error.
.PP
Multiple uses of this command will generate a list of pathnames within the
current context, all of which will be passed to rsync, each on a separate
--include-from command line option.
.RE
.B path
.I path
.RS 4
.PP
Assign a file or directory to be archived in a job.
.PP
This command is required to appear at least once, either in a job context or
in a previous default context.
.PP
This command has no default value. Multiple uses of this command will
append to a list of pathnames to be archived.
.PP
.BR NOTICE :
When archiving an entire directory tree, a trailing '/' must appear at the
end of
.IR path ,
and the -r option must be passed to rsync via the
.B rsync-options
command.
.RE
.B rsync-behavior
.I exit-code
=
.I action
.RS 4
.PP
If an rsync command returns a non-zero exit code, rvm may retry the command
up to the number of times specified by the
.B rsync-retry-count
configuration setting. Rvm may also be directed to modify it's command line
for rsync, or to take some specific action, depending on the exit code
returned. This command is used to specify how rvm should handle different
exit codes that may be returned by rsync. Valid values for
.I exit-code
may be an integer value between 0 and 255 inclusively. The asterisk
character, '*', may also be used as a wildcard to mean any exit code not
specified by any other
.B rsync-behavior
command. When the given exit code is encountered the associated action is
taken. Valid values for
.IR action
are:
.RS 0
.TP 2
.B ok
Ignore the error code returned by rsync and pretend rsync exited successfully.
.TP 2
.B fail
Give up immediately without attempting to retry the rsync command. (See
.BR rsync-retry-count .)
This is most useful for exit codes from which retrying will not yield better
results. For example, if the current job is configured to connect to a remote
host using SSH, and SSH is reporting that rsync cannot be found on the remote
host.
.TP 2
.B retry
Try the rsync command again exactly as before. Useful for overcoming
intermittent connectivity problems.
.TP 2
.B retry-without-hardlinks
Try the rsync command again, except this time disable the option that allows
rsync to create hardlinks for files that have not changed from previous
archives. (This is useful in situations where the older archive chosen as the
hardlink source contains corrupted file modes.)
.RE
.PP
A complete list of known rsync exit codes are, as found in errcode.h of the
rsync source tree:
.RS 2
.TP 4
0
Success
.TP 4
1
Syntax or usage error
.TP 4
2
Protocol incompatibility error
.TP 4
3
Errors selecting I/O files or directories
.TP 4
4
Requested action not supported
.TP 4
5
Error starting client-server protocol
.TP 4
10
Error in socket I/O
.TP 4
11
Error in file I/O
.TP 4
12
Error in rsync protocol data stream
.TP 4
13
Errors with program diagnostics
.TP 4
14
Error in IPC code
.TP 4
20
Status returned when sent SIGUSR1, SIGINT
.TP 4
21
Some error returned by waitpid()
.TP 4
22
Error allocating core memory buffers
.TP 4
23
Partial transfer
.TP 4
30
Timeout in data send/receive
.TP 4
124
The command executed by SSH exited with status 255
.TP 4
125
The command executed by SSH was killed by a signal
.TP 4
126
The command given to SSH cannot be run
.TP 4
127
The command given to SSH cannot be found
.RE
.PP
Multiple instances of this directive may be used to specify different
actions for different exit codes.
.PP
Rvm will use the following settings if no other settings are found:
.br
.RS 2
rsync-behavior * = retry
.br
rsync-behavior 0 = ok
.br
rsync-behavior 1 = fail
.br
rsync-behavior 2 = fail
.br
rsync-behavior 4 = fail
.br
rsync-behavior 23 = retry-without-hardlinks
.br
rsync-behavior 124 = fail
.br
rsync-behavior 125 = fail
.br
rsync-behavior 126 = fail
.br
rsync-behavior 127 = fail
.br
.RE
.PP
Multiple uses of this command will overwrite any previous value for the same
.I exit-code
within the same context.
.RE
.B rsync-connection-type
.I keyword
.RS 4
.PP
There are three ways of using rsync to update files. One method is to
use rsync in a local mode, where files and directories in one location on the
local host are updated by comparing them to files and directories in another
location also on the local host. This method may be used to archive files
mounted on the local machine, either from a physical device, an NFS mount, or
a Samba mount. The second method of using rsync is to connect to a remote
host via RSH or SSH. The third method is to use rsync to connect to an rsync
server. This command changes the way that rvm will use rsync when processing
an archive job.
.PP
Valid values for
.I keyword
are:
.RS 0
.TP 2
.B local
Use rsync in local mode to archive files from a source that is mounted on the
local machine.
.TP 2
.B remote
Use rsync to archive files from a remote host using RSH or SSH.
.TP 2
.B server
Use rsync to archive files from a remote host running an rsync server.
.RE
.PP
Rvm will use the default value of "remote" if no other setting is found.
.PP
Multiple uses of this command will overwrite any previous value within the
same context.
.RE
.B rsync-hardlink
.I bool
.RS 4
Turn on or off the ability to hardlink unchanged files from an older archive.
.PP
Valid values for
.I bool
are:
.br
.RS 2
"y"|"n", "yes"|"no", "t"|"f", "true"|"false", "1"|"0", or "on"|"off"
.RE
.PP
.PP
This command is not required. Rvm will use "on" if no other setting is found.
Multiple uses of this command will overwrite any previous value within the
same context.
.RE
.B rsync-options
.I options
.RS 4
Define the command line options that rvm is to pass to rsync. Command line
options listed here should not include --rsync-path, --hard-links,
--link-dest, --exclude-from, --include-from, or the local and remote host or
path. These options are added by rvm automatically when generating the
complete command line to pass to rsync.
.PP
Use of this command may result in a long line, depending on the number of
options that the archive administrator wishes to pass to rsync. For
greater readability and flexibility there is a second way of specifying options
to pass to rsync. See the
.B
block command below.
.PP
This command is not required. This command has no default value. Multiple
uses of this command append to any previously defined values, including any
value previously set by an
.B
block command.
.RE
.B ...
.RS 4
.PP
Options to pass to the rsync program may be specified by placing those options
inside an rsync-options block. An rsync-options block begins with the text
"" on a line by itself, and ends with the text
"" on another line by itself. Lines in between are considered
to be literal text to pass to the rsync program, with the following exceptions:
Blank lines and lines beginning with a '#' are ignored.
.PP
This form of passing options to rsync allows the archive administrator to break
what could be one long line into multiple lines for greater readability. (It
also allows easy addition or removal of options by simply commenting or
uncommenting a line.)
.PP
This command is not required. This command has no default value. Multiple
uses of this command overwrite any previous value within the same context,
including any value previously set by the
.B rsync-options
command.
.RE
.B rsync-remote-path
.I path
.RS 4
.PP
Specify the location of the rsync program on a remote host for a particular
job. This value is only necessary for remote connections via RSH or SSH. It
is not needed for local sources or connections to an rsync server. The value
for
.I path
should be an absolute pathname.
.PP
This command is not required. Rvm will use the same value specified for
.B rsync-local-path
if no other setting is found. Multiple uses of this command overwrite any
previous value within the same context.
.RE
.B rsync-remote-module
.I module-name
.RS 4
.PP
Specify the module name to use when connecting to an rsync server on a remote
host or over an SSH or RSH shell connection. When using this option, set
.B rsync-connection-type
to
.I server
and set the appropriate
.BI --rsh= shell-options
rsync command line option in the
.B rsync-options
command.
.PP For instance:
.RS 2
rsync-connection-type server
.br
rsync-options -av --rsh-"/usr/bin/ssh -l ssh-user"
.br
rsync-remote-module ftp
.RE
.PP
See the rsync and rsyncd.conf man pages for more information on modules.
.RE
.B rsync-remote-user
.I username
.RS 4
.PP
Define the user name to use when connecting to a remote host using either RSH,
SSH, or an rsync server.
.PP
This command is not required. This command has no default value. Multiple
uses of this command overwrite any previous value within the same context.
.RE
.B rsync-remote-port
.I integer
.RS 4
.PP
Define the port number to connect to when using rsync to connect to a remote
host via RSH, SSH, or an rsync server.
.PP
This command is not required. This command has no default value. Multiple
uses of this command overwrite any previous value within the same context.
.RE
.B rsync-retry-count
.I integer
.RS 4
.PP
The number of times rvm is to retry a failed rsync command. This setting is
used in conjunction with the
.B rsync-behavior
setting to determine how to handle a failed rsync command based on it's exit
code.
.PP
Rvm will use the default value of 3 if no other setting is found. Multiple
uses of this command will overwrite any previous value within the same
context.
.RE
.B rsync-timeout
.I seconds
.RS 4
.PP
Instruct the rvm child processing the current job to wait
.I
seconds
seconds before assuming that rsync has hung. If there is no I/O from rsync
after
.I seconds
seconds, rvm will kill rsync and try again (up to
.B rsync-retry-count
times).
.RE
.SH JOB CONTEXT CONFIGURATION COMMANDS
.PP
Configuration commands in a job context specify how to archive files and
directories from a single source, where a source is either a set of files and
directories mounted locally, a set of files and directories on a remote host,
or a set of files and directories hosted on an rsync server. Each job will
assume a set of default values, either from rvm or from the last default
block.
.PP
All of the commands listed above for a default context also apply to a job
context, with the addition of the following commands:
.B jobname
.I string
.RS 4
.PP
Assign a name to this job.
.PP
Use of this command is required only if the "jobname" keyword is used in the
.B archive-path
command.
.PP
Multiple uses of this command will overwrite any previous value.
.RE
.SH EXAMPLE CONFIGURATION FILE
.PP
An example configuration file might look like the following:
.RS 2
.nf
#
# RVM Manager Configuration
#
# - Commands outside of a block or
# a block are assumed to be of a global
# context.
#
#
# After all archive jobs have been completed,
# create relative symbolic links here.
#
# We will arrange to export this directory and
# all vault directories via NFS so that users
# can cd into the catalog and select an archive
# by it's timestamp, then peruse their files
# for what they're looking for.
#
link-catalog-dir /export/archive/catalog
#
# Create log files under this directory.
#
log-dir /var/log/rvm
#
# The location of the rsync program on this
# machine. This path must not contain
# wildcard characters, and should be an
# absolute path.
#
rsync-local-path /usr/local/bin/rsync
#
# How many archive jobs to process in parallel.
#
rsync-parallel 5
#
# How often to poll children for a change in I/O state.
#
io-poll-interval 5
#
# The resolution of timestamp we want.
#
timestamp-resolution day
#
# Where are the vaults? Notice that wildcard
# characters are allowed here:
#
vault /export/archive/raid/*/daily-archives
#
# How to select the next vault to use:
#
vault-selection-behavior round-robin
#
# What do we do when the vault gets too close
# to full capacity?
#
vault-overflow-behavior delete-until-free
#
# What percentage of blocks and inodes must be
# free before we declare the vault too full to
# continue archiving?
#
vault-overflow-blocks 10
vault-overflow-inodes 10
#
# Set up some default values to be assumed by
# all jobs read below:
#
archive-path hostname/pathname
exclude-from /etc/rvm/excludes/*
#
# Some default paths to back up on all hosts.
#
# Notice that wildcard characters are not
# allowed here.
#
# Files will be stored under:
# ////var/spool/...
# ////export/...
#
path /var/spool
path /export
#
# Define how rvm is to handle non-zero exit
# codes from rsync. The values below happen to
# be the same values that are assumed by rvm by
# default, but they're listed here for the sake
# of example:
#
rsync-behavior * = retry
rsync-behavior 1 = fail
rsync-behavior 2 = fail
rsync-behavior 4 = fail
rsync-behavior 23 = retry-without-hardlinks
rsync-behavior 124 = fail
rsync-behavior 125 = fail
rsync-behavior 126 = fail
rsync-behavior 127 = fail
rsync-connection-type remote
#
# What options should be pass to rsync?
#
-a
-e "/usr/bin/ssh -l root"
-v
--checksum
--delete
--delete-excluded
--force
--ignore-errors
--one-file-system
--stats
--progress
rsync-retry-count 5
#
# Archive Job 1: Back up alces
#
hostname alces
#
# In addition to /var/spool and /export, also
# back up the following:
#
# Files will be stored under:
# ////export/home/a/...
# ////export/home/b/...
# ////export/home/c/...
# ////export/home/d/...
# ////export/home/e/...
#
path /export/home/a
path /export/home/b
path /export/home/c
path /export/home/d
path /export/home/e
#
# Archive Job 2: Back up fragaria
#
hostname fragaria
path /export/home/a
path /export/home/b
#
# Set some new defaults for samba-mounted
# directories under /k-boxes.
#
#
# The following must be re-defined because
# each default block completely clears all
# values defined in the last default block:
#
exclude-from /etc/rvm/excludes/*
#
# (Good thing these are actually the default
# settings for rsync-behavior. It would be a
# pain to have to enter it over and over
# again... But then, you could always place
# these commands in a separate file and
# "include" them.)
#
rsync-behavior * = retry
rsync-behavior 1 = fail
rsync-behavior 2 = fail
rsync-behavior 4 = fail
rsync-behavior 23 = retry-without-hardlinks
rsync-behavior 124 = fail
rsync-behavior 125 = fail
rsync-behavior 126 = fail
rsync-behavior 127 = fail
rsync-retry-count 5
#
# These settings do change, however:
#
archive-path group/name/"files"
groupname k-boxes
rsync-connection-type local
-a
-v
--checksum
--delete
--delete-excluded
--force
--ignore-errors
--one-file-system
--stats
--progress
#
# Back up files from David's machine
#
# Files will be stored under:
# /////files/...
# ...or, to be more specific:
# ///k-boxes/david/files/...
jobname david
path /k-boxes/david/files
#
# Back up files from Joe's machine
#
# Files will be stored under:
# /////files/...
# ...or, to be more specific:
# ///k-boxes/joe/files/...
jobname joe
path /k-boxes/joe/files
#
# The End
#
.RE
.SH CONFIGURATION FILE SYNTAX
.PP
.SS Syntax Notation:
.PP
Everyone seems to have their own form of EBNF notation to express a language
syntax, therefore I define my own here:
.RS 0
.TP 2
-
A syntactic part is written as an identifier surrounded by '<' and '>'.
.TP 2
-
A syntactic assignment is written as a syntactic part, followed by the symbol
"::=", followed by one or more syntactic parts that may be joined in various
ways. For a simple example:
.br
.RS 2
.RS 4
::=
.RE
.RE
.TP 2
-
Literal text is specified by wrapping the text in double quotes. If the
literal text contains special characters such as tab, newline, or the double
quote character, they will appear using a C-style escape format using the '\\'
character. Literal characters are wrapped in single quotes and use the same
C-style escape format for special characters and the single quote character
itself. For example:
.br
.RS 2
.RS 4
::= 'a'
.br
::= "Hello World"
.br
::= "Tell him I said, \\"Go away.\\""
.br
::= '\\n'
.RE
.RE
.TP 2
-
A range of literal characters may be specified separating two literal
characters with a '-' character, with no whitespace in between. For example:
.br
.RS 2
.RS 4
::= '0'-'9'
.RE
.RE
.TP 2
-
Syntactic parts may be concatenated together in an unordered form by
separating two or more syntactic parts with whitespace. For example:
.br
.RS 2
The following:
.RS 4
::=
.RE
will match either or .
.RE
.TP 2
-
Syntactic parts may be concatenated together in a specific order by separating
two or more syntactic parts with a '+' character. Whitespace is allowed
between syntactic parts, but not the newline or carriage return characters.
For example:
.br
.RS 2
.RS 4
::= +
.RE
.RE
.TP 2
-
A choice between two or more syntactic parts may be defined by separating the
choices with the '|' character. For example:
.br
.RS 2
.RS 4
::= |
.RE
.RE
.TP 2
-
Syntactic parts may contain subparts that are treated as a single entity by
surrounding syntactic parts with '(' and ')'. For example:
.br
The following:
.RS 2
.RS 4
::= ( )
.RE
is equivalent to:
.RS 4
::=
.br
::=
.RE
.RE
.TP 2
-
Optional syntactic parts are written by enclosing the syntactic part in '['
and ']'. For example:
.RS 2
.RS 4
::= [] [] []
.br
::= "a" [ "foo" | "bar" ] "b"
.RE
.RE
.TP 2
-
Syntactic parts may be concatenated together with no whitespace allowed
between parts by separating the syntactic parts with the "<+" symbol. For
example:
.br
.RS 2
A string with no whitespaces allowed:
.RS 4
::= 'a'-'z'
.br
::= | <+
.RE
.RE
.TP 2
-
Syntactic parts may be replicated using the format
.IR min * max ,
where
.I min
and
.I max
are optional. For example:
.br
.RS 2
.TP 3
a)
A number consisting of 1 to three digits may be written as:
.RS 4
::= 1*3
.RE
.TP 3
b)
A number consisting of at least one digit:
.RS 4
::= 1*
.RE
.TP 3
c)
A double-quotes string consisting of zero to three characters:
.RS 4
::= 'a'-'z' | 'A' - 'Z'
.br
::= '"' <+ *3 <+ '"'
.RE
.RE
.TP 2
-
A specific number of replicates of a syntactic part may be specified using a
variant of
.IR min * max
written as
.IR num *.
For example:
.br
.RS 2
The following:
.RS 4
<3-digit-number> ::= 3*3
.RE
is the same as:
.RS 4
<3-digit-number> ::= 3
.RE
.RE
.RE
.PP
.SS RVM Configuration Syntax
.PP
.RS 0
.TP 8
::=
.br
+ 1*(* *)
.TP 8
::=
"jobname"
.br
| "groupname"
.br
| "hostname"
.br
| "path"
.br
| "permutation"
.br
| ( "\\"" <+ <+ "\\"" )
.TP 8
::=
.br
<+ [ "/" <+ ]
.TP 8
::=
"archive-path"
.br
+ ( "empty" | ) + '\\n'
.TP 8
::=
"y" | "n"
.br
| "yes" | "no"
.br
| "t" | "f"
.br
| "true" | "false"
.br
| "1" | "0"
.br
| "on" | "off"
.TP 8
::=
"archive-path\\n"
.br
| "exclude-from\\n"
.br
| "groupname\\n"
.br
| "hostname\\n"
.br
| "include-from\\n"
.br
| "jobname\\n"
.br
| "paths\\n"
.br
| "rsync-behavior\\n"
.br
| "rsync-options\\n"
.br
| "rsync-remote-user\\n"
.br
| "rsync-remote-path\\n"
.br
| "rsync-remote-module\\n"
.TP 8
::=
*[]
.TP 8
::=
"\\n"
.br
+
.br
+ "\\n"
.TP 8
::=
"exclude-from" + + '\\n'
.TP 8
::=
.TP 8
::=
[]
.br
[]
.br
*[]
.br
[]
.br
[]
.br
*[]
.br
1*
.br
*[]
.br
[]
.br
[]
.br
[]
.br
[]
.br
[]
.br
[]
.br
[]
.br
[]
.TP 8
::=
0*1
.br
0*1
.br
0*1
.br
0*1
.br
0*1
.br
0*1
.br
*
.br
1
.br
[]
.br
[]
.br
[]
.br
1*
.br
[]
.br
[]
.br
[]
.br
[]
.TP 8
::=
"groupname" + + '\\n'
.TP 8
::=
"hostname" + + '\\n'
.TP 8
::=
"include-from" + + '\\n'
.TP 8
::=
"include-job" + + '\\n'
.TP 8
::=
.TP 8
::=
.TP 8
::=
.TP 8
::=
"\\n" + + "\\n"
.TP 8
::=
[] + + 1*
.TP 8
::=
"name" + + '\\n'
.TP 8
::=
"link-catalog-dir" + + '\\n'
.TP 8
::=
"log-dir" + + '\\n'
.TP 8
::=
"delete-old-log-files" + + '\\n'
.TP 8
::=
"delete-old-report-files" + + '\\n'
.TP 8
::=
"logging-level" + + '\\n'
.TP 8
::=
"error-logging-level" + + '\\n'
.TP 8
::=
"manager"
.br
| "child"
.br
| "rsync"
.TP 8
::=
"path" + + '\\n'
.TP 8
::=
+ [ "/" + ]
.TP 8
::=
"rsync-behavior"
.br
+ ( "*" | )
.br
+ "="
.br
+ ( "ok" | "retry" | "fail" | "retry-without-hardlinks" )
.br
+ '\\n'
.TP 8
::=
"rsync-connection-type"
.br
+ ( "local" | "remote" | "server" )
.br
+ '\\n'
.TP 8
::=
"rsync-hardlink" + + '\\n'
.TP 8
::=
"rsync-local-path" + + '\\n'
.TP 8
::=
( "rsync-options" + + '\\n' )
.br
| ( "\\n"
.br
+
.br
+ "\\n"
.br
)
.TP 8
::=
"rsync-parallel" + + '\\n'
.TP 8
::=
"io-poll-interval" + + '\\n'
.TP 8
::=
"rsync-remote-path" + + '\\n'
.TP 8
::=
"rsync-remote-module" + + '\\n'
.TP 8
::=
"rsync-remote-user" + + '\\n'
.TP 8
::=
"rsync-remote-port" + + '\\n'
.TP 8
::=
"rsync-retry-count" + + '\\n'
.TP 8
::=
"rsync-timeout" + + '\\n'
.TP 8
::=
"\\""
.br
+
.br
+ "\\""
.TP 8
::=
"timestamp-resolution"
.br
+ ( "year"
.br
| "month"
.br
| "day"
.br
| "hour"
.br
| "minute"
.br
| "second"
.br
)
.br
+ '\\n'
.TP 8
::=
"vault" + + '\\n'
.TP 8
::=
"vault-overflow-behavior"
+ ( "quit"
.br
| "delete-oldest"
.br
| "delete-until-free"
.br
)
.br
+ '\\n'
.TP 8
::=
"vault-overflow-blocks" + + '\\n'
.TP 8
::=
"vault-overflow-inodes" + + '\\n'
.TP 8
::=
"vault-selection-behavior"
.br
+ ( "max-free" | "round-robin" )
.br
+ '\\n'
.TP 8
::=
.TP 8
::=
.br
<+ [ "/" <+ ]
.RE
.SH FILES
.TP 8
@CONFIGFILE@
The default configuration file. Rvm will search for this configuration file
first unless the
.B --no-default-config
command line option is used.
.TP 8
@LOGDIR@
The default log directory. Rvm will create log files under this directory.
This may be modified with the
.B log-dir
configuration command.
.TP 8
.I Vaults
.br
One or more directories must be specified in the configuration file(s) as a
vault under which to create archives. See the
.B vault
configuration command for more information.
.TP 8
.I link-catalog-dir
.br
An optional directory under which rvm will create relative links to all
archives on all vaults. See the
.B link-catalog-dir
configuration command for more information.
.SH SEE ALSO
rsync(1), rsyncd.conf(5), SSH(1)
.SH BUGS
.PP
This version of rvm is still in beta testing. The interfaces and
infrastructure is considered to be completed, although additions and
alterations may be made, and bugs may yet to be found and resolved.
.PP
Bug reports and feature requests may be sent to the author. Due to the
author's lack of time, the reports that will be given the most attention are
the ones accompanied by a patch file.
.PP
The author welcomes all patch submissions.
.SH DISCLAIMER
Rvm is given to the public as-is with no guarantee of it's functionality,
either expressed or implied, and the author takes no responsibility for
damages that may result from it's use or misuse.
.SH AUTHOR
.PP
Rvm was written by Michael Peek. See the RVM home page for author contact
information.
.PP
Occasionally the author fancies that he knows what he is doing. It is at
these times more than at any other that his coworkers should cower in fear.
.SH DISTRIBUTION
.PP
The latest version of rvm may always be found at:
.RS 2
http://rvm.sourceforge.net
.br
http://freshmeat.net/projects/rvm
.RE