FAT
A fájlallokációs tábla ( F ile A llocation T able, 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.