# fsck.fat

## NAME



           fsck.fat - check and repair MS-DOS FAT filesystems
    


## SYNOPSIS



           **fsck.fat**[_OPTIONS_] _DEVICE_
    


## DESCRIPTION



           **fsck.fat** verifies the consistency of MS-DOS filesystems and
           optionally tries to repair them.
    
           The following filesystem problems can be corrected (in this
           order):
    
           •   FAT contains invalid cluster numbers.  Cluster is changed to
               EOF.
    
           •   File's cluster chain contains a loop.  The loop is broken.
    
           •   Bad clusters (read errors).  The clusters are marked bad and
               they are removed from files owning them.  This check is
               optional.
    
           •   Directories with a large number of bad entries (probably
               corrupt).  The directory can be deleted.
    
           •   Files . and .. are non-directories.  They can be deleted or
               renamed.
    
           •   Directories . and .. in root directory.  They are deleted.
    
           •   Bad filenames.  They can be renamed.
    
           •   Duplicate directory entries.  They can be deleted or renamed.
    
           •   Directories with non-zero size field.  Size is set to zero.
    
           •   Directory . does not point to parent directory.  The start
               pointer is adjusted.
    
           •   Directory .. does not point to parent of parent directory.
               The start pointer is adjusted.
    
           •   . and .. are not the two first entries in a non-root
               directory.  The entries are created, moving occupied slots if
               necessary.
    
           •   Start cluster number of a file is invalid.  The file is
               truncated.
    
           •   File contains bad or free clusters.  The file is truncated.
    
           •   File's cluster chain is longer than indicated by the size
               fields.  The file is truncated.
    
           •   Two or more files share the same cluster(s).  All but one of
               the files are truncated.  If the file being truncated is a
               directory file that has already been read, the filesystem
               check is restarted after truncation.
    
           •   File's cluster chain is shorter than indicated by the size
               fields.  The file is truncated.
    
           •   Volume label in root directory or label in boot sector is
               invalid.  Invalid labels are removed.
    
           •   Volume label in root directory and label in boot sector are
               different.  Volume label from root directory is copied to boot
               sector.
    
           •   Clusters are marked as used but are not owned by a file.  They
               are marked as free.
    
           Additionally, the following problems are detected, but not
           repaired:
    
           •   Invalid parameters in boot sector
    
           When **fsck.fat** checks a filesystem, it accumulates all changes in
           memory and performs them only after all checks are complete.  This
           can be disabled with the **-w** option.
    
           Two different variants of the FAT filesystem are supported.
           Standard is the FAT12, FAT16 and FAT32 filesystems as defined by
           Microsoft and widely used on hard disks and removable media like
           USB sticks and SD cards.  The other is the legacy Atari variant
           used on Atari ST.
    
           There are some minor differences in Atari format: Some boot sector
           fields are interpreted slightly different, and the special FAT
           entries for end-of-file and bad cluster can be different.  Under
           MS-DOS 0xfff8 is used for EOF and Atari employs 0xffff by default,
           but both systems recognize all values from 0xfff8–0xffff as end-
           of-file.  MS-DOS uses only 0xfff7 for bad clusters, where on Atari
           values 0xfff0–0xfff7 are for this purpose (but the standard value
           is still 0xfff7).
    


## OPTIONS



           **-a** Automatically repair the filesystem.  No user intervention is
               necessary.  Whenever there is more than one method to solve a
               problem, the least destructive approach is used.
    
           **-A** Select using the Atari variation of the FAT filesystem if that
               isn't active already, otherwise select standard FAT
               filesystem.  This is selected by default if **mkfs.fat** is run on
               68k Atari Linux.
    
           **-b** Make read-only boot sector check.
    
           **-c** _PAGE_
               Use DOS codepage _PAGE_ to decode short file names.  By default
               codepage 850 is used.
    
           **-d** _PATH_
               Delete the specified file.  If more than one file with that
               name exist, the first one is deleted.  This option can be
               given more than once.
    
           **-f** Salvage unused cluster chains to files.  By default, unused
               clusters are added to the free disk space except in auto mode
               (**-a**).
    
           **-F** _NUM_
               Specify FAT table _NUM_ for filesystem access.  By default value
               _0_ is assumed and then the first uncorrupted FAT table is
               chosen.  Uncorrupted means that FAT table has valid first
               cluster.  If default value _0_ is used and all FAT tables are
               corrupted then **fsck.fat** gives up and does not try to repair
               FAT filesystem.  If non-zero _NUM_ value is specified then
               **fsck.fat** uses FAT table _NUM_ for repairing FAT filesystem.  If
               FAT table _NUM_ has corrupted first cluster then **fsck.fat** will
               repair it.  In any case, if FAT filesystem has more FAT tables
               then repaired content of chosen FAT table is copied to other
               FAT tables.  To repair corrupted first cluster it is required
               to call **fsck.fat** with non-zero _NUM_ value.
    
           **-l** List path names of files being processed.
    
           **-n** No-operation mode: non-interactively check for errors, but
               don't write anything to the filesystem.
    
           **-p** Same as **-a** , for compatibility with other *fsck.
    
           **-r** Interactively repair the filesystem.  The user is asked for
               advice whenever there is more than one approach to fix an
               inconsistency.  This is the default mode and the option is
               only retained for backwards compatibility.
    
           **-S** Consider short (8.3) file names with spaces in the middle to
               be invalid, like previous versions of this program did.  While
               such file names are not forbidden by the FAT specification,
               and were never treated as errors by Microsoft file system
               checking tools, many DOS programs are unable to handle files
               with such names.  Using this option can make them accessible
               to these programs.
    
               Short file names which _start_ with a space are considered
               invalid regardless of this option's setting.
    
               Previous versions of this program exceptionally treated _EA_
               _DATA. SF_ and _WP ROOT. SF_ as valid short names; using this
               option does not preserve that exception.
    
           **-t** Mark unreadable clusters as bad.
    
           **-u** _PATH_
               Try to undelete the specified file.  **fsck.fat** tries to
               allocate a chain of contiguous unallocated clusters beginning
               with the start cluster of the undeleted file.  This option can
               be given more than once.
    
           **-U** Consider lowercase volume and boot label as invalid and allow
               only uppercase characters.  Such labels are forbidden by the
               FAT specification, but they are widely used by Linux tools.
               Moreover MS-DOS and Windows systems do not have problems to
               read them.  Therefore volume and boot labels with lowercase
               characters are by default permitted.
    
           **-v** Verbose mode.  Generates slightly more output.
    
           **-V** Perform a verification pass.  The filesystem check is repeated
               after the first run.  The second pass should never report any
               fixable errors.  It may take considerably longer than the
               first pass, because the first pass may have generated long
               list of modifications that have to be scanned for each disk
               read.
    
           **--variant** _TYPE_
               Create a filesystem of variant _TYPE_.  Acceptable values are
               _standard_ and _atari_ (in any combination of upper/lower case).
               See above under DESCRIPTION for the differences.
    
           **-w** Write changes to disk immediately.
    
           **-y** Same as **-a**(automatically repair filesystem) for compatibility
               with other fsck tools.
    
           **--help**
               Display help message describing usage and options then exit.
    


## EXIT STATUS



           0   No recoverable errors have been detected.
    
           1   Recoverable errors have been detected or **fsck.fat** has
               discovered an internal inconsistency.
    
           2   Usage error.  **fsck.fat** did not access the filesystem.
    


## FILES



           _fsck0000.rec_ , _fsck0001.rec_ , ...
               When recovering from a corrupted filesystem, **fsck.fat** dumps
               recovered data into files named _fsckNNNN.rec_ in the top level
               directory of the filesystem.
    


## SECURITY CONSIDERATIONS



           When checking a filesystem with orphan (unconnected) cluster
           chains, **fsck.fat** either marks these chains as free or, if the **-f**
           or **-a** option is given, salvages (recovers) them into files.  In
           the latter case, since an exact data size of an orphan cluster
           chain is unknown, it is set to include all bytes within the
           cluster chain.
    
           Some operating systems don't clean the space between the last byte
           of a file and the end of its cluster chain, this space may include
           deleted data (or even data that existed before the drive was
           formatted to the FAT filesystem).
    
           If such a file is deleted while open, and the filesystem is not
           unmounted properly, its cluster chain becomes orphan.  Salvaging
           this chain into a file poses a security risk when unprivileged
           users have access to the mountpoint of the filesystem, because
           some amount of deleted data will be exposed to these users (the
           salvaged file will be larger than the original one, including
           remnant data after the original end-of-file position).
    
           It is recommended that you never run **fsck.fat** with the **-f** or **-a**
           option against a filesystem containing sensitive deleted data if
           unprivileged users have access to its mountpoint.
    


## BUGS



           •   Does not remove entirely empty directories.
    
           •   Should give more diagnostic messages.
    
           •   Undeleting files should use a more sophisticated algorithm.
    


## HOMEPAGE



           The home for the **dosfstools** project is its GitHub project page 
           ⟨https://github.com/dosfstools/dosfstools⟩.
    


* * *