Uma Introdução à Terminologia e Conceitos de Armazenamento no Linux

Introdução

O Linux possui sistemas robustos e ferramentas para gerenciar dispositivos de hardware, incluindo unidades de armazenamento. Neste artigo, abordaremos, em um nível elevado, como o Linux representa esses dispositivos e como o armazenamento bruto é transformado em espaço utilizável no servidor.

O que é Armazenamento em Bloco?

O armazenamento em bloco é outro nome para o que o kernel do Linux chama de dispositivo de bloco. Um dispositivo de bloco é um componente de hardware que pode ser usado para armazenar dados, como um disco rígido tradicional (HDD), unidade de estado sólido (SSD), pen drive de memória flash, e assim por diante. É chamado de dispositivo de bloco porque o kernel se comunica com o hardware referenciando blocos de tamanho fixo, ou seja, pedaços de espaço.

Em outras palavras, o armazenamento em bloco é o que você considera como armazenamento de disco regular em um computador. Uma vez configurado, ele atua como uma extensão da árvore atual do sistema de arquivos, e você deve conseguir gravar ou ler informações de cada unidade de forma intercambiável.

O que são Partições de Disco?

As partições de disco são uma forma de dividir um disco de armazenamento em unidades menores utilizáveis. Uma partição é uma seção de um disco de armazenamento que pode ser tratada de maneira semelhante a um próprio disco.

A criação de partições permite segmentar o espaço disponível e utilizar cada partição para um propósito diferente. Isso proporciona mais flexibilidade ao usuário, permitindo a segmentação de um único disco para múltiplos sistemas operacionais, espaço de troca ou sistemas de arquivos especializados.

Embora os discos possam ser formatados e utilizados sem a criação de partições, os sistemas operacionais geralmente esperam encontrar uma tabela de partições, mesmo que haja apenas uma partição escrita no disco. É geralmente recomendado particionar novos discos para obter maior flexibilidade.

MBR vs GPT

Ao particionar um disco, é importante saber qual formato de partição será utilizado. Geralmente, a escolha é entre MBR (Master Boot Record) e GPT (GUID Partition Table).

O MBR tem mais de 30 anos. Devido à sua idade, apresenta algumas limitações sérias. Por exemplo, não pode ser usado em discos com mais de 2TB de tamanho e só pode ter um máximo de quatro partições primárias.

GPT é um esquema de partição mais moderno que resolve alguns dos problemas inerentes ao MBR. Sistemas que utilizam GPT podem ter muitas mais partições por disco, geralmente limitadas apenas pelas restrições impostas pelo próprio sistema operacional. Além disso, não existe uma limitação de tamanho de disco com GPT, e as informações da tabela de partição estão disponíveis em várias localizações para evitar corrupção. GPT também pode escrever um “MBR de proteção” para compatibilidade com ferramentas exclusivas do MBR.

Na maioria dos casos, GPT é a escolha preferida, a menos que o sistema operacional o impeça de usá-lo.

Formatação e Sistemas de Arquivos

Embora o kernel do Linux possa reconhecer um disco bruto, ele deve ser formatado para ser utilizado. A formatação é o processo de escrever um sistema de arquivos no disco e prepará-lo para operações de arquivo. Um sistema de arquivos é o sistema que estrutura dados e controla como as informações são gravadas e recuperadas do disco subjacente. Sem um sistema de arquivos, você não poderia usar o dispositivo de armazenamento para operações padrão de sistema de arquivos.

Existem muitos formatos de sistemas de arquivos diferentes, cada um com suas compensações, incluindo suporte a sistemas operacionais. Todos eles apresentam ao usuário uma representação semelhante do disco, mas as características e plataformas que eles suportam podem ser muito diferentes.

Alguns dos sistemas de arquivos mais populares para o Linux são:

  • Ext4: O sistema de arquivos padrão mais popular é o Ext4, sucessor do Ext2 e Ext3. O sistema de arquivos Ext4 é diarizado, compatível com sistemas legados, estável e possui suporte e ferramentas maduras. É uma boa escolha se você não tiver necessidades especializadas.
  • XFS: O XFS se especializa em desempenho e em arquivos de dados grandes. Ele formata rapidamente e tem boas características de throughput ao lidar com arquivos grandes e ao trabalhar com discos grandes. Também possui recursos de snapshotting ao vivo. O XFS utiliza diarização de metadados em oposição à diarização de ambos, metadados e dados. Isso resulta em um desempenho rápido, mas pode potencialmente levar à corrupção de dados em caso de perda abrupta de energia.
  • Btrfs: Btrfs é um sistema de arquivos moderno e rico em recursos que utiliza a técnica de cópia na gravação. Essa arquitetura permite a integração de algumas funcionalidades de gerenciamento de volumes na camada do sistema de arquivos, incluindo snapshots e clonagem. É usado por padrão em alguns dispositivos NAS (armazenamento conectado à rede) para consumidores e comerciais, sendo popular para arrays dedicados com vários discos.
  • ZFS: ZFS é outro sistema de arquivos e gerenciador de volumes que utiliza a técnica de cópia na gravação, apresentando um conjunto robusto e maduro de recursos. Concorre diretamente com o Btrfs, possui recursos de integridade de dados, pode lidar com tamanhos grandes de sistemas de arquivos, tem recursos típicos de volumes como snapshotting e clonagem, e pode organizar volumes em conjuntos RAID e semelhantes para redundância e desempenho. ZFS tem uma história controversa devido a preocupações de licenciamento, mas não é muito mais ou menos popular do que o Btrfs quando se considera o suporte comercial.

Além disso, o Windows usa principalmente o *NTFS e ExFAT, enquanto o macOS usa principalmente o HFS+ e o APFS. Geralmente, é possível ler e às vezes gravar nesses formatos de sistema de arquivos em diferentes plataformas, mas pode ser necessário usar ferramentas de compatibilidade adicionais.

Como o Linux Gerencia Dispositivos de Armazenamento

Arquivos de Dispositivos em /dev

No Linux, quase tudo é representado por um arquivo em algum lugar na hierarquia do sistema de arquivos. Isso inclui hardware como unidades de armazenamento, que são representadas no sistema como arquivos no diretório /dev. Normalmente, os arquivos que representam dispositivos de armazenamento começam com sd ou hd seguido de uma letra. Por exemplo, a primeira unidade em um servidor geralmente é algo como /dev/sda.

As partições nesses drives também têm arquivos dentro de /dev, representados pela adição do número da partição ao final do nome do drive. Por exemplo, a primeira partição no drive do exemplo anterior seria /dev/sda1.

Enquanto os arquivos de dispositivo /dev/sd* e /dev/hd* representam a forma tradicional de se referir a unidades e partições, há uma desvantagem significativa em usar apenas esses valores. O kernel do Linux decide qual dispositivo recebe qual nome a cada inicialização, então isso pode levar a cenários confusos onde seus dispositivos mudam de nós de dispositivo.

Para contornar esse problema, o diretório /dev/disk contém subdiretórios correspondentes a diferentes maneiras mais persistentes de identificar discos e partições no sistema. Estes contêm links simbólicos que são criados na inicialização de volta para os arquivos /dev/[sh]da* corretos. Os links são nomeados de acordo com o traço de identificação do diretório (por exemplo, pelo rótulo da partição para o diretório /dev/disk/by-partlabel). Esses links sempre apontarão para os dispositivos corretos, então podem ser usados como identificadores estáticos para espaços de armazenamento.

Alguns ou todos os seguintes subdiretórios podem existir em /dev/disk:

  • by-label: A maioria dos sistemas de arquivos possui um mecanismo de rotulagem que permite a atribuição de nomes arbitrários especificados pelo usuário para um disco ou partição. Este diretório consiste em links nomeados após esses rótulos fornecidos pelo usuário.
  • by-uuid: UUIDs, ou identificadores únicos universais, são uma sequência longa e única de letras e números que podem ser usados como um ID para um recurso de armazenamento. Estes geralmente não são muito legíveis para humanos, mas são quase sempre únicos, mesmo entre sistemas. Como tal, pode ser uma boa ideia usar UUIDs para referenciar armazenamento que pode migrar entre sistemas, já que colisões de nomes são menos prováveis.
  • by-partlabel e by-partuuid: As tabelas GPT oferecem seu próprio conjunto de rótulos e UUIDs, que também podem ser usados para identificação. Isso funciona de maneira semelhante aos dois diretórios anteriores, mas usa identificadores específicos da GPT.
  • by-id: Este diretório contém links gerados pelos próprios números de série do hardware e pelo hardware ao qual estão conectados. Isso não é totalmente persistente, pois a forma como o dispositivo está conectado ao sistema pode alterar seu nome by-id.
  • by-path: Assim como by-id, este diretório depende da conexão de um dispositivo de armazenamento ao sistema em si. Os links aqui são construídos usando a interpretação do sistema sobre o hardware usado para acessar o dispositivo. Isso possui as mesmas desvantagens que by-id, já que conectar um dispositivo a uma porta diferente pode alterar esse valor.

Geralmente, by-label ou by-uuid são as melhores opções para a identificação persistente de dispositivos específicos.

Nota: Os volumes de armazenamento em bloco da DigitalOcean controlam os números de série do dispositivo relatados ao sistema operacional. Isso permite que a categorização by-id seja confiavelmente persistente nesta plataforma. Este é o método preferido para se referir aos volumes da DigitalOcean, pois é tanto persistente quanto previsível na inicialização.

Montagem de Dispositivos de Bloco

No Linux e em outros sistemas operacionais semelhantes ao Unix, todo o sistema, independentemente de quantos dispositivos físicos estão envolvidos, é representado por uma única árvore de arquivos unificada. Quando um sistema de arquivos em uma unidade ou partição deve ser usado, ele deve ser conectado à árvore existente. Montagem é o processo de anexar uma partição formatada ou unidade a um diretório dentro do sistema de arquivos do Linux. O conteúdo da unidade pode então ser acessado a partir desse diretório.

As unidades são quase sempre montadas em diretórios vazios dedicados – montar em um diretório não vazio significa que o conteúdo usual do diretório será inacessível até que a unidade seja desmontada). Existem muitas opções de montagem diferentes que podem ser configuradas para alterar o comportamento de um dispositivo montado. Por exemplo, a unidade pode ser montada no modo somente leitura para garantir que seu conteúdo não seja alterado.

O Padrão de Hierarquia de Sistema de Arquivos recomenda o uso de /mnt ou um subdiretório abaixo dele para sistemas de arquivos temporariamente montados. Não faz recomendações sobre onde montar armazenamento mais permanente, então você pode escolher o esquema que preferir. Em muitos casos, subdiretórios /mnt ou /mnt são usados também para armazenamento mais permanente.

Tornando Montagens Permanentes com /etc/fstab

Os sistemas Linux utilizam um arquivo chamado /etc/fstab (tabela de sistemas de arquivos) para determinar quais sistemas de arquivos devem ser montados durante o processo de inicialização. Sistemas de arquivos que não possuem uma entrada neste arquivo não serão montados automaticamente, a menos que sejam configurados por algum outro software.

Cada linha do arquivo /etc/fstab representa um sistema de arquivos diferente que deve ser montado. Esta linha especifica o dispositivo de bloco, o ponto de montagem ao qual deve ser anexado, o formato da unidade e as opções de montagem, bem como algumas outras informações.

Gerenciamento de Armazenamento Mais Complexo

Embora muitos casos de uso sejam atendidos por esses recursos principais, existem paradigmas de gerenciamento mais complexos disponíveis para unir vários discos, especialmente RAID.

O que é RAID?

RAID significa ready array of independent disks. RAID é uma tecnologia de gerenciamento de armazenamento e virtualização que permite agrupar unidades e gerenciá-las como uma única unidade com capacidades adicionais.

As características de uma matriz RAID dependem do seu nível RAID, que define como os discos na matriz se relacionam entre si. Alguns dos níveis mais comuns são:

  • RAID 0: Este nível indica striping de unidade. Isso significa que, à medida que os dados são gravados na matriz, eles são divididos e distribuídos linearmente entre os discos do conjunto. Isso oferece um impulso de desempenho, pois vários discos podem ser gravados ou lidos simultaneamente. A desvantagem é que uma falha de uma única unidade pode perder todos os dados na matriz inteira, já que nenhum disco contém informações suficientes sobre o conteúdo para reconstruir. RAID 0 geralmente nunca é usado em produção por esse motivo, embora possa ser útil como ponto de comparação.

  • RAID 1: RAID 1 indica espelhamento de unidade. Tudo o que é gravado em uma matriz RAID 1 é gravado em múltiplos discos. Sua principal vantagem é a redundância de dados, que permite que os dados sobrevivam à perda de disco rígido em qualquer lado do espelho. Como múltiplos discos conterão exatamente os mesmos dados, sua capacidade utilizável é reduzida em pelo menos metade.

  • RAID 5: RAID 5 distribui dados por vários discos, similar ao RAID 0. No entanto, este nível também implementa uma paridade distribuída entre os discos. Isso significa que se um disco falhar, os discos restantes podem reconstruir a matriz usando as informações de paridade compartilhadas entre eles. Geralmente, isso é suficiente para reconstruir um disco, o que significa que a matriz pode sobreviver à perda de qualquer um dos discos. RAID 5 reduz o espaço disponível em uma matriz pela capacidade de um disco.
  • RAID 6: RAID 6 possui as mesmas propriedades que RAID 5, mas fornece dupla paridade. Isso significa que os arrays RAID 6 podem suportar a perda de até 2 unidades. A capacidade do array é novamente afetada pela quantidade de paridade, o que significa que a capacidade utilizável é reduzida pelo espaço de duas unidades.
  • RAID 10: RAID 10 é uma combinação dos níveis 1 e 0. Primeiro, são feitos dois conjuntos de arrays espelhados. Em seguida, os dados são distribuídos entre eles. Isso cria um array que possui algumas características de redundância, ao mesmo tempo que fornece bom desempenho. Isso requer bastante unidades, no entanto, e a capacidade total ainda é inferior a metade do espaço de disco combinado.

Para onde ir a seguir?

Se você tiver um novo dispositivo de armazenamento que deseja usar em seu sistema Linux, este artigo irá guiá-lo através do processo de particionamento, formatação e montagem do seu novo sistema de arquivos. Isso deve ser suficiente para a maioria dos casos de uso em que você está principalmente preocupado em adicionar capacidade adicional. Para aprender como realizar tarefas de administração de armazenamento, confira Como Executar Tarefas de Administração Básica para Dispositivos de Armazenamento no Linux.

Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-storage-terminology-and-concepts-in-linux