NAME
tar - tape archive file format
DESCRIPTION
Tar, (the tape archive command) dumps several files into
one, in a
medium suitable for transportation.
A "tar tape" or file
is a series of blocks. Each block is of
size TBLOCK. A file on the tape is represented by a header
block
which describes the file, followed by zero or more blocks
which
give the contents of the file. At the end of the tape are
two
blocks filled with binary zeros, as an end-of-file
indicator.
The blocks are grouped for
physical I/O operations. Each group of
n blocks (where n is set by the b keyletter on the tar(1)
command
line - default is 20 blocks) is written with a single system
call;
on nine-track tapes, the result of this write is a single
tape
record. The last group is always written at the full size,
so
blocks after the two zero blocks contain random data. On
reading,
the specified or default group size is used for the first
read, but
if that read returns less than a full tape block, the
reduced block
size is used for further reads.
The header block looks like:
#define TBLOCK 512
#define NAMSIZ 100
union hblock {
char dummy[TBLOCK];
struct header {
char name[NAMSIZ];
char mode[8];
char uid[8];
char gid[8];
char size[12];
char mtime[12];
char chksum[8];
char linkflag;
char linkname[NAMSIZ];
} dbuf;
};
Name is a null-terminated
string. The other fields are zero-filled
octal numbers in ASCII. Each field (of width w) contains w-2
digits, a space, and a null, except size and mtime, which do
not
contain the trailing null and chksum which has a null
followed by a
space. Name is the name of the file, as specified on the tar
command line. Files dumped because they were in a directory
which
was named in the command line have the directory name as
prefix and
/filename as suffix. Mode is the file mode, with the top bit
masked off. Uid and gid are the user and group numbers which
own
the file. Size is the size of the file in bytes. Links and
symbolic links are dumped with this field specified as zero.
Mtime
is the modification time of the file at the time it was
dumped.
Chksum is an octal ASCII value which represents the sum of
all the
bytes in the header block. When calculating the checksum,
the
chksum field is treated as if it were all blanks. Linkflag
is NULL
if the file is "normal" or a special file, ASCII
‘1’ if it is an
hard link, and ASCII ‘2’ if it is a symbolic
link. The name
linked-to, if any, is in linkname, with a trailing null.
Unused
fields of the header are binary zeros (and are included in
the
checksum).
The first time a given i-node
number is dumped, it is dumped as a
regular file. The second and subsequent times, it is dumped
as a
link instead. Upon retrieval, if a link entry is retrieved,
but
not the file it was linked to, an error message is printed
and the
tape must be manually re-scanned to retrieve the linked-to
file.
The encoding of the header is
designed to be portable across
machines.
SEE ALSO
tar(1)
BUGS
Names or linknames longer than NAMSIZ produce error reports
and
cannot be dumped.