FAT
A fájlallokációs tábla (File Allocation Table, FAT) egy fájlrendszer, amelyet eredetileg az MS-DOS-hoz hoztak létre (később pedig a pre-NT Microsoft Windows rendszerekhez is alkalmazták). A FAT egy újabb változatát (FAT32) használják még néha az USB flash adathordozók esetében, habár a FAT32 is ma már mondható egy elévült fájlrendszernek.[1] Ez a fájlrendszer eljutott a Linux rendszerekre is, és hivatalos támogatást élvez a Linux kernelben.
Bár a FAT32 nem rendelkezik számos olyan funkcióval, amelyek modern fájlrendszerekben megtalálhatók, ez a fájlrendszer továbbra is előfordulhat modern számítógépekben, például a EFI System Partition használatakor. 2006-ban a Microsoft kifejlesztette a FAT egy új változatát (exFAT), amely nem kompatibilis az előző verzióval. További információért tekintse meg a exFAT cikket.
Telepítés
Kernel
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
Kódrészlet
/etc/kernel/config.d/esp-linux6-1-111.config
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
Amikor FAT partíciók csatolását tervezi, a felhasználóknak meg kell adniuk a codepage=
opciót a mount parancsnál. A fenti példában az Egyesült Államok és Kanada kódoldala van használva, azonban más kódoldalak is engedélyezhetők, amennyiben ez szükséges. Opcionálisan a felhasználók beállíthatnak egy alapértelmezett kódoldalt a FAT számára a kernelbeállításban. Ügyeljen arra, hogy minden használandó kódoldal érték engedélyezve legyen a kernelben.
A
codepage
opció használata a mount parancsban felülírja a kernelben beállított értékeket.Kerülje a Default iocharset for fat
beállítását UTF-8 értékre, hiszen ez nem ajánlott. Ehelyett adja meg a utf8=true
opciót, amikor FAT partíciókat csatol (ehhez szükséges, hogy a CONFIG_NLS_UTF8 engedélyezve legyen a kernelben). További információért tekintse meg a man mount(8) súgót vagy az erre vonatkozó kernel dokumentációt a /usr/src/linux/Documentation/filesystems/vfat.rst útvonalon.
Emerge
A sys-fs/dosfstools szoftvercsomag szükséges a FAT felhasználói térben működő segédprogramok számára:
root #
emerge --ask sys-fs/dosfstools
Használat
Formázás
FAT fájlrendszer létrehozásához használja a mkfs.fat parancsot:
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
A /dev/sdx9 partíció FAT32 fájlrendszerrel történő formázásához, "ESP" címkével és részletes kimenettel, használja a következő parancsot:
root #
mkfs.fat -v -F 32 -n "ESP" /dev/sdx9
A FAT fájlrendszerek csatolását a mount parancs segítségével lehet elvégezni. A FAT partíció átméretezése a sys-fs/fatresize szoftvercsomaggal végezhető el.
Érzékenység a kicsi és a nagybetűkre
Az eredeti FAT fájlrendszerben csak rövid fájlnevek (8.3 vagy SFN) használata lehetséges, és ezek kizárólag nagybetűkkel kerülnek tárolásra. Az eredeti FAT fájlrendszert használó operációs rendszerek nem voltak érzékenyek a kicsi és a nagybetűkre (például az MS-DOS). A FAT kiterjesztéseként a VFAT nemcsak hosszú fájlneveket (LFN) engedélyez, hanem kisbetűk használatát is engedi a fájlnevekben. A VFAT megőrzi a kicsi és nagybetűket, azonban kompatibilitási okokból a meglévő operációs rendszerek (mint például a Microsoft Windows 95 és Windows NT) továbbra is kicsi és nagybetű érzéketlenként kezelték a fájlneveket. Ezzel szemben a Unix már az alapoktól kezdve, hagyományosan, szigorúan kisbetű és nagybetű érzékeny volt.
Linuxban a vfat
alapértelmezés szerint kisbetű-nagybetű érzéketlenül kezeli a neveket (a check=r
csatolási opcióval "engedékeny" módon). A VFAT azonban kisbetűk-nagybetűk szigorú ellenőrzésével is felcsatolható, a check=s
csatolási opcióval, de ez problémákat okozhat.
Manuális csatolási opciók
Az alapértelmezett opcióktól eltérő opciók használata problémákat okoz! Ön most figyelmeztetve lett, vegye komolyan! További részletekért tekintse meg a Problem cases szakaszt.
A könyvtárak és fájlok rövid neveinek (8.3, azaz "short filenames" vagy SFN) tárolási módját a fájlrendszerben és megjelenési módját a shortname
csatolási opcióval lehet módosítani, amely alapértelmezés szerint mixed
értékre van állítva a Linux kernel 2.6.32 (2009 december) óta.[2]
Fájlrendszer | Csatolási opció | Megjelenített rövid név | Példa a rövid névre | Hosszú név tárolása | Példa a hosszú névre |
FAT12 FAT16 FAT32 VFAT |
– | – | FILENAME.EXT
|
– | – |
shortname=lower
|
Mindig kényszerítve van a kisbetűk kiírására. | filename.ext
|
Amikor a rövid név nem csupa nagybetű. | – | |
shortname=win95
|
Nagybetű | FILENAME.EXT
|
Amikor a rövid név nem csupa nagybetű. | – | |
shortname=winnt
|
Ahogy van (eredeti). | FILENAME.EXT
|
Amikor a rövid név nem csupa kisbetű vagy csak nagybetű. | – | |
shortname=mixed
|
Ahogy van (eredeti). | FILENAME.EXT
|
Amikor a rövid név nem csupa nagybetű. | – | |
VFAT | – | – | FILENA~1.EXT
|
– | FileName.Ext
|
shortname=lower
|
Mindig kisbetű írására van kényszerítve. | – | Amikor a rövid név nem csupa nagybetű. | FileName.Ext
| |
shortname=win95
|
Nagybetű. | – | Amikor a rövid név nem csupa nagybetű. | FileName.Ext
| |
shortname=winnt
|
Ahogy van (eredeti). | – | Amikor a rövid név nem csupa kisbetű, illetve nem csupa nagybetű. | FileName.Ext
| |
shortname=mixed
|
Ahogy van (eredeti). | – | Amikor a rövid név nem csupa nagybetű. | FileName.Ext
| |
VFAT | – | – | LONGNA~1.EXT
|
– | long name.ext
|
shortname=lower
|
Mindig kisbetű írására van kényszerítve. | – | Amikor a rövid név nem csupa nagybetű. | long name.ext
| |
shortname=win95
|
Nagybetű. | – | Amikor a rövid név nem csupa nagybetű. | long name.ext
| |
shortname=winnt
|
Ahogy van (eredeti). | – | Amikor a rövid név nem csupa kisbetű vagy csak nagybetű. | long name.ext
| |
shortname=mixed
|
Ahogy van (eredeti). | – | Amikor a rövid név nem csupa nagybetű. | long name.ext
|
Különleges eset az, amikor a rövid fájlnév teljesen kisbetűs, például filename.ext
. Ha ezt a fájlnevet shortname=winnt
opcióval hozzák létre, akkor nem jön létre LFN VFAT bejegyzés.
Fájlrendszer | Csatolási pont | Hosszú név tárolása | Példa a hosszú névre | Megjelenített rövid név | Példa a rövid névre |
VFAT | – | – | filename.ext
|
→ | FILENAME.EXT
|
shortname=winnt
|
Amikor a rövid név nem mind kisbetűs vagy csak nagybetűs. | – | Ahogy van (rövid név). | FILENAME.EXT
| |
shortname=lower
|
– | – | Mindig kénytelen kisbetűt írni. | filename.ext
| |
shortname=win95
|
– | – | Nagybetű. | FILENAME.EXT
| |
shortname=mixed
|
– | – | Ahogy van. | FILENAME.EXT
|
Ha a fájlt shortname=lower|win95|mixed
opcióval hozzák létre, akkor létrejön egy VFAT bejegyzés (LFN) és egy rövid fájlnév is, például FILENA~2.EXT
. Amikor létezik LFN, a VFAT mindig az LFN-t jeleníti meg, nem az SFN-t. Ez különösen bonyolult, mivel az LFN bejegyzés úgy nézhet ki, mint egy 8.3 SFN, például a filename.ext
esetében.
Fájlrendszer | Csatolási pont | Példa a hosszú névre | Megjelenített rövid név | Példa a rövid névre |
VFAT | – | filename.ext
|
– | FILENA~2.EXT
|
shortname=lower
|
filename.ext
|
Kisbetű. | – | |
shortname=win95
|
filename.ext
|
Nagybetű. | – | |
shortname=winnt
|
filename.ext
|
Ahogy van. | – | |
shortname=mixed
|
filename.ext
|
Ahogy van. | ~ |
Problémás esetek
Alapértelmezett beállításokkal a meglévő fájlrendszerek egyszerűen csak működnek.[3] Először is, a VFAT jelenleg alapértelmezésként engedékeny kis- és nagybetűk ellenőrzését használja (a check=r
csatolási opcióval). Ez azt jelenti, hogy a csatolási pont alatti könyvtárak és fájlok nevei mindig működnek, amennyiben egyébként bármilyen lehetséges kis- és nagybetű kombinációban megegyeznek, például a filename.ext
megtalálható lesz még akkor is, ha például FILENAME.EXT
vagy FileName.Ext
ténylegesen jelen van, mivel a különbség csak a kis- és nagybetűkben rejlik.
Másodsorban, azok a rövid nevek (8.3, SFN), amelyek nem kizárólag nagybetűsek, kapnak egy további hosszú fájlnév bejegyzést a helyes kis- és nagybetűk megőrzése érdekében, azaz a VFAT kis- és nagybetű megőrzővé válik (a shortname=mixed
csatolási opcióval).
UEFI platformokon ez különösen fontos a meglévő könyvtárak és fájlok kompatibilitása érdekében a EFI System Partition (ESP) esetében, amely létfontosságú az indítási konfigurációhoz. A FAT és VFAT fájlrendszert használó rendszerek hagyományosan nem voltak kis- és nagybetű érzékenyek, ezért várható, hogy a meglévő könyvtárak és fájlnevek enyhén eltérhetnek a kis- és nagybetűk használatában. Az alapértelmezett
vfat
beállításokkal a Linux alkalmazkodik ehhez a konvencióhoz, és a teljes csatolási pontot kis- és nagybetű érzéketlenként kezeli, azaz a /efi/EFI/boot/bootx64.efi (feltételezve, hogy az ESP a /efi alá van csatolva) és más EFI bootloader útvonalak mindig az elvárásoknak megfelelően működnek.Ha kizárólag Linux van telepítve, és minden fájlreferencia pontosan ugyanaz marad, akkor mindennek működnie kell szigorú kis- és nagybetű ellenőrzés mellett is (a check=s
csatolási opcióval). Azonban, mivel a VFAT fájlrendszer bizonyos esetekben két fájlnevet tárol, egy rövidet (8.3, SFN) és egy hosszút (LFN), az ezek kezelésével kapcsolatos konvenciók további problémákat okozhatnak. Nyilvánvaló példa erre a shortname=winnt
használata, amely egy teljesen kisbetűs rövid fájlnevet teljesen nagybetűs hagyományos FAT fájlnévvé alakít át, és kihagyja az LFN megfelelőjének létrehozását. Például a bootx64.efi
fájlnév csak hagyományos 8.3 rövid fájlnévként (SFN) lesz tárolva: BOOTX64.EFI
. Ezen túlmenően a shortname=winnt
úgy jeleníti meg a rövid fájlneveket, ahogy azok vannak, tehát az eredetileg írt bootx64.efi
nem létezik, és szigorú kis- és nagybetű ellenőrzéssel ez komoly problémákat okozhat Linux alatt.
Hibaelhárítás
Lassú a fájlátvitel sebessége
Ha a fájlátviteli sebesség lassú (ez megtekinthető a iotop segítségével), győződjön meg arról, hogy a fájlrendszer az async
fájlrendszer opcióval van csatolva. Szerkessze az /etc/fstab (vagy autofs használatakor az /etc/autofs/auto.misc) rendszerfájlokat szükség szerint, és valószínűleg távolítsa el a sync
csatolási opciót. Alapértelmezés szerint a fájlrendszerek az async
csatolási opcióval vannak csatolva.
A fájlrendszer
sync
csatolási opció lassabb átvitel sebességét eredményezi az alapértelmezett async
csatolási opcióhoz képest.
A sync
csatolási opció a flash média életciklusának rövidülését is okozhatja! Tekintse meg a man mount dokumentációban a sync
opció magyarázatát.Ha a fájlátviteli sebesség továbbra is lassú, próbálja meg újra csatolni a fájlrendszert a flush
csatolási opcióval:
root #
mount -o remount,flush /path/to/mountpoint
Alternatív operációs rendszerekkel kompatibilis fájlrendszerek
Próbálja ki az UDF fájlrendszert az UDFTools használatával, amelyhez szükség van a sys-fs/udftools szoftvercsomagra és a Linux kernel UDF fájlrendszer illesztőprogramjára. Nemrégiben kódot adtak hozzá az mkudffs-hez, hogy javítsák a mock partíció létrehozását, növelve a Microsoft operációs rendszerekkel való kompatibilitást. Ha régebbi Linux kernelt használ, akkor győződjön meg róla, hogy a blokkméret 512-re van állítva a kompatibilitás növelése érdekében. A legtöbb beállítás alapértelmezés szerint kompatibilis, kivéve az elengedhetetlen --bootarea=mbr
, amely létrehozza a mock partíciót.
root #
mkudffs --bootarea=mbr --label=your_label /dev/device_file
Próbálja ki a Samsung F2FS fájlrendszerét.
UTF-8 és UTF-16 karakterekkel kapcsolatos hardverhibák
Előfordulhatnak hardver firmware hibák beágyazott eszközökön (például autórádiók), amikor a FAT/FAT32 fájlrendszerükben lévő UTF-8 karaktereket olvassák. Egy megoldási lehetőség az, hogy a FAT fájlrendszert kezdetben a jelenlegi alapértelmezett csatolási opciókkal csatolják: codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
.
Rövid fájlnevek esetén a codepage=437
IBM-PC karaktereket, vagyis lényegében ASCII-t jelöl. Hosszú fájlnevek esetén a iocharset=iso8859-1
határozza meg az ASCII-t. A shortname=mixed
opció alapértelmezett, de megpróbálható a shortname=win95
opció is. Mindegyik jelenlegi alapértelmezett beállítás. Továbbá, az UTF-8/UTF-16 inkompatibilis karakterek kijavítása érdekében használjon egy ciklust a sed-del, amely az összes inkompatibilis UTF-8/UTF-16 karaktert aláhúzásra vagy más ASCII karakterre cseréli. (Tekintse meg ezt a replace_chars.sh szkriptet.)
Referenciaként, ezt a hibát egy Sony autórádió esetében tapasztalták. A MEX-GS610BT rádiómodell kemény újraindítást hajtott végre, amikor megpróbált beolvasni egy USB flash médiát vagy meghajtót, amely UTF-8/UTF-16 karaktereket tartalmazott.
Ahogyan korábban említettem, további magyarázatért arról, hogy érdemes-e a codepage, iocharset vagy utf8 csatolási opciókat használni, tekintse meg a /usr/src/linux/Documentation/filesystems/vfat.txt fájlt, amely a Linux Kernel vfat forráskód dokumentációját tartalmazza.
Rendezetlen fájlok és mappák
Amikor fájlokat ír a FAT/FAT32 fájlrendszerre, az azt olvasó eszközök rendezetlenül jeleníthetik meg a fájlokat és könyvtárakat. A nézők általában azt részesítik előnyben, ha a fájlokat és mappákat ábécérendben látják. Telepítse a sys-fs/fatsort szoftvercsomagot, és adja ki a következő parancsot:
root #
fatsort /dev/device_file
További olvasnivaló a témában
- ExFAT — egy Microsoft által kifejlesztett fájlrendszer, amelyet a flash memóriával ellátott adathordozókhoz, például az USB adathordozókhoz optimalizáltak
- ext4 — nyílt forráskódú adathordozó fájlrendszer, amely a kiterjesztett fájlrendszerek sorozatának legújabb verziója.
- btrfs — egy copy-on-write, CoW fájlrendszer Linux számára, amelynek célja a fejlett funkciók megvalósítása, miközben a hibatűrésre, az öngyógyító tulajdonságokra és az egyszerű adminisztrációra összpontosít.
- removable media — olyan adathordozók, amelyeket könnyen el lehet távolítani a rendszerből.
- /etc/fstab
Külső források
- /usr/src/linux/Documentation/filesystems/vfat.txt - A VFAT fájlrendszer dokumentációja, amely a Linux kernel forráskódjához tartozik.
- FAT fájlrendszer és a Linux - A Wikipédiáról.