Unix File System
As referências deste artigo necessitam de formatação. (Dezembro de 2013) |
UFS | |
---|---|
Desenvolvedor | Computer Systems Research Group (CSRG) |
Nome completo | UNIX file system |
Lançamento | (4.2BSD) |
Estruturas | |
Conteúdos de diretório | Tabelas |
Limites | |
Tamanho Máximo de arquivo | 273 bytes (8 ZiB) |
Tamanho máximo do nome de arquivo | 255 bytes |
Tamanho máximo do volume | 273 bytes (8 ZiB) |
Recursos | |
Datas salvas | UFS1 e UFS2: último tempo de acesso (atime), último tempo de modificação (mtime), último tempo de mudança de inode (ctime), UFS2: tempo de criação de inode (birthtime) |
Faixa de datas | UFS1: 14 de dezembro de 1901–18 de janeiro de 2038, UFS2: inteiro com sinal (signed int) de 64 bits sendo um offset binário da hora Unix |
Resolução de datas | UFS1 e UFS2: Nanossegundo |
Sistemas operativos suportados | A/UX, DragonFly BSD, FreeBSD, FreeNAS, NAS4Free, HP-UX, NetBSD, NEXTSTEP, Linux, OpenBSD, illumos, Solaris, SunOS, Tru64 UNIX, UNIX System V e outros |
Portal das Tecnologias de informação |
O Sistema de Arquivos Unix, do inglês Unix File System (UFS), é um sistema de arquivos usado por muitos sistemas operacionais Unix e assemelhados. Também é conhecido como Berkeley Fast File System (Sistema de Arquivos Rápido da Berkeley), BSD Fast File System ou simplesmente FFS.
Estrutura
[editar | editar código-fonte]Um volume UFS é composto das seguintes partes:
- Alguns blocos no inicio da partição reservados para blocos de boot (os quais devem ser inicializados separadamente do sistema de arquivos);
- Um superbloco, contendo um número mágico identificando-o como um sistema de arquivos UFS, e alguns outros números virtuais descrevendo sua geometria, estatísticas e parâmetros de ajuste comportamental;
- Uma coleção de grupos de cilindros. Cada grupo contendo os seguintes componentes:
- Uma cópia de segurança do superbloco;
- Um cabeçalho de grupo de cilindros, com estatísticas, listas livres etc, sobre o grupo de cilindros, similar a àqueles no superbloco;
- Um número de nós-i, cada qual contendo atributos de arquivos;
- Um número de blocos de dados;
Os Nós-i, do inglês i-nodes, são numerados seqüencialmente. Os vários nós-i iniciais são reservados por razões históricas, seguidos pelo nó-i do diretório root.
Arquivos do tipo diretório contêm apenas a lista de nomes de arquivos no diretório e o nó-i associado a cada arquivo. Todos os metadados são mantidos no nó-i.
História e evolução
[editar | editar código-fonte]As versões mais antigas do Unix usaram sistemas de arquivos referenciados simplesmente como FS. Os FS incluíam apenas o bloco de inicialização ou boot, superbloco, um conjunto de nós-i e os blocos de dados. Isso funcionou bem nos antigos Unixes com discos com pouca capacidade, para os quais esses sistemas de arquivos foram desenvolvidos. No entanto, enquanto a tecnologia avançava e os discos ganharam mais capacidade, o movimento dos cabeçotes para frente e para trás entre os nós-i e os blocos de dados foram apontados como causadores de problemas de performance num processo chamado Thrashing[1]. O BSD melhorou essa situação no FFS(Fast File System ou Sistema de arquivos rápido), inventando grupos de cilindros e dividindo o disco em pedaços menores, cada qual com seu próprio conjunto de nós-i e blocos de dados.
A invenção do BSD FFS foi uma tentativa de acomodar blocos de dados associados e metadados em um mesmo grupo de cilindros, e teoricamente, todos os conteúdos de um diretório (ambos dados e metadados para todos os arquivos) no mesmo grupo de cilindros ou em grupos vizinhos, reduzindo deste modo a fragmentação causada por conteúdos de diretório espalhados ao longo do disco inteiro.
Alguns dos parâmetros de desempenho no superbloco incluíam número de faixas e setores, velocidade de rotação de disco, velocidade de cabeçote e alinhamento de setores entre faixas. Em um sistema integralmente otimizado, o cabeçote poderia ser movido entre faixas próximas para ler setores espalhados a partir de faixas alternativa enquanto esperava o disco girar.
Como os discos cresceram mais e mais em armazenagem, a otimização a nível de setor se tornou obsoleta (especialmente com discos que usavam numeração de setores linear e setores variáveis por faixa). Com discos maiores e arquivos maiores também, leituras fragmentadas viraram mais um problema. Para enfrentar isso, o BSD primeiramente aumentou o tamanho do bloco para sistema de arquivos de um setor para 1k no BSD4.0, e, no FFS, aumentou o bloco de sistema de arquivos de 1k para 8k. Isso trouxe diversos efeitos. As chances de um arquivo ficar em setores vizinhos ficaram maiores. O montante de sobrecarga para listar os blocos de arquivos foi reduzido. O número de blocos representáveis em um número de blocos de tamanho fixo aumentou (permitindo discos maiores ainda).
Com blocos maiores, os discos que possuíam muitos arquivos pequenos poderiam desperdiçar um monte de espaço, então o BSD adicionou a fragmentação a nível de bloco (também chamada subalocação de blocos, na qual o último bloco parcial de dados de vários arquivos devia ser armazenado em um único bloco de fragmento, ao invés de múltiplos blocos quase vazios (Allen 2005).
Implementações
[editar | editar código-fonte]Fornecedores de algumas versões comerciais do Unix adotaram o UFS, tais como Solaris, System V, HP-UX e Tru64 UNIX. A maioria adaptou o UFS para seus usos, adicionando extensões proprietárias que não podiam ser reconhecidas por versões de Unix de outros fornecedores. Por surpresa, muitos continuaram a usar o tamanho de bloco e tamanho de campo do UFS original. Assim, certo nível de compactibilidade, ao menos de leitura, permanece entre as plataformas. Compactibilidade entre implementações
Quando do surgimento do Solaris 7, Sun Microsystems incluiu no UFS Logging (registro de dados), o qual possibilitou o uso da técnica de Journaling no sistemas de arquivos UFS. O UFS do Solaris também tem extensões para arquivos longos e discos grandes, bem como outras características.
O Linux inclui uma implementação do UFS para manter compactibilidade ao nível de leitura com outros Unix. Como não há implementação padrão para os fornecedores de extensões UFS, o Linux não possui suporte completo para a escrita UFS. O sistema de arquivos nativo anterior do linux ext2 foi inspirado no UFS. Na verdade, em alguns sistemas derivados do BSD4.4 a camada UFS é possível usar uma camada ext2 como uma camada contâiner, assim como se faz com as camadas FFS e LFS.
O NeXTStep, que foi um derivado BSD, também usou uma versão do UFS. No Mac OS X da Apple Inc., o UFS está disponível como uma alternativa ao HFS Plus, seu sistema de arquivos proprietário. No entanto, quando do surgimento do Mac OS X v10.5, não se pode instalar Mac OS X "Leopard" em um volume formatado em UFS. Além disso, não se pode fazer upgrade de versões antigas do Mac OS X instaladas em volumes UFS para Leopard. Para atualizar para a versão Leopard é necessário reformatar todo o volume [2].
Ver também
[editar | editar código-fonte]Referências
[editar | editar código-fonte]- Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler and Robert S. Fabry (2002). «A Fast File System for UNIX» (PDF). A Fast File System for UNIX 2002. Computer Systems Research Group, Computer Science Division, Department of Electrical Engineering and Computer Science, University of California, Berkeley, Berkeley, CA 94720. pp. 1–14
- Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler and Robert S. Fabry (1984). «A Fast File System for UNIX» (PDF). ACM Transactions on Computer Systems. 2 (3): 181–197
- Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, and John S. Quarterman (1996). «Local Filesystems». The Design and Implementation of the 4.4BSD Operating System. [S.l.]: Addison-Wesley. ISBN 0-201-54979-4
- Marshall Kirk McKusick and Gregory R. Ganger (1999). «Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem» (PDF). Proceedings of the FREENIX Track: 1999 USENIX Annual Technical Conference. pp. 1–18
- Marshall Kirk McKusick (2002). «Running "fsck" in the Background». Proceedings of the BSDCon 2002. pp. 55–64
- The Linux Documentation Project's Filesystems HOWTO: FFS. Note that the distinction this draws between FFS and UFS is wrong; both terms are used at present and have been used in the past.
- Little UFS2 FAQ: What is the difference between UFS and FFS? Note that this gets the relationship between FFS and UFS backwards; see the "Local Filesystems" chapter of The Design and Implementation of the 4.4BSD Operating System, which refers to the upper layer as UFS, and the "Local Filestores" chapter, which refers to the lower layer as FFS.
- The Sun Solaris UFS implementation chapter of the Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture, Second Edition book by Richard McDougall, Jim Mauro ISBN 0-13-148209-2
- Allen, Hervey (20 de junho de 2005). «UFS2 and Soft Updates make for a powerful combination» (PDF). Introduction to FreeBSD, PacNOG I Workshop, Additional Topics. Network Startup Resource Center. p. 23. Consultado em 8 de abril de 2013
Ligações externas
[editar | editar código-fonte]- Little UFS2 FAQ
- Linux userspace UFS2 tools.
- Filesystems-HOWTO (part of The Linux Documentation Project, link is not Linux specific.)
- UFS2 Tools: An open source tool for accessing UFS2 (BSD) slices from within Windows
- https://web.archive.org/web/20080316033439/http://docs.info.apple.com/article.html?artnum=306516 No UFS installation for Leopard