# File Allocation Table

File Allocation Table (FAT, tradução livre: Tabela de Alocação de Ficheiros) é um sistema de ficheiros desenvolvido para o MS-DOS e usado em versões do Microsoft Windows até o Windows 95.
A tabela de alocação é um mapa de utilização do disco ou disquete. Graças a ele, o sistema operacional é capaz de saber exatamente onde um determinado ficheiro está armazenado.
O sistema FAT é considerado como relativamente simples, e por isso é um formato popular para discos diversos. Além disso, é suportado por virtualmente todos os sistemas operativos/operacionais existentes para computadores pessoais, e assim, é usado frequentemente para compartilhar dados entre diversos sistemas operativos instalados num computador (um ambiente multiboot ou multiarranque).

## Implementação

É usado em cartões de memória de estado sólido (conhecidos como discos flash ou pendrives) e em outros dispositivos semelhantes.
As implementações mais comuns têm um inconveniente sério: quando ficheiros são apagados e novos ficheiros são escritos no suporte, as suas partes tendem a dispersar-se, fragmentando-se por todo o espaço disponível, tornando a leitura e a escrita um processo lento.
A desfragmentação é uma solução para isso, mas é habitualmente um processo demorado (sobretudo no sistema FAT32) e que tem de ser repetido regularmente para manter o sistema operacional limpo.
Existem 3 versões do sistema FAT: FAT (12 bits, usado pelos disquetes), FAT16 (para OS 16 bits ou 32 bits) e FAT32 (só para SO a 32 bits); a diferença mais visível entre as duas últimas versões (16 e 32) é que FAT32 suporta nomes de ficheiros longos (até 256 caracteres), enquanto o FAT16 suporta apenas nomes de arquivos curtos (até 8 caracteres + extensão). Caso seja excedido o valor de caracteres, os caracteres excedidos (do nome do ficheiro) desaparecerão e no lugar deles aparecerá ~1 ou ~2 (se já existir um outro arquivo com os 8 primeiros caracteres iguais).
Um dos maiores problemas do FAT diz respeito à segurança, pois neste sistema os ficheiros podem ser lidos ou escritos por qualquer utilizador (e não apenas por utilizadores autorizados, como no Ext2, Ext3 ou NTFS). Por esse motivo, os Windows da família NT usam o NTFS que já oferece tal recurso.

## Versões
### FAT-12

O sistema FAT12 possui um limite máximo para uma partição de 16MB, com cluster de 512 bytes, 1K, 2K e 4K.
Trata-se de um sistema que funciona através de uma espécie de tabela que contém indicações para onde estão as informações de cada arquivo. Quando um arquivo é salvo num disquete, por exemplo, o FAT12 divide a área do disco em pequenos blocos. Assim, um arquivo pode (e ocupa) vários blocos, mas eles não precisam estar numa sequência. Os blocos de determinados arquivos podem estar em várias posições diferentes, foi aí que surgiu a necessidade de uma tabela para indicar cada bloco.
O FAT12 organiza os dados em discos fixos e disquetes. O que distingue a FAT12 é a sua convenção de nomes de arquivos. Os nomes são constituídos por até 8 caracteres, um caráter separador constituído por um ponto (.) e uma extensão do nome com até 3 caracteres. A grande vantagem de volumes FAT é que são acessíveis pelo DOS, pelo Windows e pelo OS/2. Também é o único sistema de arquivos utilizado para disquetes e outros meios removíveis. Os volumes FAT não diferenciam maiúsculas de minúsculas.

### FAT-16

O sistema de arquivos FAT-16 é utilizado pelos sistemas operacionais MS-DOS e Windows 95. Este sistema utiliza 16 bits para o endereçamento de dados, podendo trabalhar no máximo com 65.536 (2^16) posições diferentes.
Se observarmos que os setores possuem o tamanho de 512 bytes, fica fácil perceber que em FAT 16 só seria possível acessar 65.536 x 512 bytes= 33.554.432 bytes, isto é 32 MB. Mas trabalha com discos de 32 MB, mesmo com o Windows 95 fica difícil...
Para resolver este problema a Microsoft passou a apontar conjuntos de setores, os clusters, em vez dos setores somente, como mostra a tabela abaixo.
| Cluster (em FAT 16) | Capacidade de Acesso Ao Disco |
| 2 KB | 128 MB |
| 4 KB | 256 MB |
| 8 KB | 512 MB |
| 16 KB | 1 GB |
| 32 KB | 2 GB |
Dessa forma, apontando clusters dentro do limite de 32 KB cada, tornou-se possível o acesso a discos de até 2GB.
A grande desvantagem do sistema FAT 16 é o desperdício. Para entender melhor, imagine que você está utilizando um HD de 2 GB, cujos clusters são de 32 KB. Neste caso todos os arquivos ocuparão espaço de no mínimo 32 KB, mesmo que sejam menores. O espaço que sobra em um cluster que não foi totalmente ocupado fica desperdiçado. Esse desperdício, que pode chegar a 25% da capacidade total do HD, é conhecido como Slack space, e é o grande problema desse sistema de arquivos, além da limitação quanto ao tamanho do disco rígido (2 GB).

### FAT-32

A fim de superar o limite de tamanho de volume do FAT16, enquanto ao mesmo tempo permitir que o código em modo real do DOS lide com o formato, a Microsoft criou uma nova versão do sistema de arquivos, o FAT32, que suportava um maior número de clusters possíveis, mas poderia reutilizar a maior parte do código existente, de modo que o consumo de memória convencional foi aumentado em menos de 5 KiB no DOS. Os valores de clusters são representados por números de 32 bits, dos quais 28 bits são usados para conter o número do cluster. O setor de inicialização usa um campo de 32 bits para a contagem de setor, limitando o tamanho do volume FAT32 a 2 TiB para um tamanho de setor de 512 bytes e 16 TiB para um tamanho de setor de 4.096 bytes

### VFAT

O sistema FAT aceita somente arquivos no formato 8.3 (no máximo 8 caracteres para os nomes dos arquivos e 3 letras para a extensão). Para permitir arquivos com nomes longos, o sistema VFAT armazena o nome do arquivo no formato 8.3 e o nome longo fica oculto nas entradas fantasmas do diretório, que podem ser vistas somente pelo Windows 9x.

### Pen Drive

Embora fora de uso no Disco Rígido, o sistema FAT , por ser rápido e simples, é utilizado hoje no Pen Drive que utilizamos para guardar arquivos, fotos, músicas. No pen drive o sistema é o FAT32 e normalmente já vem formatado assim do fabricante, mas pode ser alterado para NTFS, porém neste caso vamos perder um pouco de espaço disponível para ser utilizado.

## Extensões
### Nomes extensos de arquivos

Um dos objetivos da experiência do usuário para os designers do Windows 95 era a capacidade de usar nomes extensos de arquivos (LFNs - até 255 unidades de código UTF-16), além dos clássicos nomes de arquivos 8.3 (SFNs). Para compatibilidade com versões anteriores e futuras, o LFN foi implementado como uma extensão opcional no topo das estruturas existentes do sistema de arquivos FAT, usando uma solução alternativa na forma como as entradas de diretório são estabelecidas.
Este método transparente para armazenar nomes de arquivo longos nos sistemas de arquivos FAT existentes sem alterar suas estruturas de dados é geralmente conhecido como VFAT ("Virtual FAT") após o driver de dispositivo virtual do Windows 95.
Os sistemas operacionais não habilitados para VFAT ainda podem acessar os arquivos sob seu apelido (alias) de nome de arquivo abreviado sem restrições, no entanto, os nomes de arquivos longos associados podem ser perdidos, quando arquivos com nomes longos são copiados em sistemas operacionais não compatíveis com VFAT.
No Windows NT, o suporte para nomes de arquivos longos VFAT é iniciado a partir da versão 3.5.
O GNU/Linux fornece um driver de sistema de arquivos VFAT para trabalhar com volumes FAT com nomes de arquivos longos VFAT. Por algum tempo, um driver UVFAT esteve disponível para fornecer suporte combinado para permissões no estilo UMSDOS com nomes extensos de arquivos VFAT.
O OS/2 adicionou suporte a nome de arquivo longo para FAT usando atributos estendidos (AE) antes da introdução do VFAT. Assim, os nomes de arquivos longos VFAT são invisíveis para o OS/2, e os nomes de arquivos longos do AE são invisíveis para o Windows, portanto, os usuários experientes de ambos os sistemas operacionais precisariam renomear manualmente os arquivos.
O Human68K suportava até o nomes de arquivos 18.3 e caracteres Kanji (Shift JIS) em uma variante proprietária do sistema de arquivos FAT.
Para suportar os aplicativos Java, o IBM 4690 OS versão 2 baseado no FlexOS introduziu sua própria arquitetura de sistema de arquivos virtual (VFS) para armazenar nomes extensos de arquivos no sistema de arquivos FAT de uma maneira compatível com versões anteriores. Se ativado, os nomes de arquivos virtuais (VFN) estarão disponíveis em letras de unidade lógica separadas, enquanto os nomes de arquivos reais (RFN) permanecerão disponíveis sob as letras de unidade originais.