Tapes used by ufsdump(1M) and ufsrestore(1M) contain:
- a header record
- two groups of bit map records
- a group of records describing directories
- a group of records describing files
The format of the header record and of the first record of each description as given in the include file <protocols/dumprestore.h> is:
#define TP_BSIZE | 1024 |
#define NTREC | 10 |
#define HIGHDENSITYTREC | 32 |
#define CARTRIDGETREC | 63 |
#define TP_NINDIR | (TP_BSIZE/2) |
#define TP_NINOS | (TP_NINDIR / sizeop (long)) |
#define LBLSIZE | 16 |
#define NAMELEN | 64 |
#define NFS_MAGIC | (int)60012 |
#define CHECKSUM | (int)84446 |
|
union u_data {
char s_addrs[TP_NINDIR];
long s_inos[TP_NINOS];
union u_spcl {
char dummy[TP_BSIZE];
struct s_spcl {
long c_type;
time_t c_date;
time_t c_ddate;
long c_volume;
daddr_t c_tapea;
ino_t c_inumber;
long c_magic;
long c_checksum;
struct dinode c_dinode;
long c_count;
union u_data c_data;
char c_label[LBLSIZE];
long c_level;
char c_filesys[NAMELEN];
char c_dev[NAMELEN];
char c_host[NAMELEN];
long c_flags;
long c_firstrec;
long c_spare[32];
} s_spcl;
} u_spcl;
|
long | c_type; |
time_t | c_date; |
time_t | c_ddate; |
long | c_volume; |
daddr_t | c_tapea; |
ino_t | c_inumber; |
long | c_magic; |
long | c_checksum; |
struct dinode | c_dinode; |
long | c_count; |
union | u_data c_data; |
char | c_label[LBLSIZE]; |
long | c_level; |
char | c_filesys[NAMELEN]; |
char | c_dev[NAMELEN]; |
char | c_host[NAMELEN]; |
long | c_flags; |
long | c_firstrec; |
long | c_spare[32]; |
|
} s_spcl;
} u_spcl;
#define spcl u_spcl.s_spcl
#define c_addr c_data.s_addrs
#define c_inos cdata.s_inos
|
#define TS_TAPE | 1 |
#define TS_INODE | 2 |
#define TS_ADDR | 4 |
#define TS_BITS | 3 |
#define TS_CLRI | 6 |
#define TS_END | 5 |
#define TS_EOM | 7 |
#define DR_NEWHEADER | 1 |
#define DR_INODEINFO | 2 |
#define DR_REDUMP | 4 |
#define DR_TRUELIC | 8 |
#define DUMPOUTFMT | "%-24s %c %s" |
#define DUMPINFMT | "%24s %c %[^\n]\n" |
The constants are described as follows:
-
TP_BSIZE
- Size of file blocks on the dump tapes. Note that TP_BSIZE must be a multiple of DEV_BSIZE.
-
NTREC
- Default number of TP_BSIZE byte records in a physical tape block, changeable
by the b option to ufsdump(1M).
-
HIGHDENSITYNTREC
- Default number of TP_BSIZE byte records in a physical tape
block on 6250 BPI or higher density tapes.
-
CARTRIDGETREC
- Default number of TP_BSIZE records in a physical tape block on
cartridge tapes.
-
TP_NINDIR
- Number of indirect pointers in a TS_INODE or TS_ADDR record. It must be a power of 2.
-
TP_NINOS
- The maximum number of volumes on a tape. Used for tape labeling in hsmdump and hsmrestore (available with Online:Backup 2.0 optional software package SUNWhsm).
-
LBLSIZE
- The maximum size of a volume label. Used for tape labeling in hsmdump and hsmrestore (available with Online:Backup 2.0 optional software package SUNWhsm).
-
NAMELEN
- The maximum size of a host's name.
-
NFS_MAGIC
- All header records have this number in c_magic.
-
CHECKSUM
- Header records checksum to this value.
The TS_ entries are used in the c_type field to indicate what sort of header this is. The types and their meanings are as follows:
-
TS_TAPE
- Tape volume label.
-
TS_INODE
- A file or directory follows. The c_dinode field is a copy of the disk inode and contains bits
telling what sort of file this is.
-
TS_ADDR
- A subrecord of a file description. See s_addrs below.
-
TS_BITS
- A bit map follows. This bit map has a one bit for each inode that was dumped.
-
TS_CLRI
- A bit map follows. This bit map contains a zero bit for all inodes that were empty on the file system when dumped.
-
TS_END
- End of tape record.
-
TS_EOM
- floppy EOM -- restore compat with old dump
The flags are described as follows:
-
DR_NEWHEADER
- New format tape header.
-
DR_INFODEINFO
- Header contains starting inode info.
-
DR_REDUMP
- Dump contains recopies of active files.
-
DR_TRUEINC
- Dump is a "true incremental".
-
DUMPOUTFMT
- Name, incon, and ctime (date) for printf.
-
DUMPINFMT
- Inverse for scanf.
The fields of the header structure are as follows:
-
s_addrs
- An array of bytes describing the blocks of the dumped file. A byte is zero if the block
associated with that byte was not present on the file system; otherwise, the byte is non-zero. If the block was not present on the file lsystem, no block was dumped; the block will be stored as a hole
in the file. If there is not sufficient space in this record to describe all the blocks in a file, TS_ADDR records will be scattered through the file, each one
picking up where the last left off
-
s_inos
- The starting inodes on tape.
-
c_type
- The type of the record.
-
c_date
- The date of the previous dump.
-
c_ddate
- The date of this dump.
-
c_volume
- The current volume number of the dump.
-
c_tapea
- The logical block of this record.
-
c_inumber
- The number of the inode being dumped if this is of type TS_INODE.
-
c_magic
- This contains the value MAGIC above, truncated as needed.
-
c_checksum
- This contains whatever value is needed to make the record sum to CHECKSUM.
-
c_dinode
- This is a copy of the inode as it appears on the file system.
-
c_count
- The count of bytes in s_addrs.
-
u_data c_data
- The union of either u_data c_data The union of either s_addrs or s_inos.
-
c_label
- Label for this dump.
-
c_level
- Level of this dump.
-
c_filesys
- Name of dumped file system.
-
c_dev
- Name of dumped service.
-
c_host
- Name of dumped host.
-
c_flags
- Additional information.
-
c_firstrec
- First record on volume.
-
c_spare
- Reserved for future uses.
Each volume except the last ends with a tapemark (read as an end of file). The last volume ends with a TS_END record and then the tapemark.
The dump history is kept in the file /etc/dumpdates. It is an ASCII file with three fields separated by white space:
- The name of the device on which the dumped file system resides.
- The level number of the dump tape; see ufsdump(1M).
- The date of the incremental dump in the format generated by ctime(3C).
DUMPOUTFMT is the format to use when using printf(3C) to write an entry to /etc/dumpdates; DUMPINFMT is the format to use when using scanf(3C) to read an entry from /etc/dumpdates.
|