| --------------------------------- |
| Notes on using xfsdump/xfsrestore |
| --------------------------------- |
| |
| Contents |
| ---------- |
| Disclaimer |
| Example usage |
| Testing of xfsdump |
| Command Option Changes from IRIX xfsdump to Linux |
| Notes on tape block sizes |
| Restoring an IRIX dump tape onto a Linux xfs filesystem |
| TODO List |
| |
| |
| Disclaimer |
| ---------- |
| Testing of this software has been done using the Linux |
| scsi tape driver only. If one is using a different tape |
| driver one may need to use the -m option which makes |
| less assumptions about the tape driver's capabilities. |
| |
| Example usage |
| ------------- |
| |
| 1. Dumping a filesystem to a dump file: |
| xfsdump -f dump_file -L session_label -M media_label file_system |
| e.g. xfsdump -f ./mydump -L 'session1' -M 'media1" /mnt/xfs0 |
| |
| 2. Restoring a filesystem from a dump file: |
| xfsrestore -f ./mydump -L session_label dest_dir |
| e.g. xfsrestore -f ./mydump -L 'session1' ./myfilesystem |
| |
| 3. Dumping a filesystem to a dump tape: |
| xfsdump -f tapedevice -L session_label -M media_label file_system |
| e.g. xfsdump -f /dev/st0 -L 'session1' -M 'media1" /mnt/xfs0 |
| |
| 4. Restoring a filesystem from a dump tape: |
| xfsrestore -f tapedevice -L session_label dest_dir |
| e.g. xfsrestore -f /dev/st0 -L 'session1' ./myfilesystem |
| |
| |
| Testing of xfsdump |
| ------------------ |
| |
| There are scripts in the stress directory which |
| verify that xfsdump and xfsrestore are working. |
| Use "grep xfsdump group" to see which tests they are. |
| |
| Stress/common.config needs to be updated for one's host with: |
| SCRATCH_DEV - device for test filesystem |
| SCRATCH_MNT - mount point for test filesystem |
| TAPE_DEV - tape device e.g. /dev/st0 |
| RMT_TAPE_DEV - remote tape device |
| RMT_IRIXTAPE_DEV - remote IRIX tape device |
| RMT_TAPE_USER - remote user for tape device |
| The first two above are absolutely necessary. |
| The tape device variables are only needed if one wants |
| to test out that particular functionality of xfsdump/xfsrestore. |
| The RMT_* variables are needed for testing remote tape capability. |
| |
| With the common.config updated one should be able to run |
| as root: |
| # ./check -g xfsdump |
| |
| |
| Command Option Changes from IRIX xfsdump to Linux |
| ------------------------------------------------- |
| |
| Xfsdump on Linux has been changed (from the IRIX version) |
| to allow the -b option to be used without the -m option. |
| In IRIX, the block size could only be specified if one selected |
| the minimum remote (-m) option. This means that one can now |
| override the block size to use for dumping and restoring |
| from tape, with an upper limit of 2Mb. |
| |
| The semantics of the -m option has also changed. In IRIX, this |
| option would only take effect for remote tape specifications. |
| In the Linux version, the -m option can be used for local tapes |
| where the tape device only has a restricted set of mt(1) commands. |
| |
| The -q option has been added to tell xfsdump/xfsrestore explicitly |
| that a QIC tape drive is being used. In IRIX, an i/o control system |
| call is issued which returns the subtype of tape device being used; |
| for example "TPQIC*". However, there is no direct equivalent in Linux. |
| |
| |
| Notes on tape block sizes |
| ------------------------- |
| The IRIX version of xfsdump has typically used 2Mb tape blocks |
| for writing local dumps to tape. The size is actually calculated by |
| getting the maximum block size supported from the tape device |
| ($mt blksize) and capping it at 2Mb (i.e. min(2Mb, blk-size-max)). |
| On Linux, the maximum block size is not exported by the scsi tape driver, |
| and has been set to have a default of 1Mb. |
| |
| In some experiments with a 2Mb block size, we found that sometimes |
| read and writes using the scsi tape driver would fail: |
| /tmp/xfsdump: tape op: writing 2097152 bytes |
| /tmp/xfsdump: tape op write of 2097152 bytes failed: errno == 75 (Value too large for defined data type) |
| It apparently fails when scsi_init_malloc() fails with EOVERFLOW. |
| According to Kai Makisara, the tape drive supports scatter/gather |
| and has a default of 16 segments of 128K or 256K with the |
| first segment of only 32K. So with 128K segments we have, |
| 15 * 128k + 32 K = 1952K (short of 2Mb). |
| Thus in order to use large block buffers requires one |
| to increase the number of segments, "max_sg_segs". |
| A suggested number to use is 64 segments (it apparently depends |
| on the scsi adapter, but it has been suggested that most should |
| handle at least 64). |
| This can be done by either: |
| - insmod st max_sg_segs=64 |
| - add to /etc/modules.conf: |
| options st max_sg_segs=64 |
| - add to boot command line: |
| st=max_sg_segs:64 |
| |
| The IRIX version of xfsdump has typically used 240K tape blocks |
| for writing remote dumps to tape. |
| |
| The Linux ext2 dump program and tar(1) would not have this problem |
| as they use 10K default blocks which can be increased using the |
| -b option (up to a maximum of 64K blocks for dump(1)). |
| |
| Using a smaller block size |
| -------------------------- |
| Sometimes a tape device will not support large blocksizes of 1Mb. |
| The scsi tape driver outputs the maximum block size the tape |
| supports in the syslog. |
| For example: |
| st0: Block limits 1 - 245760 bytes. |
| Unfortunately, the scsi tape driver does not export the maximum |
| block size (other than via the syslog), therefore xfsdump/xfsrestore |
| can not adjust the blocksize automatically. |
| In this case, one should specify this maximum blocksize as |
| the blocksize for xfsdump/xfsrestore to use with the -b option. |
| For example: |
| xfsdump -b 245760 -f /dev/st0 -M media -L session / |
| Blocksizes of less than 240K have not be tested. |
| |
| |
| Restoring an IRIX dump tape onto a Linux xfs filesystem |
| ------------------------------------------------------- |
| |
| To restore an IRIX xfs dump tape, one will need to specify |
| the blocksize that was used by giving a -b option. |
| |
| Examples: |
| |
| For 2Mb blocks: |
| xfsrestore -f /dev/st0 -b 2097152 -L 'session1' dest_dir |
| |
| For 240K blocks (a remotely dumped tape): |
| xfsrestore -f /dev/st0 -b 245760 -L 'session1' dest_dir |
| |
| If errors such as: |
| /tmp/xfsdump: tape op write of 2097152 bytes failed: errno == 75 (Value too large for defined data type) |
| occur, then one may need to increase the number of segments used |
| by the scsi tape driver (max_sg_segs) as mentioned above. |
| |
| |
| TODO List |
| --------- |
| |
| * fix up xfsdump/xfsrestore to run multi-threaded |
| (needs pthreads & locking code) |
| * complete the port of xfs_copy |
| (needs pthreads & locking code) |