FAT
File Allocation Table (FAT) — файловая система, использовавшаяся в MS-DOS (и последующих версиях Microsoft Windows до NT). Последние ревизии FAT (FAT32) используются в USB-накопителях[1]. В Linux имеет собственную реализацию и полностью поддерживается ядром Linux.
Хотя в FAT32 отсутствует множество возможностей, присущих современным файловым системам, применение этой файловой системы до сих пор можно найти в современных компьютерах, например, при использовании EFI System Partition. В 2006 году Microsoft разработала новую версию FAT (exFAT), которая обратно не совместима с предыдущей версией. См. статью exFAT для дальнейшей информации.
Установка
Ядро
File systems --->
DOS/FAT/NT Filesystems --->
< > MSDOS fs support
<*> VFAT (Windows-95) fs support
(437) Default codepage for FAT
(iso8859-1) Default iocharset for FAT
[ ] Enable FAT UTF-8 option by default
-*- Native language support --->
(iso8859-1) Default NLS Option
<*> Codepage 437 (United States, Canada)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
-*- NLS UTF-8
При монтировании разделов FAT может потребоваться указывать параметр codepage=
. В примере выше используется кодовая страница для США и Канады, однако в случае необходимости можно использовать и другие. Также пользователи могут указать кодовую страницу по умолчанию для FAT в конфигурации ядра. Убедитесь, что в ядре включены все кодовые страницы, которые планируются использоваться.
Помните, что параметр
codepage
, указанный вместе с командой mount, будет иметь приоритет над настройками ядра.Не устанавливайте Default iocharset for fat
в UTF-8, так как это не рекомендуется. Вместо этого укажите параметр utf8=true
при монтировании раздела FAT (для этого необходим параметр ядра CONFIG_NLS_UTF8). Для более детальной информации смотрите man-страницу mount(8) и соответствующую документацию ядра, расположенную в /usr/src/linux/Documentation/filesystems/vfat.rst.
Установка
Необходимо установить пакет sys-fs/dosfstools для пользовательских утилит FAT:
root #
emerge --ask sys-fs/dosfstools
Использование
Используйте mkfs.fat для создания создания файловой системы FAT:
user $
mkfs.fat
mkfs.fat 4.2 (2021-01-31) No device specified. Usage: mkfs.fat [OPTIONS] TARGET [BLOCKS] Create FAT filesystem in TARGET, which can be a block device or file. Use only up to BLOCKS 1024 byte blocks if specified. With the -C option, file TARGET will be created with a size of 1024 bytes times BLOCKS, which must be specified. Options: -a Disable alignment of data structures -A Toggle Atari variant of the filesystem -b SECTOR Select SECTOR as location of the FAT32 backup boot sector -c Check device for bad blocks before creating the filesystem -C Create file TARGET then create filesystem in it -D NUMBER Write BIOS drive number NUMBER to boot sector -f COUNT Create COUNT file allocation tables -F SIZE Select FAT size SIZE (12, 16 or 32) -g GEOM Select disk geometry: heads/sectors_per_track -h NUMBER Write hidden sectors NUMBER to boot sector -i VOLID Set volume ID to VOLID (a 32 bit hexadecimal number) -I Ignore and disable safety checks -l FILENAME Read bad blocks list from FILENAME -m FILENAME Replace default error message in boot block with contents of FILENAME -M TYPE Set media type in boot sector to TYPE --mbr[=y|n|a] Fill (fake) MBR table with one partition which spans whole disk -n LABEL Set volume name to LABEL (up to 11 characters long) --codepage=N use DOS codepage N to encode label (default: 850) -r COUNT Make room for at least COUNT entries in the root directory -R COUNT Set minimal number of reserved sectors to COUNT -s COUNT Set number of sectors per cluster to COUNT -S SIZE Select a sector size of SIZE (a power of two, at least 512) -v Verbose execution --variant=TYPE Select variant TYPE of filesystem (standard or Atari) --invariant Use constants for randomly generated or time based values --offset=SECTOR Write the filesystem at a specific sector into the device file. --help Show this help message and exit
Форматирование
Форматирование раздела /dev/sdx9 в файловую систему FAT32 с меткой «ESP» и подробным выводом:
root #
mkfs.fat -v -F 32 -n "ESP" /dev/sdx9
Файловые системы FAT можно монтировать командой mount. Изменять размер файловой системы можно с помощью sys-fs/fatresize.
Устранение проблем
Медленная скорость копирования файлов
If file transfer speeds are slow (can be viewed using iotop), ensure the filesystem is mounted with the async
filesystem option. Edit /etc/fstab (or /etc/autofs/auto.misc when using autofs) system files as needed, likely removing the sync
mount option. By default, filesystems are mounted using the async
mount option.
The filesystem
sync
mount option inhibits slower transfer speeds than the default async
mount option.
The sync
mount option may cause flash media life-cycle shortening also! See man mount option sync
explanation.If file transfer speeds are still slow, try remounting the filesystem with the flush
mount option:
root #
mount -o remount,flush /path/to/mountpoint
Alternative operating system compatible filesystems
Try UDF filesystem using UDFTools, requiring sys-fs/udftools and Linux kernel UDF filesystem driver. Recently code was added to mkudffs for a fix for creating a mock partition increasing compatibility with Microsoft related operating systems. If using an older Linux kernel, ensure block size is set to 512 for increased compatibility. Most options are now default for compatibility, except for the required --bootarea=mbr
creating the mock partition.
root #
mkudffs --bootarea=mbr --label=your_label /dev/device_file
Попробуйте файловую систему F2FS от Samsung.
Аппаратные ошибки реализации символов UTF-8/UTF-16
Sometimes hardware firmware bugs will occur on embedded devices (eg. car radios) when reading their required formatted FAT/FAT32 filesystems containing UTF-8 characters. A workaround is to ensure initially mounting the FAT filesystem using (current default) mount options codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
.
For short filenames, codepage=437
is IBM-PC characters or basically ASCII. For long filenames, iocharset=iso8859-1
specifies ASCII. The option shortname=mixed
is default, and can also try shortname=win95
option. Of which, are all current defaults. Additionally to further remedy UTF-8/UTF-16 incompatible characters, use a loop with sed to replace all incompatible UTF-8/UTF-16 characters with an underscore or other ASCII character. (See this replace_chars.sh script.)
For reference, this bug was encountered with a Sony car radio. The MEX-GS610BT radio model would hard reset upon attempting to read a USB flash media/drive containing UTF-8/UTF-16 characters.
As mentioned previously, see /usr/src/linux/Documentation/filesystems/vfat.txt, the Linux Kernel vfat source code documentation, for further explanation on whether to use codepage, iocharset, or utf8 mount options.
Unsorted files and folders
When writing files to the FAT/FAT32 filesystem, devices used for reading the filesystem may show the files and folders as unsorted. Commonly, viewer prefer seeing files and folders sorted alphabetically. Install sys-fs/fatsort, and issue the following command:
root #
fatsort /dev/device_file
Смотрите также
- ExFAT — файловая система от Microsoft, оптимизированная для устройств хранения данных, основанных на памяти flash
- ext4 — дисковая файловая система с открытым исходным кодом, и самая последняя версия серии «расширенных файловых систем».
- btrfs — copy-on-write (CoW, копирование при записи) файловая система для Linux, предназначенная для реализации расширенных возможностей, в то же время уделяя особое внимание отказоустойчивости, самовосстановлению и простоте администрирования.
- removable media — any media that is easily removed from a system.
- /etc/fstab — файл конфигурации, который определяет, как и когда должны подключаться основные файловые системы, особенно во время загрузки.
Внешние ресурсы
- /usr/src/linux/Documentation/filesystems/vfat.txt - Documentation on the VFAT filesystem included with the Linux kernel sources.
- FAT filesystem and Linux - from Wikipedia