Aula 18: Armazenamento — LVM, RAID e particionamento avançado

Aula 18: Armazenamento — LVM, RAID e particionamento avançado

O gerenciamento de armazenamento é uma das disciplinas mais críticas na administração de sistemas Linux. Seja em um datacenter corporativo, em servidores de virtualização ou simplesmente em uma workstation com múltiplos discos, a capacidade de expandir, proteger e organizar o espaço em disco de forma flexível separa o profissional experiente do iniciante. Nesta aula, vamos mergulhar fundo em três pilares do armazenamento moderno no Linux: LVM (Logical Volume Manager), RAID via software (mdadm) e particionamento avançado com GPT. Ao contrário das abordagens tradicionais de particionamento estático, estas tecnologias permitem redimensionamento dinâmico, tolerância a falhas e organização lógica que se adapta às demandas do negócio.

Imagine o seguinte cenário, comum em nossos projetos na JRT Technology Solutions: um servidor de banco de dados que começa com 200 GB de armazenamento e, em seis meses, precisa de 1 TB adicional. Com particionamento convencional MBR, você enfrentaria paradas prolongadas, backups complexos e reconstrução de partições. Com LVM, bastam alguns comandos para adicionar novos discos físicos, expandir o grupo de volumes e redimensionar o sistema de arquivos — tudo com o sistema em produção. Este é o poder que você vai adquirir nesta aula.

O RAID via software, por sua vez, oferece uma camada de proteção de dados que dispensa controladoras dedicadas caras. Utilizando o mdadm, o administrador pode implementar desde um simples espelhamento (RAID 1) até configurações mais sofisticadas como RAID 5 e RAID 10, balanceando performance, capacidade e redundância conforme a necessidade. Em ambientes de segurança da informação e infraestrutura, onde a integridade dos dados é inegociável, dominar estas técnicas é pré-requisito fundamental.

Por fim, vamos explorar o particionamento avançado utilizando tabelas GPT (GUID Partition Table) com a ferramenta parted e gdisk. Diferente do antigo MBR, o GPT suporta discos maiores que 2 TB e até 128 partições primárias, sendo o padrão em servidores UEFI modernos. Ao final desta aula, você será capaz de projetar, implementar e manter uma estratégia completa de armazenamento para servidores Linux de qualquer porte, combinando estas três tecnologias de forma integrada e profissional.

O que você vai aprender nesta aula

  • Compreender a arquitetura do LVM: Physical Volumes (PV), Volume Groups (VG) e Logical Volumes (LV)
  • Criar, redimensionar e remover volumes lógicos com sistema de arquivos ext4 e xfs
  • Implementar RAID via software nos níveis 0, 1, 5 e 10 utilizando o mdadm
  • Monitorar e recuperar arrays RAID em caso de falha de disco
  • Converter tabelas de partição MBR para GPT sem perda de dados
  • Utilizar parted e gdisk para criar partições avançadas em discos de grande capacidade
  • Integrar LVM sobre RAID para máxima flexibilidade e redundância
  • Diagnosticar e corrigir problemas comuns em configurações de armazenamento

Pré-requisitos e Ambiente

Para executar todos os procedimentos desta aula, você precisará de uma máquina virtual (VirtualBox, KVM ou VMware) ou um servidor físico com as seguintes características mínimas:

  • Sistema operacional: Ubuntu 22.04/24.04 LTS ou Rocky Linux 9 / CentOS Stream 9
  • Disco principal: 20 GB (com o sistema instalado)
  • Discos adicionais: 4 discos de 5 GB cada (para práticas de RAID e LVM) — podem ser discos virtuais adicionados à VM
  • Pacotes necessários: lvm2, mdadm, parted, gdisk (instalaremos durante a aula)
  • Conhecimento prévio: comandos básicos de terminal, sistema de arquivos, montagem e desmontagem de partições (aulas anteriores do curso)

Recomendamos fortemente que você NÃO execute estes procedimentos em um ambiente de produção sem antes testá-los em laboratório. Em nossos treinamentos presenciais na JRT Technology Solutions, sempre utilizamos snapshots de VM para permitir que os alunos experimentem livremente sem riscos.

1. Fundamentos do LVM: A Camada de Abstração do Armazenamento

O LVM (Logical Volume Manager) é uma camada de software que abstrai o hardware de discos físicos, permitindo que o administrador gerencie o armazenamento de forma dinâmica e independente dos dispositivos subjacentes. Sua arquitetura é composta por três conceitos fundamentais: Physical Volume (PV), que representa um disco ou partição física inicializada para uso com LVM; Volume Group (VG), que agrupa um ou mais PVs em um pool de armazenamento unificado; e Logical Volume (LV), que é a unidade lógica que efetivamente recebe o sistema de arquivos e é montada no sistema. Esta estrutura em camadas permite que um LV possa se estender por múltiplos discos físicos e ser redimensionado sem interrupção do serviço.

Uma analogia útil para entender o LVM é pensar em um condomínio residencial. Os discos físicos são os terrenos (PVs). Ao unir vários terrenos, você forma o condomínio (VG), que é um espaço contíguo do ponto de vista administrativo. Dentro desse condomínio, você pode criar apartamentos (LVs) de tamanhos variados e, se necessário, aumentar um apartamento usando o espaço livre do condomínio, sem precisar derrubar paredes. Da mesma forma, se um disco físico falhar, você pode migrar os dados para outro PV dentro do mesmo VG (com o comando pvmove), substituir o disco defeituoso e remover o PV antigo — tudo online.

Antes de iniciarmos a parte prática, é importante esclarecer que o LVM não substitui o RAID em termos de redundância. Embora o LVM ofereça algumas funcionalidades de mirroring e striping, seu propósito principal é a flexibilidade no gerenciamento de volumes. Para proteção contra falhas de disco, a melhor prática — que adotamos diariamente em implantações na JRT Technology Solutions — é combinar RAID (para redundância) com LVM (para flexibilidade). Nesta aula, faremos exatamente isso: primeiro entenderemos cada tecnologia isoladamente e depois as integraremos em uma solução robusta.

O LVM mantém metadados descritivos em cada PV, permitindo que o sistema reconheça a configuração mesmo após reinicializações. Esses metadados são armazenados em um cabeçalho no início do dispositivo e podem ser inspecionados com comandos como pvdisplay e vgdisplay. Veremos como utilizar esses comandos para auditoria e documentação da configuração de armazenamento.

2. Instalando e Preparando as Ferramentas de Armazenamento

Antes de qualquer operação com LVM ou RAID, precisamos garantir que os pacotes necessários estejam instalados. Em distribuições derivadas do Debian (Ubuntu), o pacote lvm2 geralmente já vem instalado, mas vamos confirmar. Em distribuições RHEL/Rocky Linux, pode ser necessário instalar explicitamente. O mdadm para RAID via software e o parted/gdisk para particionamento GPT também serão instalados nesta etapa.

Para Ubuntu/Debian:

# Atualizar a lista de pacotes
sudo apt update

# Instalar lvm2, mdadm, parted e gdisk
sudo apt install -y lvm2 mdadm parted gdisk

# Verificar se o serviço lvm2 está ativo
sudo systemctl status lvm2-lvmetad

Para Rocky Linux / CentOS Stream / RHEL:

# Atualizar a lista de pacotes
sudo dnf update -y

# Instalar lvm2, mdadm, parted e gdisk
sudo dnf install -y lvm2 mdadm parted gdisk

# Habilitar e iniciar o serviço lvm2
sudo systemctl enable --now lvm2-monitor

Após a instalação, é fundamental verificar se os módulos do kernel necessários estão carregados. O LVM utiliza o device mapper do kernel (dm_mod), enquanto o RAID via software utiliza o módulo md_mod. Execute os comandos abaixo em qualquer distribuição:

# Verificar se o módulo device mapper está carregado
lsmod | grep dm_mod

# Verificar se o módulo md (RAID) está carregado
lsmod | grep md_mod

# Listar dispositivos de bloco disponíveis
lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0   18G  0 part /
└─sda3   8:3    0    1G  0 part [SWAP]
sdb      8:16   0    5G  0 disk 
sdc      8:32   0    5G  0 disk 
sdd      8:48   0    5G  0 disk 
sde      8:64   0    5G  0 disk

Na saída acima, sda é o disco principal do sistema. Os discos sdb, sdc, sdd e sde são os discos adicionais de 5 GB que utilizaremos para as práticas. Certifique-se de que seus discos apareçam de forma similar. Atenção: sempre confira os nomes dos discos com lsblk antes de executar qualquer comando que possa sobrescrever dados.

3. Criando e Gerenciando Volumes LVM — Passo a Passo Completo

Vamos iniciar com um cenário prático: transformar dois discos de 5 GB em um pool de armazenamento LVM de 10 GB e criar um volume lógico de 8 GB, deixando 2 GB livres para expansão futura. Utilizaremos sdb e sdc para esta demonstração. O processo segue uma ordem estrita: primeiro criamos os Physical Volumes, depois o Volume Group e, finalmente, o Logical Volume.

Passo 1 — Criar Physical Volumes (PV): o comando pvcreate inicializa um disco ou partição para uso com LVM, escrevendo os metadados necessários no início do dispositivo.

# Criar PV nos discos sdb e sdc
sudo pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

Passo 2 — Verificar os PVs criados: usando pvdisplay ou pvs (formato resumido).

# Visualização detalhada de todos os PVs
sudo pvdisplay

# Visualização resumida e tabular
sudo pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdb          lvm2 ---   5.00g 5.00g
  /dev/sdc          lvm2 ---   5.00g 5.00g

Observe que ambos os PVs têm 5 GB livres e ainda não pertencem a nenhum Volume Group (coluna VG vazia).

Passo 3 — Criar o Volume Group (VG): o comando vgcreate agrupa os PVs em um pool comum. Chamaremos nosso VG de vg_dados.

# Criar VG agrupando sdb e sdc
sudo vgcreate vg_dados /dev/sdb /dev/sdc
  Volume group "vg_dados" successfully created

Passo 4 — Verificar o VG: com vgdisplay ou vgs.

sudo vgs
  VG       #PV #LV #SN Attr   VSize  VFree
  vg_dados   2   0   0 wz--n- 9.99g 9.99g

O VG tem aproximadamente 10 GB (9.99g) e 0 volumes lógicos criados até o momento.

Passo 5 — Criar o Logical Volume (LV): com lvcreate, especificamos o nome (-n) e o tamanho (-L). Vamos criar um LV de 8 GB chamado lv_projetos.

# Criar LV de 8 GB
sudo lvcreate -n lv_projetos -L 8G vg_dados
  Logical volume "lv_projetos" created.

Passo 6 — Verificar o LV: com lvdisplay ou lvs. O caminho do dispositivo será /dev/vg_dados/lv_projetos ou /dev/mapper/vg_dados-lv_projetos.

sudo lvs
  LV          VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_projetos vg_dados -wi-a----- 8.00g

4. Formatando, Montando e Expandindo o Volume Lógico

Com o LV criado, o próximo passo é formatá-lo com um sistema de arquivos e montá-lo em um diretório. Utilizaremos ext4 para este exemplo, mas você pode optar por xfs se preferir (comandos equivalentes serão mostrados). Em sistemas de armazenamento de grande porte, o XFS é frequentemente preferido por seu desempenho superior com arquivos grandes e redimensionamento online (apenas crescimento), enquanto o ext4 oferece a flexibilidade de também poder ser reduzido.

Formatação e montagem (ext4):

# Formatar com ext4
sudo mkfs.ext4 /dev/vg_dados/lv_projetos

# Criar ponto de montagem
sudo mkdir -p /mnt/projetos

# Montar o volume
sudo mount /dev/vg_dados/lv_projetos /mnt/projetos

# Verificar montagem
df -h /mnt/projetos
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/vg_dados-lv_projetos   7.8G   24K  7.4G   1% /mnt/projetos

Observe que o tamanho disponível é 7.4G, ligeiramente menor que os 8G alocados devido aos metadados do sistema de arquivos. Este comportamento é normal e esperado.

Expandindo o LV e o sistema de arquivos (ext4): suponha que precisamos adicionar mais 2 GB ao volume, totalizando 10 GB. Como o VG ainda tem espaço livre (verifique com vgs), podemos expandir online.

# Expandir o LV para 10 GB
sudo lvextend -L 10G /dev/vg_dados/lv_projetos

# Redimensionar o sistema de arquivos ext4 para ocupar o novo espaço
sudo resize2fs /dev/vg_dados/lv_projetos

# Verificar o novo tamanho
df -h /mnt/projetos
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/vg_dados-lv_projetos   9.8G   24K  9.3G   1% /mnt/projetos

Se você optou por xfs, o comando de redimensionamento seria sudo xfs_growfs /mnt/projetos. Diferente do ext4, o XFS não permite redução, apenas crescimento, e o redimensionamento deve ser feito com o sistema de arquivos montado.

Tabela 1: Comandos essenciais do LVM e suas funções
Comando Função Exemplo de uso
pvcreate Inicializa um disco ou partição como Physical Volume pvcreate /dev/sdb
vgcreate Cria um Volume Group a partir de um ou mais PVs vgcreate vg_dados /dev/sdb /dev/sdc
lvcreate Cria um Logical Volume dentro de um VG lvcreate -n lv_proj -L 10G vg_dados
lvextend Expande um Logical Volume lvextend -L +2G /dev/vg_dados/lv_proj
resize2fs Redimensiona sistema de arquivos ext2/3/4 resize2fs /dev/vg_dados/lv_proj
xfs_growfs Expande sistema de arquivos XFS xfs_growfs /mnt/ponto_montagem
pvmove Move dados de um PV para outro (migração online) pvmove /dev/sdb /dev/sdd
vgreduce Remove um PV de um VG vgreduce vg_dados /dev/sdb

5. RAID via Software com mdadm — Conceitos e Criação de Arrays

O RAID (Redundant Array of Independent Disks) via software no Linux é implementado pelo subsistema md (Multiple Devices) e gerenciado pela ferramenta mdadm. Diferentemente de controladoras RAID por hardware, o RAID por software utiliza a CPU do sistema para calcular paridades e gerenciar os discos, o que é perfeitamente aceitável em sistemas modernos e oferece grande flexibilidade. Os níveis de RAID mais comuns em ambientes de armazenamento Linux são:

  • RAID 0 (striping): distribui os dados entre dois ou mais discos para maximizar performance e capacidade, porém sem redundância. Se um disco falhar, todos os dados são perdidos.
  • RAID 1 (mirroring): espelha os dados em dois discos, oferecendo redundância total e desempenho de leitura duplicado, mas com 50% de eficiência de capacidade.
  • RAID 5 (striping com paridade distribuída): requer no mínimo 3 discos, oferece tolerância à falha de um disco e eficiência de capacidade de N-1 discos.
  • RAID 10 (striped mirrors): Combina RAID 1 e RAID 0, exigindo no mínimo 4 discos (pares espelhados que depois são distribuídos em stripe). Excelente performance e redundância, com 50% de eficiência.

Em nossos projetos na JRT Technology Solutions, frequentemente recomendamos RAID 10 para servidores de banco de dados de alta performance e RAID 5 para servidores de arquivos onde a capacidade é priorizada. A escolha do nível depende de uma análise cuidadosa entre capacidade, performance e tolerância a falhas — exatamente o que vamos explorar nos próximos passos.

6. Implementando RAID 1 e RAID 5 com mdadm — Procedimento Completo

Vamos criar dois arrays RAID: um RAID 1 utilizando os discos sdd e sde (2 discos) e, em seguida, um RAID 5 utilizando sdb, sdc e sdd após desmontar e limpar as configurações anteriores. Importante: antes de criar qualquer array, certifique-se de que os discos não possuem sistemas de arquivos montados e que os PVs do LVM foram removidos se estavam em uso. Vamos zerar os superblocos dos discos para garantir um estado limpo.

Preparando os discos para RAID 1 (sdd e sde):

# Remover assinaturas de RAID anteriores, LVM e sistemas de arquivos
sudo wipefs -a /dev/sdd /dev/sde

# Zerar os primeiros setores para garantir limpeza total
sudo dd if=/dev/zero of=/dev/sdd bs=1M count=100
sudo dd if=/dev/zero of=/dev/sde bs=1M count=100

# Verificar estado limpo
sudo lsblk -f /dev/sdd /dev/sde
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdd
sde

Sem sistemas de arquivos listados, os discos estão prontos.

Criando o array RAID 1 (mirror):

# Criar RAID 1 com sdd e sde, nome do array: md0
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdd /dev/sde

# Opção explicada:
# --create /dev/md0  : cria o dispositivo de bloco /dev/md0
# --level=1          : especifica RAID 1 (mirroring)
# --raid-devices=2   : número de discos no array
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Responda y para confirmar. O aviso sobre boot é irrelevante para nosso cenário de dados.

Verificando o estado do array:

# Ver status resumido
cat /proc/mdstat

# Ver detalhes completos do array
sudo mdadm --detail /dev/md0
Personalities : [raid1] 
md0 : active raid1 sde[1] sdd[0]
      5238784 blocks super 1.2 [2/2] [UU]
      
unused devices: 

O status [UU] indica que ambos os discos estão ativos e saudáveis. O array está em sincronização inicial, que pode ser monitorada via /proc/mdstat. Aguarde a conclusão antes de formatar (normalmente leva alguns segundos para discos pequenos).

Formatando e montando o RAID 1:

# Formatar com ext4
sudo mkfs.ext4 /dev/md0

# Criar ponto de montagem
sudo mkdir -p /mnt/raid1

# Montar
sudo mount /dev/md0 /mnt/raid1

# Verificar
df -h /mnt/raid1
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        4.9G   24K  4.6G   1% /mnt/raid1

O tamanho de aproximadamente 5 GB reflete que o espelhamento reduz a capacidade total pela metade — 2 discos de 5 GB resultam em 5 GB disponíveis.

Criando um RAID 5 (3 discos): agora, utilizando sdb, sdc e sdd (após limpar o sdd usado no RAID 1 anterior).

# Parar o array RAID 1 atual e limpar os discos
sudo umount /mnt/raid1
sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
sudo wipefs -a /dev/sdd /dev/sde /dev/sdb /dev/sdc
sudo dd if=/dev/zero of=/dev/sdd bs=1M count=100
sudo dd if=/dev/zero of=/dev/sde bs=1M count=100
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=100
sudo dd if=/dev/zero of=/dev/sdc bs=1M count=100

# Criar RAID 5 com 3 discos
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# Verificar progresso da sincronização
watch -n 1 cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[3] sdc[1] sdb[0]
      10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  0.2% (10480/5237760) finish=1.0min speed=87333K/sec
      
unused devices: 

Observe que a capacidade total é de aproximadamente 10 GB (2 discos de dados, 1 de paridade). O status [UU_] mostra que o terceiro disco ainda está em recuperação; aguarde até que apareça [UUU].

Após a sincronização, formate e monte como anteriormente. Para RAID 5, o comando mkfs.ext4 /dev/md0 seguido de montagem funciona de forma idêntica.

Tabela 2: Comparativo prático dos níveis RAID no Linux
Nível RAID Mín. Discos Tolerância a falhas Eficiência de capacidade Comando mdadm (exemplo c/ 4 discos)
RAID 0 2 Nenhuma 100% mdadm –create /dev/md0 –level=0 –raid-devices=4 /dev/sd[b-e]
RAID 1 2 1 disco 50% mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sd[d-e]
RAID 5 3 1 disco N-1 / N mdadm –create /dev/md0 –level=5 –raid-devices=3 /dev/sd[b-d]
RAID 6 4 2 discos N-2 / N mdadm –create /dev/md0 –level=6 –raid-devices=4 /dev/sd[b-e]
RAID 10 4 1 por par 50% mdadm –create /dev/md0 –level=10 –raid-devices=4 /dev/sd[b-e]

7. Particionamento Avançado com GPT usando parted e gdisk

O particionamento tradicional MBR (Master Boot Record) está limitado a discos de 2 TB e 4 partições primárias. Para superar essas limitações, o padrão GPT (GUID Partition Table) foi adotado como parte do firmware UEFI, embora também funcione perfeitamente em sistemas BIOS tradicionais. O GPT suporta discos de até 9.4 ZB (zetabytes) e até 128 partições primárias sem necessidade de partições estendidas. Nesta seção, utilizaremos o parted — ferramenta moderna e recomendada pela Red Hat — e o gdisk, que oferece uma interface similar ao clássico fdisk, mas para GPT.

Um aspecto crucial do GPT é a manutenção de uma tabela de partição primária no início do disco e uma tabela de backup no final, o que confere maior resiliência a corrupções. Além disso, cada partição recebe um GUID único global, facilitando a identificação e automação em larga escala. Em nossos projetos de infraestrutura na JRT Technology Solutions, padronizamos o uso de GPT para todos os discos de dados em servidores, mesmo aqueles menores que 2 TB, pela consistência operacional e facilidade de gerenciamento.

Criando uma tabela GPT e partições com parted (não interativo):

# Selecionar um disco (ex: sde) e criar tabela GPT
sudo parted /dev/sde mklabel gpt

# Criar partição primária de 2 GB
sudo parted /dev/sde mkpart primary ext4 1MiB 2GiB

# Criar segunda partição com o restante do espaço
sudo parted /dev/sde mkpart primary ext4 2GiB 100%

# Verificar o layout
sudo parted /dev/sde print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sde: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2000MB  1999MB               primary
 2      2000MB  5369MB  3369MB               primary

Observe que o parted trabalha com unidades flexíveis (MiB, GiB, MB, GB) e que o alinhamento automático para discos modernos é tratado internamente. O início em 1MiB é uma prática recomendada para garantir alinhamento com setores 4K.

Usando gdisk para criar partições GPT (modo interativo):

# Entrar no gdisk para /dev/sdd
sudo gdisk /dev/sdd

# Sequência de comandos dentro do gdisk:
# o  (cria nova tabela GPT vazia, confirmar com y)
# n  (nova partição, aceitar defaults para número, primeiro setor 2048, último setor +1G)
# n  (segunda partição, aceitar defaults, usar restante do disco)
# w  (escrever as mudanças e sair, confirmar com y)

Para verificar o resultado com gdisk -l /dev/sdd:

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2099199   1024.0 MiB  8300  Linux filesystem
   2         2099200        10485726   4.0 GiB     8300  Linux filesystem

A vantagem do particionamento avançado com GPT não está apenas no tamanho, mas na flexibilidade. Por exemplo, você pode combinar partições GPT com LVM, utilizando uma partição como PV em vez do disco inteiro — uma prática extremamente comum para organizar melhor o armazenamento em servidores com discos de grande capacidade.

8. Integração Avançada: LVM sobre RAID

A combinação de RAID para redundância e LVM para flexibilidade representa o estado da arte em gerenciamento de armazenamento no Linux. Neste cenário, criamos um array RAID (de qualquer nível) e, sobre ele, implementamos o LVM. Isso permite que você tenha proteção contra falhas de disco (RAID) e, ao mesmo tempo, possa redimensionar volumes, criar snapshots e migrar dados (LVM). Vamos construir um exemplo completo utilizando um RAID 5 de 3 discos como suporte para um Volume Group LVM.

Cenário: utilizar sdb, sdc, sdd para um RAID 5, criar o array /dev/md1, inicializá-lo como PV, criar um VG chamado vg_raid e, dentro dele, um LV de 6 GB chamado lv_corporativo.

# 1. Limpar discos (se necessário)
sudo wipefs -a /dev/sdb /dev/sdc /dev/sdd
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=100
sudo dd if=/dev/zero of=/dev/sdc bs=1M count=100
sudo dd if=/dev/zero of=/dev/sdd bs=1M count=100

# 2. Criar RAID 5
sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# 3. Aguardar sincronização
watch -n 1 cat /proc/mdstat  # Aguarde até aparecer [UUU]

# 4. Criar PV sobre o array RAID
sudo pvcreate /dev/md1

# 5. Criar VG
sudo vgcreate vg_raid /dev/md1

# 6. Criar LV de 6 GB
sudo lvcreate -n lv_corporativo -L 6G vg_raid

# 7. Formatar e montar
sudo mkfs.ext4 /dev/vg_raid/lv_corporativo
sudo mkdir -p /mnt/corporativo
sudo mount /dev/vg_raid/lv_corporativo /mnt/corporativo

# 8. Verificar a hierarquia
lsblk
NAME                       MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda                          8:0    0   20G  0 disk  
├─sda1                       8:1    0    1G  0 part  /boot
├─sda2                       8:2    0   18G  0 part  /
└─sda3                       8:3    0    1G  0 part  [SWAP]
sdb                          8:16   0    5G  0 disk  
└─md1                        9:1    0   10G  0 raid5 
  └─vg_raid-lv_corporativo 253:2    0    6G  0 lvm   /mnt/corporativo
sdc                          8:32   0    5G  0 disk  
└─md1                        9:1    0   10G  0 raid5 
  └─vg_raid-lv_corporativo 253:2    0    6G  0 lvm   /mnt/corporativo
sdd                          8:48   0    5G  0 disk  
└─md1                        9:1    0   10G  0 raid5 
  └─vg_raid-lv_corporativo 253:2    0    6G  0 lvm   /mnt/corporativo

Esta saída é a comprovação visual de que o LVM está operando sobre o RAID: os três discos físicos estão agrupados no array md1, e sobre ele repousa o volume lógico lv_corporativo. Se um dos discos falhar, o array RAID 5 continuará funcionando em modo degradado, e o LVM nem sequer perceberá a falha. Esta arquitetura é a espinha dorsal de servidores de arquivos e bancos de dados em produção ao redor do mundo.

Verificando a Instalação / Testando a Configuração

Após configurar todo o ecossistema de armazenamento, é essencial executar uma bateria de verificações para garantir que tudo está operando conforme o esperado. Os comandos abaixo devem ser executados em sequência e suas saídas comparadas com os exemplos fornecidos.

Verificação de integridade do LVM:

# Listar todos os PVs, VGs e LVs do sistema
sudo pvs
sudo vgs
sudo lvs
  PV         VG      Fmt  Attr PSize  PFree
  /dev/md1   vg_raid lvm2 a--  10.00g 4.00g

  VG      #PV #LV #SN Attr   VSize  VFree
  vg_dados  2   1   0 wz--n- 9.99g 1.99g
  vg_raid   1   1   0 wz--n- 10.00g 4.00g

  LV             VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_projetos    vg_dados -wi-ao---- 10.00g
  lv_corporativo vg_raid  -wi-ao---- 6.00g

Verificação detalhada do RAID:

# Verificar status do array
sudo mdadm --detail /dev/md1 | grep -E "State|Active|Failed"

# Verificar resumo no proc
cat /proc/mdstat
State : clean
Active Devices : 3
Failed Devices : 0

md1 : active raid5 sdd[3] sdc[1] sdb[0]
      10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

Verificação de montagem e uso de espaço:

# Verificar todos os pontos de montagem ativos
df -h | grep -E "lv_|md"

# Verificar se os volumes não têm erros no sistema de arquivos
sudo fsck -n /dev/vg_dados/lv_projetos
sudo fsck -n /dev/vg_raid/lv_corporativo
/dev/mapper/vg_dados-lv_projetos  9.8G   24K  9.3G   1% /mnt/projetos
/dev/mapper/vg_raid-lv_corporativo 5.9G   24K  5.6G   1% /mnt/corporativo

Se todas as saídas estiverem consistentes com os exemplos acima, sua configuração de armazenamento está saudável.

Erros Comuns e Como Resolver

Durante a prática de LVM, RAID e particionamento, alguns erros são recorrentes mesmo entre profissionais experientes. Listamos os quatro problemas mais frequentes que encontramos nos treinamentos da JRT Technology Solutions e como resolvê-los rapidamente.

  • Erro 1: “Device /dev/sdb excluded by a filter” ao executar pvcreate.
    Causa: O disco contém uma assinatura de RAID, LVM ou sistema de arquivos anterior que o LVM está rejeitando por segurança.
    Sintoma: O comando pvcreate falha com a mensagem de exclusão.
    Solução: Limpar as assinaturas com sudo wipefs -a /dev/sdb. Se o erro persistir, zerar os primeiros setores com sudo dd if=/dev/zero of=/dev/sdb bs=1M count=100 e tentar novamente.
  • Erro 2: Array RAID não inicia automaticamente após reboot, sumindo o /dev/mdX.
    Causa: O arquivo /etc/mdadm/mdadm.conf não foi atualizado com a configuração do array.
    Sintoma: Após reiniciar, lsblk não mostra o dispositivo mdX e as montagens listadas no /etc/fstab falham.
    Solução: Após criar o array, execute sudo mdadm –detail –scan | sudo tee -a /etc/mdadm/mdadm.conf e depois atualize o initramfs com sudo update-initramfs -u (Ubuntu) ou sudo dracut –force (Rocky Linux).
  • Erro 3: “resize2fs: New size too large to be expressed in 32 bits” ao expandir LV maior que 16 TB em ext4.
    Causa: Sistemas de arquivos ext4 com blocos de 1 KB não podem exceder 16 TB.
    Sintoma: O redimensionamento falha com essa mensagem.
    Solução: Reformate o volume com blocos maiores (ex: mkfs.ext4 -b 4096 /dev/vg/volume) ou migre para XFS, que não possui essa limitação.
  • Erro 4: “mdadm: superblock on /dev/sdb doesn’t match others” ao adicionar um disco substituto no RAID.
    Causa: O disco substituto ainda contém metadados de um array anterior ou não foi corretamente limpo.
    Sintoma: O comando mdadm –add falha com mensagem de superbloco não compatível.
    Solução: Limpar o disco substituto com <

Quer aprender na prática com especialistas?

A JRT Technology Solutions oferece treinamentos e implementação de Linux para equipes corporativas.



Falar no WhatsApp

Thiago Paes Rodrigues

Com mais de 22 anos de experiência em Tecnologia da Informação, este profissional construiu uma trajetória sólida como empresário, atuando de forma estratégica na implementação de soluções tecnológicas que otimizam processos e impulsionam resultados em diferentes setores.