Linux fat32 e vfat, exFAT, UDF

FAT12/16/32 - VFAT

La differenza teorica è spiegata in moltissimi articoli per cui non tocco l'argomento: ITA, ENG

Preparo  un file system per le mie prove:

(indispensabile associare il loop device al file in quanto ancora non contiene un file system e quindi non posso montarlo con mount -o loop da subito. Devo invece creare un file system all'interno del file e, per farlo, devo accedervici come se fosse un block device, in questo caso /dev/loop0. Poi col comando losetup -a vedi che file sono associati a che loop device  e con losetup -d/-D stacchi l'associazione)

Ora guardo in /usr/sbin questi 3 file

mkfs.vfat -> mkfs.fat
mkfs.msdos -> mkfs.fat
mkfs.fat

mkfs.vfat e mkfs.msdos sono link simbolici a mkfs.fat ed è indifferente lanciare uno piuttosto che l'altro.
Il parametro -F di mkfs.fat stabilisce la dimensione della fat, se 12,16 o 32, da manuale

-F FAT-size
Specifies the type of file allocation tables used (12, 16 or  32
bit).   If  nothing  is  specified,  mkfs.fat will automatically
select between 12, 16 and 32 bit, whatever fits better  for  the
filesystem size

Se non si specifica fa lui a seconda di quello che ritiene più opportuno. Il numero si riferisce a quanti bit vengono usati per allocare blocchi sul disco, 2^12, 2^16, 2^32.

Una volta creato il file system per capire la dimensione (12/16/32) esiste un algoritmo (non semplicissimo), in ogni caso parted o gparted ti dicono se è stato formattato FAT16 o FAT 32

Nell'esempio di prima
1)

2)

Qui ho usato indifferentemente mkfs.msdos e mkfs.vfat essendo entrambi link simbolici allo stesso eseguibile. La prima volta ho creato un file system FAT16 e la seconda volta FAT32.

Ora c'è da capire il concetto fondamentale:
Il termine VFAT non indica un altro file system della famiglia FAT ma semplicemente un'estensione che può o meno essere usata con qualsiasi tipo di file system FAT(12,16,32). Quindi non formatti mai un qualcosa in VFAT e la struttura del file system che vai a creare è sempre FAT12/16/32.
Il driver (di windows o di linux) che verrà poi usato per leggere o scrivere all'interno di un file system  FAT potrà avere l'estensione VFAT, e quindi gestirà i nomi dei file "lunghi" (>8.3) in maniera diversa.
Se scrivi file "lunghi" con un driver con estensione vfat (vfat) e poi rimonti con un driver senza estensione (msdos) vedrai i nomi troncati utilizzando alcune convenzioni per retrocompatibilità.

In linux vengono usati sostanzialmente 3 driver per il kernel capaci di leggere/scrivere file system di tipo FAT: "msdos" e "vfat" e  "umsdos". Ciscuno di questi ha differenti capacità.
Tutti supportano i 3 tipi di FAT, 12/16/32: La differenza  sta nella capacità di gestire nomi file lunghi (e caratteri tipo accenti) e nella gestione dei permessi.
Montando un file system FAT12/16/32 con il driver msdos avrai sempre e solo nomi 8.3 e nessuna gestione dei permessi
Montando un file system FAT12/16/32 con il driver vfat avrai sempre il supporto ai nomi lunghi nello stesso modo in cui microsoft ha implementato VFAT (da qui il nome) e nessuna gestione di permessi
Montando un file system FAT12/16/32 con il driver umsdos avrai sia supporto a nomi lunghi che gestione di permessi ma perderai in portabilità (per questo non l'ho mai visto usato)

N.B: Anche se il termine FAT si riferisce all'intera famiglia, ultimamente (win7/8) Microsoft quando propone di formattare FAT intende FAT16 e FAT32 intende FAT32. Quando poi accedi ai dispositivi così memorizzati (li monti) ci sarà sempre abilitata l'estensione vfat. I file system che vengo proposti quando si prova a formattare un dispositivo sono solamente quelli che Windows ritiene più opportuni per il dispositivo stesso: Spesso quindi non trovo ntfs o trovo solo fat se il disco è davvero molto piccolo etc...

 

exFAT (o FAT64)

La teoria di base la si può trovare qui  oppure qui

Su Fedora 18 installo questi pacchetti (da rpmfusion)
fuse-exfat-1.0.1-1.fc18.x86_64
exfat-utils-1.0.1-1.fc18.x86_64

Su debian i pacchetti sono questi:
exfat-fuse - read and write exFAT driver for FUSE
exfat-utils - utilities to create, check, label and dump exFAT filesystem

Quindi è un filesystem in user space (come ntfs-3g)

Ora testo la formattazione exfat su una chiavetta usb e la portabilità in win7/8

Ora scrivo all'interno del file system appena montato un file di grandi dimensioni

Controllo se parted capisce che file-system c'è all'interno di /dev/sdc1

parted in questo caso non riesce a capire che file system c'è all'interno. Forse capisce che è fat ma non riesce a calcolarne la dimensione per cui non si sbilancia?

Lanciando un df  -Th il file system sarà, come anche nel caso di ntfs-3g, genericamente fuseblk (df -Th mi dice che driver sto usando per accedere, non che file system c'è)

Windows legge correttamente il file system così creato

exfat

UDF

Il pacchetto in fedora si chiama
udftools-1.0.0b3-16.fc18.x86_64

Per debian serve
udftools - tools for UDF filesystems and DVD/CD-R(W) drives

Non è un file system in user space e quindi serve un modulo (udf) per il kernel per farlo funzionare che dovrebbe già essere compreso nella distribuzione. Il contenuto del pacchetto sono sono gli strumenti per inizializzare/controllare/gestire un file-system udf

Provo udf su un partizione di una chiavetta usb a cui assegno type 6 (fat16) (o 0700  Microsoft basic data)

In teoria un file system udf andrebbe creato sull'intero disco senza partizioni (come in un cd/dvd) e poi andrebbe montato l'intero disco (mount /dev/sdc ./mnt -t udf). La man page di mkudffs infatti dice "mkudffs is used to create a UDF filesystem on a device (usually a disk). device is the special file corresponding to the device (e.g /dev/hdX)", a differenza della man page di mkfs.ext4 dove di parla esplicitamente di partizione "mke2fs  is used to create an ext2, ext3, or ext4 filesystem, usually in a disk partition.  device is the  special  file    corresponding  to  thedevice  (e.g  /dev/hdXX)". Detto questo però dalle mie prove sembra che funzioni correttamente anche su una partizione.
Il filesystem udf è stato pensato per i dvd ma dalla versione 1.5 in avanti si può utilizzare anche per dispositivi con scrittura e riscrittura e accesso casuale: Forse l'obbligo di usarlo sull'intero disco si riferisce alle vecchi versioni (???)
Al solito, prima di operare cancello i primi settori del disco che contengono la tabella delle partizioni e che potrebbero confondere i sistemi operativi che tentano di montare il disco

Creo il file system udf, è importante che il block size sia identico a quello fisico del disco (512bytes)

Scrivo ora un file grosso al suo interno e qualche file generico per delle prove

Si può notare che la gestione dei permessi è corretta e anche quella dei file "lunghi".

Ora accedo a questo contenuto da win7 e faccio alcune modifiche, rimonto il tutto e sembra funzionare correttamente

udf

NOTA UDF
Avere  2 partizioni di cui una udf e l'altra fat/ntfs/exfat  mi da risultati strani: Con linux nessun problema, con windows leggo solo quella non udf.

 

Print Friendly, PDF & Email