Provided by: dar_2.4.8-1ubuntu1_amd64 

NAME
dar - create, test, list, extract, compare, merge, isolate dar archives
SYNOPSIS
dar [-c | -x | -l | -d | -t | -C | -+] [<path>/]<basename> [<options>] [<user targets>]
dar -h
dar -V
DESCRIPTION
dar is a full featured backup tool, aimed for disks (floppy, CD-R(W), DVD-R(W), zip, jazz, etc.) and
since release 2.4.0 adapted to tapes.
dar can store a backup in several files (called "slices" in the following) of a given size, eventually
pausing or running a user command/script before starting the next slice. This can allow for example, the
burning of the last generated slice on a CD-R, or changing a floppy disk before continuing on the next
one. Like its grand-brother, the great "tar" command, dar may also use compression, at the difference
that compression is used inside the archive to be able to have compressed slices of the defined size. But
the most important feature of dar is its ability to make differential backups. In other words, backups
that contain only new files or files that have changed from a backup of reference. Moreover with
differential backup, dar also stores files that have been deleted since the backup of reference. Thus,
when restoring, first a full backup, then additional differential backups, at each restoration you get
the exact state of the filesystem at the time of the backup. And of course, the reference backup may be a
full or a differential backup itself.
dar is the first backup program I know that can also remove files during restoration! By the way, in this
document, "archive" and "backup" mean the same thing, and are used interchangeably.
Unlike the tar command, dar has not to read a whole archive to know its contents: dar archive contains a
table of contents (aka "catalogue") located at the end of the archive, so it seeks into the archive forth
and backward to extract only the required files, which is much faster than what tar is used to do. Since
release 2.4.0 dar can also use a sequential reading mode, in which dar acts like tar, just reading byte
by byte the whole archive to know its contents and eventually extracting file at each step. In other
words, the archive contents is located at both locations, all along the archive used for tar-like
behavior suitable for sequential access media (tapes) and at the end for faster access, suitable for
random access media (disks). However note that tar archive and dar archive are not compatible. Dar does
not known anything about tar archive structure, neither tar known anything about dar archive structure.
So keep using tar if you are used to it or find no advantage in using dar. Note also that the sequential
reading mode let you extract data from a partially written archive (those that failed to complete due to
a lack of disk space for example).
Since release 2.4.0, a "relax" reading mode is available that let dar to either ignore some incoherence
in archive structure, or use internal redundant information to overcome what seems to be data corruption,
and in last resort ask the user on what to do when some archive structure information is missing. This
relax mode can be used with both sequential and direct access read modes. Note however that you should
rather use Parchive to protect your data rather than just relying on the "relax" mode, which has to be
seen as a the last chance solution, as this mode cannot repair the archive, but may only lead to partial
archive extraction upon archive corruption. For immediate Parchive integration with dar, use the "par2"
user target defined in /etc/darrc.
A few words about slice before going deeper in detail: a slice is just a simple file which name is
composed of a "basename" followed by a dot, then a number, again a dot and the extension (dar) to form
the filename of that slice. On the command line you will never have to give the full file name of a
slice, just the basename. The number between the dots is the slice number, which starts from 1 and may be
arbitrary large (as large as your system can support the corresponding filename).
Let's take an example:
considering the basename "joe", dar will make one or several slices during backup
process (depending on your choice). The filenames of these slices will be: joe.1.dar
joe.2.dar ... joe.10.dar ... etc. If you want to extract, list, or use this backup
as reference, you will only have to use the basename, which is the string "joe" in
this example.
OPTIONS
COMMANDS:
Only six commands define what action will be done by dar: Archive creation, archive extraction, archive
listing, archive testing, archive comparison with filesystem, catalogue isolation and archive merging.
These commands are described here below. Once defined, a large set of options can be used to modify the
way the command is performed. These options are described just after the commands chapter. Last, optional
user targets may follow options, their use is described at the end of this document.
Important note: Not all system actually support long options (Solaris, FreeBSD, ...). For example
--create will not be available on these systems, and you will have to use -c instead. In the same way,
not all system do support optional arguments (FreeBSD without GNU getopt for example), you then need to
explicitly give the argument, for example in place of "-z" you will need to give "-z 9", see "EXPLICIT
OPTIONAL ARGUMENTS" paragraph near the end of this document for details on that point.
-c, --create [<path>/]<basename>
creates a backup with the name based on <basename>. All the slices will be created in
the directory <path> if specified, else in the current directory. If the destination
filesystem is too small to contain all the slices of the backup, the -p option
(pausing before starting new slices) might be of interest. Else, in the case the
filesystem is full, dar will suspend the operation, asking for the user to make free
space, then continue its operation. To make free space, the only thing you cannot do
is to touch the slice being written. If the filename is "-" *and* no slicing is asked
for (no -s option) the archive is produced on the standard output allowing the user
to send the resulting archive through a pipe (or into a tape device).
-x, --extract [<path>/]<basename>
extracts files from the given backup. Slices are expected to be in the current
directory or in the directory given by <path>. It is also possible to use symbolic
links to gather slices that are not in the same directory. Path may also point to a
removable device (floppy, CD, etc.), in this case, to be able to mount/unmount the
device, you must not launch dar from that directory. In other words, the current
directory must not be that directory (see tutorial for details). The basename may be
set to "-", in direct access mode (the default an historical mode), you will need
dar_slave to work with dar (see -i and -o options, as well as dar_slave man page).
However in sequential read mode (--sequential-mode is used on command-line), dar will
read the archive from standard input (see also -i option).
-l, --list [<path>/]<basename>
lists the contents of the given backup. dar will only require the last slice of the
archive in direct access mode. If however sequential mode is used, dar will read the
overall archive, from the first slice to the last one. "-" can be used as basename,
the behavior is the same as with -x option (read just above).
-t, --test [<path>/]<basename>
checks the backup integrity. Even without compression, dar is able to detect at least
one error per file in the archive, thanks to a variable length CRC recorded per file
in the catalogue. Same remark here, "-" may be used as basename (see -x option above
for details).
-d, --diff [<path>/]<basename>
compares saved files in the backup with those in the filesystem. <basename> may also
be "-" (see -x option above for details).
-C, --isolate [<path>/]<basename>
isolate a catalogue from its archive. The argument is the basename of the file that
will contain the catalogue. The -A option is mandatory here to give the name of the
archive to extract the catalogue from. Slicing is available (-s -S -p -b etc.). If
the filename is "-" *and* no slice is asked (no -s option) the isolated catalogue is
produced on the standard output, allowing the user to send the resulting archive
through a pipe. Note that there is no difference in concept between an isolated
catalogue and an archive. Thus you can do all operation on an isolated catalogue, in
particular take it as reference for a differential archive. An archive produced with
-C is almost equivalent to differential archive done right after a full backup, (no
data is in it). Since release 2.4.0 you can use an isolated catalogue to rescue the
internal catalogue when it is corrupted (see -A option).
-+, --merge [<path>/]<basename>
create a subset archive from one or two existing archives (the resulting archive name
is the argument to this command). The dar file selection mechanism (see below) let
the user decide which files will be present in the resulting archive and which one
will be ignored. This option thus let the user merge two archives in a single one
(with a filtering mechanism that accepts all files), as well as this option let the
user create a smaller archive which data is taken from one or two archives of
reference. Note that at no time the contents of the archives of reference is
extracted to real files and directories: this is an archive to archive transfer, thus
you may lack support for Extended Attribute while you will be able to fully
manipulate files with their Extended Attributes from one archive to the resulting
one. If the basename is "-" *and* no slice is asked (no -s option), the archive is
produced on standard output allowing the user to send the resulting archive through a
pipe. The first mandatory archive of reference if provided thanks to the -A option,
while the second "auxiliary" (and optional) archive of reference is provided thanks
to the -@ option. When a tie contention occurs (same file names from both archive
have to be merged), the overwriting policy (-/ option) is used to define the one to
keep in the resulting archive. By default, archive data selected for merging is
uncompressed, and re-compressed. Thus the merging operation can be used to change
compression algorithm of given archive as well as change its encryption. But, for
better performance it is also possible thanks to the -ak option (see below the -ak
option for usage restrictions) to merge files keeping them compressed, thus no
decompression/re-compression is performed at all, which make the operation faster.
Last it is not possible to merge two isolated catalogues.
-h, --help displays help usage.
-V, --version displays version information.
GENERAL OPTIONS:
-v, --verbose[=s[kipped]]
verbose output. --verbose and --verbose=skipped are independent. --verbose=skipped
displays the files being excluded by filters, while --verbose display actions under
process. You can still use dar's exit status to known which way the operation ended
(seen EXIT CODES at the end of this document).
-q, --quiet Suppress the final statistics report. If no verbose output is asked beside this
option, nothing is displayed if the operation succeeds.
-b, --beep makes the terminal ring when user action is required (like for example the creation
of a new slice using the -p option)
-n, --no-overwrite do not allow overwriting of any slice.
If an overwriting policy is specified (see -/ option) -n option do only apply to
slices overwriting, the overwriting of files during restoration or merging is handled
by the overwriting policy. -n option stay valid to forbid slice overwriting (merging,
saving, isolation).
-w, --no-warn Do not warn before overwriting (applied for slice overwriting and for overwriting
decision make by the overwriting policy). By default overwriting is allowed but a
warning is issued before proceeding. This option may receive 'a' as argument (see
just below):
-wa, --no-warn=all This implies the -w option, and means that over avoiding warning for file
overwriting, DAR also avoid signaling a file about to be removed when its type is not
the expected one. File are removed when they have been recorded as deleted since the
archive of reference. At restoration of the differential archive, if a file of the
given name exists, it is remove, but if the type does not match the file that was
present at the time of the archive of reference (directory, plain file, fifo, socket,
char or block device, etc.), a warning is normally issued to prevent the accidental
removal of data that was not saved in the backup of reference. (See also -k option)
-R, --fs-root <path>
The path points to the directory tree containing all the files that will be enrolled
in the operation (backup, restoration or comparison). By default the current
directory is used. All other paths used in -P or -g options on the command line are
and must be relative to this path (or to current directory if -R is not present).
Note that -R is useless for testing (-t option) isolation (-C option) and merging (-+
option)
-X, --exclude <mask>
The mask is a string with wildcards (like * and ? see glob(7) for details) which is
applied to filenames which are not directories. If a given file matches the mask, it
is excluded from the operation. By default (no -X on the command line), no file is
excluded from the operation. -X may be present several times on the command line, in
that case a file will not be considered for the given operation if it matches at
least one -X mask. See also -ar and -am options.
-I, --include <mask>
The mask is applied to filenames which are not directories (see glob(7) for details
on wildcard characters). If a given file matches the mask and does not match any mask
given with -X, the file is selected for the operation. By default (no -I and no -X on
the command line), all files are included for the operation. -I may be present
several times on the command line, in that case all file that match one of the -I
mask will be considered for the given operation, if they do not also match one of the
-X mask. See also -ar and -am options.
-P, --prune <path> Do not consider file or directory sub-tree given by the path. -P may be present
several time on the command line. The difference with -X is that the mask is not
applied only to the filename, but also include the path. Moreover it applies also to
directories (-X does not). By default (no -P on the command-line), no sub-tree or
file is excluded from the operation, and all the directory tree (as indicated by -R
option) is considered. Note that <path> may contains wildcards like * or ? see
glob(7) man page for more information.
-g, --go-into <path>
Files or directory to only take in account, as opposed to -P. -g may be present
several time on command-line. Same thing here, the difference with -I is that the
mask is applied to the path+filename and also concerns directories. By default all
files under the -R directory are considered. Else, if one or more -g option is given,
just those are selected (if they do not match any -P option). All paths given this
way must be relative to the -R directory. This is equivalent as giving <path> out of
any option. Warning, -g option cannot receive wildcards, these would not be
interpreted.
-[, --include-from-file <listing_file>
Files listed in the listing file are included for the operation. No wildcard
expression is interpreted in the listing file, the null character is not allowed and
the carriage return is used to separate file names (one file name per line). Note
that this option applies to any files and directory exactly as -g does, with an
important difference however: -g option only uses relative paths to the root
directory (the directory given with the -R option), while -[ can use absolute path as
well. Another difference is when the argument is a directory -g will include all the
subdirectories under that directory, while when the same entry is found in a listing
file given to -[ only that directory will be included, no subdirectory or subfile
would be enrolled in the backup, with -[ you need to list the exact set of file you
want to backup. You can thus generate a listing file with the 'find / -print >
somefile' command and give 'somefile' as argument to -[ option. Note that however,
dar will never save files out of the -R given root directory tree, even if some are
listed in the 'somefile' file.
-], --exclude-from-file <listing_file>
Files listed in the listing file are excluded from the operation. If a directory is
listed in the file all its contents is excluded (unless using ordered method and
another mask includes some of its subfiles or subdirectories). This option is the
opposite of -[ and acts the same was as -P option does (in particular it is compared
to the whole path+filename and applies to files and directories). As for -[ option,
-] listing file can contain absolute paths, but wildcards are not expanded, neither.
File selection in brief:
As seen above, -I -X -P, -g, -[ and -] options are used to select the files to operate on. -I and -X only
use the name of files and do not apply to directories, while -P, -g -[ and -] use the filename *and* the
path, they *do* apply to directories.
since version 2.2.0 two modes of interpretation of these options exist. The normal original method and
the ordered method:
the normal method is the default and is the one that has been presented above:
A directory is elected for operation if no -P or -] option excludes it. If at least one -g or
-[ option is given one command line, one -g option must cover it, else it is not elected for
operation. If a directory is not selected, no recursion is done in it (the directory is
pruned). For non directories files, the same is true (P, -g, -[ and -] do apply) and a second
test must also be satisfied: no -X option must exclude the filename, and if at least one -I
option is given, one must match the given filename (using or not wildcards).
the ordered method (when -am option is given on command-line):
The ordered method takes care of the order of presence between -X and -I in one hand and of
-P, -g, -[ and -] in the other hand (note that it has also the same action concerning EA
selection when using -u and -U options, but that's no more file selection). In the ordered
method the last argument take precedence over all the previous ones, let's take an example:
-X "*.mp?" -I "*.mp3" -I "toto*"
Here dar will include all files except file of name "*.mp?" (those ending with "mpX"
where X is any character), but it will however include those ending with ".mp3". It will
also include files which name begin by "toto" whatever they end with. This way,
"toto.mp2" will be saved (while it matches "*.mp?" it also begins by "toto") as well as
"toto.txt" as well as "joe.mp3" (while it matches "*.mp?" it also ends by "mp3"). But
will not be saved "joe.mp2" (because it does not begin by "toto", nor ends by "mp3", and
match "*.mp?" mask). As we see the last option (-I or -X) overcomes the previous one.
-P, -g, -[ and -] act together the same but as seen above they do not only act on
filename, but on the whole path+filename. Note that (-g, -P, -[, -]) and (-X , -I) are
independent concerning their relative order. You can mix -X -I -g -P -] -[ in any order,
what will be important is the relative positions of -X options compared to -I options,
and the relative positions of -g -[ -] and -P options between them.
In logical terms, if <prev_mask> is the mask generated by all previous mask on the command line,
-I <mask> generates the new following mask: <prev_mask> or <mask> . While -X <mask> generates the
new following mask: <prev_mask> and not <mask>. This is recursive each time you add a -I or -X
option. Things work the same with -P, -g, -[ and -] options.
This ends the file selection explication let's continue with other options.
-u, --exclude-ea <mask>
Do not consider the Extended Attributes (EA) that are matched by the given mask. By
default, no EA are excluded, if the support for EA has been activated at compilation
time. This option can be used multiple times.
-U, --include-ea <mask>
Do only consider the EA that match the given mask. By default, all EA are included if
no -u or -U option is present and if the support for EA has been activated at
compilation time. This option can be used multiple times. See also the -am and -ae
options, they also apply to -U and -u options and read below the Note concerning EA.
Note concerning Extended Attributes (EA)
Support for EA must be activated at compilation time (the configure script tries to do so if your
system has all the required support for that). Thus you can get two binaries of dar (of the same
version), one supporting EA and another which does not (dar -V to see whether EA support is
activated). The archives they produce are the same and can be read by each other. The only
difference is that the binary without EA support is not able to save or restore EAs, but is still
able to test them and list their presence.
In the following when we will speak about Extended Attribute (EA) or EA entry, we will only
consider a particular Extended Attribute key and its value. By opposition, the set of all EA
associated to a file will be designated by "EA set".
Since version 2.3.x the name of EA entries include the namespace for dar be able to consider any
type of EA (not only "system" and "user" as previously). Thus the two previous options -u and -U
have changed and now take an argument which is a mask applied to EA entry names written in the
following form namespace.name where "namespace" is for example "user". Note that the mask may or
may not include the dot (.) and may match arbitrary part of the EA namespace+name, just remind
that masks will be applied to the "namespace.name" global string.
the -am flag here also enables the ordered method, for EA selection too. The ordered versus normal
method have been explained above in the file selection note, with some examples using -X and -I.
Here this is the same with -U and -u, (just replace -X by -u and -I by -U and remember that the
corresponding mask will apply to Extended Attribute selection in place of file selection).
Another point, independently of the -am option the -ae option can be used at restoration time
only. If set, when a file is about to be overwritten, all EA will be first erased before restoring
those selected for restoration in the archive (according to the -U and -u options given). If not
set, the EA of the existing file will be overwritten, those extra EA that are not in the archive
or are not selected for restoration in regard to the -u and -U options will be preserved. If you
have not used any -u/-U option at backup time and want to restore from a set of full/differential
backups the EA exactly as they were, you have to use -ae for dar removes the EA before overwriting
their set of EA as stored in the archive. Without -ae option dar will simply add EA to existing
ones, thus get a different set of EA for a give file than those recorded at the time of the
backup.
Last point the -acase and -an options alters the case sensitivity of the -U and -u masks that
follow them on the command-line/included files as they do for -I, -X, -P, -g, -[ and -] as well.
Very last point ;-), if -ac option is used during backup dar set back the atime after having read
each file (see -aa/-ac options), this has as side effect to modify the ctime date of each file.
But ctime change is used by dar to detect EA changes. In brief, the next time you backup a file
that had to be read (thus which contents changed), its EA will be saved even if they had not
changed. To avoid this side effect, don't use the -ac option if not necessary.
This ends the Extended Attribute selection explication let's continue with other options.
-i, --input <path> is available when reading from pipe (basename is "-" for -x, -l, -t, -d or for -A
when -c, -C or -+ is used). When reading from pipe, standard input is used, but with
this option, the file <path> (usually a named pipe) is used instead. This option is
to receive output from dar_slave program (see doc/usage_notes.html for examples of
use). Note that when --sequential-read is used, dar uses a single pipe and does no
more rely on dar_slave, -i option can be used to tell dar which named pipe to read
the archive from, instead of the standard input.
-o, --output <path> is available when reading from pipe (basename is "-" for -x, -l, -t, -d or for -A
when -c, -C or -+ is used). When reading from pipe, standard output is used to send
request to dar_slave, but with this option, the file <path> (usually a named pipe) is
used instead. When standard output is used, all messages goes to standard error (not
only interactive messages). See doc/usage_notes.html for examples of use.
-O, --comparison-field[=<flag>]
When comparing with the archive of reference (-c -A) during a differential backup,
when extracting (-x) or when comparing (-d) do only consider certain fields. The
available flags are:
ignore-owner all fields are considered except ownership. This is useful when dar
is used by a non-privileged user. It will not consider a file has
changed just because of a uid or gid mismatch and at restoration dar
will not even try to set the file ownership.
mtime only inode type and last modification date is considered as well as
inode specific attributes like file size for plain files. Ownership is
ignored, permission is ignored. During comparison, difference on
ownership or permission is ignored and at restoration time dar will
not try to set the inode permission and ownership.
inode-type Only the inode type is considered. Ownership, permission and dates are
ignored. Inode specific attributes are still considered (like file
size for plain files). Thus comparison will ignore differences for
ownership, permission, and dates and at restoration dar will not try
to set the ownership, permission and dates.
When no flag is provided to this option, -O option acts as if the "ignore-owner" flag was set, which is
the behavior in older releases (< 2.3.0). Note also that for backward compatibility, --ignore-owner
option still exists and since version 2.3.0 is just an alias to the --comparison-field=ignore-owner
option. Of course if this option is not used, all fields are used for comparison or restoration.
-H[num], --hour[=num]
if -H is used, two dates are considered equal if they differ from a integer number of
hours, and that number is less than or equal to [num]. If not specified, num defaults
to 1. This is used when making a differential backup, to compare last_modification
date of inodes, at restoration or merging time if overwriting policy is based on
file's data or EA being more recent and last, when comparing an archive with a
filesystem (-d option). This is to workaround some filesystems (like Samba
filesystem) that seems to change the dates of files after having gone from or to
daylight saving time (winter/summer time). Note that -H option has influence on the
overwriting policy (see -/ option) only if it is found before on command-line or in
an included file (using -B option).
-E, --execute <string>
the string is a user command-line to be launched between slices. For reading (thus
using -t, -d, -l or -x options), the command is executed before the slice is read or
even asked, for writing instead (thus using -c, -C or -+ option), the command is
executed once the slice has been completed. Some substitution string can be used in
the string:
%% will be replaced by %
%p will be replaced by the slice path
%b will be replaced by the slice basename
%n will be replaced by the slice number (to be read or just written). For
reading, dar often needs the last slice, but initially it does not know its
number. If it cannot be found in the current directory, the user command-
line is then called with %n equal to 0. This is a convenient way to inform
the user command to provide the last slice. If after it is still not
present, dar asks the user (as usually) with a message on the terminal.
Once the last slice is found, the user command-line is called a second
time, with %n equal to the value of the last slice number.
%N is the slice number with the leading zero as defined by --min-digits
option. If this option is not used, %N is equivalent to %n.
%e will be replaced by the slice extension (always substituted by "dar")
%c will be replaced by the context. Actually three possible values exist:
"init", "operation" and "last_slice". When reading an archive for (testing,
extraction, diff, listing, or while reading the archive of reference, see
below the -F option), the "init" context takes place from the beginning up
to the time the catalogue is retrieved. On a multiple slice archive this
correspond to the first slice request and to the last slice requests.
After, that point comes the "operation" context. While creating an
archive, the context is always "operation" except when the last slice has
been created, in which case the context is set to "last_slice".
Several -E option can be given, given commands will then be called in the order they appear on the
command line, and included files. See also the environment variable DAR_DUC_PATH in the ENVIRONMENT
section at the end of this document.
-F, --ref-execute <string>
same as -E but is applied between slices of the reference archive (-A option).
--execute-ref is a synonym.
-K, --key [[<algo>]:]<string>
encrypt/decrypt the archive using the <algo> cipher with the <string> as pass phrase.
An encrypted archive can only be read if the same pass phrase is given. Available
ciphers are "blowfish" (alias "bf"), "aes", "twofish", "serpent" and "camellia" for
strong encryption and "scrambling" (alias "scram") for a very weak encryption. By
default if no <algo> or no ':' is given, the blowfish cipher is assumed. If your
password contains a column ':' you need to specify the cipher to use (or at least use
the initial ':' which is equivalent to 'bf:'). If the <string> is empty the pass
phrase will be asked at execution time. Thus, the smallest argument that -K can
receive is ':' which means blowfish cipher with the pass phrase asked at execution
time.
The old "blowfish_weak" implementation has been removed and is no more supported.
Note that giving the passphrase as argument to -K (or -J see below) may let other users learn pass phrase
(thanks to the ps, or top program for examples). It is thus wise to either use an empty pass which will
make dar ask the pass phrase when needed, or use -K (or -J option) from an Dar Command File (see -B
option), assuming it has the appropriated permission to avoid other users reading it. For those paranoids
that are really concerned about security of their passwords, having a password read from a DCF is not
that secure, because while the file gets parsed, dar makes use of "unsecured" memory (memory than can be
swapped to disk under heavy memory load conditions). It is only when the passphrase has been identified
that locked memory is used to store the parsed passphrase. So, the most secure way to transmit a
passphrase to dar, then to libdar, then to libgcrypt, is having dar asking passphrase at execution time,
dar then makes use of secured (locked) memory from the time the password is received by dar from user
(but through the operating system) up to its usage inside libgcrypt (after having been passed through
libdar which also makes use of locked memory).
-J, --ref-key [[<algo>]:]<string>
same as -K but the given key is used to decrypt the archive of reference (given with
-A option). --key-ref is a synonym.
-#, --crypto-block <size>
to be able to randomly access data in an archive, it is not encrypted globally but
block by block. You can define the encryption block size thanks to this argument
which default to 10240 bytes. Note that syntax used for -s option is also available
here. Note also that crypto-block is stored as a 32 bits integer thus value larger
than 4GB will cause an error. Note last, that the block size given here must be
provided when reading this resulting archive (through the -* or -# options). If it is
not the correct one, the archive will not be possible to decrypt, it is thus safe to
keep the default value (and not use at all the -# option).
-*, --ref-crypto-block <size>
same as --crypto-block but for the archive of reference (same default value).
--crypto-block-ref is a synonym.
-B, --batch <filename>
You can put in the file any option or argument as used on command line, that will be
parsed as if they were in place of the "-B <filename>" option. This way you can
overcome the command line size limitation. Commands in the file may be disposed on
several lines, and -B option can also be used inside files, leading a file to include
other files. But an error occurs in case of loop (a file includes itself) and DAR
aborts immediately. Comments are allowed, and must start by a hash `#' character on
each line. Note that for a line to be considered as comment the hash character must
be the first character of the line (space or tab can still precede the hash). See
Conditional Syntax bellow for a more rich syntax in configuration files. See also the
environment variable DAR_DCF_PATH in the ENVIRONMENT section at the end of this
document.
-N, --noconf Do not try to read neither ~/.darrc nor /etc/darrc configuration files. See files
section bellow.
-e, --dry-run Do not perform any action (backup, restoration or merging), displays all messages as
if it was for real ("dry run" action). The --empty option is a synonym.
-aSI, --alter=SI[-unit[s]]
when using k M G T E Z Y prefixes to define a size, use the SI meaning: multiple of
10^3 (a Mega is 1,000,000).
-abinary, --alter=binary[-unit[s]]
when using k M G T E Z Y prefixes to define a size, use the historical computer
science meaning: multiple of 2^10 (a Mega is 1,048,576).
The --alter=SI and --alter=binary options can be used several times on the command line. They affect all
prefixes which follow, even those found in files included by the -B option, up to the next --alter=binary
or --alter=SI occurrence. Note that if in a file included by the -B option, an --alter=binary or
--alter=SI is encountered, it affects all the following prefixes, even those outside the included files.
For example, when running with the parameters "-B some.dcf -s 1K", 1K may be equal to 1000 or 1024,
depending on --alter=binary or --alter=SI being present in the some.dcf file. By default (before any
--alter=SI/binary option is reached), binary interpretation of prefixes is done, for compatibility with
older versions.
-Q Do not display an initial warning on stderr when not launched from a terminal (when
launched from a cronjob for example). This means that all questions to the user will
be answered with 'no', which most of the time will abort the program. Please note
that this option cannot be used in a configuration file, it must be given on the
command line. Since version 2.2.2, giving this option also forces the non-interactive
mode, even if dar is launched from a terminal. This makes it possible for dar to run
in the background. When you do, it's recommended to redirect stdout and/or sterr to
files.
-ac, --alter=ctime When reading a filesystem (during a backup or comparison), restores the atime of all
files to what it was before the file was read. This makes it appear as if it had not
been read at all. However, because there is no system call to let applications
changing the ctime (last inode change) of a file, setting back the atime results in
the ctime being changed (hence the alter=ctime). Some recent unix system allow an
application to get 'furtive read mode' to the filesystem (see below). On older
systems, however, for most users, having the atimes of the files changed shouldn't be
a problem, since they can be changed by any other program (running by any user!) as
well (like the content-index program Beagle). Ctimes on the other hand, are the only
way for security software to detect if files on your system have been replaced (by so
called root-kits mostly). This means, that should you run dar with -ac, security
software which uses ctimes to check, will mark every file on your system as
compromised after the backup. In short, this means this option should only be used by
people who know what they are doing. It's the opinion of this writer that any
software susceptible to atime changes is flakey or even broken (because of the afore
mentioned reasons why atimes can change). But, that doesn't take away that there are
programs who rely on atimes remaining the same, like Leafnode NNTP chaching software.
Therefore this option exists.
-aa, --alter=atime When specifying -aa (by opposition to -ac), the atime of every read file and
directory is updated, and the ctime remains the same. In other words, Dar itself does
nothing with atimes and ctimes, it only let the system do its job to update atimes
when files are accessed for reading. This is in accordance with what atimes and
ctimes were meant to represent. This is Dar's default (since version 2.4.0), unless
'furtive read mode' (see below) is supported by your system and dar has been compiled
with this support activated.
Furtive read mode is a mode in which neither atime nor ctime are modified while dar reads each file and
directory. This provides also better performances as nothing has to be wrote back to disk. A known Unix
kernel that supports this feature is Linux 2.6.8 and above (support must also be present in the standard
C library of the system for dar to be able to activate this feature at compilation time). When this
feature is activated, it becomes the default behavior of dar for super user ; for other users the default
is -aa. If however as root user, you do not want to use "furtive read mode" (while it has been activated
at compilation time), you need to explicitly specify either -aa or -ac option.
-am, --alter=mask set the ordered mode for mask. This affects the way -I and -X options are
interpreted, as well as -g, -P, -[ and -] options, -Z and -Y options and -U and -u
options. It can take any place on the command-line and can be placed only once. See
the file selection in brief paragraph above for a detailed explanation of this
option. It has also an incidence on the --backup-hook-exclude and --backup-hook-
include options.
-an, --alter=no-case
set the filters in case insensitive mode. This concerns only masks specified after
this option (see also -acase option below). This changes the behavior of -I, -X, -g,
-P, -Z, -Y, -u and -U options.
-acase, --alter=case
set back to case sensitive mode for filters. All following masks are case sensitive,
up to end of parsing or up to the next -an option. This changes the behavior of -I,
-X, -g, -P, -Z, -Y, -u and -U options.
-ar, --alter=regex set the filters to be interpreted as regular expressions (man regex(7) ) instead of
the default glob expression (man glob(7) ) This modifies the -I, -X, -g, -P, -Z, -Y,
-u and -U options that follows up to an eventual -ag option (see just below). Note
that for -P option, the given mask matches the relative path part of the files path:
Let's take an example, assuming you have provided /usr/local to the -R option, the
mask "^foo$" will replaced internally by "^/usr/local/foo$" while the mask "foo$"
will be replaced internally by "^/usr/local/.*foo$".
-ag, --alter=glob This option returns to glob expressions mode (which is the default) after an -ar
option has been used, this applies to any -I, -X, -g, -P, -Z, -Y, -u and -U options
that follow up to an eventual new -ar option (see just above).
-at, --alter=tape-marks
For archive creation and merging, the default behavior (since release 2.4.0) is to
add escape sequences (aka tape marks) followed by inode information all along the
archive. If -at is given, dar will not add this information to the archive, resulting
in a slightly smaller archive and faster backup. When reading an archive, the default
behavior is to ignore these escape sequences and rather rely on the catalogue located
at the end of the archive. If instead --sequential-read is given on command-line (see
below), dar will avoid using the catalogue at the end of the archive and will rely on
these escape sequences to know the contents of the archive, which will lead to a
sequential reading of the archive, operation suitable for tape media. Note that it is
not recommended to disable escape sequences (aka tape marks) by using -at option
except if you are more concerned by the resulting size and execution speed of your
backup (in particular if you have a lot of small files) than by the possibility to
recover your data in case of corrupted or partially written archive. Whithout escape
sequences, dar cannot sequential read an archive, which is the only way to use an
archive that has a corrupted catalogue or has no catalogue at all, thing that happens
if a system crash occurred during the archive creation or due to lack of disk space
to complete the archive.
-0, --sequential-read
Change dar's behavior when reading an archive. By default, the traditional way is
used, which relies on the table of contents (aka "the catalogue") located at the end
of the archive. With the --sequential-read option instead, dar will rely on escape
sequences that are inserted all along the archive with each file's inode information.
This will lead to a sequential reading of the archive, operation suitable for tape
medium. However, this feature is only available for archive format starting revision
"08" (i.e.: since release 2.4.0) and if -at option has no been used during archive
creation or merging. This option is available for archive testing (-t), comparison
(-d), restoration (-x), listing (-l) and to read the archive of reference (-A option)
for isolation (-C) archive creation (-c). The sequential reading of an archive is
always much slower than the usual reading method, so you should not use this option
unless you really need it.
-j, --jog when virtual memory is exhausted, ask user to make room before trying to continue. By
default, when memory is exhausted dar aborts. Note that on several system, when
memory is exhausted the kernel is likely to kill the process that failed to obtain
virtual memory, thus on some systems, dar may not be able to ask user for what to do
when memory is exhausted.
-;, --min-digits <num>[,<num ref>[,<num aux>]]
By default slice number contained in filename do not have any padded zeros, which,
when sorting a directory contents alphabetically leads to read all the slice starting
by '1', then by '2'. for example, slice 1, 10, 11, 12, 13, ... 2, 20, 21, 23, ...
etc. While dar is absolutely not perturbed by this display problem, some user shall
like to have the slices sorted by order. For that reason, the --min-digits option
lets you ask dar to prepend enough zeros in the slice number for it be as wide as the
argument passed to --min-digits. For example, if you provide 3 for that number, dar
will store the slice number as 001, 002, 003, ... 999. Well, next slice will be 1000,
thus it will break again the alphabetical sorting order. You are thus advised to use
a number large enough to convert the number of slice you expect to use. Then, when
reading your archive, you will also need to provide this same argument, else dar will
fail finding the slice. In effect, when looking for slice 1 for example, dar should
try opening the file "basename.1.dar", but if it fails, it should try opening the
file "basename.01.dar", then "basename.001.dar", ... up to infinity. If the slice is
just missing, dar would never ask you to provide it, being still looking for a slice
name with an additional leading zero. The problem also arise when doing differential
backup, merging or on-fly isolation, dar must know the number of zero to prepend for
each of these archive. This is why the --min-digits option may receive up to three
integer values, the first for the archive to create or read, the second for the
archive of reference (-A option), the third for the auxiliary archive of reference
(-@ option). By default, no zero is added, and it is also well working this way. But
you might well set for example "--min-digits 5,5,5" in your ($HOME)/.darrc file to do
it once and for all. Last important point, on command-line (not in DCF files), the
short form of this option (-;) need to be quoted ('-;') to avoid the shell
interpreting the ';' character.
--pipe-fd <num> will read further arguments from the file-descriptor <num>. The arguments read
through this file-descriptor must follow a TLV (Type/Length/Value) list format. This
option is not intended for human use, but for other programs launching dar like
dar_manager. This feature has been added to overcome the command line length limit.
SAVING, ISOLATION AND MERGING OPTIONS (to use with -c, -C or -+)
-z[[algo:]level], --compression[=[algo][:][level]]
add compression within slices using gzip, bzip2 or lzo algorithm (if -z is not
specified, no compression is performed). The compression level (an integer from 1 to
9) is optional, and is 9 by default, which is max compression/slow processing. At the
opposite, 1 means less compression and faster processing. "Algo" is optional, it
specifies the compression algorithm to use and can take the following values "gzip"
"bzip2" or "lzo". "gzip" algorithm is used by default (for historical reasons see
--gzip below). If both algorithm and compression are given, a ':' must be placed
between them. Valid usage of -z option is for example: -z, -z9, -zlzo, -zgzip,
-zbzip2, -zlzo:6, -zbzip2:2, -zgzip:1 and so on. Usage for long option is the same:
--compression, --compression=9, --compression=lzo, --compression=gzip,
--compression=bzip2, --compression=lzo:6, --compression=bzip2:2, --compression=gzip:1
and so on.
--gzip[=level] Same as -z (see just above). Historically -z/--gzip was for gzip while -y/--bzip2 was
for bzip2. But due to the lack of available unused letter for command line options,
lzo compression could not be added without extending -z option grammar. For backward
compatibility --gzip is kept, but is deprecated. Rather use --compression[=level] or
-z[level].
-y[level], --bzip2[=level]
compresses using bzip2 algorithm. See -z above for usage details. This option is
DEPRECATED and WILL DISAPPEAR in a future version. Please use -zbzip2:level or
--compression=bzip2:level.
-s, --slice <number>
Size of the slices in bytes. If the number is appended by k (or K), M, G, T, P E, Z
or Y the size is in kilobytes, megabytes, gigabytes, terabytes, petabytes, exabytes,
zettabytes or yottabytes respectively. Example: "20M" means 20 megabytes, by default,
it is the same as giving 20971520 as argument (see also -aSI and -abinary options).
If -s is not present the backup will be written to a single slice whatever the size
of the backup may be (there is probably some filesystem limitation, thus you might
expect problems for file size over 2 gigabytes, depending on your filesystem, but
this is not a limitation of dar).
-S, --first-slice <number>
-S gives the size of the first slice which may be chosen independently of the size of
following slices. This option needs -s and by default, the size of the first slice is
the same as the one of the following slices.
-p [<integer>], --pause[=<integer>]
pauses before writing to a new slice (this requires -s). By default there is no
pause, all slices are written in the same directory, up to the end of the backup or
until the filesystem is full. In this later case, the user is informed of the lack of
disk space and dar stops for user action. As soon as some disk space is available,
the user can continue the backup. The optional integer that this option can receive
tells dar to only pause very 'n' slice. Giving 3 for 'n' will make dar pause only
after slices 3, 6, 9 and so on. If this integer is not specified, the behavior is as
if '1' was given as argument which makes dar pause after each slice.
-A, --ref [<path>]/<basename>
Depending on the context, it specifies the archive to use as reference (mandatory
with -C and -+) or the rescue catalogue to use (when used with -x -t or -d). All
slices of the reference backup are expected to be on the same directory given by
<path> or the current directory by default. Usually only the last slice is required
to extract the catalogue of reference. If necessary the use of symbolic links is also
possible here to gather slices that do not reside in the same directory. You can also
point <path> to a floppy or any other mounted directory, because dar will pause and
ask the user for required slices if they are not present. The argument to -A may be
of four types:
- An existing archive basename, which will be taken as reference
- a dash ("-") in direct access mode (default mode) it may imply the use of -o and -i
options, this allows the archive of reference to be read from a pair of pipes with
dar_slave at the other ends. Dar_slave can be run through ssh on a remote host for
example. Note that this type of argument ("-") is not available when -A is used with
-x, -d or -t. In sequential mode (--sequential-mode is used), the archive of
reference is read from standard input or on named pipe specified by -i option. -o
option has no use in sequential mode. Note that merging (-+ option) cannot read
archive of reference in sequential mode.
- a plus sign ("+") which makes the reference be the current directory status (only
available with -c option). In other word, no file's data will be saved, just the
current status of the inodes will be recorded in the catalogue. This is like an
extracted catalogue form a virtual full backup, it can be taken for further reference
without having to make the full backup itself. This feature is known as the
"snapshot" backup.
- a <date>, if -af option has been placed before -A on the command-line (or in a
included file, see -B option). For more about that feature see -af option below.
During backup (-c option) the archive of reference given thanks to this option is
used to compare existing files on the filesystem. Dar will then backup only files
that have changed since the archive of reference was done. During merging (-+
option), the contents of the given archive will been taken with the contents of the
archive specified with -@ option (see below). During Catalogue isolation (-C option),
dar will create the isolated catalogue from the one given with -A option. During
testing, diff or extraction, (-t, -d or -x options respectively), the table of
contents (the catalogue) will be read from the archive given with -A instead of using
the internal catalogue of the archive (given with -t, -d or -x option). The archive
given for rescue must has been previously isolated from this same archive (else the
contents will not match and dar will refuse to proceed to this operation). This gives
a solution to the case of corruption inside an archive's catalogue, while the best
way is still to use Parchive to protect your data against media error.
-@, --aux [<path>]/<basename>, --on-fly-isolate [<path>]/<basename>
specifies an auxiliary archive of reference (merging context) or the name of the on-
fly isolated catalogue (creation context). This option is thus only available with -+
option (merging) and -c option (archive creation). Over -A option which is mandatory
with -+ option, you may give a second archive of reference thanks to the -@ option
(merging context). This allows you to merge two archives into a single one. See also
-$, -~ and -% for other options concerning auxiliary archive of reference. While
creating an archive (backup context) this option let the user specify the archive
name for an on-fly isolation (former -G option), you can also use -$ and -~ to define
encryption of the archive containing the on-fly isolated catalogue. On-fly isolated
catalogue is always bzip2 if possible else gzip else lzo compressed (using
compression level 9) else not compressed, and it is also always a single sliced
archive. Due to command-line exiguity, it is not possible to change compression algo
nor slice size for the on-fly isolation. If you need a more complicated isolation,
either look for a GUI over libdar, or do a normal (= not an on-fly) isolation
operation (By the way it is possible to isolate an already isolated catalogue, this
is equivalent to doing a copy, but you can change encryption, compression or slicing,
for example), you can also use dar_xform if you only want to change slices size (this
is faster as no decompression/re-compression is done). Using the merging operation on
an isolated catalogue instead of isolating the isolated catalogue, leads the
resulting archive to not be able to be used as a rescue for internal catalogue of the
original archive. --aux-ref is a synonym.
-D, --empty-dir At backup time, when excluding directories either explicitly using -P or -] options,
or implicitly by giving a -g or -[ options (a directory is excluded if it does not
match mask given with -g options or -[ options) dar does not store anything about
these. But with -D option, dar stores them as empty directories. This can be useful,
if excluding a mount point (like /proc or /dev/pts). At restoration time, dar will
then recreate these directories (if necessary). This option has no meaning with -C
and is ignored in that case. Independently of that, -D can also be used at
restoration time, but it activates a slightly different feature (see restoration
options below).
-Z, --exclude-compression <mask>
Filenames covered by this mask are not compressed. It is only useful with -z option.
By default, all file are compressed (if compression is used). This option can be used
several times, in that case a file that matches one of the -Z mask will not be
compressed. Argument given to -Z must not be include any path, just the filename
(eventually/probably using wildcards).
-Y, --include-compression <mask>
Filenames covered by this mask (and not covered by -Z) are the only to be compressed.
It is only available with -z option. By default all files are compressed. This option
can be used several times, in that case all files that match one of the -Y will be
compressed, if they do not also match on of the -Z masks. The ordered method here
applies too when activated (with -am option), it works exactly the same as -I and -X
options, but apply to file compression, not file selection. In other word, it matches
only on the file name, not on the path of files.
-m, --mincompr <number>
files which size is below this value will not be compressed. If -m is not specified
it is equivalent to giving -m 100 as argument. If you want to compress all file
whatever their size is you thus need to type -m 0 on the command line. The same
number extensions as those used with -s or -S are available here, if you want to
specify the size in kilobyte, megabyte, gigabyte etc.
-1, --sparse-file-min-size <number>
Define the minimum length of zeroed bytes to replace by "holes". By default, this
feature is activated with a value of 15 bytes. To completely disable it, set the size
to zero. Disabling this feature will bring some noticeable speed improvement but will
probably make the archive slightly bigger (depending on the nature of the data).
Sparse files are files that contain so called holes. On a filesystem, the portion of
zeroed bytes is not stored on disk, thus an arbitrary large file with huge portion of
zeros may only require a few bytes of disk storage. While dar cannot detect how is
allocated a given file because it makes a filesystem abstraction (it does not know
the implementation of any particular filesystem, where from its portability), however
when it finds a sequence of zeroed bytes larger than the given threshold it can
assume that it is in presence of a hole. Doing so, it does not store the given zeroed
bytes into the archive, but place a tag beside the saved data to record the size of
the hole and thus where to place the next no zeroed bytes. This makes dar archive
disk space requirement much smaller when a sparse files is met. At restoration time,
dar will restore holes writing normal data and seeking over the hole to write down
the normal data after each hole. If the underlying file system supports sparse files,
this will restore the holes. Note that there is no difference for applications
whether a file is sparse or not, thus dar may well transform normal files into sparse
files and viceversa, only the disk requirement will change. Last point, if dar can
reduce disk requirement for archive with holes as small as 15 bytes (smaller value
works but the overhead cost more than what is required to store the zeroed bytes
normally), it may not be the same at restoration, because filesystem allocation unit
is usually several kilobytes, however restored file will never be larger than it
could be without holes. The only drawback of this feature is the additional CPU cycle
it requires.
-ak, --alter=keep-compressed
During merging operation, keep files compressed, this has several restrictions : -z,
-Z, -Y, -m are ignored, if two archives have to be merged, both must use the same
compression algorithm or one of them must not use compression at all (this last
restriction will probably disappear in a next version). The advantage of this option
is a greater speed of execution (compression is usually CPU intensive).
-ah, --alter=holes-recheck
For merging, the sparse file detection mechanism is disabled by default. However if
you want to activate it (assuming you have an old archive you want to convert the
current archive format taking care of sparse files), you need to use -ah option to
reactivate the sparse file detection mechanism. Then for merging --sparse-file-min-
size can be used as described above for archive creation. In particular setting
--sparse-file-min-size to zero beside -ah during merging, may also be used to convert
file saved as sparse file into plain normal files.
-af, --alter=fixed-date
Modify the -A option behavior, making it receiving a <date> as argument in place of
the [<path>]/<basename> default argument. The <date> is used to define which file to
save (file which modification is newer or equal to <date>) and which to consider
unchanged (those older than <date>). This option has only a sense when creating an
archive (not when merging or isolating).
<date> must be a date in the following possible formats:
- a number of second since Jan 1st, 1970
- a date in the following form [[[year/]month/]day-]hour:minute[:second]
Here are some examples of date:
91836383927108078
2005/11/19-19:38:48 Which is 38 past 7 PM and 48 seconds, the 19th of November 2005
20:20 Which is 8 PM of the current day
2-00:08 Which is 8 past noon, the second day of the current month
2/2-14:59 Which is 1 to 3 PM, the 2nd of February in the current year
--nodump do not save files which have the 'd' flag set (see chattr(1) lsattr(1) ext2
commands). This option may not be available if the system dar has been compiled on
did not provide support for ext2 flags. Note that this option does nothing with -+
option (merging) as no filesystem is used for that operation.
-M, --no-mount-points
stay in the same filesystem as the root directory (see -R option), subdirectory that
are mounting points for other filesystems will not be saved (or saved empty if -D
option is used). This option is useless and ignored for merging operation.
-, , --cache-directory-tagging
don't save contents of directories that use the Cache Directory Tagging Standard. See
http://www.brynosaurus.com/cachedir/spec.html for details. (this option is useless
with -+ option)
-$, --aux-key [[<algo>]:]<string>
same as -J but for the auxiliary archive of reference (-@ option).
-~, --aux-execute <string>
same as -F but for the auxiliary archive of reference (-@ option).
-%, --aux-crypto-block <size>
same as -* but for the auxiliary archive of reference (-@ option).
-/ , --overwriting-policy <policy>
This option let the user define when or how file overwriting can occur at restoration
or archive merging time. It does no apply to slice overwriting which are driven by
the -n option, it does instead apply to file during extraction and files inside
archives when merging two of them. When considering overwriting, a file is said to be
'in place' while an other is known as 'new' or 'to be added'. At restoration time,
the 'in place' is the one that is present in filesystem while the 'to be added' is
the one from the archive. At merging time, the 'in place' is the one of the '-A'
archive of reference while the 'to be added' is the one from the auxiliary '-@'
archive or reference.
As soon as you use -/ option -n only applies only to slice overwriting and the -r, -k and -ae options are
ignored (restoration options).
The given <policy> argument is composed of actions and eventually of conditional expressions. Actions do
define how to solve overwriting conflict about file's data and file's EA. An action is thus a couple of
action for Data and for EA. Actions for Data are represented by uppercase letters, while action for EA
are defined by lowercase letters. Both actions are independent of each other:
P means 'Preserve'. When merging two archives, the data of the resulting archive will be taken
from the 'in place' file. While when extracting, the data of the inode in filesystem will be
preserved (thus no overwriting will occur for the data).
O means 'Overwrite'. When merging two archives, the data of the resulting archive will be taken
from the 'to be added' file. While when extracting, the data of the inode in filesystem will
be overwritten by data from the archive.
S means 'mark Saved and preserve'. When merging two archives, the data of the resulting archive
will be marked as already saved in the archive of reference (making thus a differential
archive, even if none of the original archive were differential archives). All data will be
dropped in the resulting archive, but the last modification date [aka mtime] (used to detect
change in file's data) will be taken from the 'in place' file. This action does not apply
when extracting files, it is thus considered equal to "Preserve" (P) in that situation.
T means 'mark Saved and overwrite'. When merging two archives, the data of the resulting
archive will be marked as already saved (same as 'S' action): all data will be dropped in the
resulting archive, however the last modification date [aka mtime] (used to detect changes in
a file's data) will be taken from the 'to be added' file. This action does not apply when
extracting files, it is thus considered equal to "Overwrite" (O) in that situation.
R means 'Remove'. When merging two archives, the resulting archive will not contain any entry
corresponding to the file that were in conflict. This also implies that no EA will be stored
for that particular entry as the entry will no more exist in the resulting archive (as if it
had never yet existed). When extracting files, this will lead to file's suppression.
p means 'Preserve', same as 'P' (but lowercase letter) preserve the whole EA set. When merging
two archives, the EA set of the resulting file will be the EAs of the 'in place' file
(whatever is the overwriting action taken for its data). While when extracting files to
filesystem, the EA of the file in filesystem will not be changed (whatever is the overwriting
action taken for its data, unless the file is removed using the 'R' policy).
o means 'Overwrite', same as 'O' (but lowercase letter) overwrite the whole EA set. When
merging two archives, the EA set of the resulting file will be taken from the 'to be added'
file. While when extracting files, the EA set of the file in the filesystem will have its EA
erased and replaced by those of the file in the archive (still independent of what
overwriting action is taken for file's data).
s means 'mark Saved and preserve', same as 'S' (but lowercase letter) for EA instead of data.
When merging two archives, the EA of the resulting file are marked as already saved in the
archive of reference, thus they are dropped but the date of last inode change [aka ctime]
(used to detect changes in file's EA) will be taken from the 'in place' file. This action
does not apply when extracting files, it is thus considered equivalent to "Preserve" (p) in
that situation.
t means 'mark Saved and overwrite', same as 'T' (but lowercase letter) for EA instead of data.
When merging two archives, the EA of the resulting file are marked as already saved in the
archive of reference, thus they are dropped but the date of last inode change [aka ctime]
(use to track changes in EA) will be taken from the 'to be added' file. This action does not
apply when extracting files, it is thus considered an equivalent to "Overwrite" (o) in that
situation.
m means 'merge EA and preserve'. The resulting file in the merged archive will have EA entries
from both the 'in place' and the 'to be added' files. If both files share a same EA entry
(same key for a given association) the one of the 'in place' file is kept (where from the
'preserve' notion). When extracting a file, the file in the filesystem will have its EA set
enriched by EA entries of the file in the archive that do not exist on filesystem, but its
already existing EA will stay untouched.
n means 'merge EA and overwrite'. The resulting file in the merged archive will have EA entries
from both the 'in place' and the 'to be added' files. If both files share a same EA entry
(same key for a given association) the one of the 'to be added' file will be kept (where from
the 'overwrite' notion). When extracting file, the file in the filesystem will have its EA
set enriched by EA entries of the file in the archive with some EA entry possibly been
overwritten.
r means 'remove', same as 'R' but for the EA set (thus all EA entries) of a given file ('r' is
lowercase letter here). The file of the resulting archive during merging operation will not
own any EA, even if the 'in place' and/or the 'to be added' files did have some. For file
extraction, this means that the file in the filesystem will loose all its EA set. As for all
the previous tests, this EA operation is independent of the operation chosen for file's data
(uppercase letters).
d means 'delete'. When a same EA entry is found both in the 'in place' and 'to be added' files
these entries will be absent in the resulting archive. In other words, when merging, the EA
set will only contain EA entries specific to the 'in place' and those specific to the 'to be
added' file. Entries in common will not be present. When extracting a file from an archive,
the file on filesystem will have its EA set enriched by entries of the 'to be added' file
that are new to the 'in place' file. The other entries (which are thus present in both
archive and filesystem) will be removed from the EA set.
* is valid for both EA and data. It tells that the action is not yet defined at this step of
the evaluation and that further evaluation is required (see the 'chain' operator below).
A means 'Ask for user decision'. This uppercase letter concerns Data overwriting. An
application interaction let the user define the action for each file in conflict. Note, that
this action if used alone may become very boring or painful. The idea is to use it in
conditional statements (which are described below) to have dar ask for only non obvious
cases.
a means 'Ask for user decision'. This lowercase letter is the equivalent for EA of the 'A'
action. It is intended to be used in the same conditional statements described below.
An action is thus a couple of letters, the first being uppercase (for file's data) the second
being lowercase (for file's EA). When -/ option is not given, the action is equivalent to '-/ Oo',
making dar proceed to file and EA overwriting. This is to stay as close as possible to the former
default action where neither -n nor -w where specified. Note that -w option stays untouched, in
consequences, in this default condition for -/ option, a confirmation will be asked to the user
before dar proceed to any overwriting. The former -n option (still used to handle slice
overwriting) can be replaced by its equivalent '-/ Pp' for resolving file overwriting conflict
(never overwrite). Here follows some examples of actions, all these are done for any entry found
in conflict during archive merging or archive extraction, we will see further how to define
conditional actions.
-/ Rr
will result lead dar to remove any file from filesystem that ought to be restored(!). Note
the action for EA is useless, the EA will always be erased as well as data using 'R'. Thus
'-/ Rp' would lead to the same result.
-/ Po
will keep data of the 'in place' file and EA set from the 'to be added' file.
-/ Ss
Using this option when merging an archive with itself (used both as archive of reference (-A
option) and auxiliary archive of reference (-@ option) ) will provide the same action as an
archive isolation of the archive of reference, but using twice more memory (so keep using the
isolation operation as before! Here this is just an illustration of the possibility)
As seem previously -u and -U options can be used to filter which EA entry to consider and which to
ignore. The question here is to explain how this filtering mechanism interacts with the different
policies we just presented above. For files that are not in conflict (found only as 'in place' or
as 'to be added'), only the EA entries matching the EA filter are kept. For files in conflict, the
overwriting policy is evaluated first, then the filtering mechanism is applied *after* it. Thus
for example, using the following [ -/ "Po" -u "*test" ], when merging two archives, only EA ending
with "test" will be retained, and when a conflict takes place, this "*test" ending EA will be
taken from the 'to be added' file if it has some EA of that type, its other EA entry will be
ignored as well as any EA entry of the 'in place' file even those ending by "test". At restoration
in using the same options, file without conflict will get restored but only EA entry ending with
"test" will be restored, and for file with conflict (already present in filesystem), EA set of
file in filesystem will be removed and replaced the EA entries of the file in archive that ends by
"test", if some exist.
Well, now let's see how to bring some more fun using conditional statements in all these actions.
The structure to use is the following:
{<condition>}[<action to follow if condition is true>]
This syntax let you place an action (as the ones we saw just above) inside the brackets '['
and ']' (for example [Pp]) that will take effect only if the evaluation of the <condition> is
true. Stated that a such statement is a new type of action, you may have guessed that you
may use it recursively: {<condition1>}[{<condition2>}[<action>]). Well so far it seems
useless. But instead of the "if <condition> then <action> else <action>" paradigm common to
programming languages, due to the command line context it has been chosen to instead use and
implicit "OR" operator between actions. Thus you can "stack" conditional statements this
way: {<condition1>}[<action1>] {<condition2>}[<action2>] <action3>. In this example, if
<condition1> is true then <action1> will be used, ELSE if <condition2> is true then <action2>
will be used ELSE <action3> will be used. This leads to the same possibilities as what is
available with programming languages, but with a slightly more simple syntax. Seen this, the
recursion of conditional syntax is more interesting. For readability, you are allowed to add
any space or tab in the overwriting policy, but the resulting overwriting policy must be
given as a single argument to dar, thus the use of quotes (either simple ' or double ") is
necessary.
The last operator we will see is the 'chain' operator. Once an expression is evaluated, the
resulting couple of action may contain an '*' (undefined action for EA or data). Further
evaluation must be done. The chain operator which is represented by a semi-column ';' let one to
separate several independent expressions that will be evaluated in turn up to the time the couple
of action is fully defined. Once an action (for EA or for Data) is defined, it can be redefined by
a subsequent evaluation in the chain, however if the action is defined it cannot be set back to
undefined, thus '*' will never overwrite a previously defined action. If at the end of the policy
the couple of action is not fully defined, the 'preserve' action is used ('P' or 'p' depending on
which of EA or Data is left undefined). Here follow a example of syntax:
-/ "{<condition1>}[P*] O* ; {<condition2>[*p] *o} ; Rr"
The first expression will evaluate to either P* or O*. At this step, as the action is not
completely defined, the second part of the chain is evaluated, It will end with either *p or
*o. In any case, we have after this second statement of the chain a fully defined action for
both data and EA (either Pp, Po, Op or Oo). Thus the evaluation stops here and the "Rr"
policy will never be evaluated.
We now have one last thing to see: the available conditions (what to place between braces '{' and
'}'). Conditions are defined each by a letter, eventually followed by an argument between
parenthesis. The usual logical operators are available: negation (!), conjunction (&) disjunction
(|). These characters must be escaped or quoted to not be interpreted by the shell when used on
command-line. In particular the '!' under most shell must be quoted and escaped (-/ '{\!R}[..]..',
The escape character '\' is not necessary inside DCF files (those given to -B option) as no shell
is used to interpret these files. To these usual operators has been added a new one: the
"inversion" operator, noted '~'. Like the negation, it is an unary operator but unlike the
negation, it inverses the roles of 'in place' and 'to be added' for the evaluation, which is
slightly different from taking the negation of the result of the evaluation. All these operators
follow the usual precedence: unary operators ('!' and '~') are evaluated first, then the
conjunction '&' then the disjunction '|'. To override this, you can use parenthesis '(' and ')'
inside the condition. Over these logical operators, the conditions are based on atomic operator
that compare the 'in place' file to the 'to be added' file. Here they follow:
I true only if the 'in place' entry is an inode (a 'detruit' which record the fact that a file
has been removed since the archive of reference is not an inode for example). This condition
do not have any consideration toward the to be added object, as some others but not all
below.
D true only if the 'in place' entry is a directory. To know whether the 'to be added' is a
directory or not, one would use the "inversion" operator: ~D
F true only if the 'in place' entry is a plain file (true also if this plain file is a 'hard
link', that's it if its inode is linked several times to the directory tree)
H true only if the 'in place' entry is an inode linked several times to the directory tree (=
hard link) it may be a plain file, a Unix socket, a pipe, char device, a block device for
example.
A same as H but the current 'in place' entry is the first link we meet pointing to that hard
linked inode.
R true if the 'in place' entry is more recent than or of same date as the 'to be added' entry.
The last modification date [aka mtime] is used for this comparison. If the 'to be added'
entry is not an inode (and thus has no mtime), the 'in place' is considered to be more recent
than the 'to be added' entry. Same thing if the 'in place' entry is not an inode (ad has no
mtime available for comparison), it is here too assumed to be more recent.
R(<date>)
true if the 'in place' entry is more recent than or of the same date as the fixed <date>
given in argument. No consideration is done toward the 'to be added' element. The <date>
format is the same as the one used with -af option. If an entry has no mtime (it is not an
inode for example) it is assumed an virtual mtime of zero.
B true only if both 'in place' and 'to be added' are plain file (hard linked or not) and if the
'in place' file's data is larger or equal to the 'to be added' file's data. If one or both
entry are not plain files (or hard link to plain file) and thus the file size comparison is
not possible, the 'in place' entry is assumed to be 'bigger' than the 'to be added' entry.
S true only if the 'in place' data is saved in the archive (not marked as unchanged since the
archive of reference). Note that while extracting files from an archive, the 'in place' file
is the one in the filesystem, which always has its data 'saved' (from libdar point of view).
The 'inversion' of this atomic operator ~S may still be interesting in the context of
restoration.
Y true only if the 'in place' data is saved but dirty (plain file having its data changed at
the time it was read for backup). Note, that restoring in sequential read mode, it is not
possible to known whether a file is dirty (it is possible to know it once having read its
data, but sequential reading does not allows then to skip forward to get the dirty state of
the file and skip backward to eventually restore that file, depending on the overwriting
policy result).
X true only if the 'in place' data is a sparse file
T true only if the 'in place' and 'to be added' entries are of same type (plain file, Unix
socket, named pipe, block device, char device, symlink, directory, 'detruit' (which stands
for file deleted since the archive of reference was done), and so on). Note that the number
of links to inode (i.e. whether this is a hard links or not) is not taken into account.
e true if the 'in place' entry has EA (may they be saved or just recorded as existing).
r true if the 'in place' entry has more recent or equal dated EA to the 'to be added' entry. If
'to be added' has no EA or is even not an inode, true is returned. If 'in place' has no EA or
is even not an inode, true is returned unless 'to be added' has some EA. The comparison is
done on ctime dates.
r(<date>)
true if the 'in place' entry has more recent or equal dated EA to the fixed <date> given in
argument. No consideration is done toward the 'to be added' element. The <date> format is the
same as the one used with -af option. If an entry has no date (ctime date) (when it is not an
inode for example) it is assumed an virtual ctime of value zero.
m true only if 'in place' has more or equal number of EA entry in its set of EA than 'to be
added' has. If an entry has not EA or is not even an inode, it is assumed it has zero entry.
The comparison is done on this number. Note that the number of EA entry is not the size used
to store these entries. For example, the EA entry "user.test" counts for 1, whatever is the
length of the value associated to it.
b true if the 'in place' entry has bigger EA set or equal size EA set than the 'to be added'
entry. If an entry has no EA or is even not an inode, it is assumed that it has a zero byte
length EA set. The comparison is done on this number in that case. Note that the comparison
is done on the bytes used to store the whole EA set associated to a given file.
s true if the 'in place' entry is an inode (or a hard linked inode) and has its EA saved in the
archive of reference, not only marked present but unchanged since last backup. This test does
not take the 'to be added' entry into account.
Well, you've seen that uppercase letter are kept when comparison is based on the inode or data
while lowercase letter is used for atomics based on EA. Now that we have completed our tour of
this feature let's see some examples:
-/ Pp
as seen previously this is what does -n option for files when no overwriting policy is
defined, which avoids any overwriting for Data as well as for EA.
-/ "{!T}[Pp] {R}[{r}[Pp]Po] {r}[Op] Oo"
Space and tabs are allowed to ease readability. Here the policy stands for: If files in
conflicts are not of the same type then keep Data and EA of the entry 'in place'. Else if 'in
place' has a more recent data then if 'in place' has more recent EA then keep both its Data
and EA, else keep only its Data and overwrite its EA. Else (if 'in place' has not the more
recent data), if it has the more recent EA then overwrite the data but keep its EA, else
overwrite both its data and EA. This policy tends to preserve the most recent data or EA,
but it does not take into account the fact that EA or Data is effectively saved into the
archive of just marked as unchanged since the archive of reference.
-/ "{!T}[{~D}[Oo] Pp]"
If entries are not of the same type, if the 'to be added' entry is a directory then we keep
it and overwrite the 'in place' entry, else we keep the 'in place' entry. If entry are of
same type, the policy does not provide any action, thus the default action is used: "Pp". You
can change this default action easily using a chain operator:
-/ "{!T}[{~D}[Oo] Pp] ; Aa"
In this case instead, if entry are of the same type, the user will be asked what to.
-/ "{!T|!I}[{R}[Pp] Oo] {S}[{~S}[{R}[P*] O*] P*] {~S}[O*] {R}[P*] O*] ; {s}[{~s}[{r}[*p] *o] *p]
{~s}[*o] {r}[*p] *o]"
Well this may seems a bit too complex but just see it as an illustration of what is possible
to do: If both 'in place' and 'to be added' are not of the same type we keep data and EA of
the most recent file (last modification date). Else, both are of the same type. If both are
inode we evaluate a two expressions chain (expressions are separated by a semi-column ';') we
will see in detail further. Else if they are of same type but are not inode we take the EA
and data of the most recent entry (this is the last 10 chars of the string). Well, now let's
see the case of inode: The first expression in the chain sets the action for data and keep
the action for EA undefined. While the seconds, is the exact equivalent but instead it leaves
the action for data undefined '*' and set the action for EA. These two expressions follow the
same principle: If both entries are saved (by opposition to be marked as unchanged since the
archive of reference) in the archives, the most recent EA/Data is kept, else, the one of the
inode that is saved is kept, but if none is saved in the archive the most recent entry
(mtime/ctime) is kept.
-^, --slice-mode perm[:user[:group]]
defines the permission and ownership to use for created slices. By default, dar
creates slices with read and write available for anyone letting the umask variable
disable some privileges according to user's preferences. If you need some more
restricted permissions, you can provide the permission as an octal value (thus
beginning by a zero), like 0600 to only grant read and write access to the user. Be
careful not to avoid dar writing to its own slices, if for example you provide
permission such as 0400. Note also that the umask is always applied thus specifying
-^ 0777 will not grant word wide read-write access unless your umask is 0000.
-_, --retry-on-change count[:max-byte]
When a file has changed at the time it was read for backup, you can ask dar to retry
saving it again. To activate this feature you must provide the maximum number a given
file can be re-saved (this is the 'count' field).In option the overall maximum amount
of byte allowed to be wasted due to retrying changing file's backup can be given
after a column charactrer (:), this is the 'max-byte' field. By default (no --retry-
on-change option specified) no retry is done. If 'max-byte' field is not specified,
no limit on the bytes is used, each changing file will be saved up to 'count' times
if necessary. A file is considered as changed when the last modification time has
changed between the time the file has been opened for backup and the time it has been
completely read. Retrying a backup cannot replace the already saved backup, a second
copy of the file is added just after the first previous try and the previous try
becomes inaccessible, however it holds some place in the archive, where from the
designation of wasted bytes. You can remove all wasted bytes from an archive using
the merging/fitering feature: dar -+ new_arch -A old_arch -ak
-ad, --alter=decremental
This flag is to be used only when merging two archives. Instead of the usual merging
where each files of both archives are added to the resulting archive with eventually
a tie using the overwriting policy (see -/ option), here the merging builds an
archive which corresponds to the decremental backup done based on two full backups.
the -A backup is expected to receive the older archive while the -@ is expected to
point to the more recent one. If this option is used, the eventually overwriting
policy is ignored and replaced by -/ "{T&R&~R&(A|!H)}[S*] P* ;
{(e&~e&r&~r)|(!e&!~e)}[*s] *p". Additionally, files found int the newer archive that
do not existed in the older are replaced by a 'detruit' entry, which marks them to be
remove at restoration time. For more information about decremental backups read the
usage_notes.html file in the documentation.
-asecu, --alter=secu
This option disable the ctime check done by default during an incremental backup: If
the ctime of an inode has changed since the archive of reference was done with all
other values being unchanged (inode type, ownership, permission, last modification
date, file size), dar issues a "SECURITY WARNING", as this may be the sign of the
presence of a rootkit. You should use this option to disable this type of warning, if
you are doing a differential backup of a just restored data (differential backup with
the archive used for restoration taken as reference), as it is not possible to
restore ctime, restored data's ctime will have changed while other parameters will be
unchanged for all restored files, leading dar to issue a warning for all restored
files. This security check is disabled (implicitly) if dar is run with -ac option.
Last, if a file has only its EA changed since the archive of reference was done, the
security warning will show (false positive).
-., --user-comment "<message>"
This option let the user add an arbitrary message into the archive header. Warning!
this message is always stored in clear text, even if the archive is encrypted. You
can see the message inserted in an archive displaying the archive summary (dar -l
<archive> -q). Some macro can be used inside the <message>:
%c is replaced by the command line used. Note that for security, any option related
to archive encryption is removed (-K, -J, -$, -#, -*, -%). The command included
from a DCF file (see -B option) are never added by this macro. As a consequence,
if you do not want to see --user-comment stored in user comments you can add the
--user-comment definition in an included file like ~/.darrc for example.
%d this is the current date and time
%u this is the uid under which dar has been run
%g this is the gid under which dar has been run
%h the hostname on which the archive has been created
%% the % character.
-3, --hash <algo> When creating, isolating or merging an archive, beside each slice is generated an on-
fly hash file using the specified algorithm. Available algorithm are "md5" and
"sha1", by default no hash file is generated. The hash file generated is named based
on the name of the slice with the .md5 or .sha1 extension added to it at the end.
These hash files can be processes by md5sum and sha1sum usual commands (md5sum -c
<hash file>) to verify that the slice has not been corrupted. Note that the result is
different than generating the hash file using md5sum or sha1sum once the slice is
created, in particular if the media is faulty: calling md5sum or sha1sum on the
written slice will make you compute the hash result on an already corrupted file,
thus the corruption will not be seen when testing the file against the hash at a
later time. Note also that the creation of a hash file is not available when
producing the archive on a pipe ("dar -c -").
-<, --backup-hook-include <mask>
The mask is applied to path+filename during backup operation only. If a given file
matches the mask, a user command (see -= option below) will be run before proceeding
to the backup and once the backup will be completed. See also -> option below.
IMPORTANT: if using the short option, you need to enclose it between quotes: '-<' for
the shell not to interpret the < as a redirection.
-> --backup-hook-exclude <mask>
The mask is applied to path+filename during backup operation only. If a given file
matches the mask, even if it matches a mask given after -< option, no user command
will be executed before and after its backup. The -< and -> options act like -g and
-P, they can receive wildcard expression and thus have their comportment driven by
the --alter=globe and --alter=regex expressions seen above, as well as the
--alter=mask option. Last the --alter=case and --alter=no-case modify also the way
case sensitivity is considered for these masks. By default, no -> or -< option, no
file get selected for backup hook. IMPORTANT: if using the short option, you need to
enclose it between quotes: '->' for the shell not to interpret the > as a
redirection.
-=, --backup-hook-execute <string>
for files covered by the mask provided thanks to the -< and -> options, the given
string is executed by a shell before the backup of that file starts and once it has
completed. Several macro can be used that are substituted at run time:
%% will be replaced by a literal %
%p will be replaced by the full path under backup
%f will be replaced by the filename (without the path)
%u will be replaced by the UID of the file
%g will be replaced by the GID of the file
%c and most interesting, %c (c for context), will be replaced by "start" or by
"end" when the command is executed before or after the backup respectively.
This way, one can stop a database just before it was about to be backed up, and restart it once the
backup is completed. Note that the masks seen above that drive the execution of this command can be
applied to a directory or a plain file for example. When a directory is selected for this feature, the
command is logically ran before starting (with the context "start") to backup any file located in that
directory or in a subdirectory of it, and once all file in that directory or subdirectories have been
saved, the command is ran a second time (with the context "end"). During that time, if any file do match
the backup-hook masks, no command will be executed for these. It is assumed that when a directory has
been asked for a backup-hook to be executed this hook (or user command) is prepare for backup all data
located in that directory. The environment variable DAR_DUC_PATH also applies to these user commands (see
-E above, or the ENVIRONMENT paragraph below).
-ai, --alter=ignore-unknown-inode-type
When dar meets an inode type it is not aware about (some times ago, it was the case
for Door inode on Solaris for example, Door inodes are handled by dar since release
2.4.0), it issues a warning about its inability to handle such inode. This warning
occurs even if that entry is filtered out by mean of -X, -I, -P, -g, -[ or -]
options, as soon as some other entry in that same directory has to be considered for
backup, leading dar to read that directory contents and failing on that unknown inode
type (filtering is done based on the result of directory listing). This option is to
avoid dar issuing such warning in that situation.
RESTORATION OPTIONS (to use with -x)
-k[{ignored|only}], --deleted[={ignore|only}]
Without argument or with the "ignore" argument, this option leads dar at restoration
time to not delete files that have been deleted since the backup of reference (file
overwriting can still occur). By default, files that have been destroyed since the
backup of reference are deleted during restoration, but a warning is issued before
proceeding, except if -w is used. If -n is used, no file will be deleted (nor
overwritten), thus -k is useless when using -n. If -/ option is used, this option
without argument is ignored! With the "only" argument, this option only consider
files marked as to be removed in the archive to restore, no file are restored but
some file are removed. When -konly (or --deleted=only) is used, the -/ option is
ignored (at the opposition of the "--no-delete=ignore" option which is ignored when
the -/ is used). Of course "--no-delete=ignore" and "--no-delete=only" are mutually
exclusive, because if both of them were available at the same time dar would do
nothing at all.
-r, --recent only restore files that are absent or more recent than those present in filesystem.
If -/ option is used, this option is ignored!
-f, --flat do not restore directory structure. All file will be restored in the directory given
to -R, if two files of the same name have to be restored, the usual scheme for
warning (-w option) and overwriting (-n option) is used. No rename scheme is planned
actually. When this option is set, dar does not remove files that have been stored as
deleted since last backup. (-f implicitly implies -k).
-ae, --alter=erase_ea
[DEPRECATED use -/ instead] Drop all existing EA of files present in filesystem that
will have to be restored. This way, the restored files will have the exact set of EA
they had at the time of the backup. If this option is not given, a file to restore
will have its EA overwritten by those present in the backup and if some extra EAs are
present they will remain untouched. See the Note concerning Extended Attributes (EA)
above for a detailed explanation about this behavior. If -/ option is used, this
option is ignored!
-A, --ref [<path>]/<basename>
-A takes a different meaning when used with -x, -d or -t. The archive given after -A
must be an extracted catalogue based on the archive given after -x, -d or -t. This
extracted catalogue will be used for the operation in place of the catalogue located
in the archive. This feature is intended for the case of corruption within an archive
that affects the internal catalogue. If you have a sane extracted catalogue of a
given archive you can use it as replacement of the one located in the archive itself.
Note that with the -A option are also available the following options: -F, -J and -*.
-D, --empty-dir At restoration time, if -D is not specified (default) any file and directory is
restored in regard to the filtering mechanism specified (see -I, -X, -P, -g, -[ and
-] options). But if -D option is provided the restoration skips directory trees that
do not contain saved files. This avoid having a huge empty tree with a few restored
files especially when restoring a differential archive in an empty place. Note: This
feature cannot work when --sequential-read is used, as it is not possible to know
whether a directory contains or not some saved files at the time the directory inode
is read from the archive in sequential reading mode.
-2, --dirty-behavior { ignore | no-warn }
At restoration time, if a file in the archive is flagged as "dirty" (meaning that it
had changed at the time it was saved), user is asked for confirmation before
restoring it. Specifying "ignore" will skip those dirty files, while "no-warn" will
restore them without user confirmation. This feature is incompatible with sequential
reading mode, in this mode dar cannot know whether a file is dirty before having
restored it, in consequences, dar cannot warn nor ignore that a file is dirty before
restoring it, at that time if a file is dirty it will be removed unless dirty-
behavior is set to "no-warn".
-al, --alter=lax Dar will try to workaround data corruption of slice header, archive header and
catalogue. This option is to be used as last resort solution when facing media
corruption. It is rather and still strongly encourage to test archives before relying
on them as well as using Parchive to do parity data of each slice to be able to
recover data corruption in a much more effective manner and with much more chance of
success. Dar also has the possibility to backup a catalogue using an isolated
catalogue, but this does not face slice header corruption or even saved file's data
corruption (dar will detect but will not correct such event).
-/, --overwriting-policy <policy>
Overwriting policy can be used for archive restoration to define when and how file
overwriting can occur. See above the description of this option.
TESTING AND DIFFERENCE OPTIONS (to use with -t or -d)
-ado-not-compare-symlink-mtime, --alter=do-not-compare-symlink-mtime
Whith this option set, when comparing a symlink, mtime difference, no message shows
when symlink in archive ans symlink on filesystem do only differ by their by their
mtime. See also -O option.
No other specific option, but all general options are available except for example -w which is useless,
as testing and comparing only read data. -A option is available as described just above for extraction
(backup of internal catalogue).
Doing a difference in sequential read mode is allowed but hard linked inodes can only be compared to the
filesystem the first time they are met, next hard links to this same inode cannot obtain the
corresponding data because skipping backward in sequential read mode is forbidden. In that situation, the
hard links are reported as skipped, meaning that data comparison could not be performed.
LISTING OPTIONS (to use with -l)
-T, --list-format=<normal | tree | xml>, --tree-format
By default, listing provides a tar-like output (the 'normal' output). You can however
get a tree-like output (the 'tree' output) or an XML structured output (the 'xml'
output). Providing -T without argument gives the same as providing the 'tree'
argument to it. The option --tree-format is an alias to --list-format=tree (backward
compatibility). Note that the files doc/dar-catalog-*.dtd define the format of the
XML output listing (This file is also installed under $PREFIX/share/doc)
-as, --alter=saved list only saved files
-alist-ea, --alter=list-ea
list Extended Attributes name for each file that has some.
-I, -X, -P, -g, -[, -]
can be used to filter file to list base on their name or path.
Else only -v and -b from general options are useful. Note that -v displays an archive summary first,
where a detailed of information about the archive can be obtained. If you want to display only this
summary use -q with -l option.
displayed fields
[data] possible values are [ ] or [Saved] or [InRef] or[DIRTY]. [ ] means that the
data has not been saved because there is no change since backup of reference. [Saved]
means that the data has been saved, and thus this archive is able to restore the
file. [InRef] was used in archive generated by dar version 2.3.x and before, when
isolating a catalogue from an archive and means that the file was saved in the
reference archive. Last, [DIRTY] means that data is saved (like [Saved]) but has
changed at the time dar was reading it for backup, leading dar to possibly store the
file in a state it never had.
[EA] possible values are " " (empty string) or [ ] or [InRef], [Saved] or [Suppr]. It
Shows whether Extended Attributes are present and saved ([Saved]), are present but
not saved ([ ]) which means there is no change since backup of reference, if
there is no EA saved for this file (empty string) or if some EA were present in the
archive of reference but none is currently available ([Suppr]). [InRef] was used when
isolating a catalogue (release 2.3.x and before) from an archive and means that the
file was saved in the reference archive.
[compr] possible values are [....%] or [-----] or [ ] or [worse]. Shows if the file has
been compressed and the compression ratio "compressed/uncompressed" ([...%], for
example [ 33%] means that the compressed data takes a third of the corresponding
uncompressed data, thus the lower is this ratio, the better is the compression), or
if the file is stored without compression ([ ] see -Y and -Z options) or if the
file is not subject to compression because it is not a saved regular file ([----]),
or if the file takes more space compressed than its original size ([worse]), due to
compression overhead. Note that the compression ratio used here is the inverse of
what compression tools usually provide (uncompressed/compressed). The reason of this
choice is that the ratio used here has the advantage to always stay between 0 and
100%, which is much more easy to work with to provide a well formatted output.
[S] possible values are [ ] or [X]. [X] only applies to saved plain files, and tells that
the file is stored using sparse file data structure: not all data is stored, long
sequence of zeros are skipped. This also means that at restoration time, if the
filesystem supports it, holes will be restored. To store hole information libdar uses
escape sequence (special sequence of byte), but to avoid real data to be considered
as such escape sequence, a special escape sequence is used when data looks like an
escape sequence. So if a data contains a such escape sequence, it must be read as if
it contains holes to be able to restore back the data in its original form. For that
reason, in some rare circumstances (saving an dar archive inside a dar archive
without compression or encryption, for example) a file without hole may be marked [X]
as if it had holes and will be longer by on byte for each data sequence looking like
an escape sequence.
permission
see ls man page. Note that a star (*) is prepended to the permission string if the
corresponding inode is linked several times to the directory structure (hard link).
user owner of the file
group group owner of the file
size size in byte of the file (if compression is enabled, the real size in the archive is
"compression rate" time smaller).
date the last modification date of the file. The last access time is also saved and
restored, but not displayed.
filename The name of the file.
EXPLICIT OPTIONAL ARGUMENTS
When dar has not been compiled with GNU getopt, which is not present by default on some systems
like FreeBSD, you may lack the optional arguments syntax. For example "-z" will create a parse
error on command-line, or in -B configuration files. The solution is to explicitly give the
argument. Here follows a list of explicit argument to use in place of optional ones:
-z must be replaced by -z 9
-w must be replaced by -w d or -w default
-H must be replaced by -H 1
-0 must be replaced by -0 ref
important ! When using GNU getopt(), optional arguments are available by sticking the argument to the
short option: "-z" for example is available as well as "-z9". But "-z 9" is wrong, it will be read as
"-z" option and "9", a command line argument (not an argument to the -z option). In the other side, when
using a non GNU getopt this time, "-z" becomes an option that always requires an argument, and thus "-z
9" is read as "-z" option with "9" as argument, while "-z9" will be rejected as a unknown option, and
"-z" alone will generate an error as no argument is provided. In consequences, you need a space between
the option (like "-z") and its argument (like "9"), when dar does not rely on a GNU getopt() call, which
also imply you to explicitly use arguments to options listed just above.
EXIT CODES
dar exits with the following code:
0 Operation successful.
1 Syntax error on command-line.
2 Error due to a hardware problem or a lack of memory.
3 Detection of a condition that should never happen, and which is considered as a bug of the
application.
4 Code issued when the user has aborted the program upon dar question from dar. This also happens
when dar is not run from a terminal (for example launched from crontab) and dar has a question
to the user. In that case, dar aborts the same way as if the user pressed the escape key at the
question prompt.
5 is returned when an error concerning the treated data has been detected. While saving, this is
the case when a file could not be opened or read. While restoring, it is the case when a file
could not be created or replaced. While comparing, it is the case when a file in the archive
does not match the one in the filesystem. While testing, it is the case when a file is
corrupted in the archive.
6 an error occurred while executing user command (given with -E or -F option). Mainly because the
creation of a new process is not possible (process table is full) or the user command returned
an error code (exit status different of zero).
7 an error has occurred when calling a libdar routine. This means the caller (dar program), did
not respect the specification of the API (and this can be considered as a particular case of a
bug).
8 the version of dar used is based in finite length integers (it has been compiled with the
option --enable-mode=...). This code is returned when an integer overflow occurred. use the
full version (based in the so called "infinint" class) to avoid this error.
9 this code indicates an unknown error. I have probably forgotten to update the exception caching
code to take care of new exceptions... this is a minor bug you are welcome to report.
10 you have tried to use a feature that has been disabled at compilation time.
11 some saved files have changed while dar was reading them, this may lead the data saved for this
file not correspond to a valid state for this file. For example, if the beginning and the end
of the file have been modified at the same time (while dar is reading it), only the change at
the end will be saved (the beginning has already been read), the resulting state of the file as
recorded by dar has never existed and may cause problem to the application using it.
SIGNALS
If dar receives a signal (see kill(2) man page) it will take the default behavior which most of the time
will abruptly abort the program, except for the following signals:
SIGINT This signal is generated by the terminal when hitting CTRL-C (with the terminal's default
settings), it can also be generated with the kill command
SIGTERM This signal is generated by the system when changing of run-level in particular when doing a
shutdown, it can also be generated with the kill command
SIGHUP Depending on the system, this signal may be sent before the SIGTERM signal at shutdown time, it
can also be generated with the kill command
SIGQUIT This signal is generated by the terminal when hitting CTRL-\ (with the terminal's default
settings), it can also be generated with the kill command
SIGUSR1 This signal can be generated by the kill command
SIGUSR2 This signal can be generated by the kill command
For those previous signals, two behavior exit. For SIGHUP, SIGINT, SIGQUIT, SIGTERM and SIGUSR1, a
delayed termination is done: the backup or isolation operation is stopped, the catalogue is appended to
the archive and the archive is properly completed with the correct terminator string, this way the
generated archive is usable, and can be used as reference for a differential backup at a later time. Note
that if an on-fly isolation had been asked, it will *not* be performed, and no user command will be
launched even if dar has been configured for (-E option). For SIGUSR2 instead a fast termination is done:
in case of backup or isolation, the archive is not completed at all, only memory and mutex are released
properly.
For both type of termination and other operations than backup or isolation, dar's behavior is the same:
For restoration, all opened directories are closed and permissions are set back to their original values
(if they had to be changed for restoration). For listing, comparison, testing, the program aborts
immediately.
Another point, when using one of the previous signals, dar will return with the exist status 4 meaning
that the user has aborted the operation. Note that answering "no" to a question from dar may also lead
dar to exit this way. last, If before the end of the program the same signal is received a second time,
dar will abort immediately.
FILES
$HOME/.darrc and /etc/darrc if present are read for configuration option. They share the same syntax as
file given to -B option. If $HOME/.darrc is not present and only in that case, /etc/darrc is consulted.
You can still launch /etc/darrc from .darrc using a statement like -B /etc/darrc. None of these file
need to be present, but if they are they are parsed AFTER any option on the command line and AFTER
included files from the command line (files given to the -B option). NOTE: if $HOME is not defined
$HOME/.darrc default to /.darrc (at the root of the filesystem).
Else you can see conditional syntax bellow, and -N option above that leads dar to ignore the /etc/darrc
and $HOME/.darrc files.
CONDITIONAL SYNTAX
configuration files (-B option, $HOME/.darrc and /etc/darrc) usually contain a simple list of command-
line arguments, split or not over several lines, and eventually mixed with comments (see -B option for
more). But, you can also use make-like targets to ask for a particular set of commands to be used in
certain conditions.
A condition takes the form of reserved word immediately followed by a colon ':'. This word + colon must
stand alone on its line, eventually with spaces or tabs beside it. The available conditions are:
extract: all option listed after this condition get used if previously on command line or file
the -x option has been used
create: all option listed after this condition get used if previously on command line or file
(-B option) the -c option has been used
list: (or listing:) if -l option has been used
test: if -t option has been used
diff: if -d option has been used
isolate: if -C option has been used
merge: if -+ option has been used
reference: if -A option has been used (except when -A is used for the snapshot feature or in
conjunction with -af)
auxiliary: if -@ option has been used
all: in any case
default: if no -c, -d, -x, -t, -C, -l or -+ option has been used at this point of the
parsing.
The condition stops when the next condition starts, or at End of File. The commands inserted before any
condition are equivalent to those inserted after the "all:" condition. Remark : -c -d -x -t -C and -l are
mutual exclusive, only one of them can be used while calling dar.
Here is an example of conditional syntax
create:
# upon creation exclude the
# following files from compression
-Z "*.mp3" -Z "*.mpg"
all:
-b
-p
default:
# this will get read if not
# command has been set yet
-V
# thus by default dar shows its version
all:
-v
# for any command we also ask to be verbose
# this is added to the previous all: condition
Last point, you may have several time the same condition (several all: ) for example. They will be
concatenated together.
USER TARGETS
User targets are arbitrary words found on command line, that do not start by a dash ('-'). On most system
they should be placed after command and options. They are collected from command-line first, then comes
the parsing of command and optional arguments. Their use is to extend conditional syntax described just
above by having a set of options activated by the user just adding a single word on command-line. Of
course user targets must not be equal to one of the reserved words of the conditional syntax (extract,
create, ... all, default). A valid target is a word (thus without space) composed of lowercase or
uppercase letters (case is sensitive) with eventually digits, dashes '-' or underscores '_' characters.
Let's see an example of use:
first a DCF file named 'example.dcf' that will be given on command line:
# normal set of files considered for backup
create:
-R /
-P proc
-P sys
-P mnt
-D
# if the "home" user target is applied on command line the following command get added
home:
-g home
# if the "verbose" user target is used, we will have some more verbosity ...
verbose:
-v
-vs
Then we could run dar in the following ways:
dar -c test -B example.dcf
in that case only the command in the "create:" section of example.dcf would be used.
dar -c test -B example.dcf verbose
here over the "create:" target the commands under the "verbose:" target (-v and -vs)
would be also used
dar -c test -B example.dcf verbose home
last we use two user targets "verbose:" and "home:" in addition the the "create:"
target of the usual conditional syntax.
Note that if the last option *may* receive an argument, the first user target that follows it will be
assumed an argument to that option. To avoid this, either change the order of options on command line for
the last option been an option that never or always uses an argument (for example -b never has an
argument while -s always has one). Or separate the options from the user targets by the -- word. And of
course you can also use the explicit argument of the last option (see EXPLICIT OPTIONAL ARGUMENT section,
above).
Second point: It is allowed to have user targets inside a DCF file. Note however that targets are
collected in a first phase, which leads some part of the file to be hidden (because the corresponding
conditional syntax or user target is not present). Then, the remaining part of the file is then parsed
and actions for each option found is taken. At that time, new user targets found are just recorded, but
they do not modify the current DCF file layout, in particular, hidden part of the file stay hidden even
if the corresponding user target is read in this same file. Next DCF parsing (which may be triggered by a
second -B option on the command line, or by a -B option inside the current parsed DCF file) will thus be
done with the additional targets found in that first DCF file, so in a way you may have user targets that
activate other user targets. Here follows an examples of two DCF files, first.dcf and second.dcf:
# cat first.dcf
target3:
-K toto
target1:
target2
-B second.dcf
target3
target2:
#never reached
-s 10k
# cat second.dcf
target2:
-v
target3:
-b
In that example, target1 activates both target2 and target3, but at the time of the parsing of first.dcf,
neither target2 nor target3 were yet activated thus '-K toto' and '-s 10k' will never be given to dar
(unless activated beside target1 before first.dcf get parsed), however when comes the time to parse
second.dcf, target2 *and* target3 are activated, thus both '-v' and '-b' will be passed to dar, even if
'target3' is located after '-B second.dcf' in the file first.dcf
ENVIRONMENT
DAR_DCF_PATH
if set, dar looks for Dar Configuration File (DCF files, see -B option) that do not have an
fully qualified path in the directories listed in DAR_DCF_PATH environment variable. This
variable receives a column (:) separated list of paths and look in each of them in turn, up to
the first file found under the requested name.
DAR_DUC_PATH
if set, dar looks for Dar User Command (DUC files, see -E, -F, -~, -= options) that do not have
a fully qualified path in the directories listed in DAR_DUC_PATH. This variable receives a
column (:) separated list of paths and looks in each of them in turn, up to the first file
found under the requested name.
EXAMPLES
You can find some more examples of use in the tutorial, mini-howto, sample scripts, and other related
documentation. All these are available in dar's source package, and are also installed beside dar in the
<--prefix>/share/dar directory. This documentation is also available on-line at
http://dar.linux.free.fr/doc/index.html#2
SEE ALSO
dar_xform(1), dar_slave(1), dar_manager(1), dar_cp(1), TUTORIAL and NOTES included in the source package
and also available at http://dar.linux.free.fr/doc/index.html
KNOWN BUGS
dar cannot restore time of symbolic links. Many (all ?) UNIX do not provide any way to do that, the
utime() system call changes the file pointed to by the link rather than the date of the link itself.
dar saves and restores atime and mtime, but cannot restore ctime (last inode change), there does not
seems to be a standard call to do that under UNIX.
AUTHOR
http://dar.linux.free.fr/
Denis Corbin
France
Europe
3rd Berkeley Distribution March. 3rd, 2012 DAR(1)