NAME
dar - disk archive
SYNOPSIS
dar [-c | -x | -l | -d | -t | -C | -+]
[<path>/]<basename> [options] 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.)
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" design the same thing, and are used
interchangeably.
At the difference of the tar command, dar is not
suited to directly use tapes. So keep using tar for tape archives.
Because, even using tar to write a slice on a tape, you will loose
all the interest of another feature of dar which is its
ability to directly access the data of saved file even when
compression is used. This way and in contrast to the tar command,
dar is able to extract a given file much faster from a backup and
to also recover files that follow a data corruption (loosing just
the file in which data corruption occurred).
This has of course its limitations, in particular when a data
corruption occurs in the vital part of the backup, i.e. the few
first bytes of each slice, and the last part of the archive (the
catalogue). In case you need to store archive on a bad quality
medium, you could protect each slice with a Parchive recovery file.
(see NOTES for more information about Parchive, and how to
transparently run Parchive from dar)
Slices have a base name given on the command line, which is
completed by a dot, a number, a dot and the extension (dar) to form
a filename. On command line you will never have to give the full
file name of a slice.
- Let's take an example:
- considering the base name "joe", dar will make one or several
slices during backup. Theses are files with the names joe.1.dar
joe.2.dar ... joe.10.dar ... etc. If you want to extract, list, or
use these backup as reference, you will only have to use the base
name which is the string "joe" here.
OPTIONS
COMMANDS:
Important note: Not all system actually support long
options (Solaris, FreeBSD, ...). For example --create will not be
available on theses 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.
- -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 slice 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.
- -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).
- -l, --list [<path>/]<basename>
- lists the contents of the given backup. In general dar
will only require the first and the last slice of the archive.
- -t, --test [<path>/]<basename>
- checks the backup integrity. Even without compression, dar is
able to detect at least one error by data file, thanks to a 16 bits
CRC recorded in the catalogue. If one error occurred in file's data
stored the archive, dar will report it in 100% of all cases. If two
error occurred, dar will see them in 93,8% of all cases. If three
error occurred, dar will see them in 100% of all cases. If four
errors occurred, dar will see them in 90.6% of all cases, etc.
- -d, --diff [<path>/]<basename>
- compares saved files in the backup with those in the
filesystem.
- -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
catalogue is produced on the standard output, allowing the user to
send the resulting catalogue through a pipe. Note that there is no
difference in concept between a catalogue and an archive. Thus you
can do all operation on a catalogue, in particular take it as
reference for a differential archive. A catalogue produced with -C
is just like a differential archive done right after a full backup,
(no data in it).
- -+, --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. Note that
in the current status, the resulting archive contains all files
from the mandatory archive of reference (that matched the file
selection mechanism) plus those file of the auxiliary archive that
are not already present in the mandatory archive of reference. In
other words, no overwriting is possible, a more complex way to
solve conflicts will take place in a future version. Last 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.
- -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.
- -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 file or slice.
- -w, --no-warn
- Do not warn before overwriting file or slice. By default (no -n
and no -w) overwriting is allowed but a warning is issued before
proceeding. This option may receive 'a' as argument:
- -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 wild cards (like * and ?) 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.
- -I, --include <mask>
- The mask is applied to filenames which are not directories. 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.
- -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 wild-cards like * or ? see man
page for more informations.
- -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 wild-cards, theses
would not be interpreted.
- -[, --include-from-file <listing_file>
- Files listed in the listing file are included for the
operation. No wild card 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. 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 not save files out of the -R given root directory
tree.
- -], --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 wild cards 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
theses options exist. The normal original method and the ordered
method:
-
- the normal method is the default:
- 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 wild-cards).
- 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. Since
version 2.3.x the name of EA 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 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 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 the were you have to use -ae for dar removes the
EA that have been removed along the time, else you could get an EA
that has been removed in a intermediate differential backup not
been removed at restoration time.
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 ;-), by default 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 slide effect, you can use the -ac option.
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/NOTES for
examples of use).
- -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/NOTES for
examples of use.
- -O, --comparison-field[=<flag>]
- When comparing with the archive of reference (-c -A), while
doing a differential backup, when extracting (-x) or when comparing
(-d) do only consider certain files to determine if a file has
changed. The available flags are:
-
- ignore-owner
- all fields are considered except ownership.
Thisisusefulwhendarisusedbyanon-privileged
user.Itwillnotconsiderafilehaschangedonly
uid or gid is different.
- 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.
- inode-type
- Only the inode type is considered. Ownership ignored,
permission, last modification date are ignored. Inode specific
attributes are still considered (like file size for plain
files)
When no flag is provided, -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 is now just an alias to the
--comparison-field=ignore-owner option.
- -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, and at restoration time if the -r option (restore
only more recent files) is used. 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).
- -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.
- %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.
- -F, --execute-ref <string>
- same as -E but is applied between slices of the reference
archive (-A option).
- -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") 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. Note that giving the pass phrase 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 at 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.
- -J, --key-ref [[<algo>]:]<string>
- same as -K but the given key is used to decrypt the archive of
reference (given with -A option).
- -#, --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).
- -*, --crypto-block-ref <size>
- same as --crypto-block but for the archive of reference (same
default value).
- -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
now 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.
- -N, --noconf
- Do not try to read neither ~/.darrc nor /etc/darrc
configuration files. See files section bellow.
- -e, --empty
- Do not perform any action (backup, restoration or merging),
displays all messages as if it was for real ("dry run" action).
- -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 interpreration 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 the 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.
- -aa, --alter=atime
- when reading a filesystem, while doing a backup (-c option) or
comparing (-d option) by default dar tries to be as much
transparent as possible, and set back the last access time (atime)
of read files and directories, as if they have not been read. But,
preserving atime of read files, make their ctime to be changed
(last inode change). There is no possibility to preserve both atime
and ctime. If you want to overcome the default original behavior of
dar and want to keep ctime unchanged, the --alter=atime is for you.
Some security software rely on the ctime to be preserved, some
other software rely on the atime to be preserved like leafnode NNTP
caching software.
- -ac, --alter=ctime
- set back the date alteration to ctime (see --alter=atime
above), this is the default behavior. The use of this switch is to
override the -aa option in dar configuration files or command-line
(see -B option). From -aa and -ac the one which is last parsed from
command-line or included files takes the win.
- -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.
- -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
)
instead of the default glob expression (man )
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 and -g options, the given mask is usually prefixed by the
root (-R option) directory, thus the "^" symbol may not work as
expected not being at beginning of a line.
- -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).
- -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.
SAVING, ISOLATION AND MERGING OPTIONS (to use with -c, -C or
-+)
- -z[level], --gzip[=level]
- compresses within slices using gzip algorithm (if 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.
- -y[level], --bzip2[=level]
- compresses using bzip2 algorithm. See -z above for usage
details.
- -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>
- specifies the archive to use as reference (mandatory with -C).
By default (default is only possible with -c option) no archive is
used and all files are saved (in regards to -I -X -P and -g
options). 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 first and the last slice are 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:
-Anexistingarchivebasename,whichwillbe
takenasreference
-adash(-)whichimpliestheuseof-o
and-ioptions,thisallowsthearchiveofreferenceexample.
-aplussign(+)whichmakesthereferencebe
thecurrentdirectorystatus(notavailablewith-+
option:backup.
-a<date>,if-afoptionhasbeenplacedbefore
-Aonthecommand-line(orinaincludedfile,below.
- -@, --aux-ref [<path>]/<basename>
- specifies an auxiliary archive of reference. This option is
only available with -+ option (merging). Over -A option which is
mandatory with -+ option, you may give a second archive of
reference thanks to the -% option. This allows one to merge two
archive in a single one. See also -$, -~ and -% for other options
concerning auxiliary archive of reference.
- -$, --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).
- -D, --empty-dir
- 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 theses. 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 theses directories (if
necessary). This option has no meaning with -C and is ignored in
that case.
- -Z, --exclude-compression <mask>
- Filenames covered by this mask are not compressed. It is only
useful with -z or -y. 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.
- -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 no -y. 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.
- -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.
- -ak, --alter=keep-compressed
- During merging operation, keep files compressed, this has
several restrictions : -z, -y, -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).
- -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:
-anumberofsecondsinceJan1st,1970
-adateinthefollowingform[[[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.
- -G, --on-fly-isolate [<path>]/<basename>
- When creating a backup (-c option) or merging two backups (-+
option), -G option perform a catalogue isolation of the resulting
archive. This step is done after the backup/merging has completed.
The on-fly isolation is compressed with bzip2 (using compression
level 9), and is a single sliced archive without encryption. Due to
command-line exiguity, it is not possible to change compression
algo, slice size or encryption scheme for the on-fly isolation. If
you need a more complicated isolation, either look for a GUI over
libdar, or do a normal (not on-fly) isolation (By the way it is
possible to isolate an already isolated catalogue, this is
equivalent to a copy, but you can add encryption, change
compression, change slicing, etc.), you can also use dar_xform if
you only want to change slices size (this is faster as no
decompression/re-compression is done).
- -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
(useless with -+ option)
- -, , --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)
RESTORATION OPTIONS (to use with -x)
- -k, --no-deleted
- Do 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.
- -r, --recent
- restore only files that are absent or more recent than those
present in filesystem. -r is useless if -n is present.
- -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
- 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.
TESTING AND DIFFERENCE OPTIONS (to use with -t or -d)
No specific option, but all general options are available except
-n and -w which are useless, as testing and comparing only read
data.
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
- -I and -X
- can be used to filter file to list base on their name (is
ignored when --list-format=tree is used). Note that -P and -g
options are not available while listing. Else only -v and -b from
general options are useful. Note that -v displays an archive
summary first, where a lot of information about the archive can be
obtained.
- displayed
- fields
-
- [data]
- possible values are [ ] or [Saved] or [InRef] . [ ] 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] is used when
isolating a catalogue from an archive and means that the file was
saved in the reference archive.
- [EA]
- possible values are " " (empty string) or [ ] or [InRef] or
[Saved]. It Shows if Extended Attributes are present and saved
([Saved]), are present but not saved ([ ]) which means there is no
change since backup of reference, or if there is no EA saved for
this file (empty string). [InRef] is used when isolating a
catalogue 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 rate reached
([...%]), 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.
- permission
- see ls man page.
- 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
- -y
- must be replaced by -y 9
- -w
- must be replaced by -w d or -w default
- -H
- must be replaced by -H 1 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 infinint) 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
theses 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
- listing: (or list:)
- 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
- 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.
SEE ALSO
dar_xform(1),
dar_slave(1),
dar_manager(1),
dar_cp(1)
see also TUTORIAL and NOTES files in the documentation.
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