Sistema de ficheiros
# Sistema de ficheiros

Em computação, sistema de ficheiros ou sistema de arquivos (também conhecido por sistema de gestão de ficheiros) é a forma de organização de dados em algum meio de armazenamento de dados em massa, frequentemente feito em discos magnéticos. Ele controla como os dados são armazenados e recuperados, possibilitando ao sistema operacional decodificar os dados armazenados e lê-los ou gravá-los. Sem um sistema de arquivos, as informações colocadas em um meio de armazenamento seriam um grande corpo de dados, sem nenhuma maneira de dizer onde uma parte da informação termina e a próxima começa. Ao separar os dados em pedaços e dar um nome a cada peça, a informação é facilmente isolada e identificada. Tomando seu nome a partir do modo como os sistemas de informação baseados em papel são nomeados, cada grupo de dados é chamado de "arquivo". A estrutura e as regras lógicas usadas para gerenciar os grupos de informações e seus nomes são chamadas de "sistema de arquivos".
Existem muitos tipos diferentes de sistemas de arquivos. Cada um tem estrutura e lógica diferentes, propriedades de velocidade, flexibilidade, segurança, tamanho e muito mais. Alguns sistemas de arquivos foram projetados para serem usados ​​em aplicativos específicos. Por exemplo, o sistema de arquivos ISO 9660 foi projetado especificamente para discos ópticos.
Os sistemas de arquivos podem ser usados ​​em vários tipos diferentes de dispositivos de armazenamento que usam diferentes tipos de mídia. O dispositivo de armazenamento mais comum em uso hoje é uma unidade de disco rígido. Outros tipos de mídia usados ​​incluem memória flash, fitas magnéticas e discos ópticos. Em alguns casos, como no tmpfs, a memória principal do computador (memória de acesso aleatório, RAM) é usada para criar um sistema de arquivos temporário para uso a curto prazo.
Alguns sistemas de arquivos são usados ​​em dispositivos locais de armazenamento de dados, outros fornecem acesso a arquivos por meio de um protocolo de rede (por exemplo, clientes NFS, SMB ou 9P). Alguns sistemas de arquivos são "virtuais", o que significa que os "arquivos" fornecidos (chamados de arquivos virtuais) são computados mediante solicitação (como procfs e sysfs) ou são apenas um mapeamento em um sistema de arquivos diferente usado como armazenamento de backup. O sistema de arquivos gerencia o acesso ao conteúdo dos arquivos e aos metadados sobre esses arquivos. É responsável por organizar o espaço de armazenamento. A confiabilidade, eficiência e ajuste com relação ao meio físico de armazenamento são importantes considerações de projeto.

## Origem do termo

Antes do advento dos computadores, o termo sistema de arquivos era usado para descrever um método de armazenamento e recuperação de documentos em papel. Em 1961, o termo estava sendo aplicado ao arquivamento computadorizado ao lado do significado original. Em 1964, já era de uso geral.
Fazendo analogias, tal organização assemelha-se a uma biblioteca escolar. O bibliotecário organiza os livros conforme um padrão, cuja busca, convenientemente, procura deixar mais fácil, sem ocupar muitas prateleiras e assegurando a integridade deste. Ainda, certamente, organiza os livros segundo suas características (assunto, censura, etc.). Depois de organizados, ou durante a organização, o bibliotecário cria uma lista com todos os livros da biblioteca, com seus assuntos, localizações e códigos respectivos.
Aplicando a analogia à informática, o sistema operacional seria o bibliotecário da "biblioteca de dados" do computador, o disco de armazenamento. Exatamente igual à organização de uma biblioteca, o sistema operacional guarda os dados nos espaços vazios do disco, rotulando-os com um FCB (File Control Block, Bloco de Controle de Arquivo) e ainda criando uma lista com a posição deste dado, chamada de MFT (Master File Table, Tabela de Arquivos Mestre). Sabendo a posição do arquivo a ser aberto/gravado, o sistema operacional solicita a leitura desta, decodifica/codifica e realiza a abertura/gravação do dado.
Um sistema de ficheiro é assim: uma forma de criar uma estrutura lógica de acesso a dados numa partição. Sendo assim, também é importante referir que nunca poderá ter dois ou mais tipos de sistemas de ficheiros (formatos) numa mesma partição.
O MBR (Master Boot Record) é um arquivo de dados interligado com a BIOS cuja importância é o reconhecimento do sistema de arquivos, como também na inicialização do sistema operacional.
Para a maioria dos usuários, o sistema de arquivos é o aspecto mais visível de um sistema operacional. Ele fornece o mecanismo para o armazenamento online e o acesso relacionado tantos aos dados como aos programas do sistema operacional e de todos os usuários do sistema de computação. O sistema de arquivos consiste em duas partes distintas: uma coleção de arquivos, cada um deles armazenando dados relacionados, e uma estrutura de diretórios, que organiza e fornece informação sobre todos os arquivos do sistema. Alguns sistemas de arquivos têm uma terceira parte, as partições, utilizadas para separar física ou logicamente grandes coleções de diretórios.

## Arquitetura

Um sistema de arquivos consiste em duas ou três camadas. Às vezes, as camadas são explicitamente separadas e, às vezes, as funções são combinadas.
O sistema de arquivos lógico é responsável pela interação com o aplicativo do usuário. Ele fornece a interface de programação de aplicações (API) para operações de arquivo - OPEN, CLOSE, READ, etc. e passa a operação solicitada para a camada abaixo para processamento. O sistema de arquivos lógico "gerencia as entradas da tabela de arquivos abertos e os descritores de arquivos por processo." Esta camada fornece "acesso a arquivos, operações de diretório, segurança e proteção".
A segunda camada opcional é o sistema de arquivos virtual. "Esta interface permite o suporte para múltiplas instâncias simultâneas de sistemas de arquivos físicos, cada um dos quais é chamado de implementação de sistema de arquivos."
A terceira camada é o sistema de arquivos físico. Esta camada está relacionada com o funcionamento físico do dispositivo de armazenamento (por exemplo, disco). Ele processa blocos físicos que estão sendo lidos ou gravados. Ele lida com o gerenciamento de buffer e de memória e é responsável pelo posicionamento físico de blocos em locais específicos no meio de armazenamento. O sistema de arquivos físico interage com os drivers de dispositivo ou com o canal para controlar o dispositivo de armazenamento.

## Aspectos de sistemas de arquivos
### Gerenciamento de espaço

Observação: isto aplica-se somente a sistemas de arquivos usados em dispositivos de armazenamento.
Os sistemas de arquivos alocam o espaço de maneira granular, geralmente várias unidades físicas no dispositivo. O sistema de arquivos é responsável por organizar os arquivos e diretórios e manter o controle de quais áreas da mídia pertencem a qual arquivo e quais não estão sendo usadas. Por exemplo, no Apple DOS do início dos anos 80, os setores de 256 bytes em disquetes de 140 kilobytes usavam um mapa de trilha/setor.
Isso resulta em espaço não utilizado quando um arquivo não é um múltiplo exato da unidade de alocação, às vezes referido como espaço de folga. Para uma alocação de 512 bytes, o espaço médio não utilizado é de 256 bytes. Para clusters de 64 KB, o espaço médio não utilizado é de 32 KB. O tamanho da unidade de alocação é escolhido quando o sistema de arquivos é criado. Escolher o tamanho da alocação com base no tamanho médio dos arquivos que se espera estar no sistema de arquivos pode minimizar a quantidade de espaço inutilizável. Frequentemente, a alocação padrão pode fornecer uso razoável. Escolher um tamanho de alocação que seja muito pequeno resulta em sobrecarga excessiva se o sistema de arquivos contiver arquivos na maioria muito grandes.
A fragmentação de sistema de arquivos ocorre quando o espaço não utilizado ou os arquivos individuais não são contíguos. Como um sistema de arquivos é usado, os arquivos são criados, modificados e excluídos. Quando um arquivo é criado, o sistema de arquivos aloca espaço para os dados. Alguns sistemas de arquivos permitem ou exigem a especificação de uma alocação de espaço inicial e alocações incrementais subsequentes à medida que o arquivo cresce. À medida que os arquivos são excluídos, o espaço que eles foram alocados eventualmente é considerado disponível para uso por outros arquivos. Isso cria áreas utilizadas e não utilizadas alternadas de vários tamanhos. Esta é a fragmentação do espaço livre. Quando um arquivo é criado e não há uma área de espaço contíguo disponível para sua alocação inicial, o espaço deve ser atribuído em fragmentos. Quando um arquivo é modificado de modo a ficar maior, ele pode exceder o espaço inicialmente alocado a ele, outra alocação deve ser atribuída em outro lugar e o arquivo se torna fragmentado.

### Nomes de arquivo

Um nome de arquivo é usado para identificar uma localização de armazenamento no sistema de arquivos. A maioria dos sistemas de arquivos possuem restrições de comprimento de nomes de arquivo. Em alguns sistemas de arquivos, nomes de arquivos não são sensíveis a caixa (isto é, os nomes MEUARQUIVO e meuarquivo referem-se ao mesmo arquivo), em outros, os nomes de arquivos são sensíveis a caixa (isto é, os nomes MEUARQUIVO, MeuArquivo e meuarquivo referem-se a três arquivos separados).
A maioria dos sistemas de arquivos modernos permitem que nomes de arquivos contenham uma grande variedade de caracteres do conjunto de caracteres Unicode. Entretanto, eles podem possuir restrições no uso de certos caracteres especiais, impedindo-os de serem usados dentro de nomes de arquivos. Esses caracteres podem ser usados para indicar um dispositivo, tipo de dispositivo, prefixo de diretório, separador de caminho de arquivo ou tipo de arquivo.

### Diretórios

Os sistemas de arquivos geralmente possuem diretórios (também chamados de pastas) que permitem ao usuário agrupar arquivos em coleções separadas. Isso pode ser implementado associando o nome do arquivo a um índice em uma tabela de conteúdos ou a um inode em um sistema de arquivos do tipo Unix. As estruturas de diretórios podem ser planas (ou seja, lineares) ou permitir hierarquias nas quais os diretórios podem conter subdiretórios. O primeiro sistema de arquivos a suportar hierarquias arbitrárias de diretórios foi usado no sistema operacional Multics. Os sistemas de arquivos nativos de sistemas semelhantes ao Unix também suportam hierarquias de diretórios arbitrários, como, por exemplo, o Hierarchical File System da Apple e seu sucessor HFS+ no Mac OS clássico, o sistema de arquivos FAT no MS-DOS 2.0, e versões posteriores, e no Microsoft Windows, o sistema de arquivos NTFS na família Windows NT de sistemas operacionais e o ODS-2 (On-Disk Structure-2) e níveis mais altos do sistema de arquivos Files-11 no OpenVMS.

### Metadados

Outras informações de escrituração contábil normalmente são associadas a cada arquivo dentro de um sistema de arquivos. O comprimento dos dados contidos em um arquivo pode ser armazenado como o número de blocos alocados para o arquivo ou como uma contagem de bytes. A hora em que o arquivo foi modificado pela última vez pode ser armazenada como o registro de data e hora do arquivo. Os sistemas de arquivos podem armazenar o horário de criação do arquivo, a hora em que ele foi acessado pela última vez, a hora em que os metadados do arquivo foram alterados ou a hora em que o arquivo foi copiado pela última vez. Outras informações podem incluir o tipo de dispositivo do arquivo (por exemplo, bloco, caractere, soquete, subdiretório etc.), seu ID de usuário e ID de grupo de proprietário, suas permissões de acesso e outros atributos de arquivo (por exemplo, se o arquivo é somente leitura, executável, etc.).
Um sistema de arquivos armazena todos os metadados associados ao arquivo - incluindo o nome do arquivo, o comprimento do conteúdo de um arquivo e o local do arquivo na hierarquia de pastas - separado do conteúdo do arquivo.
A maioria dos sistemas de arquivos armazena os nomes de todos os arquivos em um diretório em um único local - a tabela de diretórios desse diretório - que geralmente é armazenado como qualquer outro arquivo. Muitos sistemas de arquivos colocam apenas alguns dos metadados para um arquivo na tabela de diretórios e o restante dos metadados para esse arquivo em uma estrutura completamente separada, como o inode.
A maioria dos sistemas de arquivos também armazena metadados não associados a nenhum arquivo específico. Esses metadados incluem informações sobre regiões não utilizadas - bitmap de espaço livre, mapa de disponibilidade de blocos - e informações sobre setores defeituosos. Geralmente, essas informações sobre um grupo de alocação são armazenadas dentro do próprio grupo de alocação.
Atributos adicionais podem ser associados em sistemas de arquivos, como NTFS, XFS, ext2, ext3, algumas versões do UFS e HFS+, usando atributos estendidos de arquivo. Alguns sistemas de arquivos fornecem atributos definidos pelo usuário, como o autor do documento, a codificação de caracteres de um documento ou o tamanho de uma imagem.
Alguns sistemas de arquivos permitem que diferentes coleções de dados sejam associadas a um nome de arquivo. Essas coleções separadas podem ser chamadas de fluxos ou garfos. A Apple usa há muito tempo um sistema de arquivos bifurcado no Macintosh, e a Microsoft suporta fluxos no NTFS. Alguns sistemas de arquivos mantêm várias revisões anteriores de um arquivo sob um único nome de arquivo. O nome do arquivo por si só recupera a versão mais recente, enquanto a versão salva anteriormente pode ser acessada usando uma convenção de nomenclatura especial, como "nome_do_arquivo;4" ou "nome_do_arquivo(-4)" para acessar a versão quatro salva.
Veja comparação de sistemas de arquivos para obter detalhes sobre quais sistemas de arquivos suportam quais tipos de metadados.

### Sistema de arquivos como uma interface abstrata de usuário

Em alguns casos, um sistema de arquivos pode não fazer uso de um dispositivo de armazenamento, mas pode ser usado para organizar e representar o acesso a qualquer dado, seja armazenado ou gerado dinamicamente (por exemplo, procfs).

### Utilitários

Os sistemas de arquivos incluem utilitários para inicializar, alterar parâmetros e remover uma instância do sistema de arquivos. Alguns incluem a capacidade de estender ou truncar o espaço alocado para o sistema de arquivos.
Os utilitários de diretório podem ser usados ​​para criar, renomear e excluir entradas de diretório, que também são conhecidas como dentries (singular: dentry), e para alterar metadados associados a um diretório. Os utilitários de diretório também podem incluir recursos para criar links adicionais para um diretório (hard links no Unix), para renomear links pai (".." em sistemas operacionais tipo Unix), e para criar links bidirecionais para arquivos.
Os utilitários de arquivos criam, listam, copiam, movem e excluem arquivos e alteram os metadados. Eles podem truncar dados, truncar ou estender a alocação de espaço, anexar, mover e modificar arquivos no local. Dependendo da estrutura subjacente do sistema de arquivos, eles podem fornecer um mecanismo para preceder ou truncar o início de um arquivo, inserir entradas no meio de um arquivo ou excluir entradas de um arquivo.
Utilitários para liberar espaço para arquivos excluídos, se o sistema de arquivos fornecer uma função de exclusão, também pertence a essa categoria.
Alguns sistemas de arquivos adiam operações como a reorganização do espaço livre, o apagamento seguro de espaço livre e a reconstrução de estruturas hierárquicas, fornecendo utilitários para executar essas funções em momentos de atividade mínima. Um exemplo são os utilitários de desfragmentação do sistema de arquivos.
Algumas das características mais importantes dos utilitários do sistema de arquivos envolvem atividades de supervisão que podem envolver ignorar a propriedade ou o acesso direto ao dispositivo subjacente. Isso inclui backup e recuperação de alto desempenho, replicação de dados e reorganização de várias estruturas de dados e tabelas de alocação dentro do sistema de arquivos.

## Tipos e sistemas de arquivos

Os tipos de sistemas de arquivos podem ser classificados em sistemas de arquivos de disco/fita, sistemas de arquivos de rede e sistemas de arquivos de propósito especial.

### Sistemas de arquivos de disco

Um sistema de arquivos de disco aproveita a capacidade da mídia de armazenamento em disco para endereçar dados aleatoriamente em um curto período de tempo. Considerações adicionais incluem a velocidade de acesso aos dados após a solicitação inicial e a antecipação de que os dados seguintes também podem ser solicitados. Isso permite que vários usuários (ou processos) acessem vários dados no disco sem considerar a localização sequencial dos dados. Exemplos incluem FAT (FAT12, FAT16, FAT32), exFAT, NTFS, HFS e HFS+, HPFS, APFS, UFS, ext2, ext3, XFS, btrfs, ISO 9660, Files-11, Veritas File System, VMFS, ZFS, ReiserFS e UDF. Alguns sistemas de arquivos em disco são sistemas de arquivos de registro ou sistemas de arquivos de controle de versão.

#### Discos óticos

O ISO 9660 e o Universal Disk Format (UDF) são dois formatos comuns destinados a discos compactos, DVDs e discos Blu-ray. O Mount Rainier é uma extensão do suporte a UDF desde a série 2.6 do kernel do Linux e desde o Windows Vista que facilita a reescrita para DVDs.

### Sistemas de arquivos de flash

Um sistema de arquivos de flash considera as habilidades especiais, o desempenho e as restrições dos dispositivos de memória flash. Freqüentemente, um sistema de arquivos em disco pode usar um dispositivo de memória flash como a mídia de armazenamento subjacente, mas é muito melhor usar um sistema de arquivos projetado especificamente para um dispositivo flash.

### Sistemas de arquivos de fita

Um sistema de arquivos de fita é um sistema de arquivos e um formato de fita projetado para armazenar arquivos em fita em uma forma autodescritiva. As fitas magnéticas são mídias de armazenamento sequenciais com tempos de acesso a dados aleatórios significativamente maiores do que os discos, o que representa desafios para a criação e gerenciamento eficiente de um sistema de arquivos de uso geral.
Em um sistema de arquivos em disco, geralmente há um diretório de arquivos mestre e um mapa de regiões de dados usadas e livres. Quaisquer adições, alterações ou remoções de arquivos exigem a atualização do diretório e dos mapas usados​​/livres. O acesso aleatório às regiões de dados é medido em milissegundos, portanto, esse sistema funciona bem para discos.
A fita requer movimento linear para enrolar e desenrolar potencialmente bobinas de mídia muito longas. Esse movimento da fita pode levar de alguns segundos a vários minutos para mover a cabeça de leitura/gravação de uma extremidade da fita para a outra.
Consequentemente, um diretório de arquivos mestre e um mapa de uso podem ser extremamente lentos e ineficientes com fita. Escrever normalmente envolve ler o mapa de uso do bloco para encontrar blocos livres para gravação, atualizar o mapa e o diretório de uso para adicionar os dados e avançar a fita para gravar os dados no local correto. Cada gravação de arquivo adicional requer a atualização do mapa e do diretório e a gravação dos dados, o que pode levar vários segundos para ocorrer em cada arquivo.
Em vez disso, os sistemas de arquivos de fitas normalmente permitem que o diretório de arquivos seja distribuído pela fita intercalada com os dados, chamados de fluxo contínuo, de modo que os movimentos repetitivos e demorados da fita não sejam necessários para gravar novos dados.
No entanto, um efeito colateral desse design é que a leitura do diretório de arquivos de uma fita geralmente requer a verificação da fita inteira para ler todas as entradas de diretório espalhadas. A maioria dos softwares de arquivamento de dados que funciona com armazenamento em fita armazenará uma cópia local do catálogo de fitas em um sistema de arquivos em disco, para que a adição de arquivos a uma fita possa ser feita rapidamente sem necessidade de redigitalizar a mídia de fita. Geralmente, a cópia do catálogo de fitas local é descartada se não for usada por um período de tempo especificado. Nesse ponto, a fita deve ser verificada novamente se for usada no futuro.
A IBM desenvolveu um sistema de arquivos para fita chamado Linear Tape File System (em português: Sistema de Arquivos de Fita Linear). A implementação IBM desse sistema de arquivos foi lançada como o produto de código aberto IBM Linear Tape File - Single Drive Edition (LTFS-SDE). O Sistema de Arquivos de Fita Linear usa uma partição separada na fita para registrar os metadados de índice, evitando assim os problemas associados às entradas de diretório de dispersão em toda a fita.

#### Formatação de fita

Escrever dados em uma fita, apagar ou formatar uma fita é um processo demorado e que pode levar várias horas em fitas grandes. Com muitas tecnologias de fita de dados, não é necessário formatar a fita antes de sobrescrever novos dados nela. Isso se deve à natureza inerentemente destrutiva de sobrescrever dados em mídia sequencial.
Devido ao tempo que pode ser necessário para formatar uma fita, normalmente as fitas são pré-formatadas para que o seu usuário não precise gastar tempo preparando cada nova unidade para uso. Tudo o que é normalmente necessário é escrever um rótulo de mídia de identificação para a fita antes do uso, e mesmo isso pode ser escrito automaticamente pelo software quando uma nova fita é usada pela primeira vez.

### Sistemas de arquivos de banco de dados

Outro conceito para gerenciamento de arquivos é a ideia de um sistema de arquivos baseado em banco de dados. Em vez de, ou além do gerenciamento estruturado hierárquico, os arquivos são identificados por suas características, como tipo de arquivo, tópico, autor ou metadados ricos semelhantes.
O IBM DB2 para i (anteriormente conhecido como DB2/400 e DB2 para i5/OS) é um sistema de arquivos de banco de dados como parte do sistema operacional IBM i baseado em objetos (anteriormente conhecido como OS/400 e i5/OS), incorporando um armazenamento de nível único e rodando no IBM Power Systems (anteriormente conhecido como AS/400 e iSeries), projetado por Frank G. Soltis, ex-cientista-chefe da IBM para o IBM i. Por volta de 1978 a 1988, Frank G. Soltis e sua equipe da IBM Rochester projetaram e aplicaram com sucesso tecnologias como o sistema de arquivos de banco de dados, onde outros, como a Microsoft, mais tarde não conseguiram realizar. Essas tecnologias são informalmente conhecidas como 'Fortress Rochester' e eram, em alguns aspectos básicos, estendidas desde as primeiras tecnologias de mainframe, mas de muitas maneiras, mais avançadas do ponto de vista tecnológico.
Alguns outros projetos que não são sistemas de arquivos de banco de dados "puros", mas que usam alguns aspectos de um sistema de arquivos de banco de dados:
* Muitos sistemas de gerenciamento de conteúdo da Web usam um SGBD relacional para armazenar e recuperar arquivos. Por exemplo, os arquivos XHTML são armazenados como campos XML ou de texto, enquanto os arquivos de imagem são armazenados como campos blob. As instruções SQL SELECT (com XPath opcional) recuperam os arquivos e permitem o uso de uma lógica sofisticada e de associações de informações mais ricas do que os "sistemas de arquivos comuns". Muitos CMSs também têm a opção de armazenar apenas metadados no banco de dados, com o sistema de arquivos padrão usado para armazenar o conteúdo dos arquivos.
* Sistemas de arquivos muito grandes, incorporados por aplicativos como o Apache Hadoop e o Google File System, usam alguns conceitos de sistema de arquivos de banco de dados.

### Sistemas e arquivos transacionais

Alguns programas precisam atualizar vários arquivos "todos de uma vez". Por exemplo, uma instalação de software pode escrever binários de programas, bibliotecas e arquivos de configuração. Se a instalação do software falhar, o programa poderá ficar inutilizável. Se a instalação estiver atualizando um utilitário de sistema principal, como o shell de comando, todo o sistema poderá ficar inutilizável.
O processamento de transações introduz a garantia de isolamento, que afirma que as operações dentro de uma transação estão ocultas de outros encadeamentos no sistema até que a transação seja confirmada e que as operações interferentes no sistema sejam serializadas corretamente com a transação. As transações também fornecem a garantia de atomicidade, garantindo que as operações dentro de uma transação sejam todas comprometidas ou que a transação possa ser abortada e o sistema descarte todos os seus resultados parciais. Isso significa que, se houver um travamento ou falha de energia, após a recuperação, o estado armazenado será consistente. O software será completamente instalado ou a instalação com falha será completamente revertida, mas uma instalação parcial não utilizável não será deixada no sistema.
O Windows, começando com o Vista, adicionou suporte a transações para o NTFS, em um recurso chamado de NTFS Transacional, mas seu uso hoje é desencorajado. Há vários protótipos de pesquisa de sistemas de arquivos transacionais para sistemas UNIX, incluindo o sistema de arquivos Valor, Amino, LFS e um sistema de arquivos ext3 transacional no kernel do TxOS, bem como sistemas de arquivos transacionais destinados a sistemas incorporados, como o TFFS.
Garantir a consistência em várias operações do sistema de arquivos é difícil, se não impossível, sem transações do sistema de arquivos. O bloqueio de arquivos pode ser usado como um mecanismo de controle de simultaneidade para arquivos individuais, mas normalmente não protege a estrutura de diretórios ou os metadados de arquivos. Por exemplo, o bloqueio de arquivos não pode impedir as condições de corrida do TOCTTOU em ligações simbólicas. O bloqueio de arquivos também não pode reverter automaticamente uma operação com falha, como uma atualização de software, pois isso requer atomicidade.
Os sistemas de arquivos de registro são uma técnica usada para introduzir a consistência no nível da transação nas estruturas do sistema de arquivos. Transações de registro não são expostas a programas como parte da API do SO, eles são usados ​​apenas internamente para garantir consistência na granularidade de uma única chamada de sistema.
Os sistemas de backup de dados normalmente não fornecem suporte para backup direto de dados armazenados de maneira transacional, o que dificulta a recuperação de conjuntos de dados confiáveis ​​e consistentes. A maioria dos softwares de backup simplesmente observa quais arquivos foram alterados desde um determinado momento, independentemente do estado transacional compartilhado entre vários arquivos no conjunto de dados geral. Como uma solução alternativa, alguns sistemas de banco de dados simplesmente produzem um arquivo de estado arquivado contendo todos os dados até aquele ponto, e o software de backup apenas faz backup e não interage diretamente com os bancos de dados transacionais ativos. A recuperação requer recriação separada do banco de dados do arquivo de estado, depois que o arquivo foi restaurado pelo software de backup.

### Sistemas de arquivos de rede

Um sistema de arquivos de rede é um sistema de arquivos que atua como um cliente para um protocolo de acesso remoto a arquivos, fornecendo acesso a arquivos em um servidor. Os programas que usam interfaces locais podem criar, gerenciar e acessar de forma transparente diretórios e arquivos hierárquicos em computadores conectados em rede remota. Exemplos de sistemas de arquivos de rede incluem clientes para os protocolos NFS, AFS, SMB e clientes semelhantes a sistemas de arquivos para FTP e WebDAV.

### Sistemas de arquivos compartilhados

Um sistema de arquivos compartilhado é aquele no qual uma quantidade de máquinas (normalmente servidores) possuem acesso ao mesmo subsistema de isco externo (normalmente um SAN). O sistema de arquivos arbitra acesso a este subsistema, prevenindo colisões de escrita. Exemplos incluem o GFS2 da Red Hat, o GPFS da IBM, o SFS da DataPlow, o CXFS da SGI e o StorNext da Quantum Corporation.

### Sistemas de arquivos especiais

Um sistema de arquivos especial apresenta elementos não-arquivos de um sistema operacional como se fossem arquivos, para que possam ser acionados usando as APIs do sistema de arquivos. Isso é mais comumente feito em sistemas operacionais do tipo Unix, mas os dispositivos recebem nomes de arquivos em alguns sistemas operacionais não baseados em Unix também.

#### Sistemas de arquivos de dispositivo

Um sistema de arquivos de dispositivo representa dispositivos de E/S e pseudo-dispositivos como arquivos, chamados de arquivos de dispositivo. Exemplos em sistemas do tipo Unix incluem o devfs e, em sistemas Linux 2.6, o udev. Em sistemas não-Unix, como o TOPS-10 e outros sistemas operacionais influenciados por ele, nos quais o nome de arquivo ou nome de caminho completo de um arquivo pode incluir um prefixo de dispositivo, dispositivos diferentes daqueles que contêm sistemas de arquivos são referenciados por um prefixo de dispositivo especificando o dispositivo, sem nada seguindo-o.

#### Outros sistemas de arquivos especiais

* No kernel do Linux, o configfs e o sysfs fornecem arquivos que podem ser usados para consultar o kernel em busca de informações e configurar entidades no kernel.
* O procfs mapeia processos e, no Linux, outras estruturas de sistemas operacionais em um espaço no arquivo.

### Sistema de arquivos mínimo / armazenamento de áudio-cassete

Nos anos 70, os dispositivos de fita digital e de disco eram muito caros para alguns dos primeiros usuários de microcomputadores. Foi desenvolvido um sistema básico de armazenamento de dados barato que usava fita cassete de áudio comum.
Quando o sistema precisou escrever dados, o usuário foi notificado para pressionar "RECORD" ("GRAVAR") no gravador de cassetes, depois pressionar "RETURN" ("ENTER") no teclado para notificar o sistema que o gravador estava gravando. O sistema escreveu um som para fornecer sincronização de horário, modulou sons que codificavam um prefixo, os dados, uma soma de verificação e um sufixo. Quando o sistema precisava ler os dados, o usuário era instruído a pressionar "PLAY" ("TOCAR") no gravador de cassetes. O sistema ouvia os sons na fita esperando até que uma explosão de som pudesse ser reconhecida como a sincronização. O sistema então interpretaria os sons subsequentes como dados. Quando a leitura dos dados fosse concluída, o sistema notificaria o usuário para pressionar "STOP" ("PARAR") no gravador. Era primitivo, mas funcionava (na maior parte do tempo). Os dados eram armazenados sequencialmente, geralmente em um formato sem nome, embora alguns sistemas (como a série de computadores Commodore PET) permitissem que os arquivos fossem nomeados. Vários conjuntos de dados podem ser gravados e localizados ao avançar rapidamente a fita e observar no contador de fita para encontrar o início aproximado da próxima região de dados na fita. O usuário pode ter que ouvir os sons para encontrar o ponto certo para começar a tocar a próxima região de dados. Algumas implementações incluíram até mesmo sons audíveis intercalados com os dados.

### Sistemas de arquivos planos

Em um sistema de arquivos plano, não há subdiretórios. Entradas de diretório para todos os arquivos são armazenadas em um único diretório.
Quando a mídia de disquete esteve disponível pela primeira vez, esse tipo de sistema de arquivos era adequado devido à quantidade relativamente pequena de espaço de dados disponível. As máquinas CP/M apresentavam um sistema de arquivos planos, onde os arquivos podiam ser atribuídos a uma das 16 áreas de usuário e as operações de arquivos genéricos estreitavam para funcionar em uma delas, em vez de padronizar para trabalhar em todas elas. Essas áreas de usuário não eram mais do que atributos especiais associados aos arquivos, ou seja, não era necessário definir uma cota específica para cada uma dessas áreas e os arquivos poderiam ser adicionados a grupos enquanto ainda houvesse espaço de armazenamento livre no disco. O antigo Apple Macintosh também apresentava um sistema de arquivos plano, o Macintosh File System. Não era comum que o programa de gerenciamento de arquivos (Macintosh Finder) criasse a ilusão de um sistema de arquivamento parcialmente hierárquico em cima do EMFS. Essa estrutura exigia que cada arquivo tivesse um nome exclusivo, mesmo que parecesse estar em uma pasta separada. O IBM DOS/360 e o OS/360 armazenam entradas para todos os arquivos em um pacote de disco (volume) em um diretório no pacote chamado de Tabela de Conteúdo do Volume (VTOC).
Enquanto simples sistemas de arquivos planos tornam-se desajeitados à medida que o número de arquivos crescia e dificultava a organização de dados em grupos de arquivos relacionados.
Uma adição recente à família de sistemas de arquivos simples é o S3 da Amazon, um serviço de armazenamento remoto, que é intencionalmente simplista para permitir que os usuários personalizem como seus dados são armazenados. As únicas construções são os "buckets" (imagine uma unidade de disco de tamanho ilimitado) e objetos (semelhantes, mas não idênticos ao conceito padrão de um arquivo). O gerenciamento avançado de arquivos é permitido pela capacidade de usar praticamente qualquer caractere (incluindo '/') no nome do objeto e a capacidade de selecionar subconjuntos do conteúdo do bloco com base em prefixos idênticos.

## Sistemas de arquivos e sistemas operacionais

Muitos sistemas operacionais incluem suporte para mais de um sistema de arquivos. Às vezes, o sistema operacional e o sistema de arquivos estão tão entrelaçados que é difícil separar as funções do sistema de arquivos.
É necessário que haja uma interface fornecida pelo software do sistema operacional entre o usuário e o sistema de arquivos. Essa interface pode ser textual (como fornecida por uma interface de linha de comando, como o shell do Unix ou o OpenVMS DCL) ou gráfica (como fornecida por uma interface gráfica do usuário, como navegadores de arquivos). Se gráfica, a metáfora da pasta, contendo documentos, outros arquivos e pastas aninhadas, é freqüentemente usada (veja também: diretório e pasta).

### Sistemas operacionais Unix e do tipo Unix

Sistemas operacionais do tipo Unix criam um sistema de arquivos virtual, o que faz com que todos os arquivos em todos os dispositivos pareçam existir em uma única hierarquia. Isso significa que, nesses sistemas, existe um diretório raiz e cada arquivo existente no sistema está localizado em algum lugar. Esses sistemas podem usar um disco RAM ou um recurso compartilhado de rede como seu diretório raiz.
Sistemas do tipo Unix atribuem um nome de dispositivo a cada dispositivo, mas não é assim que os arquivos desse dispositivo são acessados. Em vez disso, para obter acesso a arquivos em outro dispositivo, o sistema operacional deve primeiro ser informado de onde, na árvore de diretórios, esses arquivos devem aparecer. Esse processo é chamado de montagem de um sistema de arquivos. Por exemplo, para acessar os arquivos em um CD-ROM, deve-se informar ao sistema operacional "Retire o sistema de arquivos deste CD-ROM e faça-o aparecer em tal diretório". O diretório fornecido ao sistema operacional é chamado de ponto de montagem - pode, por exemplo, ser /media. O diretório /media existe em muitos sistemas Unix (conforme especificado no Filesystem Hierarchy Standard) e destina-se especificamente para uso como um ponto de montagem para mídia removível, como CDs, DVDs, drives USB ou disquetes. Pode estar vazio ou pode conter subdiretórios para montar dispositivos individuais. Geralmente, apenas o administrador (ou seja, usuário root) pode autorizar a montagem de sistemas de arquivos.
Os sistemas operacionais do tipo Unix geralmente incluem software e ferramentas que auxiliam no processo de montagem e fornecem uma nova funcionalidade. Algumas dessas estratégias foram denominadas "montagem automática" como um reflexo de seu propósito.
* Em muitas situações, os sistemas de arquivos diferentes da raiz precisam estar disponíveis assim que o sistema operacional for inicializado. Todos os sistemas do tipo Unix, portanto, fornecem uma facilidade para montar sistemas de arquivos no momento da inicialização. Os administradores do sistema definem esses sistemas de arquivos no arquivo de configuração fstab (vfstab no Solaris), que também indica opções e pontos de montagem.
* Em algumas situações, não há necessidade de montar certos sistemas de arquivos no momento da inicialização, embora seu uso possa ser desejado a partir de então. Existem alguns utilitários para sistemas do tipo Unix que permitem a montagem de sistemas de arquivos pré-definidos sob demanda.
* Mídia removível se tornou muito comum em plataformas de microcomputadores. Eles permitem que programas e dados sejam transferidos entre máquinas sem uma conexão física. Exemplos comuns incluem unidades flash USB, CD-ROMs e DVDs. Utilitários foram, portanto, desenvolvidos para detectar a presença e disponibilidade de um meio e, em seguida, montá-lo sem qualquer intervenção do usuário.
* Sistemas progressivos semelhantes ao Unix também introduziram um conceito chamado de supermontagem. Veja, por exemplo, o projeto supermount-ng do Linux. Por exemplo, um disquete que foi supermontado pode ser fisicamente removido do sistema. Em circunstâncias normais, o disco deveria ter sido sincronizado e desmontado antes de sua remoção. Desde que a sincronização tenha ocorrido, um disco diferente pode ser inserido na unidade. O sistema percebe automaticamente que o disco foi alterado e atualiza o conteúdo do ponto de montagem para refletir o novo meio.
* Um montador automático montará automaticamente um sistema de arquivos quando for feita uma referência ao diretório em cima do qual ele deve ser montado. Isso geralmente é usado para sistemas de arquivos em servidores de rede, em vez de depender de eventos como a inserção de mídia, como seria apropriado para mídia removível.

#### Linux

O Linux suporta vários sistemas de arquivos, mas as opções comuns para o disco do sistema em um dispositivo de bloco incluem a família ext* (ext2, ext3 e ext4), XFS, JFS e btrfs. Para flash bruto sem uma camada de tradução de flash (FTL) ou Dispositivo de Tecnologia de Memória (MTD), existem o UBIFS, JFFS2 e YAFFS, entre outros. O SquashFS é um sistema comum de arquivos compactados somente para leitura.

#### macOS

O macOS (antigo Mac OS X) usa o Apple File System (APFS), que recentemente substituiu um sistema de arquivos herdado do Mac OS clássico, chamado de HFS Plus. A Apple também usa o termo "Mac OS Extended". O HFS Plus é um sistema de arquivos rico em metadados e com preservação de caixa, mas (geralmente) insensível a caixa. Devido às raízes do Unix do macOS, as permissões do Unix foram adicionadas ao HFS Plus. Versões posteriores do HFS Plus adicionaram registro (journaling) para evitar a corrupção da estrutura do sistema de arquivos e introduziram várias otimizações nos algoritmos de alocação, na tentativa de desfragmentar arquivos automaticamente, sem a necessidade de um desfragmentador externo.
Os nomes dos arquivos podem ter até 255 caracteres. O HFS Plus usa o Unicode para armazenar nomes de arquivos. No macOS, o tipo de arquivo pode vir do código de tipo, armazenado nos metadados do arquivo ou na extensão do nome do arquivo.
O HFS Plus possui três tipos de ligações: ligações físicas no estilo Unix, ligações simbólicas no estilo Unix e aliases. Os aliases são projetados para manter uma ligação para o arquivo original, mesmo se forem movidos ou renomeados. Eles não são interpretados pelo próprio sistema de arquivos, mas pelo código do Gerenciador de Arquivos no espaço do usuário.
O MacOS 10.13 High Sierra, que foi anunciado em 5 de junho de 2017 no evento WWDC da Apple, usa o Apple File System em unidades de estado sólido.
O macOS também suportava o sistema de arquivos UFS, derivado do BSD Unix Fast File System via NeXTSTEP. No entanto, a partir do Mac OS X Leopard, o macOS não pode mais ser instalado em um volume UFS, nem um sistema pré-Leopard instalado em um volume UFS pode ser atualizado para o Leopard. A partir do Mac OS X Lion, o suporte a UFS foi completamente eliminado.
As versões mais recentes do macOS são capazes de ler e gravar nos sistemas de arquivos FAT legados (16 e 32) comuns no Windows. Eles também são capazes de ler os mais novos sistemas de arquivos NTFS para Windows. Para gravar em sistemas de arquivos NTFS em versões macOS anteriores ao Mac OS X Snow Leopard é necessário softwares de terceiros. O Mac OS X 10.6 (Snow Leopard) e posteriores, permitem a gravação em sistemas de arquivos NTFS, mas somente após uma alteração de configuração de sistema não trivial (existe um software de terceiros que automatiza isso).
Finalmente, o macOS suporta leitura e escrita do sistema de arquivos exFAT desde o Mac OS X Snow Leopard, a partir da versão 10.6.5.

### Microsoft Windows

O Windows faz uso dos sistemas de arquivos FAT, NTFS, exFAT, Live File System e ReFS (o último deles é suportado e utilizável apenas no Windows Server 2012, no Windows Server 2016, no Windows 8, no Windows 8.1 e no Windows 10. O Windows não pode ser inicializado a partir dele).
O Windows usa uma abstração de letra de unidade no nível de usuário para distinguir um disco ou partição de outro. Por exemplo, o caminho C:\WINDOWS representa um diretório WINDOWS na partição representada pela letra C. A unidade C: é mais comumente usada para a partição primária da unidade de disco rígido, na qual o Windows é normalmente instalado e a partir do qual é inicializado. Essa "tradição" tornou-se tão firmemente enraizada que existem erros em muitas aplicações que fazem suposições de que a unidade em que o sistema operacional está instalado é a C. O uso de letras de unidade e a tradição de usar "C" como letra de a partição da unidade de disco rígido principal, pode ser rastreada para o MS-DOS, onde as letras A e B foram reservadas para até duas unidades de disquete. Isso, por sua vez, derivou do CP/M na década de 1970 e, em última instância, do CP/CMS da IBM de 1967.

#### FAT

A família de sistemas de arquivos FAT é suportada por quase todos os sistemas operacionais para computadores pessoais, incluindo todas as versões do Windows e MS-DOS/PC DOS, OS/2 e DR-DOS. (PC DOS é uma versão OEM do MS-DOS, o MS-DOS foi originalmente baseado no 86-DOS do SCP. O DR-DOS foi baseado no Concurrent DOS da Digital Research, um sucessor do CP/M-86). Os sistemas de arquivos FAT são, portanto, bem adequados como um formato de intercâmbio universal entre computadores e dispositivos da maioria de qualquer tipo e idade.
O sistema de arquivos FAT traça suas raízes de volta para um precursor FAT de 8 bits (incompatível) no Standalone Disk BASIC e no projeto MDOS/MIDAS de curta duração.
Ao longo dos anos, o sistema de arquivos foi expandido de FAT12 para FAT16 e FAT32. Vários recursos foram adicionados ao sistema de arquivos, incluindo subdiretórios, suporte a páginas de códigos, atributos estendidos e nomes extensos de arquivos. Terceiros, como a Digital Research, incorporaram suporte opcional para rastreamento de exclusão e esquemas de segurança multiusuário baseados em volume/diretório/arquivo para oferecer suporte a senhas e permissões de arquivos e diretórios, como direitos de acesso para leitura/gravação/execução/exclusão. A maioria dessas extensões não é suportada pelo Windows.
Os sistemas de arquivos FAT12 e FAT16 tinham um limite no número de entradas no diretório raiz do sistema de arquivos e tinham restrições quanto ao tamanho máximo dos discos ou partições formatados em FAT.
O FAT32 aborda as limitações em FAT12 e FAT16, exceto para o limite de tamanho de arquivo próximo a 4 GB, mas permanece limitado comparado ao NTFS.
FAT12, FAT16 e FAT32 também têm um limite de oito caracteres para o nome do arquivo e três caracteres para a extensão (como .exe). Isso é comumente chamado de limite de nome de arquivo 8.3. O VFAT, uma extensão opcional para o FAT12, FAT16 e FAT32, introduzida no Windows 95 e no Windows NT 3.5, permitia que os nomes de arquivos longos (LFN) fossem armazenados no sistema de arquivos FAT de maneira compatível com versões anteriores.

#### NTFS

O NTFS, introduzido com o sistema operacional Windows NT em 1993, permitiu o controle de permissão baseado em ACL. Outros recursos também suportados pelo NTFS incluem ligações físicas, vários fluxos de arquivos, indexação de atributos, rastreamento de cota, arquivos esparsos, criptografia, compactação e pontos de nova análise (diretórios que funcionam como pontos de montagem para outros sistemas de arquivos, ligações simbólicas, junções de armazenamento remoto).

#### exFAT

O exFAT é um sistema de arquivos proprietário e protegido por patente com certas vantagens sobre o NTFS em relação à sobrecarga de sistema de arquivos.
O exFAT não é compatível com sistemas de arquivos FAT, como FAT12, FAT16 ou FAT32. Ele é compatível com os sistemas Windows mais recentes, como o Windows Server 2003, o Windows Vista, o Windows 2008, o Windows 7, o Windows 8 e, mais recentemente, o suporte foi adicionado ao Windows XP.
O exFAT é suportado no macOS a partir da versão 10.6.5 (Snow Leopard). O suporte em outros sistemas operacionais é esparso, pois a Microsoft não publicou as especificações do sistema de arquivos e a implementação do suporte para exFAT requer uma licença. O exFAT é o único sistema de arquivos totalmente suportado no macOS e no Windows que pode conter arquivos maiores que 4 GB.

## Atributos de arquivos

Um arquivo possui certos atributos que variam de um sistema operacional para o outro, mas que normalmente são os seguintes:
* Nome: o nome simbólico do arquivo é a única informação conservada em forma legível pelas pessoas.
* Identificador: este rótulo único, usualmente um numero, identifica o arquivo dentro do sistema de arquivo; é o nome não legível pelas pessoas.
* Tipos : esta informação é necessária para aqueles sistemas que suportam diferentes tipos.
* Posição: esta informação é um ponteiro para um dispositivo e para a posição do arquivo naquele dispositivo.
* Tamanho: o tamanho corrente do arquivo e possivelmente o tamanho máximo permitido estão incluídos neste atributo.
* Proteção: a informação de controlo de acesso determina quem pode ler o arquivo, gravá-lo, executá-lo e assim por diante.
* Hora, data e identificação do usuário: estas informações podem ser conservadas em relação a data da criação, ultima modificação e ultima utilização do arquivo. Estes dados podem ser úteis para proteção, segurança e monitoramento de uso do arquivo.
A informação sobre todos os arquivos é conservada na estrutura do diretório que também reside em memória secundária. A entrada de um diretório consiste no nome do arquivo com seu identificador único. O identificador, por sua vez, permite localizar os demais atributos do arquivo. O registro desta informação para cada arquivo pode ocupar mais que um kilobyte. Em um sistema com muitos arquivos o tamanho do próprio diretório pode ocupar megabytes. Como os diretórios, da mesma forma que os arquivos, devem ser não voláteis, precisam ser armazenados em dispositivos e conduzidos à memória gradativamente, conforme necessário.

## Operações sobre arquivos

Um arquivo é um tipo abstrato de dados. Para definir apropriadamente um arquivo, precisamos considerar as operações que podem ser realizadas sobre arquivos. O sistema operacional pode oferecer chamadas de sistema para criar, gravar, ler, reposicionar, apagar e truncar arquivos. O sistema operacional deve fazer em relação a cada uma das seis operações de arquivos básicas.
* Criando um arquivo: deve ser alocado espaço para o arquivo no sistema de arquivos. Deve ser criada uma entrada para o novo arquivo no diretório. A entrada do diretório registra o nome do arquivo e sua posição no sistema de arquivos, além de outras informações possíveis.
* Gravando um arquivo: para gravar um arquivo, emitimos uma chamada de sistema especificando tanto o nome do arquivo como a informação a ser gravada. Dado o nome do arquivo, o sistema percorre o diretório em busca da sua localização. O sistema deve manter um ponteiro de gravação para a posição do arquivo onde a nova gravação devera ser realizada. O ponteiro precisa ser atualizado sempre que ocorrer uma gravação.
* Lendo um arquivo: para ler um arquivo, utilizamos uma chamada de sistema que especifica o nome do arquivo e onde na memória é o próximo bloco do arquivo que deverá ser alocado. O diretório é pesquisado em busca da entrada associada e o sistema precisa manter um ponteiro de leitura para a posição no arquivo a partir de onde devera ocorrer a próxima leitura. Após a leitura ter sido feita, o ponteiro de leitura é atualizado. Um determinado processo esta normalmente lendo ou gravando um dado arquivo, e a posição da operação em curso é guardada como um ponteiro para a posição corrente do arquivo, para cada processo. Tanto a operação de leitura como a de gravação, utiliza este mesmo ponteiro, economizando espaço e reduzindo a complexidade do sistema.
* Reposicionando dentro de um arquivo: o diretório é percorrido em busca da entrada apropriada, e a posição corrente do arquivo é posicionada para um determinado valor. O reposicionamento dentro de um arquivo não precisa envolver um I/O real. Esta operação é também conhecida como busca de arquivo.
* Apagando um arquivo: para apagar um arquivo, procuramos no diretório o arquivo pelo nome. Após encontrar a entrada correta do diretório, liberamos todo o espaço do arquivo, de modo que este espaço possa ser reutilizado por outros arquivos, e apagamos a entrada do diretório.
* Trocando um arquivo: o usuário pode desejar apagar o conteúdo de um arquivo, mas conservar seus atributos. Em lugar de obrigar o usuário a apagar completamente o arquivo e recriá-lo, esta função permite que todos os atributos - exceto o tamanho - sejam mantidos, reposicionando o arquivo com tamanho zero.

## Camadas

Do ponto de vista de projeto, as camadas do sistema de arquivos podem ser entendidas conforme a hieraquia abaixo:
* Programas/aplicativos
* Sistemas de arquivos lógicos
* Módulo de organização de arquivos
* Sistema básico de arquivos
* Controle de E/S
* Dispositivos
Cada camada possui características/funcionalidades específicas.

## Sistemas de ficheiros mais conhecidos
### Apple Macintosh (Mac OS)

* HFS
* HFS+
* APFS

### UNIX (FreeBSD, OpenBSD, Linux, Solaris, Red Hat, Android, etc.)

* UFS
* Ext
* Ext2
* Ext3
* Ext4
* SWAP
* Reiser
* HPFS
* JFS
* XFS
* ZFS

### IBM (AIX, OS/2)

* JFS (AIX Version 3.1 ou superior, OS/2 Warp)
* HPFS - High Performance File System

### MS-DOS/Microsoft Windows

* FAT 12 - Microsoft BASIC Disk - MSDOS 4.0
* FAT 16 ou FAT - DOS 4.0 ou superior / Windows 1.X ou superior (1.x, 2.x, 3.x, 95, 98, ME, 2000, XP,...)
* FAT 32 - MS-DOS 7.1 e 8.0 / Windows 95 (versão OSR2!), ou superior (95 OSR2, 98, ME, NT, 2000, XP...)
* ExFAT - FAT Estendido, também conhecido como FAT64, Windows XP ou superior ( Vista, 7...)
* NTFS - Windows NT ou superior (NT, 2000, XP, 2003 Server,...)