165 lines
5.8 KiB
Plaintext
165 lines
5.8 KiB
Plaintext
@c This is part of the paxutils manual.
|
|
@c Copyright (C) 2005--2022 Free Software Foundation, Inc.
|
|
@c Written by Sergey Poznyakoff
|
|
@c This file is distributed under GFDL 1.1 or any later version
|
|
@c published by the Free Software Foundation.
|
|
|
|
A @dfn{snapshot file} (or @dfn{directory file}) is created during
|
|
incremental backups (@pxref{Incremental Dumps}). It
|
|
contains the status of the file system at the time of the dump and is
|
|
used to determine which files were modified since the last backup.
|
|
|
|
@GNUTAR{} version @value{VERSION} supports three snapshot file
|
|
formats. The first format, called @dfn{format 0}, is the one used by
|
|
@GNUTAR{} versions up to and including 1.15.1. The second format, called
|
|
@dfn{format 1} is an extended version of this format, that contains more
|
|
metadata and allows for further extensions. It was used by alpha release
|
|
version 1.15.90. For alpha version 1.15.91 and stable releases
|
|
version 1.16 up through @value{VERSION}, the @dfn{format 2} is used.
|
|
|
|
@GNUTAR{} is able to read all three formats, but will create
|
|
snapshots only in format 2.
|
|
|
|
This appendix describes all three formats in detail.
|
|
|
|
@enumerate 0
|
|
@cindex format 0, snapshot file
|
|
@cindex snapshot file, format 0
|
|
@item
|
|
@samp{Format 0} snapshot file begins with a line containing a
|
|
decimal number that represents a @acronym{UNIX} timestamp of the
|
|
beginning of the last archivation. This line is followed by directory
|
|
metadata descriptions, one per line. Each description has the
|
|
following format:
|
|
|
|
@smallexample
|
|
[@var{nfs}]@var{dev} @var{inode} @var{name}
|
|
@end smallexample
|
|
|
|
@noindent
|
|
where:
|
|
|
|
@table @var
|
|
@item nfs
|
|
A single plus character (@samp{+}), if this directory is located on
|
|
an @acronym{NFS}-mounted partition, otherwise empty.
|
|
|
|
(That is, for non-NFS directories, the first character on the
|
|
description line contains the start of the @var{dev} field.)
|
|
|
|
@item dev
|
|
Device number of the directory;
|
|
|
|
@item inode
|
|
I-node number of the directory;
|
|
|
|
@item name
|
|
Name of the directory. Any special characters (white-space,
|
|
backslashes, etc.) are quoted.
|
|
@end table
|
|
|
|
@cindex format 1, snapshot file
|
|
@cindex snapshot file, format 1
|
|
@item
|
|
@samp{Format 1} snapshot file begins with a line specifying the
|
|
format of the file. This line has the following structure:
|
|
|
|
@smallexample
|
|
@samp{GNU tar-}@var{tar-version}@samp{-}@var{incr-format-version}
|
|
@end smallexample
|
|
|
|
@noindent
|
|
where @var{tar-version} is the version number of @GNUTAR{}
|
|
implementation that created this snapshot, and
|
|
@var{incr-format-version} is the version number of the snapshot format
|
|
(in this case @samp{1}).
|
|
|
|
Next line contains two decimal numbers, representing the
|
|
time of the last backup. First number is the number of seconds, the
|
|
second one is the number of nanoseconds, since the beginning of the
|
|
epoch.
|
|
|
|
Lines that follow contain directory metadata, one line per
|
|
directory. Each line is formatted as follows:
|
|
|
|
@smallexample
|
|
[@var{nfs}]@var{mtime-sec} @var{mtime-nsec} @var{dev} @var{inode} @var{name}
|
|
@end smallexample
|
|
|
|
@noindent
|
|
where @var{mtime-sec} and @var{mtime-nsec} represent last
|
|
modification time of this directory with nanosecond precision;
|
|
@var{nfs}, @var{dev}, @var{inode} and @var{name} have the same meaning
|
|
as with @samp{format 0}.
|
|
|
|
@cindex format 2, snapshot file
|
|
@cindex snapshot file, format 2
|
|
@item
|
|
@samp{Format 2} snapshot file begins with a format identifier, as described for
|
|
version 1, e.g.:
|
|
|
|
@smallexample
|
|
GNU tar-@value{VERSION}-2
|
|
@end smallexample
|
|
|
|
This line is followed by newline. Rest of file consists of
|
|
records, separated by null (@acronym{ASCII} 0)
|
|
characters. Thus, in contrast to the previous formats, format 2
|
|
snapshot is a binary file.
|
|
|
|
First two records are decimal integers, representing the
|
|
time of the last backup. First number is the number of seconds, the
|
|
second one is the number of nanoseconds, since the beginning of the
|
|
epoch. These are followed by arbitrary number of directory records.
|
|
|
|
Each @dfn{directory record} contains a set of metadata describing a
|
|
particular directory. Parts of a directory record are delimited with
|
|
@acronym{ASCII} 0 characters. The following table describes each
|
|
part. The @dfn{Number} type in this table stands for a decimal integer
|
|
in @acronym{ASCII} notation. (Negative values are preceded with a "-"
|
|
character, while positive values have no leading punctuation.)
|
|
|
|
@multitable @columnfractions 0.25 0.15 0.6
|
|
@headitem Field @tab Type @tab Description
|
|
@item nfs @tab Character @tab @samp{1} if the directory is located on
|
|
an @acronym{NFS}-mounted partition, or @samp{0} otherwise;
|
|
@item timestamp_sec @tab Number @tab Modification time, seconds;
|
|
@item timestamp_nsec @tab Number @tab Modification time, nanoseconds;
|
|
@item dev @tab Number @tab Device number;
|
|
@item ino @tab Number @tab I-node number;
|
|
@item name @tab String @tab Directory name; in contrast to the
|
|
previous versions it is not quoted;
|
|
@item contents @tab Dumpdir @tab Contents of the directory;
|
|
@xref{Dumpdir}, for a description of its format.
|
|
@item
|
|
@end multitable
|
|
|
|
Dumpdirs stored in snapshot files contain only records of types
|
|
@samp{Y}, @samp{N} and @samp{D}.
|
|
|
|
@cindex snapshot file field ranges
|
|
@opindex show-snapshot-field-ranges
|
|
The specific range of values allowed in each of the @dfn{Number} fields
|
|
depends on the underlying C datatypes as determined when @command{tar}
|
|
is compiled. To see the specific ranges allowed for a particular
|
|
@command{tar} binary, you can use the
|
|
@option{--show-snapshot-field-ranges} option:
|
|
|
|
@smallexample
|
|
$ @kbd{tar --show-snapshot-field-ranges}
|
|
This tar's snapshot file field ranges are
|
|
(field name => [ min, max ]):
|
|
|
|
nfs => [ 0, 1 ],
|
|
timestamp_sec => [ -9223372036854775808, 9223372036854775807 ],
|
|
timestamp_nsec => [ 0, 999999999 ],
|
|
dev => [ 0, 18446744073709551615 ],
|
|
ino => [ 0, 18446744073709551615 ],
|
|
@end smallexample
|
|
|
|
(This example is from a GNU/Linux x86_64 system.)
|
|
|
|
@end enumerate
|
|
|
|
@c End of snapshot.texi
|