Sistema de arquivos Unix
UFS ( Unix File System ) é um sistema de arquivos usado principalmente em sistemas operacionais Unix e semelhantes a Unix . É um derivado do Berkeley Fast File System , que foi desenvolvido a partir do FS usado pela primeira versão do Unix feita no Bell Labs .
Quase todos os derivados do BSD , incluindo FreeBSD , NetBSD , OpenBSD , NEXTSTEP e Solaris , usam uma variante do UFS. No macOS , está disponível como alternativa ao HFS + . No Linux há suporte parcial para UFS, enquanto o primeiro sistema de arquivos usado apenas para linux, ext2 , também é derivado do UFS.
História e evolução
As primeiras versões do sistema de arquivos Unix eram chamadas simplesmente de FS. O FS incluiu apenas o bloco de inicialização, o superblock, um grupo de inodes e blocos de dados. Este sistema de arquivos funcionou bem para os primeiros pequenos discos Unix, mas o avanço da tecnologia e a ampliação dos discos, o movimento de cabeça para frente e para trás entre grupos de inodes e referências a blocos de dados causaram thrashing (thrashing é uma situação em que grandes quantidades dos recursos do computador são usados para fazer uma quantidade mínima de trabalho, com o sistema em um estado contínuo de escassez de recursos). Marshall Kirk McKusick, então estudante de Berkeley, otimizou o FS para o sistema operacional 4.2BSD chamando-o de FFS (Fast File System) inventando grupos de cilindros. Isso divide o disco em vários pedaços pequenos, cada um com seu próprio grupo de inodes e blocos de dados.
A intenção do BSD FFS é tentar localizar os blocos de dados e metadados associados no mesmo grupo de cilindros e, idealmente, colocar todo o conteúdo de um diretório (dados e metadados para todos os arquivos), no mesmo ou no proximidade do grupo de cilindros, reduzindo assim a fragmentação causada pela dispersão do conteúdo de um diretório sobre um disco inteiro.
Alguns dos parâmetros de desempenho no superbloco incluíam número de trilhas e setores, velocidade de rotação do disco, velocidade do cabeçote e alinhamento de setores entre trilhas. Em um sistema totalmente otimizado, o cabeçote pode ser movido para trilhas vizinhas para ler alternadamente setores distribuídos, durante um período de rotação completa do disco.
À medida que os discos ficavam cada vez maiores, as otimizações em nível de setor se tornavam obsoletas (particularmente com discos que usavam numeração de setor linear e setores variáveis por trilha). Com discos maiores e arquivos maiores, a leitura de fragmentos se tornou um problema. Para resolver este problema, o BSD originalmente aumentou o tamanho do bloco no sistema de arquivos de um setor para 1k no 4.0BSD; e no SBB aumentou o tamanho do bloco no sistema de arquivos de 1k para 8k. Tudo isso teve vários efeitos. A possibilidade de setores de arquivos serem contínuos é maior. A quantidade de sobrecarga para listar blocos de arquivos diminuiu. O número de bytes que podem ser representados por um determinado número de blocos aumentou; como o número máximo de blocos é limitado por uma largura de bloco fixa, isso também é permitido para discos grandes.
Com blocos grandes, discos com muitos arquivos pequenos podem desperdiçar muito espaço. Por esta razão, o BSD adicionou fragmentação em nível de bloco (também chamado de bloco de subalocação), onde o último bloco parcial de dados de diferentes arquivos pode ser armazenado em um único fragmento de bloco, em vez de vários blocos vazios (Allen 2005).
Implementação e estrutura
Um sistema de arquivos UFS consiste nos seguintes componentes:
- o primeiro setor do disco (512 bytes) contém a tabela de partição.
- um pequeno número de blocos localizados no início da partição (1º ao 15º setor) são destinados à inicialização (e inicializados separadamente do próprio sistema de arquivos)
- um superbloco, contendo um número mágico que identifica o sistema de arquivos como UFS e outros parâmetros vitais que descrevem a geometria do sistema de arquivos e algumas estatísticas.
- uma série de grupos de cilindros. Cada grupo contém:
- uma cópia de backup do superbloco
- o número de diretórios
- o número de inodes , que incluem dados sobre os atributos dos arquivos que eles contêm
- um cabeçalho, que contém algumas estatísticas, entre as quais, a lista de blocos e inodes livres , a fragmentação em grupos de cilindros. É semelhante ao superblock, mas aplicado a cada grupo de cilindros
- o número de blocos de dados no grupo de cilindros
- o mapa de blocos livres
- o mapa dos inodes usados
Os inodes são numerados sequencialmente: os dois primeiros inodes são reservados por motivos históricos e são imediatamente seguidos pelo inode do diretório raiz , que é, portanto, sempre inode 2.
Arquivos que descrevem diretórios contêm apenas os nomes e ponteiros de inode dos itens que eles contêm. Todos os metadados são armazenados no próprio inode.
Presente e futuro
Muitos são aqueles que adaptaram o UFS para seus próprios propósitos, adicionando extensões proprietárias que não são compatíveis com outras versões. Surpreendentemente, alguns continuaram a usar o tamanho do bloco original e os campos de dados. Algumas margens de compatibilidade entre diferentes versões, pelo menos ao ler o sistema de arquivos, permaneceram.
O FreeBSD 5.0 introduziu o UFS2 , que tem suporte para volumes acima de 1TB .
O Linux possui o sistema de arquivos EXT2, escrito do zero, mas baseado nos princípios do UFS, embora não tenha, devido à ausência de um padrão UFS unificado, uma ferramenta para poder escrever nesse sistema de arquivos.
Desde 2004 , a Sun Microsystems introduziu o "log on" no Solaris 7, tornando o UFS um sistema de arquivos registrado (consulte journaling ). O Solaris também possui várias extensões para manipular arquivos grandes e grandes volumes.
Links externos
- O sistema de arquivos UFS do Solaris Internals