Armazenando grandes volumes de dados com LVM

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 ;).

2 comentários em “Armazenando grandes volumes de dados com LVM”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.