1. LVM
LVM significa “Logic Volume Manager”, em português “Gerenciador de volume lógico”, ele gerencia discos e dispositivos de armazenamento em massa. No LVM um volume é o equivalente a uma partição de um disco.
1.1 Usos do LVM
O LVM é muito utilizado em servidores linux por oferecer uma capacidade de ajuste dinâmico de seus volumes.
Se você por exemplo que refazer o desenho de partições de um disco, no método tradicional você precisaria fazer backup dos dados, apagar as partições, criar um novo layout de partições, formatar as partições, reinstalar o sistema operacional e depois ainda fazer o restore dos dados, algo chato e demorado.
Se você utilizar LVM estará administrando seu armazenamento em uma camada de abstração, você trabalhará com volumes físicos (PV), grupos de volumes (VG) e volumes lógicos (LV), guarde esses nomes.
Quando você cria uma partição do disco destinada a uso via LVM esta partição será um PV (Physical Volume), e fará parte de algum VG (Volume Group), já os LV são ‘fatias’ de algum VG.
Um VG pode ser criado com um ou mais PVs e o LVM lhe permite adicionar outros PVs a um VG para aumentar a capacidade de armazenamento quando for necessário.
Imagine um VG como se fosse um grande dispositivo de armazenamento composto por vários PVs, a capacidade total de armazenamento de um VG é a soma da capacidade dos PVs associados a ele.
LVs (Logical Volumes) são fatias do seu VG (volume group), imagine que você tem um VG com capacidade de 100 GB, você pode ter 10 LVs de 10GB ou dois LVs de 50GB, isso é configurável, para o sistema operacional linux, um LV equivale a uma partição de um disco, pode ser formatada e montada da mesma forma que uma partição de um disco comum.
A grande vantagem do LVM é que você pode redimensionar VGs e LVs, aumentando ou diminuindo seu tamanho, e se estiver utilizando um sistema de arquivos que suporte resize, algo como ext3 ou ext4, poderá também aumentar e diminuir o sistema de arquivos sem precisar reconstruir todas as partições e reinstalar seu ambiente.
1.2 Vantagens
Se o seu /var está quase cheio, e se você estiver utilizando LVM, bastará adicionar um novo PV (Physical Volume) ao VG (Volume Group) que possui o LV (Logical Volume) utilizado para o o ponto de montagem /VAR, após aumentar a capacidade do VG, você poderá com poucos comandos – em poucos minutos – aumentar o tamanho do /var sem grandes impactos em seu ambiente.
Especificamente para aumentar ou diminuir o /var, será necessário parar a máquina, mas dependendo da partição não será preciso.
Você pode também diminuir um LV que não esteja usando muito espaço para aumentar outro que esteja precisando de espaço, desde que estejam no mesmo VG.
O LVM torna a administração de partições algo muito flexível.
1.3 Desvantagens
Um VG é composto por PVs, se um PV quebrar você perde o VG e os LVs, isso pode ser um grande problema, portanto, é importante ter confiança nos discos envolvidos em um ambiente LVM.
Se possível é interessante utilizar RAID para poder perder um ou mais discos de um LVM sem perder seu VG inteiro.
Há quem diga também que por ser uma camada a mais em seu ambiente, haverá perda de performance em relação a gravação e leitura em um PV, contudo, acho que isso é imperceptível na grande maioria dos ambientes.
Normalmente o LVM versão 2 já vem instalado na maioria das distribuições linux, em Debian e CentOS está disponível desde a instalação.
2. Mão na massa
Vamos aprender a trabalhar com LVM, no estilo dicas rápidas.
2.1 Criando partição LVM
Vamos particionar o disco sdb como exemplo
fdisk /dev/sdb
Acesse a ajuda
Command (m for help): m
Acompanhe a saída
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Vamos criar uma nova partição
Command (m for help): n
Escolha o tipo de partição
1 2 3 |
|
Eu escolhi primária, as quatro primeiras partições de um disco podem ser primárias, se você pretende ter mais de quatro partições, crie 3 primárias e uma extendida.
Select (default p): p
Esta será a primeira partição
Partition number (1-4, default 1): 1
Agora o fdisk me pergunta em qual setor essa partição deve começar e depois ele também pergunta o tamanho, eu vou dar ENTER e depois ENTER para usar todo o disco a partir do primeiro setor.
1 2 3 4 |
|
Agora vou imprimir as partições
Command (m for help): p
Acompanhe a saída
1 2 3 4 5 6 7 8 9 |
|
Veja que uma partição foi criada, agora vamos definir o tipo da partição, veja os tipos disponíveis
command (m for help): l
Acompanhe a saída
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Agora vamos definir o tipo da partição
Command (m for help): t
Escolha LVM (tipo 8e)
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Vamos imprimir novamente a tabela de partições do disco
command (m for help): p
Acompanhe a saída
1 2 3 4 5 6 7 8 9 |
|
Ótimo, tudo certo, agora vamos gravar essa configuração no disco
Command (m for help): w
Acompanhe a saída
1 2 3 4 |
|
Agora já podemos sair do fdisk
Command (m for help): q
Pronto, para ter certeza que está tudo certo rode o comando abaixo
fdisk -l /dev/sdb
Acompanhe a saída
1 2 3 4 5 6 7 8 9 |
|
Veja que a partição sdb1 foi criada corretamente
2.2 Criando PV
Agora que já temos uma partição LVM, podemos criar um volume físico (PV)
pvcreate /dev/sdb1
Vamos checar os PVs
pvscan
Veja detalhes dos PVs
pvdisplay
Acompanhe a saída
1 2 3 4 5 6 7 8 9 10 11 |
|
Beleza, agora podemos criar um VG
2.3 Criando VG
Depois de criar os volumes físicos, podemos criar os grupos de volume
vgcreate fileserver /dev/sdb1
Verifique os VGs existentes
vgscan
Veja detalhes dos VGs
vgdisplay
Acompanhe a saída
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
2.4 Adicionando PV a VG
Se você quer expandir o seu VG adicionando outra partição use o comando abaixo
vgextend fileserver /dev/sdc1
2.5 Criando LV
Agora que temos um grupo de volumes, vamos criar um volume lógico
lvcreate --name public --size 40G fileserver
Verique os LVs
lvscan
Veja detalhes dos LVs
lvdisplay
Acompanhe a saída
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
2.6 Formatando a partição
Depois de criar o LV já podemos formatá-lo
mkfs.ext4 /dev/mapper/fileserver-public
2.7 Montando a partição
mkdir /srv/public
mount /dev/mapper/fileserver-public /srv/public
2.8 Configurando fstab
Verifique o identificador único das partições
blkid /dev/sdb1
Acompanhe a saída
/dev/mapper/fileserver-public: UUID="811782cc-ddc3-43ca-8ba8-f67efa80f229" TYPE="ext4"
No fstab insira a seguinte linha
UUID=811782cc-ddc3-43ca-8ba8-f67efa80f229 /srv/public ext4 defaults 0 1
2.9 Aumentando LV (ext4)
Desmonte a partição
umount /srv/public
Vamos estender o volume lógico adicionando mais 114 GB ao LV
lvextend -L +114GB /dev/mapper/fileserver-public
Acompanhe a saída
1 2 |
|
E depois vamos passar o e2fsck para o verificar o LV
e2fsck -f /dev/mapper/fileserver-public
Agora vamos aumentar a partição ext4
resize2fs -p /dev/mapper/fileserver-public
Rode novamente o e2fsck para checar a partição que fora estendida
e2fsck -f /dev/mapper/fileserver-public
Monte a nova partição
mount /srv/public
Pronto, partição estendida.
2.10 Diminuindo LV (ext4)
Desmonte o filesystem
umount /srv/public
Antes de prosseguir verifique a partição
e2fsck -f /dev/mapper/fileserver-public
Diminua o LV em 40GB
resize2fs -p /dev/mapper/fileserver-public 40G
Diminua a partição ext4 em 40 gigas
lvreduce -L 40G /dev/mapper/fileserver-public
Verifique a partição
e2fsck -f /dev/mapper/fileserver-public
Rode mais uma vez o o resize para se certificar que partição vai ficar do mesmo tamanho do LV
resize2fs -p /dev/mapper/fileserver-public
Verifique a partição
e2fsck -f /dev/mapper/fileserver-public
Monte a partição
mount /srv/public
Pronto.