# NTFS

O NTFS (New Technology File System) é o sistema de arquivos padrão para o Windows NT e seus derivados.
O NTFS foi desenvolvido quando a Microsoft decidiu criar o Windows NT: como o WinNT deveria ser um sistema operacional mais completo e confiável, o FAT não servia como sistema de arquivos por causa de suas limitações e falta de recursos. Na época, o que a empresa de Bill Gates queria apoderar-se de uma fatia do mercado ocupada pelo Unix. Anteriormente, ela já havia tentado fazer isso em parceria com a IBM, lançando o OS/2 - no entanto as duas empresas divergiam em certos pontos e acabaram quebrando a aliança. O OS/2 usava o sistema de arquivos HPFS (High Performance File System - Sistema de Arquivos de Alta Performance), cujos conceitos acabaram servindo de base ao NTFS.
O NTFS possui uma estrutura que armazena as localizações de todos os arquivos e diretórios, incluindo os arquivos referentes ao próprio sistema de arquivos denominado MFT (Master File Table).

## História

Sua sigla significa New Technology File System cujo surgimento da primeira versão foi dada em 1993, mas a sua história não se iniciou aí. Em meados de 1980, a Microsoft precisava de algo no mercado que confrontasse as soluções baseadas em UNIX da época, foi aí que começou o desenvolvimento do Windows NT.
A empresa tinha à sua disposição o FAT, mas que por suas limitações de permissões com arquivos e problemas para trabalhar com documentos de grandes tamanhos, surgiu a necessidade de criar um sistema de arquivos. Na época, a empresa firmou uma parceria com a IBM para o desenvolvimento de um sistema operacional inovador (pois iria conter interface gráfica, algo que não era presente no mercado), sistema esse que se chamava OS/2. Mais tardar, os dois grandes ativos romperam a parceria por divergência em diversos pontos, mas a Microsoft não foi embora de mãos vazias. Enquanto a IBM continuou o projeto do OS/2, a empresa responsável pelo maior sistema do atual mercado foi trabalhar no projeto do Windows NT, levando consigo diversos conceitos do HPFS (High Performance File System), o sistema de arquivos do OS/2. Esses conceitos foram aplicados e transformados no que conhecemos atualmente como NTFS.

## Recursos internos

Internamente, o NTFS usa árvores B para indexar dados do sistema de arquivos. Um diário de sistema de arquivos é usado para garantir a integridade dos metadados do sistema de arquivos, mas não o conteúdo dos arquivos individuais. Os sistemas que usam NTFS são conhecidos por terem maior confiabilidade em comparação com os sistemas de arquivos FAT.
O NTFS permite qualquer sequência de valores de 16 bits para codificação de nome (nomes de arquivo, nomes de fluxo, nomes de índice etc.), exceto 0x0000. Isso significa que unidades do código UTF-16 são suportadas, mas o sistema de arquivos não verifica se uma sequência é UTF-16 válida (permite qualquer sequência de valores curtos, não restritos aos do padrão Unicode). No espaço de nomes do Win32, qualquer unidade de código UTF-16 não diferencia maiúsculas de minúsculas, enquanto no espaço de nomes do POSIX eles diferenciam maiúsculas de minúsculas. Os nomes dos arquivos são limitados a 255 unidades de código UTF-16. Certos nomes são reservados no diretório raiz do volume e não podem ser usados ​​para arquivos. Estes são $MFT, $MFTMirr, $LogFile, $Volume, $AttrDef,. (ponto), $Bitmap, $Boot, $BadClus, $Secure, $UpCase e $Extend. . (ponto) e $Extend são diretórios, os outros são arquivos. O kernel do NT limita os caminhos completos a 32.767 unidades de código UTF-16. Existem algumas restrições adicionais sobre pontos de código e nomes de arquivo.

### Master File Table (Tabela de Arquivos Mestre)

No NTFS, todos os dados de arquivos, diretórios e metarquivos - nome do arquivo, data de criação, permissões de acesso (pelo uso de listas de controle de acesso) e tamanho - são armazenados como metadados na Master File Table (MFT). Essa abordagem abstrata permitiu a adição fácil de recursos do sistema de arquivos durante o desenvolvimento do Windows NT - um exemplo é a adição de campos para indexação usados ​​pelo software Active Directory. Isso também permite que o software de pesquisa rápida de arquivo localize arquivos e pastas locais nomeados, incluídos no MFT, muito rapidamente, sem exigir nenhum outro índice.
A estrutura MFT suporta algoritmos que minimizam a fragmentação do disco. Uma entrada de diretório consiste em um nome de arquivo e um "ID do arquivo" (análogo ao número do inode), que é o número do registro que representa o arquivo na Tabela de Arquivos Mestre. O ID do arquivo também contém uma contagem de reutilização para detectar referências obsoletas. Embora seja muito semelhante ao W_FID do Files-11, outras estruturas NTFS são radicalmente diferentes.
Duas cópias do MFT são armazenadas em caso de corrupção. Se o primeiro registro estiver corrompido, o NTFS lê o segundo registro para localizar o arquivo espelho MFT. As localizações de ambos os arquivos são armazenadas no setor de boot.

## Vantagens e Desvantagens
### Prós e Contras
#### Prós

* Aceita volumes de até 256 TB utilizando tamanho de cluster de 64kb;
* O tamanho do arquivo é limitado apenas pelo tamanho do volume;
* Aceita nomes de volumes de até 32 caracteres;
* Oferece suporte a compactação, criptografia e indexação;
* Oferece suporte a clusters de 512 bytes;
* É possível inserir imagem do sistema em um volume NTFS;
* É um sistema de arquivos muito mais seguro que o FAT;
* Permite políticas de segurança e gerenciamento;
* Volumes NTFS são menos vulneráveis a fragmentos, em comparação com FAT;
* Melhor desempenho, em geral;
* Volumes NTFS podem se recuperar de um erro mais facilmente.

#### Contras

* Se usado em uma mídia removível, ela pode se corromper mais facilmente;
* Não é possível otimizar para remoção rápida;
* Apenas versões a partir do NT 3.1 reconhecem volumes;
* Pode ser necessário drivers extra para acesso a plataformas não Windows;
* É mais lento que o FAT32, pois pelas diversas diretivas de segurança tanto de acesso quanto de leitura e gravação tornam a partição mais lenta que FAT32 que não possui nenhuma diretiva de segurança ou confiabilidade adequado.