sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget$/translations/zh_CN/filesystems/vfatmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/zh_TW/filesystems/vfatmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/it_IT/filesystems/vfatmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ja_JP/filesystems/vfatmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ko_KR/filesystems/vfatmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/sp_SP/filesystems/vfatmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hVFATh]hVFAT}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh>/var/lib/git/docbuild/linux/Documentation/filesystems/vfat.rsthKubh)}(hhh](h)}(h USING VFATh]h USING VFAT}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hCTo use the vfat filesystem, use the filesystem type 'vfat'. i.e.::h]hFTo use the vfat filesystem, use the filesystem type ‘vfat’. i.e.:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hmount -t vfat /dev/fd0 /mnth]hmount -t vfat /dev/fd0 /mnt}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhK hhhhubh)}(hmNo special partition formatter is required, 'mkdosfs' will work fine if you want to format from within Linux.h]hqNo special partition formatter is required, ‘mkdosfs’ will work fine if you want to format from within Linux.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h] using-vfatah ]h"] using vfatah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hVFAT MOUNT OPTIONSh]hVFAT MOUNT OPTIONS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubhdefinition_list)}(hhh](hdefinition_list_item)}(hf**uid=###** Set the owner of all files on this filesystem. The default is the uid of current process. h](hterm)}(h **uid=###**h]hstrong)}(hj h]huid=###}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubh definition)}(hhh]h)}(hYSet the owner of all files on this filesystem. The default is the uid of current process.h]hYSet the owner of all files on this filesystem. The default is the uid of current process.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj9ubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(hf**gid=###** Set the group of all files on this filesystem. The default is the gid of current process. h](j)}(h **gid=###**h]j#)}(hj\h]hgid=###}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjZubah}(h]h ]h"]h$]h&]uh1jhhhKhjVubj8)}(hhh]h)}(hYSet the group of all files on this filesystem. The default is the gid of current process.h]hYSet the group of all files on this filesystem. The default is the gid of current process.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjqubah}(h]h ]h"]h$]h&]uh1j7hjVubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h|**umask=###** The permission mask (for files and directories, see *umask(1)*). The default is the umask of current process. h](j)}(h **umask=###**h]j#)}(hjh]h umask=###}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh]h)}(hmThe permission mask (for files and directories, see *umask(1)*). The default is the umask of current process.h](h4The permission mask (for files and directories, see }(hjhhhNhNubhemphasis)}(h *umask(1)*h]humask(1)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/). The default is the umask of current process.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hb**dmask=###** The permission mask for the directory. The default is the umask of current process. h](j)}(h **dmask=###**h]j#)}(hjh]h dmask=###}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhK!hjubj8)}(hhh]h)}(hSThe permission mask for the directory. The default is the umask of current process.h]hSThe permission mask for the directory. The default is the umask of current process.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhK!hjhhubj)}(hZ**fmask=###** The permission mask for files. The default is the umask of current process. h](j)}(h **fmask=###**h]j#)}(hjh]h fmask=###}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhK%hjubj8)}(hhh]h)}(hKThe permission mask for files. The default is the umask of current process.h]hKThe permission mask for files. The default is the umask of current process.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hj-ubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhK%hjhhubj)}(hX2**allow_utime=###** This option controls the permission check of mtime/atime. **-20**: If current process is in group of file's group ID, you can change timestamp. **-2**: Other users can change timestamp. The default is set from dmask option. If the directory is writable, utime(2) is also allowed. i.e. ~dmask & 022. Normally utime(2) checks current process is owner of the file, or it has CAP_FOWNER capability. But FAT filesystem doesn't have uid/gid on disk, so normal check is too inflexible. With this option you can relax it. h](j)}(h**allow_utime=###**h]j#)}(hjPh]hallow_utime=###}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjNubah}(h]h ]h"]h$]h&]uh1jhhhK6hjJubj8)}(hhh](h)}(h9This option controls the permission check of mtime/atime.h]h9This option controls the permission check of mtime/atime.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjeubh block_quote)}(h**-20**: If current process is in group of file's group ID, you can change timestamp. **-2**: Other users can change timestamp. h](h)}(hU**-20**: If current process is in group of file's group ID, you can change timestamp.h](j#)}(h**-20**h]h-20}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hj|ubhP: If current process is in group of file’s group ID, you can change timestamp.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK*hjxubh)}(h)**-2**: Other users can change timestamp.h](j#)}(h**-2**h]h-2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh#: Other users can change timestamp.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK-hjxubeh}(h]h ]h"]h$]h&]uh1jvhhhK*hjeubh)}(hpThe default is set from dmask option. If the directory is writable, utime(2) is also allowed. i.e. ~dmask & 022.h]hpThe default is set from dmask option. If the directory is writable, utime(2) is also allowed. i.e. ~dmask & 022.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjeubh)}(hNormally utime(2) checks current process is owner of the file, or it has CAP_FOWNER capability. But FAT filesystem doesn't have uid/gid on disk, so normal check is too inflexible. With this option you can relax it.h]hNormally utime(2) checks current process is owner of the file, or it has CAP_FOWNER capability. But FAT filesystem doesn’t have uid/gid on disk, so normal check is too inflexible. With this option you can relax it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjeubeh}(h]h ]h"]h$]h&]uh1j7hjJubeh}(h]h ]h"]h$]h&]uh1jhhhK6hjhhubj)}(h**codepage=###** Sets the codepage number for converting to shortname characters on FAT filesystem. By default, FAT_DEFAULT_CODEPAGE setting is used. h](j)}(h**codepage=###**h]j#)}(hjh]h codepage=###}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhK;hjubj8)}(hhh]h)}(hSets the codepage number for converting to shortname characters on FAT filesystem. By default, FAT_DEFAULT_CODEPAGE setting is used.h]hSets the codepage number for converting to shortname characters on FAT filesystem. By default, FAT_DEFAULT_CODEPAGE setting is used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhK;hjhhubj)}(hX**iocharset=** Character set to use for converting between the encoding is used for user visible filename and 16 bit Unicode characters. Long filenames are stored on disk in Unicode format, but Unix for the most part doesn't know how to deal with Unicode. By default, FAT_DEFAULT_IOCHARSET setting is used. There is also an option of doing UTF-8 translations with the utf8 option. h](j)}(h**iocharset=**h]j#)}(hj h]hiocharset=}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKFhjubj8)}(hhh](h)}(hX#Character set to use for converting between the encoding is used for user visible filename and 16 bit Unicode characters. Long filenames are stored on disk in Unicode format, but Unix for the most part doesn't know how to deal with Unicode. By default, FAT_DEFAULT_IOCHARSET setting is used.h]hX%Character set to use for converting between the encoding is used for user visible filename and 16 bit Unicode characters. Long filenames are stored on disk in Unicode format, but Unix for the most part doesn’t know how to deal with Unicode. By default, FAT_DEFAULT_IOCHARSET setting is used.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hj5ubh)}(hIThere is also an option of doing UTF-8 translations with the utf8 option.h]hIThere is also an option of doing UTF-8 translations with the utf8 option.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhj5ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKFhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubhnote)}(h^``iocharset=utf8`` is not recommended. If unsure, you should consider the utf8 option instead.h]h)}(h^``iocharset=utf8`` is not recommended. If unsure, you should consider the utf8 option instead.h](hliteral)}(h``iocharset=utf8``h]hiocharset=utf8}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjlubhL is not recommended. If unsure, you should consider the utf8 option instead.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKHhjhubah}(h]h ]h"]h$]h&]uh1jfhjhhhhhNubj)}(hhh](j)}(h**utf8=** UTF-8 is the filesystem safe version of Unicode that is used by the console. It can be enabled or disabled for the filesystem with this option. If 'uni_xlate' gets set, UTF-8 gets disabled. By default, FAT_DEFAULT_UTF8 setting is used. h](j)}(h**utf8=**h]j#)}(hjh]h utf8=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKPhjubj8)}(hhh]h)}(hUTF-8 is the filesystem safe version of Unicode that is used by the console. It can be enabled or disabled for the filesystem with this option. If 'uni_xlate' gets set, UTF-8 gets disabled. By default, FAT_DEFAULT_UTF8 setting is used.h]hUTF-8 is the filesystem safe version of Unicode that is used by the console. It can be enabled or disabled for the filesystem with this option. If ‘uni_xlate’ gets set, UTF-8 gets disabled. By default, FAT_DEFAULT_UTF8 setting is used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKPhjubj)}(hX**uni_xlate=** Translate unhandled Unicode characters to special escaped sequences. This would let you backup and restore filenames that are created with any Unicode characters. Until Linux supports Unicode for real, this gives you an alternative. Without this option, a '?' is used when no translation is possible. The escape character is ':' because it is otherwise illegal on the vfat filesystem. The escape sequence that gets used is ':' and the four digits of hexadecimal unicode. h](j)}(h**uni_xlate=**h]j#)}(hjh]huni_xlate=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhK\hjubj8)}(hhh]h)}(hXTranslate unhandled Unicode characters to special escaped sequences. This would let you backup and restore filenames that are created with any Unicode characters. Until Linux supports Unicode for real, this gives you an alternative. Without this option, a '?' is used when no translation is possible. The escape character is ':' because it is otherwise illegal on the vfat filesystem. The escape sequence that gets used is ':' and the four digits of hexadecimal unicode.h]hXTranslate unhandled Unicode characters to special escaped sequences. This would let you backup and restore filenames that are created with any Unicode characters. Until Linux supports Unicode for real, this gives you an alternative. Without this option, a ‘?’ is used when no translation is possible. The escape character is ‘:’ because it is otherwise illegal on the vfat filesystem. The escape sequence that gets used is ‘:’ and the four digits of hexadecimal unicode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhK\hjhhubj)}(hX5**nonumtail=** When creating 8.3 aliases, normally the alias will end in '~1' or tilde followed by some number. If this option is set, then if the filename is "longfilename.txt" and "longfile.txt" does not currently exist in the directory, longfile.txt will be the short alias instead of longfi~1.txt. h](j)}(h**nonumtail=**h]j#)}(hj h]hnonumtail=}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKdhjubj8)}(hhh]h)}(hXWhen creating 8.3 aliases, normally the alias will end in '~1' or tilde followed by some number. If this option is set, then if the filename is "longfilename.txt" and "longfile.txt" does not currently exist in the directory, longfile.txt will be the short alias instead of longfi~1.txt.h]hX+When creating 8.3 aliases, normally the alias will end in ‘~1’ or tilde followed by some number. If this option is set, then if the filename is “longfilename.txt” and “longfile.txt” does not currently exist in the directory, longfile.txt will be the short alias instead of longfi~1.txt.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKdhjhhubj)}(hXK**usefree** Use the "free clusters" value stored on FSINFO. It will be used to determine number of free clusters without scanning disk. But it's not used by default, because recent Windows don't update it correctly in some case. If you are sure the "free clusters" on FSINFO is correct, by this option you can avoid scanning disk. h](j)}(h **usefree**h]j#)}(hjAh]husefree}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j"hj?ubah}(h]h ]h"]h$]h&]uh1jhhhKlhj;ubj8)}(hhh]h)}(hX>Use the "free clusters" value stored on FSINFO. It will be used to determine number of free clusters without scanning disk. But it's not used by default, because recent Windows don't update it correctly in some case. If you are sure the "free clusters" on FSINFO is correct, by this option you can avoid scanning disk.h]hXJUse the “free clusters” value stored on FSINFO. It will be used to determine number of free clusters without scanning disk. But it’s not used by default, because recent Windows don’t update it correctly in some case. If you are sure the “free clusters” on FSINFO is correct, by this option you can avoid scanning disk.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghjVubah}(h]h ]h"]h$]h&]uh1j7hj;ubeh}(h]h ]h"]h$]h&]uh1jhhhKlhjhhubj)}(h3**quiet** Stops printing certain warning messages. h](j)}(h **quiet**h]j#)}(hjyh]hquiet}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjwubah}(h]h ]h"]h$]h&]uh1jhhhKohjsubj8)}(hhh]h)}(h(Stops printing certain warning messages.h]h(Stops printing certain warning messages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohjubah}(h]h ]h"]h$]h&]uh1j7hjsubeh}(h]h ]h"]h$]h&]uh1jhhhKohjhhubj)}(h**check=s|r|n** Case sensitivity checking setting. **s**: strict, case sensitive **r**: relaxed, case insensitive **n**: normal, default setting, currently case insensitive h](j)}(h**check=s|r|n**h]j#)}(hjh]h check=s|r|n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKxhjubj8)}(hhh](h)}(h"Case sensitivity checking setting.h]h"Case sensitivity checking setting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjubh)}(h**s**: strict, case sensitiveh](j#)}(h**s**h]hs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh: strict, case sensitive}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthjubh)}(h **r**: relaxed, case insensitiveh](j#)}(h**r**h]hr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh: relaxed, case insensitive}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKvhjubh)}(h:**n**: normal, default setting, currently case insensitiveh](j#)}(h**n**h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh5: normal, default setting, currently case insensitive}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKxhjhhubj)}(hJ**nocase** This was deprecated for vfat. Use ``shortname=win95`` instead. h](j)}(h **nocase**h]j#)}(hj=h]hnocase}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hj;ubah}(h]h ]h"]h$]h&]uh1jhhhK{hj7ubj8)}(hhh]h)}(h>This was deprecated for vfat. Use ``shortname=win95`` instead.h](h"This was deprecated for vfat. Use }(hjUhhhNhNubjq)}(h``shortname=win95``h]hshortname=win95}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjUubh instead.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK{hjRubah}(h]h ]h"]h$]h&]uh1j7hj7ubeh}(h]h ]h"]h$]h&]uh1jhhhK{hjhhubj)}(hX**shortname=lower|win95|winnt|mixed** Shortname display/create setting. **lower**: convert to lowercase for display, emulate the Windows 95 rule for create. **win95**: emulate the Windows 95 rule for display/create. **winnt**: emulate the Windows NT rule for display/create. **mixed**: emulate the Windows NT rule for display, emulate the Windows 95 rule for create. Default setting is `mixed`. h](j)}(h%**shortname=lower|win95|winnt|mixed**h]j#)}(hjh]h!shortname=lower|win95|winnt|mixed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh](h)}(h!Shortname display/create setting.h]h!Shortname display/create setting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjubh)}(hT**lower**: convert to lowercase for display, emulate the Windows 95 rule for create.h](j#)}(h **lower**h]hlower}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubhK: convert to lowercase for display, emulate the Windows 95 rule for create.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h:**win95**: emulate the Windows 95 rule for display/create.h](j#)}(h **win95**h]hwin95}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh1: emulate the Windows 95 rule for display/create.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h:**winnt**: emulate the Windows NT rule for display/create.h](j#)}(h **winnt**h]hwinnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh1: emulate the Windows NT rule for display/create.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h[**mixed**: emulate the Windows NT rule for display, emulate the Windows 95 rule for create.h](j#)}(h **mixed**h]hmixed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubhR: emulate the Windows NT rule for display, emulate the Windows 95 rule for create.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hDefault setting is `mixed`.h](hDefault setting is }(hjhhhNhNubhtitle_reference)}(h`mixed`h]hmixed}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j%hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hXS**tz=UTC** Interpret timestamps as UTC rather than local time. This option disables the conversion of timestamps between local time (as used by Windows on FAT) and UTC (which Linux uses internally). This is particularly useful when mounting devices (like digital cameras) that are set to UTC in order to avoid the pitfalls of local time. h](j)}(h **tz=UTC**h]j#)}(hjQh]htz=UTC}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjOubah}(h]h ]h"]h$]h&]uh1jhhhKhjKubj8)}(hhh]h)}(hXGInterpret timestamps as UTC rather than local time. This option disables the conversion of timestamps between local time (as used by Windows on FAT) and UTC (which Linux uses internally). This is particularly useful when mounting devices (like digital cameras) that are set to UTC in order to avoid the pitfalls of local time.h]hXGInterpret timestamps as UTC rather than local time. This option disables the conversion of timestamps between local time (as used by Windows on FAT) and UTC (which Linux uses internally). This is particularly useful when mounting devices (like digital cameras) that are set to UTC in order to avoid the pitfalls of local time.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjfubah}(h]h ]h"]h$]h&]uh1j7hjKubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hX**time_offset=minutes** Set offset for conversion of timestamps from local time used by FAT to UTC. I.e. minutes will be subtracted from each timestamp to convert it to UTC used internally by Linux. This is useful when time zone set in ``sys_tz`` is not the time zone used by the filesystem. Note that this option still does not provide correct time stamps in all cases in presence of DST - time stamps in a different DST setting will be off by one hour. h](j)}(h**time_offset=minutes**h]j#)}(hjh]htime_offset=minutes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh]h)}(hXSet offset for conversion of timestamps from local time used by FAT to UTC. I.e. minutes will be subtracted from each timestamp to convert it to UTC used internally by Linux. This is useful when time zone set in ``sys_tz`` is not the time zone used by the filesystem. Note that this option still does not provide correct time stamps in all cases in presence of DST - time stamps in a different DST setting will be off by one hour.h](hSet offset for conversion of timestamps from local time used by FAT to UTC. I.e. minutes will be subtracted from each timestamp to convert it to UTC used internally by Linux. This is useful when time zone set in }(hjhhhNhNubjq)}(h ``sys_tz``h]hsys_tz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh is not the time zone used by the filesystem. Note that this option still does not provide correct time stamps in all cases in presence of DST - time stamps in a different DST setting will be off by one hour.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h**showexec** If set, the execute permission bits of the file will be allowed only if the extension part of the name is .EXE, .COM, or .BAT. Not set by default. h](j)}(h **showexec**h]j#)}(hjh]hshowexec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh]h)}(hIf set, the execute permission bits of the file will be allowed only if the extension part of the name is .EXE, .COM, or .BAT. Not set by default.h]hIf set, the execute permission bits of the file will be allowed only if the extension part of the name is .EXE, .COM, or .BAT. Not set by default.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h@**debug** Can be set, but unused by the current implementation. h](j)}(h **debug**h]j#)}(hj h]hdebug}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hj ubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh]h)}(h5Can be set, but unused by the current implementation.h]h5Can be set, but unused by the current implementation.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(ho**sys_immutable** If set, ATTR_SYS attribute on FAT is handled as IMMUTABLE flag on Linux. Not set by default. h](j)}(h**sys_immutable**h]j#)}(hjCh]h sys_immutable}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjAubah}(h]h ]h"]h$]h&]uh1jhhhKhj=ubj8)}(hhh]h)}(h\If set, ATTR_SYS attribute on FAT is handled as IMMUTABLE flag on Linux. Not set by default.h]h\If set, ATTR_SYS attribute on FAT is handled as IMMUTABLE flag on Linux. Not set by default.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXubah}(h]h ]h"]h$]h&]uh1j7hj=ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hg**flush** If set, the filesystem will try to flush to disk more early than normal. Not set by default. h](j)}(h **flush**h]j#)}(hj{h]hflush}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjyubah}(h]h ]h"]h$]h&]uh1jhhhKhjuubj8)}(hhh]h)}(h\If set, the filesystem will try to flush to disk more early than normal. Not set by default.h]h\If set, the filesystem will try to flush to disk more early than normal. Not set by default.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j7hjuubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hX!**rodir** FAT has the ATTR_RO (read-only) attribute. On Windows, the ATTR_RO of the directory will just be ignored, and is used only by applications as a flag (e.g. it's set for the customized folder). If you want to use ATTR_RO as read-only flag even for the directory, set this option. h](j)}(h **rodir**h]j#)}(hjh]hrodir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh](h)}(hFAT has the ATTR_RO (read-only) attribute. On Windows, the ATTR_RO of the directory will just be ignored, and is used only by applications as a flag (e.g. it's set for the customized folder).h]hFAT has the ATTR_RO (read-only) attribute. On Windows, the ATTR_RO of the directory will just be ignored, and is used only by applications as a flag (e.g. it’s set for the customized folder).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hUIf you want to use ATTR_RO as read-only flag even for the directory, set this option.h]hUIf you want to use ATTR_RO as read-only flag even for the directory, set this option.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h**errors=panic|continue|remount-ro** specify FAT behavior on critical errors: panic, continue without doing anything or remount the partition in read-only mode (default behavior). h](j)}(h$**errors=panic|continue|remount-ro**h]j#)}(hjh]h errors=panic|continue|remount-ro}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj8)}(hhh]h)}(hspecify FAT behavior on critical errors: panic, continue without doing anything or remount the partition in read-only mode (default behavior).h]hspecify FAT behavior on critical errors: panic, continue without doing anything or remount the partition in read-only mode (default behavior).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(h**discard** If set, issues discard/TRIM commands to the block device when blocks are freed. This is useful for SSD devices and sparse/thinly-provisioned LUNs. h](j)}(h **discard**h]j#)}(hj1h]hdiscard}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hj/ubah}(h]h ]h"]h$]h&]uh1jhhhKhj+ubj8)}(hhh]h)}(hIf set, issues discard/TRIM commands to the block device when blocks are freed. This is useful for SSD devices and sparse/thinly-provisioned LUNs.h]hIf set, issues discard/TRIM commands to the block device when blocks are freed. This is useful for SSD devices and sparse/thinly-provisioned LUNs.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1j7hj+ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hX'**nfs=stale_rw|nostale_ro** Enable this only if you want to export the FAT filesystem over NFS. **stale_rw**: This option maintains an index (cache) of directory *inodes* by *i_logstart* which is used by the nfs-related code to improve look-ups. Full file operations (read/write) over NFS is supported but with cache eviction at NFS server, this could result in ESTALE issues. **nostale_ro**: This option bases the *inode* number and filehandle on the on-disk location of a file in the MS-DOS directory entry. This ensures that ESTALE will not be returned after a file is evicted from the inode cache. However, it means that operations such as rename, create and unlink could cause filehandles that previously pointed at one file to point at a different file, potentially causing data corruption. For this reason, this option also mounts the filesystem readonly. To maintain backward compatibility, ``'-o nfs'`` is also accepted, defaulting to "stale_rw". h](j)}(h**nfs=stale_rw|nostale_ro**h]j#)}(hjih]hnfs=stale_rw|nostale_ro}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjgubah}(h]h ]h"]h$]h&]uh1jhhhKhjcubj8)}(hhh](h)}(hCEnable this only if you want to export the FAT filesystem over NFS.h]hCEnable this only if you want to export the FAT filesystem over NFS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj~ubjw)}(hX**stale_rw**: This option maintains an index (cache) of directory *inodes* by *i_logstart* which is used by the nfs-related code to improve look-ups. Full file operations (read/write) over NFS is supported but with cache eviction at NFS server, this could result in ESTALE issues. **nostale_ro**: This option bases the *inode* number and filehandle on the on-disk location of a file in the MS-DOS directory entry. This ensures that ESTALE will not be returned after a file is evicted from the inode cache. However, it means that operations such as rename, create and unlink could cause filehandles that previously pointed at one file to point at a different file, potentially causing data corruption. For this reason, this option also mounts the filesystem readonly. h](h)}(hX**stale_rw**: This option maintains an index (cache) of directory *inodes* by *i_logstart* which is used by the nfs-related code to improve look-ups. Full file operations (read/write) over NFS is supported but with cache eviction at NFS server, this could result in ESTALE issues.h](j#)}(h **stale_rw**h]hstale_rw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh6: This option maintains an index (cache) of directory }(hjhhhNhNubj)}(h*inodes*h]hinodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh by }(hjhhhNhNubj)}(h *i_logstart*h]h i_logstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh which is used by the nfs-related code to improve look-ups. Full file operations (read/write) over NFS is supported but with cache eviction at NFS server, this could result in ESTALE issues.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hX**nostale_ro**: This option bases the *inode* number and filehandle on the on-disk location of a file in the MS-DOS directory entry. This ensures that ESTALE will not be returned after a file is evicted from the inode cache. However, it means that operations such as rename, create and unlink could cause filehandles that previously pointed at one file to point at a different file, potentially causing data corruption. For this reason, this option also mounts the filesystem readonly.h](j#)}(h**nostale_ro**h]h nostale_ro}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j"hjubh: This option bases the }(hjhhhNhNubj)}(h*inode*h]hinode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX number and filehandle on the on-disk location of a file in the MS-DOS directory entry. This ensures that ESTALE will not be returned after a file is evicted from the inode cache. However, it means that operations such as rename, create and unlink could cause filehandles that previously pointed at one file to point at a different file, potentially causing data corruption. For this reason, this option also mounts the filesystem readonly.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jvhhhKhj~ubh)}(h\To maintain backward compatibility, ``'-o nfs'`` is also accepted, defaulting to "stale_rw".h](h$To maintain backward compatibility, }(hj hhhNhNubjq)}(h ``'-o nfs'``h]h'-o nfs'}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jphj ubh0 is also accepted, defaulting to “stale_rw”.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj~ubeh}(h]h ]h"]h$]h&]uh1j7hjcubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hX**dos1xfloppy : 0,1,yes,no,true,false** If set, use a fallback default BIOS Parameter Block configuration, determined by backing device size. These static parameters match defaults assumed by DOS 1.x for 160 kiB, 180 kiB, 320 kiB, and 360 kiB floppies and floppy images. h](j)}(h.**dos1xfloppy : 0,1,yes,no,true,false**h]j#)}(hj9 h]h*dos1xfloppy : 0,1,yes,no,true,false}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1j"hj7 ubah}(h]h ]h"]h$]h&]uh1jhhhKhj3 ubj8)}(hhh]h)}(hIf set, use a fallback default BIOS Parameter Block configuration, determined by backing device size. These static parameters match defaults assumed by DOS 1.x for 160 kiB, 180 kiB, 320 kiB, and 360 kiB floppies and floppy images.h]hIf set, use a fallback default BIOS Parameter Block configuration, determined by backing device size. These static parameters match defaults assumed by DOS 1.x for 160 kiB, 180 kiB, 320 kiB, and 360 kiB floppies and floppy images.}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjN ubah}(h]h ]h"]h$]h&]uh1j7hj3 ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]vfat-mount-optionsah ]h"]vfat mount optionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h LIMITATIONh]h LIMITATION}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy hhhhhKubh)}(hXThe fallocated region of file is discarded at umount/evict time when using fallocate with FALLOC_FL_KEEP_SIZE. So, User should assume that fallocated region can be discarded at last close if there is memory pressure resulting in eviction of the inode from the memory. As a result, for any dependency on the fallocated region, user should make sure to recheck fallocate after reopening the file.h]hXThe fallocated region of file is discarded at umount/evict time when using fallocate with FALLOC_FL_KEEP_SIZE. So, User should assume that fallocated region can be discarded at last close if there is memory pressure resulting in eviction of the inode from the memory. As a result, for any dependency on the fallocated region, user should make sure to recheck fallocate after reopening the file.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjy hhubeh}(h] limitationah ]h"] limitationah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hTODOh]hTODO}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hNeed to get rid of the raw scanning stuff. Instead, always use a get next directory entry approach. The only thing left that uses raw scanning is the directory renaming code.h]hNeed to get rid of the raw scanning stuff. Instead, always use a get next directory entry approach. The only thing left that uses raw scanning is the directory renaming code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]todoah ]h"]todoah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hPOSSIBLE PROBLEMSh]hPOSSIBLE PROBLEMS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh bullet_list)}(hhh](h list_item)}(h=vfat_valid_longname does not properly checked reserved names.h]h)}(hj h]h=vfat_valid_longname does not properly checked reserved names.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hWhen a volume name is the same as a directory name in the root directory of the filesystem, the directory name sometimes shows up as an empty file.h]h)}(hWhen a volume name is the same as a directory name in the root directory of the filesystem, the directory name sometimes shows up as an empty file.h]hWhen a volume name is the same as a directory name in the root directory of the filesystem, the directory name sometimes shows up as an empty file.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h*autoconv option does not work correctly. h]h)}(h(autoconv option does not work correctly.h]h(autoconv option does not work correctly.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j hhhKhj hhubeh}(h]possible-problemsah ]h"]possible problemsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h TEST SUITEh]h TEST SUITE}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6 hhhhhKubh)}(hIf you plan to make any modifications to the vfat filesystem, please get the test suite that comes with the vfat distribution ath]hIf you plan to make any modifications to the vfat filesystem, please get the test suite that comes with the vfat distribution at}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj6 hhubh)}(hS``_h](h reference)}(hjW h]hNhttp://web.archive.org/web/*/http://bmrc.berkeley.edu/people/chaffee/vfat.html}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]nameNhttp://web.archive.org/web/*/http://bmrc.berkeley.edu/people/chaffee/vfat.htmlrefuriji uh1jY hjU ubhtarget)}(hPh]h}(h]Hhttp-web-archive-org-web-http-bmrc-berkeley-edu-people-chaffee-vfat-htmlah ]h"]Nhttp://web.archive.org/web/*/http://bmrc.berkeley.edu/people/chaffee/vfat.htmlah$]h&]refuriji uh1jk referencedKhjU ubeh}(h]h ]h"]h$]h&]uh1hhhhMhj6 hhubh)}(hThis tests quite a few parts of the vfat filesystem and additional tests for new features or untested features would be appreciated.h]hThis tests quite a few parts of the vfat filesystem and additional tests for new features or untested features would be appreciated.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj6 hhubeh}(h] test-suiteah ]h"] test suiteah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h-NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEMh]h-NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(hqThis documentation was provided by Galen C. Hunt gchunt@cs.rochester.edu and lightly annotated by Gordon Chaffee.h](h1This documentation was provided by Galen C. Hunt }(hj hhhNhNubjZ )}(hgchunt@cs.rochester.eduh]hgchunt@cs.rochester.edu}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:gchunt@cs.rochester.eduuh1jY hj ubh) and lightly annotated by Gordon Chaffee.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hThis document presents a very rough, technical overview of my knowledge of the extended FAT file system used in Windows NT 3.5 and Windows 95. I don't guarantee that any of the following is correct, but it appears to be so.h]hThis document presents a very rough, technical overview of my knowledge of the extended FAT file system used in Windows NT 3.5 and Windows 95. I don’t guarantee that any of the following is correct, but it appears to be so.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj hhubh)}(hXKThe extended FAT file system is almost identical to the FAT file system used in DOS versions up to and including *6.223410239847* :-). The significant change has been the addition of long file names. These names support up to 255 characters including spaces and lower case characters as opposed to the traditional 8.3 short names.h](hqThe extended FAT file system is almost identical to the FAT file system used in DOS versions up to and including }(hj hhhNhNubj)}(h*6.223410239847*h]h6.223410239847}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh :-). The significant change has been the addition of long file names. These names support up to 255 characters including spaces and lower case characters as opposed to the traditional 8.3 short names.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(h[Here is the description of the traditional FAT entry in the current Windows 95 filesystem::h]hZHere is the description of the traditional FAT entry in the current Windows 95 filesystem:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hX=struct directory { // Short 8.3 names unsigned char name[8]; // file name unsigned char ext[3]; // file extension unsigned char attr; // attribute byte unsigned char lcase; // Case for base and extension unsigned char ctime_ms; // Creation time, milliseconds unsigned char ctime[2]; // Creation time unsigned char cdate[2]; // Creation date unsigned char adate[2]; // Last access date unsigned char reserved[2]; // reserved values (ignored) unsigned char time[2]; // time stamp unsigned char date[2]; // date stamp unsigned char start[2]; // starting cluster number unsigned char size[4]; // size of the file };h]hX=struct directory { // Short 8.3 names unsigned char name[8]; // file name unsigned char ext[3]; // file extension unsigned char attr; // attribute byte unsigned char lcase; // Case for base and extension unsigned char ctime_ms; // Creation time, milliseconds unsigned char ctime[2]; // Creation time unsigned char cdate[2]; // Creation date unsigned char adate[2]; // Last access date unsigned char reserved[2]; // reserved values (ignored) unsigned char time[2]; // time stamp unsigned char date[2]; // date stamp unsigned char start[2]; // starting cluster number unsigned char size[4]; // size of the file };}hj sbah}(h]h ]h"]h$]h&]hhuh1hhhhMhj hhubh)}(hXThe lcase field specifies if the base and/or the extension of an 8.3 name should be capitalized. This field does not seem to be used by Windows 95 but it is used by Windows NT. The case of filenames is not completely compatible from Windows NT to Windows 95. It is not completely compatible in the reverse direction, however. Filenames that fit in the 8.3 namespace and are written on Windows NT to be lowercase will show up as uppercase on Windows 95.h]hXThe lcase field specifies if the base and/or the extension of an 8.3 name should be capitalized. This field does not seem to be used by Windows 95 but it is used by Windows NT. The case of filenames is not completely compatible from Windows NT to Windows 95. It is not completely compatible in the reverse direction, however. Filenames that fit in the 8.3 namespace and are written on Windows NT to be lowercase will show up as uppercase on Windows 95.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM*hj hhubjg)}(hNote that the ``start`` and ``size`` values are actually little endian integer values. The descriptions of the fields in this structure are public knowledge and can be found elsewhere.h]h)}(hNote that the ``start`` and ``size`` values are actually little endian integer values. The descriptions of the fields in this structure are public knowledge and can be found elsewhere.h](hNote that the }(hj& hhhNhNubjq)}(h ``start``h]hstart}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jphj& ubh and }(hj& hhhNhNubjq)}(h``size``h]hsize}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jphj& ubh values are actually little endian integer values. The descriptions of the fields in this structure are public knowledge and can be found elsewhere.}(hj& hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM2hj" ubah}(h]h ]h"]h$]h&]uh1jfhj hhhhhNubh)}(hXLWith the extended FAT system, Microsoft has inserted extra directory entries for any files with extended names. (Any name which legally fits within the old 8.3 encoding scheme does not have extra entries.) I call these extra entries slots. Basically, a slot is a specially formatted directory entry which holds up to 13 characters of a file's extended name. Think of slots as additional labeling for the directory entry of the file to which they correspond. Microsoft prefers to refer to the 8.3 entry for a file as its alias and the extended slot directory entries as the file name.h]hXNWith the extended FAT system, Microsoft has inserted extra directory entries for any files with extended names. (Any name which legally fits within the old 8.3 encoding scheme does not have extra entries.) I call these extra entries slots. Basically, a slot is a specially formatted directory entry which holds up to 13 characters of a file’s extended name. Think of slots as additional labeling for the directory entry of the file to which they correspond. Microsoft prefers to refer to the 8.3 entry for a file as its alias and the extended slot directory entries as the file name.}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM6hj hhubh)}(h4The C structure for a slot directory entry follows::h]h3The C structure for a slot directory entry follows:}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hj hhubh)}(hX=struct slot { // Up to 13 characters of a long name unsigned char id; // sequence number for slot unsigned char name0_4[10]; // first 5 characters in name unsigned char attr; // attribute byte unsigned char reserved; // always 0 unsigned char alias_checksum; // checksum for 8.3 alias unsigned char name5_10[12]; // 6 more characters in name unsigned char start[2]; // starting cluster number unsigned char name11_12[4]; // last 2 characters in name };h]hX=struct slot { // Up to 13 characters of a long name unsigned char id; // sequence number for slot unsigned char name0_4[10]; // first 5 characters in name unsigned char attr; // attribute byte unsigned char reserved; // always 0 unsigned char alias_checksum; // checksum for 8.3 alias unsigned char name5_10[12]; // 6 more characters in name unsigned char start[2]; // starting cluster number unsigned char name11_12[4]; // last 2 characters in name };}hjz sbah}(h]h ]h"]h$]h&]hhuh1hhhhMBhj hhubh)}(hIf the layout of the slots looks a little odd, it's only because of Microsoft's efforts to maintain compatibility with old software. The slots must be disguised to prevent old software from panicking. To this end, a number of measures are taken:h]hIf the layout of the slots looks a little odd, it’s only because of Microsoft’s efforts to maintain compatibility with old software. The slots must be disguised to prevent old software from panicking. To this end, a number of measures are taken:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhj hhubjw)}(hX1) The attribute byte for a slot directory entry is always set to 0x0f. This corresponds to an old directory entry with attributes of "hidden", "system", "read-only", and "volume label". Most old software will ignore any directory entries with the "volume label" bit set. Real volume label entries don't have the other three bits set. 2) The starting cluster is always set to 0, an impossible value for a DOS file. h]henumerated_list)}(hhh](j )}(hXOThe attribute byte for a slot directory entry is always set to 0x0f. This corresponds to an old directory entry with attributes of "hidden", "system", "read-only", and "volume label". Most old software will ignore any directory entries with the "volume label" bit set. Real volume label entries don't have the other three bits set. h]h)}(hXNThe attribute byte for a slot directory entry is always set to 0x0f. This corresponds to an old directory entry with attributes of "hidden", "system", "read-only", and "volume label". Most old software will ignore any directory entries with the "volume label" bit set. Real volume label entries don't have the other three bits set.h]hXdThe attribute byte for a slot directory entry is always set to 0x0f. This corresponds to an old directory entry with attributes of “hidden”, “system”, “read-only”, and “volume label”. Most old software will ignore any directory entries with the “volume label” bit set. Real volume label entries don’t have the other three bits set.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMShj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hMThe starting cluster is always set to 0, an impossible value for a DOS file. h]h)}(hLThe starting cluster is always set to 0, an impossible value for a DOS file.h]hLThe starting cluster is always set to 0, an impossible value for a DOS file.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMZhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1j hj ubah}(h]h ]h"]h$]h&]uh1jvhhhMShj hhubh)}(hXBecause the extended FAT system is backward compatible, it is possible for old software to modify directory entries. Measures must be taken to ensure the validity of slots. An extended FAT system can verify that a slot does in fact belong to an 8.3 directory entry by the following:h]hXBecause the extended FAT system is backward compatible, it is possible for old software to modify directory entries. Measures must be taken to ensure the validity of slots. An extended FAT system can verify that a slot does in fact belong to an 8.3 directory entry by the following:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM]hj hhubjw)}(hX1) Positioning. Slots for a file always immediately proceed their corresponding 8.3 directory entry. In addition, each slot has an id which marks its order in the extended file name. Here is a very abbreviated view of an 8.3 directory entry and its corresponding long name slots for the file "My Big File.Extension which is long":: .. note:: Note that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is ``or'ed`` with 0x40 to mark it as the last one. 2) Checksum. Each slot has an alias_checksum value. The checksum is calculated from the 8.3 name using the following algorithm:: for (sum = i = 0; i < 11; i++) { sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] } 3) If there is free space in the final slot, a Unicode ``NULL (0x0000)`` is stored after the final character. After that, all unused characters in the final slot are set to Unicode 0xFFFF. h]j )}(hhh](j )}(hXPositioning. Slots for a file always immediately proceed their corresponding 8.3 directory entry. In addition, each slot has an id which marks its order in the extended file name. Here is a very abbreviated view of an 8.3 directory entry and its corresponding long name slots for the file "My Big File.Extension which is long":: .. note:: Note that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is ``or'ed`` with 0x40 to mark it as the last one. h](h)}(hXKPositioning. Slots for a file always immediately proceed their corresponding 8.3 directory entry. In addition, each slot has an id which marks its order in the extended file name. Here is a very abbreviated view of an 8.3 directory entry and its corresponding long name slots for the file "My Big File.Extension which is long"::h]hXNPositioning. Slots for a file always immediately proceed their corresponding 8.3 directory entry. In addition, each slot has an id which marks its order in the extended file name. Here is a very abbreviated view of an 8.3 directory entry and its corresponding long name slots for the file “My Big File.Extension which is long”:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMchj ubh)}(h h]h }hj sbah}(h]h ]h"]h$]h&]hhuh1hhhhMjhj ubjg)}(hNote that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is ``or'ed`` with 0x40 to mark it as the last one.h]h)}(hNote that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is ``or'ed`` with 0x40 to mark it as the last one.h](heNote that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is }(hj hhhNhNubjq)}(h ``or'ed``h]hor'ed}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jphj ubh& with 0x40 to mark it as the last one.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMqhj ubah}(h]h ]h"]h$]h&]uh1jfhj ubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hChecksum. Each slot has an alias_checksum value. The checksum is calculated from the 8.3 name using the following algorithm:: for (sum = i = 0; i < 11; i++) { sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] } h](h)}(hChecksum. Each slot has an alias_checksum value. The checksum is calculated from the 8.3 name using the following algorithm::h]h~Checksum. Each slot has an alias_checksum value. The checksum is calculated from the 8.3 name using the following algorithm:}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMuhjE ubh)}(hYfor (sum = i = 0; i < 11; i++) { sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] }h]hYfor (sum = i = 0; i < 11; i++) { sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] }}hjW sbah}(h]h ]h"]h$]h&]hhuh1hhhhMyhjE ubeh}(h]h ]h"]h$]h&]uh1j hj ubj )}(hIf there is free space in the final slot, a Unicode ``NULL (0x0000)`` is stored after the final character. After that, all unused characters in the final slot are set to Unicode 0xFFFF. h]h)}(hIf there is free space in the final slot, a Unicode ``NULL (0x0000)`` is stored after the final character. After that, all unused characters in the final slot are set to Unicode 0xFFFF.h](h4If there is free space in the final slot, a Unicode }(hjo hhhNhNubjq)}(h``NULL (0x0000)``h]h NULL (0x0000)}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjo ubhu is stored after the final character. After that, all unused characters in the final slot are set to Unicode 0xFFFF.}(hjo hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM~hjk ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]j j j hj j uh1j hj ubah}(h]h ]h"]h$]h&]uh1jvhhhMchj hhubh)}(hFinally, note that the extended name is stored in Unicode. Each Unicode character takes either two or four bytes, UTF-16LE encoded.h]hFinally, note that the extended name is stored in Unicode. Each Unicode character takes either two or four bytes, UTF-16LE encoded.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj hhubeh}(h]-notes-on-the-structure-of-the-vfat-filesystemah ]h"]-notes on the structure of the vfat filesystemah$]h&]uh1hhhhhhhhMubeh}(h]vfatah ]h"]vfatah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j hhjv js j j j j j3 j0 j j jv js j j u nametypes}(j hjv j j j3 j jv j uh}(j hhhjs jj jy j j j0 j j j6 js jm j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.