XFS

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 completoXFS
Lançamento1994 (IRIX 5.3)
Identificador da partição0x83 (Master Boot Record)
Estruturas
Conteúdos de diretórioÁrvore B+
Alocação de arquivosÁrvore B+
Limites
Tamanho Máximo de arquivo8 Exbibytes - 1 byte
Número máximo de arquivos264
Tamanho máximo do nome de arquivo255 bytes
Tamanho máximo do volume8 Exbibytes - 1 byte
Caracteres permitidos em nomesTodos os caracteres exceto NUL and "/"
Recursos
Datas salvasatime, mtime, ctime, crtime
Resolução de datas1ns
AtributosSim
Permissões de sistema de arquivosSim
Compressão transparenteNão
Sistemas operativos suportadosIRIX, 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

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

  • 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

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

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

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