Back to home page

OSCL-LXR

 
 

    


0001 ====
0002 VFAT
0003 ====
0004 
0005 USING VFAT
0006 ==========
0007 
0008 To use the vfat filesystem, use the filesystem type 'vfat'.  i.e.::
0009 
0010   mount -t vfat /dev/fd0 /mnt
0011 
0012 
0013 No special partition formatter is required,
0014 'mkdosfs' will work fine if you want to format from within Linux.
0015 
0016 VFAT MOUNT OPTIONS
0017 ==================
0018 
0019 **uid=###**
0020         Set the owner of all files on this filesystem.
0021         The default is the uid of current process.
0022 
0023 **gid=###**
0024         Set the group of all files on this filesystem.
0025         The default is the gid of current process.
0026 
0027 **umask=###**
0028         The permission mask (for files and directories, see *umask(1)*).
0029         The default is the umask of current process.
0030 
0031 **dmask=###**
0032         The permission mask for the directory.
0033         The default is the umask of current process.
0034 
0035 **fmask=###**
0036         The permission mask for files.
0037         The default is the umask of current process.
0038 
0039 **allow_utime=###**
0040         This option controls the permission check of mtime/atime.
0041 
0042                 **-20**: If current process is in group of file's group ID,
0043                 you can change timestamp.
0044 
0045                 **-2**: Other users can change timestamp.
0046 
0047         The default is set from dmask option. If the directory is
0048         writable, utime(2) is also allowed. i.e. ~dmask & 022.
0049 
0050         Normally utime(2) checks current process is owner of
0051         the file, or it has CAP_FOWNER capability. But FAT
0052         filesystem doesn't have uid/gid on disk, so normal
0053         check is too unflexible. With this option you can
0054         relax it.
0055 
0056 **codepage=###**
0057         Sets the codepage number for converting to shortname
0058         characters on FAT filesystem.
0059         By default, FAT_DEFAULT_CODEPAGE setting is used.
0060 
0061 **iocharset=<name>**
0062         Character set to use for converting between the
0063         encoding is used for user visible filename and 16 bit
0064         Unicode characters. Long filenames are stored on disk
0065         in Unicode format, but Unix for the most part doesn't
0066         know how to deal with Unicode.
0067         By default, FAT_DEFAULT_IOCHARSET setting is used.
0068 
0069         There is also an option of doing UTF-8 translations
0070         with the utf8 option.
0071 
0072 .. note:: ``iocharset=utf8`` is not recommended. If unsure, you should consider
0073           the utf8 option instead.
0074 
0075 **utf8=<bool>**
0076         UTF-8 is the filesystem safe version of Unicode that
0077         is used by the console. It can be enabled or disabled
0078         for the filesystem with this option.
0079         If 'uni_xlate' gets set, UTF-8 gets disabled.
0080         By default, FAT_DEFAULT_UTF8 setting is used.
0081 
0082 **uni_xlate=<bool>**
0083         Translate unhandled Unicode characters to special
0084         escaped sequences.  This would let you backup and
0085         restore filenames that are created with any Unicode
0086         characters.  Until Linux supports Unicode for real,
0087         this gives you an alternative.  Without this option,
0088         a '?' is used when no translation is possible.  The
0089         escape character is ':' because it is otherwise
0090         illegal on the vfat filesystem.  The escape sequence
0091         that gets used is ':' and the four digits of hexadecimal
0092         unicode.
0093 
0094 **nonumtail=<bool>**
0095         When creating 8.3 aliases, normally the alias will
0096         end in '~1' or tilde followed by some number.  If this
0097         option is set, then if the filename is
0098         "longfilename.txt" and "longfile.txt" does not
0099         currently exist in the directory, longfile.txt will
0100         be the short alias instead of longfi~1.txt.
0101 
0102 **usefree**
0103         Use the "free clusters" value stored on FSINFO. It will
0104         be used to determine number of free clusters without
0105         scanning disk. But it's not used by default, because
0106         recent Windows don't update it correctly in some
0107         case. If you are sure the "free clusters" on FSINFO is
0108         correct, by this option you can avoid scanning disk.
0109 
0110 **quiet**
0111         Stops printing certain warning messages.
0112 
0113 **check=s|r|n**
0114         Case sensitivity checking setting.
0115 
0116         **s**: strict, case sensitive
0117 
0118         **r**: relaxed, case insensitive
0119 
0120         **n**: normal, default setting, currently case insensitive
0121 
0122 **nocase**
0123         This was deprecated for vfat. Use ``shortname=win95`` instead.
0124 
0125 **shortname=lower|win95|winnt|mixed**
0126         Shortname display/create setting.
0127 
0128         **lower**: convert to lowercase for display,
0129         emulate the Windows 95 rule for create.
0130 
0131         **win95**: emulate the Windows 95 rule for display/create.
0132 
0133         **winnt**: emulate the Windows NT rule for display/create.
0134 
0135         **mixed**: emulate the Windows NT rule for display,
0136         emulate the Windows 95 rule for create.
0137 
0138         Default setting is `mixed`.
0139 
0140 **tz=UTC**
0141         Interpret timestamps as UTC rather than local time.
0142         This option disables the conversion of timestamps
0143         between local time (as used by Windows on FAT) and UTC
0144         (which Linux uses internally).  This is particularly
0145         useful when mounting devices (like digital cameras)
0146         that are set to UTC in order to avoid the pitfalls of
0147         local time.
0148 
0149 **time_offset=minutes**
0150         Set offset for conversion of timestamps from local time
0151         used by FAT to UTC. I.e. <minutes> minutes will be subtracted
0152         from each timestamp to convert it to UTC used internally by
0153         Linux. This is useful when time zone set in ``sys_tz`` is
0154         not the time zone used by the filesystem. Note that this
0155         option still does not provide correct time stamps in all
0156         cases in presence of DST - time stamps in a different DST
0157         setting will be off by one hour.
0158 
0159 **showexec**
0160         If set, the execute permission bits of the file will be
0161         allowed only if the extension part of the name is .EXE,
0162         .COM, or .BAT. Not set by default.
0163 
0164 **debug**
0165         Can be set, but unused by the current implementation.
0166 
0167 **sys_immutable**
0168         If set, ATTR_SYS attribute on FAT is handled as
0169         IMMUTABLE flag on Linux. Not set by default.
0170 
0171 **flush**
0172         If set, the filesystem will try to flush to disk more
0173         early than normal. Not set by default.
0174 
0175 **rodir**
0176         FAT has the ATTR_RO (read-only) attribute. On Windows,
0177         the ATTR_RO of the directory will just be ignored,
0178         and is used only by applications as a flag (e.g. it's set
0179         for the customized folder).
0180 
0181         If you want to use ATTR_RO as read-only flag even for
0182         the directory, set this option.
0183 
0184 **errors=panic|continue|remount-ro**
0185         specify FAT behavior on critical errors: panic, continue
0186         without doing anything or remount the partition in
0187         read-only mode (default behavior).
0188 
0189 **discard**
0190         If set, issues discard/TRIM commands to the block
0191         device when blocks are freed. This is useful for SSD devices
0192         and sparse/thinly-provisioned LUNs.
0193 
0194 **nfs=stale_rw|nostale_ro**
0195         Enable this only if you want to export the FAT filesystem
0196         over NFS.
0197 
0198                 **stale_rw**: This option maintains an index (cache) of directory
0199                 *inodes* by *i_logstart* which is used by the nfs-related code to
0200                 improve look-ups. Full file operations (read/write) over NFS is
0201                 supported but with cache eviction at NFS server, this could
0202                 result in ESTALE issues.
0203 
0204                 **nostale_ro**: This option bases the *inode* number and filehandle
0205                 on the on-disk location of a file in the MS-DOS directory entry.
0206                 This ensures that ESTALE will not be returned after a file is
0207                 evicted from the inode cache. However, it means that operations
0208                 such as rename, create and unlink could cause filehandles that
0209                 previously pointed at one file to point at a different file,
0210                 potentially causing data corruption. For this reason, this
0211                 option also mounts the filesystem readonly.
0212 
0213         To maintain backward compatibility, ``'-o nfs'`` is also accepted,
0214         defaulting to "stale_rw".
0215 
0216 **dos1xfloppy  <bool>: 0,1,yes,no,true,false**
0217         If set, use a fallback default BIOS Parameter Block
0218         configuration, determined by backing device size. These static
0219         parameters match defaults assumed by DOS 1.x for 160 kiB,
0220         180 kiB, 320 kiB, and 360 kiB floppies and floppy images.
0221 
0222 
0223 
0224 LIMITATION
0225 ==========
0226 
0227 The fallocated region of file is discarded at umount/evict time
0228 when using fallocate with FALLOC_FL_KEEP_SIZE.
0229 So, User should assume that fallocated region can be discarded at
0230 last close if there is memory pressure resulting in eviction of
0231 the inode from the memory. As a result, for any dependency on
0232 the fallocated region, user should make sure to recheck fallocate
0233 after reopening the file.
0234 
0235 TODO
0236 ====
0237 Need to get rid of the raw scanning stuff.  Instead, always use
0238 a get next directory entry approach.  The only thing left that uses
0239 raw scanning is the directory renaming code.
0240 
0241 
0242 POSSIBLE PROBLEMS
0243 =================
0244 
0245 - vfat_valid_longname does not properly checked reserved names.
0246 - When a volume name is the same as a directory name in the root
0247   directory of the filesystem, the directory name sometimes shows
0248   up as an empty file.
0249 - autoconv option does not work correctly.
0250 
0251 
0252 TEST SUITE
0253 ==========
0254 If you plan to make any modifications to the vfat filesystem, please
0255 get the test suite that comes with the vfat distribution at
0256 
0257 `<http://web.archive.org/web/*/http://bmrc.berkeley.edu/people/chaffee/vfat.html>`_
0258 
0259 This tests quite a few parts of the vfat filesystem and additional
0260 tests for new features or untested features would be appreciated.
0261 
0262 NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM
0263 =============================================
0264 This documentation was provided by Galen C. Hunt gchunt@cs.rochester.edu and
0265 lightly annotated by Gordon Chaffee.
0266 
0267 This document presents a very rough, technical overview of my
0268 knowledge of the extended FAT file system used in Windows NT 3.5 and
0269 Windows 95.  I don't guarantee that any of the following is correct,
0270 but it appears to be so.
0271 
0272 The extended FAT file system is almost identical to the FAT
0273 file system used in DOS versions up to and including *6.223410239847*
0274 :-).  The significant change has been the addition of long file names.
0275 These names support up to 255 characters including spaces and lower
0276 case characters as opposed to the traditional 8.3 short names.
0277 
0278 Here is the description of the traditional FAT entry in the current
0279 Windows 95 filesystem::
0280 
0281         struct directory { // Short 8.3 names
0282                 unsigned char name[8];          // file name
0283                 unsigned char ext[3];           // file extension
0284                 unsigned char attr;             // attribute byte
0285                 unsigned char lcase;            // Case for base and extension
0286                 unsigned char ctime_ms;         // Creation time, milliseconds
0287                 unsigned char ctime[2];         // Creation time
0288                 unsigned char cdate[2];         // Creation date
0289                 unsigned char adate[2];         // Last access date
0290                 unsigned char reserved[2];      // reserved values (ignored)
0291                 unsigned char time[2];          // time stamp
0292                 unsigned char date[2];          // date stamp
0293                 unsigned char start[2];         // starting cluster number
0294                 unsigned char size[4];          // size of the file
0295         };
0296 
0297 
0298 The lcase field specifies if the base and/or the extension of an 8.3
0299 name should be capitalized.  This field does not seem to be used by
0300 Windows 95 but it is used by Windows NT.  The case of filenames is not
0301 completely compatible from Windows NT to Windows 95.  It is not completely
0302 compatible in the reverse direction, however.  Filenames that fit in
0303 the 8.3 namespace and are written on Windows NT to be lowercase will
0304 show up as uppercase on Windows 95.
0305 
0306 .. note:: Note that the ``start`` and ``size`` values are actually little
0307           endian integer values.  The descriptions of the fields in this
0308           structure are public knowledge and can be found elsewhere.
0309 
0310 With the extended FAT system, Microsoft has inserted extra
0311 directory entries for any files with extended names.  (Any name which
0312 legally fits within the old 8.3 encoding scheme does not have extra
0313 entries.)  I call these extra entries slots.  Basically, a slot is a
0314 specially formatted directory entry which holds up to 13 characters of
0315 a file's extended name.  Think of slots as additional labeling for the
0316 directory entry of the file to which they correspond.  Microsoft
0317 prefers to refer to the 8.3 entry for a file as its alias and the
0318 extended slot directory entries as the file name.
0319 
0320 The C structure for a slot directory entry follows::
0321 
0322         struct slot { // Up to 13 characters of a long name
0323                 unsigned char id;               // sequence number for slot
0324                 unsigned char name0_4[10];      // first 5 characters in name
0325                 unsigned char attr;             // attribute byte
0326                 unsigned char reserved;         // always 0
0327                 unsigned char alias_checksum;   // checksum for 8.3 alias
0328                 unsigned char name5_10[12];     // 6 more characters in name
0329                 unsigned char start[2];         // starting cluster number
0330                 unsigned char name11_12[4];     // last 2 characters in name
0331         };
0332 
0333 
0334 If the layout of the slots looks a little odd, it's only
0335 because of Microsoft's efforts to maintain compatibility with old
0336 software.  The slots must be disguised to prevent old software from
0337 panicking.  To this end, a number of measures are taken:
0338 
0339         1) The attribute byte for a slot directory entry is always set
0340            to 0x0f.  This corresponds to an old directory entry with
0341            attributes of "hidden", "system", "read-only", and "volume
0342            label".  Most old software will ignore any directory
0343            entries with the "volume label" bit set.  Real volume label
0344            entries don't have the other three bits set.
0345 
0346         2) The starting cluster is always set to 0, an impossible
0347            value for a DOS file.
0348 
0349 Because the extended FAT system is backward compatible, it is
0350 possible for old software to modify directory entries.  Measures must
0351 be taken to ensure the validity of slots.  An extended FAT system can
0352 verify that a slot does in fact belong to an 8.3 directory entry by
0353 the following:
0354 
0355         1) Positioning.  Slots for a file always immediately proceed
0356            their corresponding 8.3 directory entry.  In addition, each
0357            slot has an id which marks its order in the extended file
0358            name.  Here is a very abbreviated view of an 8.3 directory
0359            entry and its corresponding long name slots for the file
0360            "My Big File.Extension which is long"::
0361 
0362                 <proceeding files...>
0363                 <slot #3, id = 0x43, characters = "h is long">
0364                 <slot #2, id = 0x02, characters = "xtension whic">
0365                 <slot #1, id = 0x01, characters = "My Big File.E">
0366                 <directory entry, name = "MYBIGFIL.EXT">
0367 
0368 
0369            .. note:: Note that the slots are stored from last to first.  Slots
0370                      are numbered from 1 to N.  The Nth slot is ``or'ed`` with
0371                      0x40 to mark it as the last one.
0372 
0373         2) Checksum.  Each slot has an alias_checksum value.  The
0374            checksum is calculated from the 8.3 name using the
0375            following algorithm::
0376 
0377                 for (sum = i = 0; i < 11; i++) {
0378                         sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i]
0379                 }
0380 
0381 
0382         3) If there is free space in the final slot, a Unicode ``NULL (0x0000)``
0383            is stored after the final character.  After that, all unused
0384            characters in the final slot are set to Unicode 0xFFFF.
0385 
0386 Finally, note that the extended name is stored in Unicode.  Each Unicode
0387 character takes either two or four bytes, UTF-16LE encoded.