Gerenciamento eficiente de dispositivos de bloco com LVM
Aprenda a gerenciar dispositivos de bloco com LVM neste guia prático e prático.
LVM ou Logical Volume Management é uma solução para fácil gerenciamento de dispositivos de bloco dentro do ambiente GNU/Linux por meio de blocos virtuais. O gerenciamento de disco em ambientes Linux usando LVM fornece uma visão de alto nível da estrutura dos discos presentes em um sistema. Isso proporciona muito mais flexibilidade na alocação de armazenamento para aplicativos e usuários. Os volumes criados usando LVM podem ser redimensionados e movidos quase à vontade.
Neste tutorial detalhado, você aprenderá como gerenciar dispositivos de bloco com eficiência usando LVM.
Vou guiá-lo através do processo passo a passo de
Instalando LVM
-
Criando LV linear e listrado
Resolvendo problema de disco cheio
Removendo LV.
Antes de ver isso, vamos examinar rapidamente o conceito básico do LVM.
Noções básicas de LVM
Todo mundo que formatou um disco no ambiente Linux sabe que isso envolve certas etapas e limitações, como o número de partições virtuais e estendidas. Além disso, se você criar o particionamento errado, terá problemas.
Por exemplo, se você deixou pouco espaço para /var/log, seus serviços web serão interrompidos se ficar sem espaço em disco.
E qual seria a solução? Adicione outro disco, formate, particione e depois mova seu /var/log para esse local. Isso dá muito trabalho, mas resolve o problema. Agora imagine se isso acontecesse com partições mais importantes como o caminho do banco de dados do PostgreSQL (/var/lib/postgresql/XX/main), seu MongoDB (/var/ lib/mongo) ou MySQL (/var/lib/mysql).
A vantagem do LVM é justamente o gerenciamento desses dispositivos de bloco de forma mais inteligente que permite facilidades como expansão de disco.
Basicamente, você pega os dispositivos de bloco, que podem ser – HDDs, SSDs ou NVMes e os agrupa em grupos de volumes que posteriormente são consumidos em volumes lógicos.
Portanto, na arquitetura LVM temos 3 elementos importantes, PV, VG e LV ligados a sistemas de arquivos:
PV: Volume Físico, volume físico ou nosso disco rígido sem ser particionado.
VG: Grupo de Volumes, grupo de volumes ou conjunto de PVs.
LV: Volume Lógico, volume lógico, ou seja, nossa partição.
Nessa estrutura, o LV acaba sendo algo parecido com a partição que você teria em um disco rígido. Mas neste caso faz parte de uma estrutura que pode envolver um ou mais discos.
Na ordem de criação você deve seguir esta mesma sequência, criar seus PVs, agrupá-los em um ou mais VGs e por fim criar os LVs.
LVs lineares e listrados
Dentro do LVM, você tem duas formas de consumir discos, ou PVs, uma Linear e outra Striped.
O formato linear faz com que os discos que fazem parte de um VG sejam consumidos um por um. Digamos que se eu tivesse dois discos de 1 TiB, primeiro todo o 1 TiB do primeiro disco seria consumido e só então ele começaria a utilizar o segundo disco.
O formato striped possui a distribuição dos dados entre os dois discos, levando a um melhor aproveitamento do recurso e aumentando os IOPs (operações de entrada/saída por segundo), uma métrica muito importante de desempenho do disco.
Criando o Laboratório LVM
Vamos explorar um pouco do LVM sujando as mãos. Crie uma máquina virtual e adicione 3 discos extras além do disco principal.
No VirtualBox, deve ser algo semelhante à imagem a seguir:
Se você estiver em um ambiente Linux com Vagrant e VirtualBox instalados, você pode usar o Vagrantfile abaixo para criá-lo de uma só vez:
Vagrant.configure("2") do |config|
config.vm.box = "centos/8"
config.vm.network "private_network", ip: "192.168.100.10"
config.vm.disk :disk, name: "disk01", size: "100MB"
config.vm.disk :disk, name: "disk02", size: "100MB"
config.vm.disk :disk, name: "disk03", size: "100MB"
config.vm.provider "virtualbox" do|vb|
vb.cpus = "1"
vb.memory = "512"
end
end
Neste tutorial, você está usando o sinalizador experimental para ativar o recurso extra de criação de disco. Para fazer o mesmo em seu terminal, exporte a variável VAGRANT_EXPERIMENTAL="disks"
antes de iniciar a máquina.
Depois de ter a máquina funcionando, acesse seu terminal e como usuário root, identifique se os discos estão presentes com o comando lsblk:
Os três discos sdb, sdc e sdd serão usados para criar o LVM no meu caso.
Instalando LVM
A instalação do LVM é muito simples e consiste basicamente na instalação do pacote lvm2
presente na maioria das distribuições Linux.
Como estou usando Centos, usarei dnf para instalação.
dnf install -y lvm2
Assim que terminar de instalar o LVM, os seguintes utilitários estarão disponíveis no terminal:
Criando o primeiro volume lógico
Como já mencionado, para criar o LV, primeiro é necessário criar o PV e o VG. Portanto, comece criando o PV para cada disco extra presente em nosso sistema.
pvcreate /dev/sdd /dev/sdc /dev/sdb
É possível visualizar esses PVs através de dois comandos: pvs e pvdisplay:
Agora crie o VG agrupando esses HDs em um único grupo. Para fazer isso, use o comando vgcreate:
vgcreate /dev/sdb /dev/sdc /dev/sdd
Verifique os grupos de volumes usando os comandos vgs e vgdisplay:
Basicamente, neste ponto, o Grupo de Volumes, vg01, atua como um grande dispositivo de bloco que será dividido em LVs que se comportam como partições. Ao criar LVs, você precisa especificar seu nome e tamanho:
lvcreate -L 50Mib -n lv_var_log vg01
Dos parâmetros informados, você tem:
-L 50MiB: Determina o tamanho do espaço que será criado, neste caso 50MiB.
-n lv_var_log: Este é o nome dado ao LVM.< br>vg01: O Grupo de Volumes que será usado para criar este LV.
Neste caso, como não foi especificada a forma de consumo, fica com o padrão Linear.
Agora você pode formatar esta partição e montá-la para seu uso, mas primeiro vamos visualizar o novo disco que está no caminho /dev/vg01/lv_var_log.
Use os comandos lvs e lvdisplay e você poderá ver seu formato Linear via dmsetup, um utilitário de gerenciamento de disco de baixo nível.
Formatar e usar a partição é muito simples. Use o comando mkfs.xfs e posteriormente você poderá montar este LVM com o comando mount.
Resolvendo o problema de ‘disco cheio’ no LVM
Agora que você tem um diretório montado, vamos simular o famoso problema inicial de disco cheio.
Primeiro, consuma seus 50 MiB de espaço. Você pode usar o comando dd para essa finalidade.
dd if=/dev/urandom of=/mnt/var_log/large_file bs=1MiB count=50
Neste comando, você tem os seguintes parâmetros:
if=/dev/random: dispositivo de caractere para arquivo de entrada
of=/mnt/var_log/large_file: arquivo de saída
bs=1MiB: quantidade de dados para leitura/gravação por vez
count=50: Número de blocos que serão escritos
Você lerá e escreverá 1 MiB por vez, 50 vezes, tentando gerar um arquivo de 50 MiB. Você encontrará imediatamente o seguinte problema:
Isso indica que você não tem mais espaço em disco. Ao contrário de uma instalação sem LVM onde seria necessário adicionar outro disco para resolver este problema, com LVM você simplesmente expandirá seu lv_var_log com o comando lvextend:
lvextend -L +50MiB vg01/lv_var_log
Os argumentos são semelhantes a lvcreate, mas neste caso. você adicionará mais espaço em disco, daí +50MiB.
Isto por si só não resolverá o problema. Você precisa informar aos Sistemas de Arquivos que ele deve usar este espaço. Utilize xfs_growfs:
vxfs_growfs /mnt/var_log
Isso resolverá o problema de espaço em disco e você poderá criar seu arquivo. Usando o próprio lvs, você pode verificar quais discos estão sendo usados para servir este LV:
lvs vg01 -o +devices
Aqui, você está adicionando a saída dos dispositivos à saída lvs.
Criando um volume lógico distribuído
Conforme mencionado, o LV striped utilizará a distribuição de dados por um grupo de discos, aproveitando melhor o espaço e permitindo maiores IOPs.
Para criar um LV listrado, use o mesmo lvcreate, mas agora com o parâmetro --stripes 2:
lvcreate -L 50MiB -n lv_striped --stripes 2 vg01
Olhando os discos via dmsetup, você verá que o formato utilizado é striped, indicando que os dados foram distribuídos. Você também pode visualizá-lo via lvs como já mencionado.
Removendo LV
Remover um volume lógico é simples. Basta usar o comando lvremove e inserir o LV que deseja remover próximo ao VG:
lvremove vg01/lv_striped
Palavras Finais
LVM é um poderoso aliado no gerenciamento de disco. Embora a maioria das tecnologias de nuvem não use o LVM diretamente, elas ainda usam alguma variante do LVM, como o cLVM, para soluções de cluster.
Compreender como usar o LVM não apenas aprimora sua capacidade de gerenciar recursos de disco de maneira eficaz, mas também estabelece uma base sólida para a compreensão de conceitos mais avançados, como cLVM, que são essenciais em soluções de cluster complexas.