Introdução ao LVM – Gerenciamento de Volumes Lógicos

Mudar de sistema operacional é algo que pode intimidar bastante aqueles que estão conhecendo o Linux agora. Embora ele seja bem parecido com outros sistemas operacionais baseados no UNIX, como o BSD, o Solaris e o OS X, ele é muito diferente do Windows. Hoje em dia a maioria das distribuições é muito fácil de usar e (seja isso bom ou ruim) abstrai o sistema complexo e poderoso que há por baixo do capô. Com isso as distribuições se tornam fáceis de usar, e os usuários muitas vezes sabem pouco sobre o sistema em si. Hoje vamos dar uma olhada no LVM – Gerenciamento de Unidades Lógicas, que oferece aos usuários a capacidade de redimensionar partições enquanto elas estão em uso.

Primeiro, algumas informações sobre HDs e partições. O HD é onde todos os seus dados são armazenados permanentemente. Não confunda com a memória do sistema, usada para armazenar informações temporariamente como ocorre quando você executa aplicativos ou cria arquivos. Quem vem do Windows deve conhecer as letras de unidades usadas pelo sistema, como C: e D: (unidades C e D). A maioria dos usuários sabe que seus arquivos estão ali, mas nem todos sabem o que é o C:. Para armazenar informações no disco rígido, o computador precisa saber como ler e escrever dados nele. É preciso dizer ao computador em quais áreas do HD ele pode escrever. Essas áreas são as partições. O disco pode ser todo ocupado por uma única partição ou ser dividido em várias partições menores. O computador também precisa saber como armazenar os dados em cada partição, e isso é feito com a criação de um sistema de arquivos nela. O Linux tem vários sistemas de arquivos excelentes para você escolher, incluindo (dentre outros) ReiserFS, XFS, JFS, Btrfs, ext2, ext3 e agora o ext4. O Windows geralmente usa os sistemas de arquivo NTFS e FAT32, enquanto o OS X usa o HFS+. A maioria dos dispositivos para o consumidor, como cartões de memória, vem formatada em FAT32.

As informações sobre as partições são armazenadas no próprio HD, no que chamamos de tabela de partições. A maioria dos computadores pessoais usa a tabela de partições do MSDOS, embora a Apple use a GPT, que é plenamente suportada pelo Linux. Por padrão, um HD vazio não tem tabela de partições, mas no primeiro particionamento uma tabela é criada. Há muitas ferramentas que você pode usar para particionar suas unidades no Linux, como o fdisk, o parted e sua interface gráfica, o GParted. No Linux, todos os dispositivos respondem por um arquivo no diretório /dev. O primeiro terminal, por exemplo, é o /dev/tty0. Os nomes de HDs convencionais são relativos à sua posição no subsistema do computador. Por exemplo, /dev/hda refere-se ao disco master na porta IDE primária da placa-mãe. Hoje em dia a maioria dos computadores usa controladoras SATA, logo, a primeira unidade geralmente é /dev/sda. Cada partição da unidade recebe um número. A primeira partição primária é a número 1, a segundo é a número 2, e por aí vai. A tabela de partições do MSDOS suporta apenas um máximo de quatro partições (que chamamos de primárias), mas suporta um tipo de partição que chamamos de “estendida”. As partições estendidas permitem a criação de um número ilimitado de partições extras (as partições lógicas), que no Linux começam sempre na quinta partição. Com base no número da partição, é possível dizer onde se encontram as partições em relação às outras partições do disco.

Em termos de sistema de arquivos, o Linux usa uma hierarquia onde tudo fica abaixo do diretório / (root, ou raiz). Ao instalar uma distribuição, você deve criar ao menos uma partição, que será usada como o sistema de arquivos root. Se você veio do Windows, pode considerar o root mais ou menos (BEM mais ou menos) como se fosse a unidade C. Muitas distribuições Linux criam apenas uma partição para todos os dados. Segue abaixo um exemplo das informações sobre as partições de um HD. É uma unidade de 8 GB (/dev/sde) com uma única partição (/dev/sde1) do tipo “Linux”.

gparted-single-partition-small

GParted – partição única

Para ter acesso aos dados desse dispositivo, é preciso atribuir um ponto de montagem a ele. Um ponto de montagem é um diretório do computador que o Linux associa a uma partição. Tudo o que for gravado nesse ponto de montagem será gravado fisicamente na partição à qual ele corresponde. O dispositivo /dev/sde1 está montado em /media/Linux, como se pode ver na foto.

gparted-mounted-partition-small

Partição montada em /media/Linux

Estamos todos razoavelmente familiarizados com esse conceito quando usamos mídias removíveis, como memory sticks, mas isso também pode ser aplicado a todo o sistema. Uma das grandes vantagens de se usar um sistema hierárquico desses é que é possível atribuir partições extras a diretórios mais baixos para preservar seus dados. O Linux precisa no mínimo de uma partição root (/), mas você pode criar uma segunda partição para pastas como /home, onde todos os dados dos usuários são armazenados. E por que você criaria uma partição separada só para isso? Bom, se for preciso reinstalar sua distribuição Linux por algum motivo, não será preciso fazer backup dos dados, bastando limpar a primeira partição e montar a segunda como /home, sem formatá-la. Feito isso, todos os dados e configurações permanecerão exatamente como eram! Eis um exemplo de HD com uma partição para / e outra para /home.

gparted-dual-partitions-small

GParted – duas partições

Esse excelente recurso é muito útil, mas como saber quanto espaço atribuir às partições? E se você ficar sem espaço depois? Você poderia excluir dados ou movê-los para outras partições, mas há uma maneira muito mais poderosa e flexível. Chama-se LVM – Gerenciamento de Volumes Lógicos O LVM é uma maneira de criar, excluir, redimensionar e expandir partições do computador. Ele é ótimo não apenas para servidores, mas também para desktops! Como o LVM funciona? Ao invés de abrigar as informações sobre as partições na tabela de partições, o LVM escreve suas próprias informações em separado e mantém o controle sobre a localização das partições, quais dispositivos são partes delas e o tamanho de cada uma. Com ele você pode ter uma partição root e outra partição home, mas se ficar sem espaço é só dizer ao LVM para expandir a partição desejada e pronto, você terá mais espaço disponível. E você ainda pode adicionar outros discos rígidos ao sistema e dizer ao LVM para incluí-los também! Resumindo, você nunca mais vai ficar sem espaço 🙂

A maioria das distribuições Linux modernas suportam dispositivos LVM durante a instalação, e boa parte desse processo é gerenciada automaticamente. Nos exemplos acima temos uma partição do tipo Linux, que é formatada com um sistema de arquivos e montada em um diretório do sistema. Bem básico. Ao usar o LVM, defina o tipo de partição como Linux LVM e depois use as ferramentas em espaço de usuário para criar e gerenciar os dispositivos. É importante destacar que o GParted não tem suporte a partições LVM, logo, você terá que usar outras ferramentas. Se estiver usando o openSUSE, ele traz uma excelente ferramenta de gerenciamento para LVM como parte do YaST. Você vai precisar de um módulo do kernel, bem como de ferramentas em espaço de usuário. Instale tudo isso pela ferramenta de gerenciamento de pacotes do seu sistema. Segue um exemplo para o Debian.

# modprobe dm-mod ; apt-get install lvm2

Criação de dispositivos LVM

O LVM consiste em alguns elementos. Primeiro, é necessária uma partição física do tipo Linux LVMque será o volume físico do LVM. A seguir, nós criamos o grupo lógico ao qual atribuiremos a partição física. Depois criamos as partições individuais, chamadas de volumes lógicos. Vamos dar uma olhada nisso tudo como usuário root.

Etapa 1

Crie uma partição em um HD vazio e defina-a com o tipo LVM Linux (8e).

Observação: meu dispositivo é /dev/sde mas o seu provavelmente é diferente!
# fdisk /dev/sde
n
p
1
[Enter]
[Enter]
t
8e
w

O dispositivo deve aparecer mais ou menos assim.

# fdisk -l /dev/sdeDisk /dev/sde: 8040 MB, 8040480256 bytes
255 heads, 63 sectors/track, 977 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000bf9ae

Device Boot Start End Blocks Id System
/dev/sde1 1 977 7847721 8e Linux LVM

Aqui vemos uma única partição, do tipo LVM Linux (8e).

Etapa 2

Agora temos que dizer ao LVM para usar essa partição como volume físico.

# pvcreate /dev/sde1No physical volume label read from /dev/sde1
Physical volume “/dev/sde1” successfully created

This device has now been added to the LVM pool.

Etapa 3

Crie um grupo de volume no volume físico, que chamaremos de ‘sistema’.

# vgcreate system /dev/sde1
Volume group “system” successfully created

Etapa 4

Agora que criamos um volume físico e um grupo de volume, é hora de criar um volume lógico. Vamos criar um para o root (/) chamado linux e outro para a home.

# lvcreate -n linux -L 2G system
Logical volume “linux” created# lvcreate -n home -L 3G system
Logical volume “home” created

Pronto! Agora temos duas partições novas que podem ser formatadas como se fossem partições comuns. Se olharmos no diretório /dev veremos nossos novos dispositivos.

# ls -l /dev/system/
total 0
lrwxrwxrwx 1 root root 23 Mar 9 17:18 home -> /dev/mapper/system-home
lrwxrwxrwx 1 root root 24 Mar 9 17:17 linux -> /dev/mapper/system-linux

opensuse-yast-partitioner-lvm-small

Particionador do YaST do openSUSE com o LVM

Ferramentas para consulta

Antes de irmos em frente, vamos ver mais algumas ferramentas LVM para exibir o status dos nossos dispositivos. Lembre-se de que temos três componentes diferentes que compõem uma partição LVM completa, o volume físico (PV, ou Physical Volume), o grupo de volume (VG, ou Volume Group) e o volume lógico (LV, ou Logical Volume).

Vamos dar uma olhada no volume físico (PV).

# pvdisplay
— Physical volume —
PV Name /dev/sde1
VG Name system
PV Size 7.48 GB / not usable 3.79 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 1915
Free PE 1915
Allocated PE 0
PV UUID 7vkgGI-e402-K3hE-XGJz-kl4C-nI7o-oFqwA8

Aqui podemos ver o nome do volume físico (a partição física que criamos), o grupo de volume ao qual a partição foi atribuída (que chamamos de sistema) e outras informações relativas ao tamanho do volume.

Vamos dar uma olhada no grupo de volume (VG).

# vgdisplay
— Volume group —
VG Name system
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 7.48 GB
PE Size 4.00 MB
Total PE 1915
Alloc PE / Size 1280 / 5.00 GB
Free PE / Size 635 / 2.48 GB
VG UUID Z6TSXO-0DQ3-7Jiz-67k2-dEkY-dYR2-RNJE85

Aqui temos o nome do grupo de volume (que chamamos de sistema), seu tipo (lvm2), seu espaço total e o espaço que já foi atribuído (lembre-se de que criamos dois volumes lógicos, root e home).

Finalmente, vejamos o volume lógico (LV).

# lvdisplay
— Logical volume —
LV Name /dev/system/linux
VG Name system
LV UUID L0qrZu-bwCp-rnEu-uJry-4j3n-XBLB-OWsXVx
LV Write Access read/write
LV Status available
# open 0
LV Size 2.00 GB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0— Logical volume —
LV Name /dev/system/home
VG Name system
LV UUID AScHe0-q5sJ-F8eH-bYRy-3URL-Nt7m-0UFduW
LV Write Access read/write
LV Status available
# open 0
LV Size 3.00 GB
Current LE 768
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1

Aqui temos as duas partições que criamos, home e Linux. Observe que o volume físico (PV) e o grupo de volume (VG) também possuem um identificador único, que o Linux usa para detectar e controlar os dispositivos.

Formatação

Agora que temos nossas duas partições, podemos formatá-las como qualquer outro dispositivo físico.

# mke2fs /dev/system/linux -L linux
mke2fs 1.41.1 (01-Sep-2008)
Filesystem label=linux
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Elas também podem ser montadas como qualquer outro dispositivo.

Expansão de partições

Agora que está usando o LVM, se você ficar sem espaço em uma partição, só terá que dizer ao LVM para atribuir mais espaço ao dispositivo em particular e redimensionar o sistema de arquivos. Embora você possa encolher partições, é bem mais seguro aumentá-las. Por isso eu recomendo a você nunca atribuir o tamanho total do volume físico aos volumes lógicos, mas sim começar pequeno e ir aumentando conforme a necessidade. Se estiver usando um sistema de arquivos ext, isso pode ser feito mesmo com as partições montadas (alguns outros sistemas de arquivos também permitem fazer isso).

A situação atual é esta, com 100% de utilização.

# df -h
/dev/mapper/system-linux 2.0G 2.0G 0 100% /media/linux

Primeiro, aumente o volume lógico em 1 GB.

# lvresize -L +1G /dev/system/linux
Extending logical volume linux to 3.00 GB
Logical volume linux successfully resized

Agora que aumentamos o dispositivo, temos que redimensionar o sistema de arquivos

# resize2fs /dev/system/linux
Filesystem at /dev/system/linux is mounted on /media/linux; on-line resizing required
Resizing the filesystem on /dev/system/linux to 786432 (4k) blocks.
The filesystem on /dev/system/linux is now 786432 blocks long.

Depois de redimensionar o sistema de arquivos, eis o resultado.

# df -h
/dev/mapper/system-linux 3.0G 2.0G 855M 71% /media/linux

Se quiser adicionar outro HD ao computador, basta instalá-lo no computador e repetir as etapas 1 e 2. Como o grupo de volume já existe, não é preciso criá-lo como na etapa 3. Em vez disso, adicione-o ao grupo existente.

# vgextend system /dev/sdf1
Volume group “system” successfully extended

Agora você tem um disco inteiro novinho como espaço LVM adicional, pronto para ser atribuído a qualquer volume lógico que você quiser.
É assim que você pode usar o LVM para expandir e atribuir espaço na mesma hora, sem ter que mover dados ou desligar o computador!

Iniciando pelo LVM

É possível usar o LVM para o sistema inteiro. O único problema é que você vai precisar de uma partição adicional para o diretório /boot e vai ter que usar um disco de RAM inicial (initrd). A partição boot precisa de apenas 100 MB e irá armazenar o kernel do Linux e o initrd. O initrd vai abrigar as ferramentas em espaço de usuário para o LVM necessárias à detecção e ativação dos dispositivos LVM durante a inicialização, para que o resto do sistema seja carregado. O instalador da distribuição vai cuidar disso para você automaticamente.

Conclusão

Demos uma olhada “nos bastidores” do LVM, que é uma excelente maneira de obter controle extra sobre os HDs de um computador. Ele permite que os usuários expandam infinitamente suas partições individuais e que usem de maneira ideal todo o espaço disponível. O LVM tem muitos outros recursos, como criação de instantâneos (snapshots) e distribuição (striping). Os exemplos dados foram bastante focados na linha de comando, mas sua distribuição pode ter um gerenciador gráfico para facilitar as coisas. De qualquer maneira, uma boa maneira de testar o LVM é com uma máquina virtual, onde seus preciosos dados não correm risco.

Créditos a Chris Smartdistrowatch.com
Tradução por Roberto Bechtlufft <roberto at bechtranslations.com>

Rolar para cima