O XFS é um sistema de arquivos com registro de 64 bits de alto desempenho criado pela Silicon Graphics, Inc (SGI) em 1993. Era o sistema de arquivos padrão no sistema operacional IRIX da SGI, começando com sua versão 5.3. O XFS foi portado para o núcleo do Linux em 2001. A partir de junho de 2014, o XFS passou a ser suportado pela maioria das distribuições Linux, algumas das quais o usam como o sistema de arquivos padrão.

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 é excelente na execução de operações paralelas de entrada/saída (E/S) devido ao seu design, que é baseado em grupos de alocação (um tipo de subdivisão dos volumes físicos nos quais o XFS é usado - também abreviado para AGs). Por causa disso, o XFS permite extrema escalabilidade de threads de E/S, largura de banda do sistema de arquivos e tamanho dos arquivos e do sistema de arquivos em si, ao abranger vários dispositivos de armazenamento físico. O XFS garante a consistência dos dados, empregando o registro de metadados e suportando barreiras de gravação. A alocação de espaço é realizada por meio de extensões com estruturas de dados armazenadas em árvores B +, melhorando o desempenho geral do sistema de arquivos, especialmente ao lidar com arquivos grandes. A alocação atrasada auxilia na prevenção da fragmentação do sistema de arquivos. Desfragmentação online também é suportada. Um recurso exclusivo do XFS é a pré-alocação da largura de banda de E/S a uma taxa pré-determinada. Isso é adequado para muitos aplicativos em tempo real, no entanto, esse recurso era suportado apenas no IRIX e somente com hardware especializado.

Um usuário notável do XFS, a Divisão de Supercomputação Avançada da NASA, aproveitou esses recursos para implantar dois sistemas de arquivos XFS de 300+ terabytes em dois servidores de armazenamento de arquivamento SGI Altix, cada um deles diretamente conectado a várias matrizes de disco Fibre Channel.

O XFS foi originalmente projetado e criado pela SGI e usado no sistema operacional IRIX e posteriormente foi portado para o Linux. Foi explicitamente projetado para lidar com grandes conjuntos de dados, bem como para lidar com tarefas de I/O paralelo de forma muito eficaz.

O XFS pode lidar com:

    Até 16 EB (exabytes) de tamanho total do sistema de arquivos

    Até 8 EB de tamanho máximo para um arquivo individual

O alto desempenho é um dos elementos principais do projeto XFS, que implementa métodos para:

    Potencializar o DMA (Acesso direto a memória)

    Garantir uma taxa de I/O

    Ter flexibilidade para ajustar o tamanho do bloco para casar com o tamanho do bloco da camada de nível de disco como RAID ou LVM.

Em contraste com os sistemas de arquivos tradicionais, o XFS também pode fazer journal das informações cota. Isso reduz o tempo de recuperação de um sistema de arquivos que usa cotas. Além disso, o journal pode ficar em um dispositivo externo.

Tal como acontece com os outros sistemas de arquivos UNIX e Linux, o XFS suporta atributos estendidos.

A manutenção de um sistema de arquivos XFS é facilitada pelo fato de que a maior parte das tarefas de manutenção podem ser feitas on-line (ou seja, com o sistema de arquivos montado).

Exemplos dessas operações:

    Desfragmentar

    Aumentar o tamanho do sistema de arquivos

    Fazer Dump e Restore (Backup de baixo nível)

Backup e restauração de baixo nível podem ser feitos com os utilitários nativos do XFS:

    xfsdump

    xfsrestore

que podem ser convenientemente colocados em pausa para continuar depois.

Como esses utilitários também são multi-thread, as operações de dump e restore do XFS podem ser realizados muito rapidamente.

Enquanto o XFS não suporta diretamente snapshots, o utilitário xfs-freeze pode ser usado para suspender o sistema de arquivos, permitindo assim que um snapshot possa ser feito por uma ferramenta que opera no nível do disco como as ferramentas do Linux LVM. O LVM usará automaticamente o xfs-freeze para desativar o sistema de arquivos para fazer snapshots.

O XFS suporta cotas e os comandos tradicionais de cota podem ser usados. No entanto, se você usar o comando xfs-quota você pode usar as cotas por diretórios que o XFS suporta.

História

editar

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
  • 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

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

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

ANDERSON, Curtis et al. xFS project architecture. Silicon Graphics, Inc. 1993. Disponível em <https://web.archive.org/web/20090927012959/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 <https://web.archive.org/web/20090927012959/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 <https://web.archive.org/web/20091007171236/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 <https://web.archive.org/web/20100215155425/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 <https://web.archive.org/web/20071109071255/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 <https://web.archive.org/web/20070930235307/http://oss.sgi.com/projects/xfs/papers/xfs_usenix/index.html>. Acesso em 03 out. 2007.

Ligações externas

editar
  1. «Cópia arquivada». Consultado em 24 de dezembro de 2008. Arquivado do original em 6 de junho de 2013 
  2. http://www.sgi.com/products/software/irix/releases/irix6530.html