XFS

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
XFS
Desenvolvedor
Nome completo XFS
Lançamento 1994 (IRIX 5.3)
Identificador da partição 0x83 (Master Boot Record)
Estruturas
Conteúdos de diretório Árvore B+
Alocação de arquivos Árvore B+
Limites
Tamanho Máximo de arquivo 8 Exbibytes - 1 byte
Número máximo de arquivos 264
Tamanho máximo do nome de arquivo 255 bytes
Tamanho máximo do volume 8 Exbibytes - 1 byte
Caracteres permitidos em nomes Todos os caracteres exceto NUL and "/"
Recursos
Datas salvas atime, mtime, ctime, crtime
Resolução de datas 1ns
Atributos Sim
Permissões de sistema de arquivos Sim
Compressão transparente Não
Sistemas operativos suportados IRIX, Linux, FreeBSD (somente leitura, suporte à escrita experimental)
Portal das Tecnologias de informação

O XFS é um sistema de arquivos inicialmente desenvolvido pela Silicon Graphics, Inc. para o seu sistema operacional IRIX. Posteriormente teve seu código fonte liberado e foi adaptado para funcionar no Linux.

História[editar | editar código-fonte]

A SGI usava, no seu sistema operacional IRIX, o sistema de arquivos EFS (Extent File System), o qual era baseado no FFS (Fast File System) de Berkeley (criado por Marshall McKusick [McKusick, 2004]). O EFS usava alocação por extensões, em vez da alocação por blocos do FFS.

As principais limitações do EFS eram: limite de 8 GiB para o volume, arquivos com tamanho máximo de 2 GiB, taxa de transferência menor que a disponibilizada pelo hardware. Isso no início da década de 1990. Assim, o XFS foi projetado para substituir o EFS, visando escalabilidade e suporte a arquivos grandes. [SWEENEY et al, 1996]

Em outubro de 1993 foram publicados alguns artigos descrevendo o projeto para um novo sistema de arquivos [ANDERSON et al, 1993; DOUCETTE, 1993] — o nome do projeto era xFS. O XFS foi disponibilizado em dezembro de 1994 no IRIX 5.3 [ELLIS e RAITHEL, 1994].

Em outubro de 1999, no 3rd annual Atlanta Linux Showcase, Mostek et al apresentaram um trabalho mostrando como adaptar o XFS para o Linux [MOSTEK, 1999]. Em maio de 2001 foi lançada a versão 1.0 para Linux, por meio de patches. Finalmente, foi incorporado ao Linux 2.4.25, em fevereiro de 2004.

Principais características[editar | editar código-fonte]

  • O XFS é um sistema de arquivos desenvolvido em 64 bits, compatível com sistemas de 32 bits. Em plataformas de 64 bits, possui um limite de tamanho de 8 EiB para um volume e para cada arquivo; em 32 bits, usando page frame de 4 KiB, o tamanho máximo do volume ou de um arquivo é limitado a 16 TiB [nota 1].
  • Efetua alocação por extensões (v. abaixo) em vez de alocação por blocos.
  • Usa alocação dinâmica de nós-i.
  • É um sistema de arquivos com journaling.

Estrutura[editar | editar código-fonte]

A descrição será baseada no texto de Naujok [2006]. Algumas particularidades atuais referem-se à implementação para Linux, pois a última versão do Irix é de 2006 [nota 2].

O tamanho do bloco deve ser menor ou igual ao tamanho da moldura de página; portanto pode ser de 512, 1.024, 2.048 ou 4.096 bytes (x86, x86-64), até 8.192 bytes (várias arquiteturas RISC), ou até 16.384 bytes (IA-64 — Itanium). Não utiliza mapa de bits para gerenciamento de blocos e nós-i.

Um volume XFS é dividido em grupos de alocação (AG: Allocation Group), que são conjuntos de blocos (análogos aos grupos de blocos do Ext3 e grupos de cilindros do UFS1), cujo tamanho varia entre 16 MiB e 1 TiB. Por padrão são criados 8 grupos, exceto quando o tamanho da partição é maior que 8 GiB. A quantidade pode ser definida manualmente na formatação. Cada AG contém o superbloco (único, o superbloco em cada AG subseqüente é cópia do primeiro), os nós-i e informações dos blocos referentes ao próprio grupo.

Um nó-i tem um tamanho padrão de 256 bytes, podendo chegar a 2.048 bytes, desde que não exceda o tamanho do bloco. Os nós-i são criados dinamicamente, em grupos (chunks) de 64. Uma estrutura em árvore balanceada (B-tree) é usada para gerenciar esses grupos. Um nó-i é dividido em 3 partes: (i) o núcleo (core); (ii) área de dados (data fork); (ii) atributos estendidos (extended attribute fork).

O núcleo, cujo tamanho é 96 bytes, contém as seguintes informações, dentre outras: permissões e tipo do arquivo; dono (UID) e grupo (GID); número de referências (nlink, análogo ao hard link); tempos (atime, ctime, mtime); tamanho do arquivo, em bytes; número de extensões.

A área de dados, quando o arquivo é regular, contém: (i) ponteiros para as extensões (no máximo 19, para nós-i de 256 bytes e sem o uso de atributos estendidos); ou (ii) ponteiro(s) para lista(s) de extensões (em árvores balanceadas). Neste caso, o ponteiro pode ser para um árvore em 2 níveis, onde o primeiro nível aponta para outra árvore, que finalmente irá conter os ponteiros para as extensões do arquivo. Cada árvore pode apontar para até 254 extensões.

A alocação é feita por extensões (extents), que são agrupamentos de blocos contíguos; cada extensão pode ter até 8 GiB, quando o tamanho do bloco é de 4 KiB (a estrutura que usa a extensão reserva 21 bits para o tamanho da extensão em blocos). Para cada AG são mantidas duas estruturas em árvore balanceada para gerenciar os blocos: uma ordenada (decrescentemente) pelo tamanho de cada extensão; outra pelo endereço do bloco inicial de cada extensão.

Possui journaling de metadados e um extenso conjunto de ferramentas para manutenção, otimização e recuperação de dados e metadados. Não possui ferramenta para recuperar arquivos apagados. XFS(estrutura)

O XFS oferece suporte ao endereçamento de 64 bits e fornece desempenho bastante elevado utilizando árvores B+ tanto para a alocação de diretórios quanto de arquivos. O XFS também usa alocação baseada em extensão com suporte a tamanhos de blocos variáveis (de 512 bytes a 64KB). Junto com as extensões, o XFS usa alocação com atraso, na qual a alocação dos blocos do disco é atrasada até que os blocos sejam gravados no disco. Essa funcionalidade aprimora as opções de alocação de blocos sequenciais de discos, pois o número total necessário já será conhecido.


Propriedades[editar | editar código-fonte]

Outras propriedades interessantes do XFS são a taxa garantida de entrada/saída (E/S —por meio de uma reserva de largura de banda para usuários do sistema de arquivos) e E/S direta, na qual os dados são copiados diretamente entre o disco e o buffer de espaço do usuário (em vez de serem armazenados por meio de vários buffers). O XFS usa a política com registro de mudanças no modo nova gravação.

Referências[editar | editar código-fonte]

ANDERSON, Curtis et al. xFS project architecture. Silicon Graphics, Inc. 1993. Disponível em <http://oss.sgi.com/projects/xfs/design_docs/xfsdocs93_pdf/>. Acesso em 04 mar. 2009.

DOUCETTE, Doug. xFS project description. Silicon Graphics, Inc. 1993. Disponível em <http://oss.sgi.com/projects/xfs/design_docs/xfsdocs93_pdf/>. Acesso em 04 mar. 2009.

ELLIS, Susan; RAITHEL, John. Getting started with XFS filesystems. Silicon Graphics, Inc. 1994. Disponível em <http://oss.sgi.com/projects/xfs/papers/getting_started_with_xfs.pdf>. Acesso em 06 jun. 2006.

MOSTEK, Jim et al. Porting SGI XFS file system to Linux. Apresentado no 3rd annual Atlanta Linux Showcase -- 1999. Disponível em <http://oss.sgi.com/projects/xfs/papers/als/als.pdf>. Acesso em 24 maio 2006.

NAUJOK, Barry. XFS filesystem structure. 2.ed. rev.2. Silicon Graphics, Inc. 2006. Disponível em <http://oss.sgi.com/projects/xfs/publications.html>. Acesso em 03 out. 2007.

SWEENEY, Adam et al. Scalability in the XFS file system. Proceedings of the USENIX 1996 annual technical conference. San Diego. 1996. Disponível em <http://oss.sgi.com/projects/xfs/papers/xfs_usenix/index.html>. Acesso em 03 out. 2007.

Ligações externas[editar | editar código-fonte]

  1. http://oss.sgi.com/projects/xfs/index.html
  2. http://www.sgi.com/products/software/irix/releases/irix6530.html