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

Introdução

O Linux possui sistemas e ferramentas robustas para gerenciar dispositivos de hardware, incluindo unidades de armazenamento. Neste artigo, abordaremos, em um nível mais alto, 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 utilizado 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 interage com o hardware referenciando blocos de tamanho fixo, ou pedaços de espaço.

Em outras palavras, o armazenamento em bloco é o que você conhece 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 ser capaz de 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 maneira 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 disco em si.

A partição permite segmentar o espaço disponível e usar cada partição para um propósito diferente. Isso oferece mais flexibilidade ao usuário, permitindo potencialmente segmentar um único disco para vários sistemas operacionais, espaço de swap ou sistemas de arquivos especializados.

Embora os discos possam ser formatados e usados sem partições, os sistemas operacionais geralmente esperam encontrar uma tabela de partição, mesmo se houver apenas uma única partição gravada no disco. Geralmente é recomendado particionar novos discos para obter maior flexibilidade.

MBR vs GPT

Ao particionar um disco, é importante saber qual formato de particionamento será usado. Isso geralmente se resume a uma escolha entre MBR (Master Boot Record) e GPT (GUID Partition Table).

O MBR tem mais de 30 anos. Devido à sua idade, possui algumas limitações sérias. Por exemplo, não pode ser usado para discos com mais de 2TB de tamanho e pode ter no máximo 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 muito mais partições por disco. Isso geralmente é limitado apenas pelas restrições impostas pelo próprio sistema operacional. Além disso, a limitação de tamanho do disco não existe com GPT e as informações da tabela de partição estão disponíveis em múltiplos locais para proteger contra corrupção. GPT também pode escrever um “MBR protetor” para compatibilidade com ferramentas exclusivamente MBR.

Na maioria dos casos, GPT é a melhor escolha a menos que o seu sistema operacional impeça o seu uso.

Formatação e Sistemas de Arquivos

Enquanto o kernel do Linux pode reconhecer um disco bruto, ele deve ser formatado para ser usado. 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 os dados e controla como as informações são escritas e recuperadas do disco subjacente. Sem um sistema de arquivos, você não poderia usar o dispositivo de armazenamento para nenhuma operação padrão de sistema de arquivos.

Há muitos formatos de sistema de arquivos diferentes, cada um com suas vantagens e desvantagens, incluindo suporte a sistema operacional. Todos eles apresentam ao usuário uma representação semelhante do disco, mas os recursos e as plataformas que eles suportam podem ser muito diferentes.

Alguns dos sistemas de arquivos mais populares para 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 tem necessidades especializadas.
  • XFS: XFS se especializa em desempenho e arquivos de dados grandes. Ele formata rapidamente e possui boas características de throughput ao lidar com arquivos grandes e ao trabalhar com discos grandes. Ele também possui recursos de snapshotting ao vivo. XFS usa diário de metadados em oposição a diário de metadados e dados. Isso leva a um desempenho rápido, mas pode potencialmente levar à corrupção de dados no caso de uma perda de energia abrupta.
  • Btrfs: Btrfs é um sistema de arquivos moderno e rico em recursos de cópia em gravação. Esta arquitetura permite que algumas funcionalidades de gerenciamento de volume sejam integradas dentro da camada do sistema de arquivos, incluindo snapshots e clonagem. É usado por padrão em alguns hardwares NAS (armazenamento conectado à rede) de consumo e comercial, e é popular para matrizes dedicadas de vários discos
  • ZFS: ZFS é outro sistema de arquivos de cópia em gravação e gerenciador de volumes com um conjunto robusto e maduro de recursos. Ele compete diretamente com Btrfs, possui recursos de integridade de dados, pode lidar com tamanhos grandes de sistemas de arquivos, possui recursos de volume típicos como snapshotting e clonagem, e pode organizar volumes em matrizes RAID e semelhantes a RAID para fins de redundância e desempenho. ZFS tem uma história controversa devido a preocupações com licenciamento, mas não é muito mais ou menos popular que Btrfs quando se leva em conta o suporte comercial.

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

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, seguidos por uma letra. Por exemplo, a primeira unidade em um servidor é geralmente algo como /dev/sda.

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

Enquanto os arquivos de dispositivo /dev/sd* e /dev/hd* representam a maneira 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, o que pode levar a cenários confusos onde seus dispositivos alteram os nós de dispositivo.

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

Alguns ou todos os subdiretórios a seguir 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 de acordo com esses rótulos fornecidos pelo usuário.
  • by-uuid: UUIDs, ou identificadores únicos universais, são uma sequência longa e exclusiva de letras e números que podem ser usados como um ID para um recurso de armazenamento. Geralmente, eles 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 do GPT oferecem seu próprio conjunto de etiquetas e UUIDs, que também podem ser usados para identificação. Isso funciona de maneira muito semelhante aos dois diretórios anteriores, mas usa identificadores específicos do GPT.
  • by-id: Este diretório contém links gerados pelos números de série próprios do hardware e pelo hardware ao qual estão conectados. Isso não é totalmente persistente, porque 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 próprio sistema. Os links aqui são construídos usando a interpretação do sistema sobre o hardware usado para acessar o dispositivo. Isso tem 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 identificação persistente de dispositivos específicos.

Nota: Os volumes de armazenamento de bloco da DigitalOcean controlam os números de série do dispositivo reportados ao sistema operacional. Isso permite que a categorização by-id seja confiavelmente persistente nesta plataforma. Este é o método preferido para referenciar os volumes da DigitalOcean, pois é tanto persistente quanto previsível na primeira 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. O Montar é o processo de anexar uma partição ou unidade formatada 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 do Sistema de Arquivos recomenda o uso de /mnt ou um subdiretório sob ele 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, os subdiretórios /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 sistema 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 programados 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 ele deve ser anexado, o formato do drive 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 redundant 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 aumento de desempenho, pois vários discos podem ser gravados ou lidos simultaneamente. A desvantagem é que uma única falha de unidade pode perder todos os dados na matriz inteira, pois nenhum disco contém informações suficientes sobre o conteúdo para reconstruir. O 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. Qualquer coisa gravada em uma matriz RAID 1 é gravada em vários 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 vários discos conterão exatamente os mesmos dados, sua capacidade utilizável é reduzida pelo menos pela metade.
  • RAID 5: O RAID 5 distribui dados em vários discos, semelhante 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 disco. O 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 o RAID 5, mas fornece dupla paridade. Isso significa que os conjuntos RAID 6 podem resistir à perda de até 2 unidades. A capacidade do conjunto é novamente afetada pela quantidade de paridade, o que significa que a capacidade utilizável é reduzida pelo espaço equivalente a dois discos.
  • RAID 10: RAID 10 é uma combinação dos níveis 1 e 0. Primeiro, dois conjuntos de matrizes espelhadas são criados. Em seguida, os dados são distribuídos entre eles. Isso cria um conjunto que possui algumas características de redundância, ao mesmo tempo que oferece bom desempenho. No entanto, isso requer um número considerável de unidades e a capacidade total ainda é inferior a metade do espaço total dos discos combinados.

Para Onde Ir A Seguir?

Se você tem um novo dispositivo de armazenamento que deseja utilizar 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, onde você está principalmente preocupado em adicionar capacidade adicional. Para aprender como realizar tarefas de administração de armazenamento, confira Como Realizar 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