Imagine o cenário onde você tenha um servidor com um pequeno disco de 146GB rodando o seu sistema sobre o Linux, você precisa adicionar outros discos que embora sejam independentes daquele primeiro devem ser unidos para formar um volume maior. Digamos que cada disco novo tenha 1TB e você precise de 2TB para armazenar todos os dados que sua aplicação precisa trabalhar e ainda há a previsão que em algum tempo você precisará expandir para 3TB ou mesmo 4TB. A solução para o caso é adicionar estes discos e configura-los com LVM.
Já se foi o tempo que associávamos Terabyte de dados a storages caros e infraestrutura de rede complexas. Discos com 1TB e até maiores estão baratos hoje em dia então caso a sua empresa precise armazenar um conjunto mais avantajado de informações, uma solução razoavelmente boa é adquirir estes discos e configurá-los no seu servidor atual.
Claro que não estou levando em conta questões de segurança como RAID, redundância, balanceamento, failover, backup etc. Se isso for importante para você, e creio que seja para qualquer um que pretenda salvar qualquer informação no seu computador, então você deveria considerar estas questões antes de se preocupar com o LVM em si.
Mas partindo do pressuposto que estas questões sejam irrelevantes para você, não me convém discutir sobre isso então segue o passo a passo para criar o seu volume com LVM. Mesmo porque você pode seguramente usar o LVM sobre diversas LUNs em um storage SAN Fibrechannel, iSCSI, ou DAS etc.
Particionando os discos
Considerando que os discos já estejam sendo reconhecidos pelo seu servidor e você possa acessá-los a partir de /dev, a primeira ação a fazer é particioná-los como um volume LVM. Com os discos vazios crie uma partição do tipo “LVM ou 0x8e” que ocupe todo o seu tamanho.
Lembre-se que você precisa executar estes comandos como root, em todos os discos que serão incorporados ao LVM e tenha muito cuidado para não apagar as partições do disco principal do seu servidor causando a perda total de dados.
Usando o CFDISK
Um procedimento básico usando a ferramenta cfdisk pode ser vista abaixo, mas observe que foi usado todo o disco e que já estava vazio. Troque o “sdb” na chamada do comando pelo identificador correto do disco a ser configurado.
cfdisk /dev/sdb [NOVA] [PRIMÁRIA] Tamanho total<ENTER> [TIPO] 8e<ENTER> [GRAVAR] Yes<ENTER> [SAIR]
Usando o FDISK
O fdisk é outro utilitário popular para criar partições, embora eu não seja muito fã dele, por achá-lo menos amigável, há quem o prefira, então se sua distribuição não possuir o cfdisk, o fdisk atende bem a função.
fdisk /dev/sdb -tecle [n] <-- NOVA PARTIÇÃO -tecle [p] <-- PARTIÇÃO PRIMÁRIA -tecle [1] <-- 1ª PARTIÇÃO -tecle [1] <-- 1º BLOCO DO DISCO -[ENTER] <-- TAMANHO MÁXIMO DISPONÍVEL -tecle [t] <-- TIPO -tecle [1] <-- 1ª PARTIÇÃO -digite [8e] <-- 8E = LVM -tecle [w] <--GRAVAR
Preparando os discos
Agora que os discos foram particionados eles devem ser “formatados” para o LVM. Isso é feito com o comando “pvcreate” que cria o “Physical Volume”, ou simplesmente prepara o volume físico.
Use o comando pvcreate uma vez para cada disco como nos exemplos abaixo:
pvcreate /dev/sdb1 pvcreate /dev/sdc1 . . . pvcreate /dev/sdi1
Agrupando os volumes
Com os discos físicos já formatados agora nós devemos agrupá-los, ou seja fazer com que o sistema os entenda como sendo uma coisa só. Assim você poderá criar volumes lógicos (o equivalente as partições) com tamanho maior que a capacidade de cada disco individual.
No exemplo abaixo eu estou criando um grupo de volumes chamado “Webserver” incluindo os discos “sdb, “sdc”, “sdd” e “sde”.
vgcreate Webserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Observe que foi indicado “sdb1”, ao invés de “sdb”, “sdc1” ao invés de “sdc” etc. Só para lembrar, nós criamos uma partição primária (fdisk ou cfdisk) em cada disco e ela é quem foi formatadas para uso pelo LVM, assim se você indicar “sdb” você receberá uma mensagem de erro.
Adicionando novos discos no grupo
Não se preocupe, caso você tenha esquecido de adicionar algum disco. A qualquer momento, mesmo com o sistema já em funcionamento e carregado de dados você poderá estender o grupo adicionando novos discos usando o comando “vgextend” (desde que eles já tenham sido particionados e formatados, é claro).
Por exemplo, para adicionar outros dois discos agora eu poderia fazer assim:
vgextend Webserver /dev/sdf1 /dev/sdg1
Criando os volumes lógicos
Se considerarmos que o grupo de volumes transformou nossos discos isolados em um “discão”, os volumes lógicos seriam o equivalente as tradicionais partições que já conhecemos. Assim se você precisava de um disco grande com 3 partições, usando LVM você teria um grupo de volumes com 3 volumes lógicos, se você usaria apenas uma partição, então só criará um volume lógico.
Para criar os seus volumes lógicos você usa o comando lvcreate que embora possua dezenas de parâmetros a forma básica dele atende a maioria das expectativas.
Nos dois exemplos abaixo estou criando dois volumes lógicos, onde o primeiro possui 500GB e o segundo usa 100% do espaço livre restante.
lvcreate Webserver --name webroot -L 500G lvcreate Webserver --name images -l 100%FREE
Note que paraindicar o tamanho em Mega, Giga, Tera, Peta etc você usa o parâmetro “-L” (maiúsculo), para indicar o percentual usa-se o parâmetro “-l” (L minúsculo).
Formatando e montando
Agora que os volumes lógicos estão criados você precisa formatá-los com o sistema de arquivos de sua preferência (EXT3, EXT4, REISERFS, JFS etc) e então montá-lo usando o comando mount, ou declarando no seu /etc/fstab.
O dispositivo será referenciado como /dev/GRUPO-DE-VOLUMES/VOLUME-LÓGICO, assim, para referenciar o volume “images” criado nos exemplos acima bastaria indicar /dev/Webserver/images. Só pra não perguntarem pelos exemplos ai vai:
mkfs.ext4 /dev/Webserver/webroot mkfs.ext4 /dev/Webserver/images
mkdir /mnt/images
mount /dev/Webserver/webroot /var/www mount /dev/Webserver/images /mnt/images
Mais simples que isso é impossível, certo ;).
Saudações.
Os artigos sobre LVM que você escreveu são muito bons.
Parabéns.
Obrigado, Wendell. Fico feliz em saber que lhe foi útil. abç.