| .TH xfs_fsr 8 |
| .SH NAME |
| xfs_fsr \- filesystem reorganizer for XFS |
| .SH SYNOPSIS |
| .nf |
| \f3xfs_fsr\f1 [\f3\-vdg\f1] \c |
| [\f3\-t\f1 seconds] [\f3\-p\f1 passes] [\f3\-f\f1 leftoff] [\f3\-m\f1 mtab] |
| \f3xfs_fsr\f1 [\f3\-vdg\f1] \c |
| [xfsdev | file] ... |
| .br |
| .B xfs_fsr \-V |
| .fi |
| .SH DESCRIPTION |
| .I xfs_fsr |
| is applicable only to XFS filesystems. |
| .PP |
| .I xfs_fsr |
| improves the organization of mounted filesystems. |
| The reorganization algorithm operates on one file at a time, |
| compacting or otherwise improving the layout of |
| the file extents (contiguous blocks of file data). |
| .PP |
| The following options are accepted by |
| .IR xfs_fsr . |
| The |
| .BR \-m , |
| .BR \-t , |
| and |
| .B \-f |
| options have no meaning if any filesystems |
| or files are specified on the command line. |
| .TP 13 |
| .BI \-m " mtab" |
| Use this file for the list of filesystems to reorganize. |
| The default is to use |
| .IR /etc/mtab . |
| .TP |
| .BI \-t " seconds" |
| How long to reorganize. |
| The default is 7200 seconds (2 hours). |
| .TP |
| .BI \-p " passes" |
| Number of passes before terminating global re-org. |
| The default is 10 passes. |
| .TP |
| .BI \-f " leftoff" |
| Use this file instead of |
| .I /var/tmp/.fsrlast |
| to read the state of where to start and as the file |
| to store the state of where reorganization left off. |
| .TP |
| .B \-v |
| Verbose. |
| Print cryptic information about |
| each file being reorganized. |
| .TP |
| .B \-d |
| Debug. Print even more cryptic information. |
| .TP |
| .B \-g |
| Print to syslog (default if stdout not a tty). |
| .TP |
| .B \-V |
| Prints the version number and exits. |
| |
| .PP |
| When invoked with no arguments |
| .I xfs_fsr |
| reorganizes all regular files in all mounted filesystems. |
| .I xfs_fsr |
| makes many cycles over |
| .I /etc/mtab |
| each time making a single pass over each XFS filesystem. |
| Each pass goes through and selects files |
| that have the largest number of extents. It attempts |
| to defragment the top 10% of these files on each pass. |
| .PP |
| It runs for up to two hours after which it records the filesystem |
| where it left off, so it can start there the next time. |
| This information is stored in the file |
| .I /var/tmp/.fsrlast_xfs. |
| If the information found here |
| is somehow inconsistent or out of date |
| it is ignored |
| and reorganization starts at the beginning of the first |
| filesystem found in |
| .IR /etc/mtab . |
| .PP |
| .I xfs_fsr |
| can be called with one or more arguments |
| naming filesystems (block device name), |
| and files to reorganize. |
| In this mode |
| .I xfs_fsr |
| does not read or write |
| .I /var/tmp/.fsrlast_xfs |
| nor does it run for a fixed time interval. |
| It makes one pass through each specified regular file and |
| all regular files in each specified filesystem. |
| A command line name referring to a symbolic link |
| (except to a file system device), |
| FIFO, or UNIX domain socket |
| generates a warning message, but is otherwise ignored. |
| While traversing the filesystem these types |
| of files are silently skipped. |
| .SH FILES |
| .PD 0 |
| .TP 21 |
| /etc/mtab |
| contains default list of filesystems to reorganize. |
| .TP 21 |
| /var/tmp/.fsrlast_xfs |
| records the state where reorganization left off. |
| .PD |
| .SH "SEE ALSO" |
| xfs_fsr(8), |
| mkfs.xfs(8), |
| xfs_ncheck(8), |
| xfs(5). |
| .SH "NOTES" |
| .I xfs_fsr |
| improves the layout of extents for each file by copying the entire |
| file to a temporary location and then interchanging the data extents |
| of the target and temporary files in an atomic manner. |
| This method requires that enough free disk space be available to copy |
| any given file and that the space be less fragmented than the original |
| file. |
| It also requires the owner of the file to have enough remaining |
| filespace quota to do the copy on systems running quotas. |
| .I xfs_fsr |
| generates a warning message if space is not sufficient to improve |
| the target file. |
| .PP |
| A temporary file used in improving a file given on the command line |
| is created in the same parent directory of the target file and |
| is prefixed by the string '\f3.fsr\f1'. |
| The temporary files used in improving an entire XFS device are stored |
| in a directory at the root of the target device and use the same |
| naming scheme. |
| The temporary files are unlinked upon creation so data will not be |
| readable by any other process. |
| .PP |
| .I xfs_fsr |
| does not operate on files that are currently mapped in memory. |
| A 'file busy' error can be seen for these files if the verbose |
| flag (\f3-v\f1) is set. |
| .PP |
| Files marked as no\-defrag will be skipped. The |
| .IR xfs_io (8) |
| chattr command with the f attribute can be used to set or clear |
| this flag. Files and directories created in a directory with the |
| no\-defrag flag will inherit the attribute. |
| .PP |
| An entry in |
| .I /etc/mtab |
| or the file specified using the |
| .B \-m |
| option must have the |
| .B rw |
| option specified for read and write access. |
| If this option is not present, then |
| .I xfs_fsr |
| skips the |
| filesystem described by that line. |
| See the |
| .IR fstab (5) |
| reference page for |
| more details. |
| .PP |
| In general we do not foresee the need to run |
| .I xfs_fsr |
| on system partitions such as |
| .IR / , |
| .I /boot |
| and |
| .I /usr |
| as in general these will not suffer from fragmentation. |
| There are also issues with defragmenting files |
| .IR lilo (8) |
| uses to boot your system. It is recommended that these files |
| should be flagged as no\-defrag with the |
| .IR xfs_io (8) |
| chattr command. Should these files be moved by |
| .I xfs_fsr |
| then you must rerun |
| .I lilo |
| before you reboot or you may have an unbootable system. |