FAT

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page FAT and the translation is 100% complete.
Resources

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

KERNEL FAT támogatás engedélyezése (CONFIG_VFAT_FS)
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

FILE /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.

Note
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

Warning
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).

Important
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.

Note
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

Hivatkozások