Gerênciamento avançado de discos com LVM

Infelizmente o assunto é bastante extenso, mas ao decorrer do tutorial vou sempre dar exemplos para tornar a leitura bastante didática e clara.

Vamos falar sobre uma ferramenta bastante difundida, o LVM, mas que as vezes por falta de informação acaba deixando de ser usada.

O LVM (Logical Volume Manager) é um “Gerênciador de Volumes Lógicos”, bastante flexivel, sua implementação no Linux segue os mesmos padrões (comandos) do HP-UX, então este tutorial servirá também para o HP-UX, visto a similaridade dos comandos.

Oque muda no HP-UX, é que pra saber quais são os discos usa o comando

  # /usr/sbin/ioscan -fC disk

Não pense que você não precisaria do LVM, por saber usar o “parted”, são coisas distintas, o LVM vai bem mais além do que simplesmente aumentar uma partição…

Quando começamos a instalação de um novo servidor, geralmente já temos em mente qual será a sua aplicação, a partir dessas informações, definimos quantos filesystems teremos, qual vai ser o tamanho deles, quantos discos etc…

Mas como nem tudo é perfeito, esse servidor pode ter depois um trafego maior do que o esperado, um numero de usuarios maior do que planejamos, enfim, são varias possibilidades que podem definitivamente te dar algum trabalho extra, de ter que aumentar uma partição, adcionar mais um disco, mas como fazer isso da melhor maneira possivel e sem traumas ?

A resposta está no LVM…

O objetivo deste tutorial é tornar mais facil o uso do LVM por usuários de todos os niveis, visto que o LVM vem se tornando um importante recurso na administração de servidores.

Antes de iniciar a parte prática, vamos entender alguns conceitos do LVM…

PV = Phisical Volume : O disco em si, a partição fisica do disco.

PE = Phisical Extends : Extensões fisicas, ou seja, pequenos pedaços de um VG, um VG é dividido em varios PEs

VG = Volume Group : Como o nome já diz, grupo de volumes. Um VG é responsavel por agrupar um ou mais dicos/Partições (PV – Volumes fisicos).

LV = Logical Volume : É o volume lógico, ou seja, é uma partição (lógica) de um VG (Volume físico).

Algumas observações importantes…

  • Para alterar um LVOL, você deve desmonta-lo antes.
  • NUNCA deixe de fazer backup (faça dois, cuidado nunca é demais) antes de alterar uma configuração de LVM.
  • Você pode ter mais de um VG em um mesmo sistema (VG01, VG02, VG03), cada qual com um ou mais discos…
  • Não misture discos SCSI/SATA/IDE em um mesmo VG, isso afeta a performance visto que eles tem velocidades diferentes, se você estiver nesta situação, faça VGs distintos para cada tipo.
  • NUNCA deixe de fazer backup (por via das dúvidas estou escrecendo novamente esta observação!).
  • Não tenha medo de usar LVM, ele já é usado a bastante em *nix e bastante seguro, você só tem a ganhar com sua utilização.

No exemplo abaixo usaremos um disco de 20GB para ilustrar…

Vamos criar varias partiçoes no mesmo disco para melhor ilustrar o uso de LVM, lembramos que no caso de vários discos você criaria uma partição por disco.

Criamos 4 partições no /dev/hdd

Saida do FDISK

  Disk /dev/hdd: 20.0 GB, 20060135424 bytes
  16 heads, 63 sectors/track, 38869 cylinders
  Units = cilindros of 1008 * 512 = 516096 bytes
  
  Dispositivo Boot      Start         End      Blocks   Id  System
  /dev/hdd1               1        9689     4883224+  83  Linux
  /dev/hdd2            9690       19378     4883256   83  Linux
  /dev/hdd3           19379       29067     4883256   83  Linux
  /dev/hdd4           29068       38756     4883256   83  Linux

Notem que elas estão com o “tipo” Linux (default do fdisk na hora d criação), prontas para receber o filesystem (ext2, ext3, reiserfs etc), mas não pra receberem LVM, precisamos alterar isso..

  
  
  [root@server root]# fdisk /dev/hdd

O número de cilindros para este disco está configurado para 38869. Não existe nada de errado, mas isto é maior que 1024, e pode em certas configurações causar problemas com: 1) programas que executam em tempo de inicialização (versões velhas do LILO) 2) inicialização e programas de particionamento de outros OSs (p.ex., DOS FDISK, OS/2 FDISK)

  Comando (m para ajuda): p
  
  Disk /dev/hdd: 20.0 GB, 20060135424 bytes
  16 heads, 63 sectors/track, 38869 cylinders
  Units = cilindros of 1008 * 512 = 516096 bytes
  
  Dispositivo Boot      Start         End      Blocks   Id  System
  /dev/hdd1               1        9689     4883224+  83  Linux
  /dev/hdd2            9690       19378     4883256   83  Linux
  /dev/hdd3           19379       29067     4883256   83  Linux
  /dev/hdd4           29068       38756     4883256   83  Linux
  
  Comando (m para ajuda): t
  Número da partição (1-4): 1
  Código hexadecimal (digite L para listar os códigos): 8e
  O tipo da partição 1 foi alterado para 8e (Linux LVM)
  
  Comando (m para ajuda): t
  Número da partição (1-4): 2
  Código hexadecimal (digite L para listar os códigos): 8e
  O tipo da partição 2 foi alterado para 8e (Linux LVM)
  
  Comando (m para ajuda): t
  Número da partição (1-4): 3
  Código hexadecimal (digite L para listar os códigos): 8e
  O tipo da partição 3 foi alterado para 8e (Linux LVM)
  
  Comando (m para ajuda): t
  Número da partição (1-4): 4
  Código hexadecimal (digite L para listar os códigos): 8e
  O tipo da partição 4 foi alterado para 8e (Linux LVM)
  
  Comando (m para ajuda): p
  
  Disk /dev/hdd: 20.0 GB, 20060135424 bytes
  16 heads, 63 sectors/track, 38869 cylinders
  Units = cilindros of 1008 * 512 = 516096 bytes
  
  Dispositivo Boot      Start         End      Blocks   Id  System
  /dev/hdd1               1        9689     4883224+  8e  Linux LVM
  /dev/hdd2            9690       19378     4883256   8e  Linux LVM
  /dev/hdd3           19379       29067     4883256   8e  Linux LVM
  /dev/hdd4           29068       38756     4883256   8e  Linux LVM
  
  Comando (m para ajuda): w
  A tabela de partições foi alterada!
  
  Chamando ioctl() para reler tabela de partições.
  Sincronizando discos.
  [root@server root]#
  
  </prompt>

Notem que alteramos o tipo da partição para “Linux LVM”. *Acima você pode notar como isso foi feito no fdisk, para maiores informações digite ‘h’ no fdisk ou consulte o manual.

Agora vamos dizer ao LVM oque (quais PVs) temos disponivel pra ele.

Criando os PVs.

  
  
  [root@server root]# pvcreate /dev/hdd1
    No physical volume label read from /dev/hdd1
    Physical volume "/dev/hdd1" successfully created
  [root@server root]# pvcreate /dev/hdd2
    No physical volume label read from /dev/hdd2
    Physical volume "/dev/hdd2" successfully created
  [root@server root]# pvcreate /dev/hdd3
    No physical volume label read from /dev/hdd3
    Physical volume "/dev/hdd3" successfully created
  [root@server root]# pvcreate /dev/hdd4
    No physical volume label read from /dev/hdd4
    Physical volume "/dev/hdd4" successfully created
  [root@server root]#
  
  </prompt>

Pronto, já mostramos para o LVM que ele tem 4 PVs disponiveis… Mas como sei se ele sabe disso ???

Use o comando.. #pvdisplay

  
  
  [root@server root]# pvdisplay
    --- NEW Physical volume ---
    PV Name               /dev/hdd1
    VG Name
    PV Size               4,66 GB
    Allocatable           NO
    PE Size (KByte)       0
    Total PE              0
    Free PE               0
    Allocated PE          0
    PV UUID               RiWHqR-gyYe-jlIQ-pjku-cdI8-cQ8M-Lkj2Y4
  
    --- NEW Physical volume ---
    PV Name               /dev/hdd2
    VG Name
    PV Size               4,66 GB
    Allocatable           NO
    PE Size (KByte)       0
    Total PE              0
    Free PE               0
    Allocated PE          0
    PV UUID               oEcEui-mhig-RF06-fBd5-opAK-1Psf-bV1FLp
  
    --- NEW Physical volume ---
    PV Name               /dev/hdd3
    VG Name
    PV Size               4,66 GB
    Allocatable           NO
    PE Size (KByte)       0
    Total PE              0
    Free PE               0
    Allocated PE          0
    PV UUID               SwPpNo-Q1NR-OYPU-Tkah-y3ps-GsRs-3W4pSG
  
    --- NEW Physical volume ---
    PV Name               /dev/hdd4
    VG Name
    PV Size               4,66 GB
    Allocatable           NO
    PE Size (KByte)       0
    Total PE              0
    Free PE               0
    Allocated PE          0
    PV UUID               BFGFCi-2rKb-As0v-ucBy-ghkn-y869-yXcIm0
  
  

Criamos 4 PVs (Phisical Volume) em um disco… *Vale lembrar que esses PVs podem (e é o comum) estarem em discos separados, estamos fazendo em um mesmo disco por não poder utilizar mais que um disco aqui (o servidor é de produção!). 😉

Vamos criar 2 VGs… cada um com 2 PVs, usando o comando #vgcreate

  
  
  [root@server root]# vgcreate VG01 /dev/hdd1 /dev/hdd2
    Volume group "VG01" successfully created
  [root@server root]# vgcreate VG02 /dev/hdd3 /dev/hdd4
    Volume group "VG02" successfully created
  [root@server root]#
  
  

Com o comando #vgcreate , criei 2 VGs, com o nome de VG01 e VG02 * O nome pode ser qualquer um, eu faço com VG01 e VG02, por ficar mais facil de identificar mas você pode criar por exemplo com nome ‘bancodedados’,’email’,’www’ e por ai vai…

Vamos verificar se os VGs foram criados com o comando #vgdisplay.

  
  
  [root@server root]# vgdisplay
    --- Volume group ---
    VG Name               VG02
    System ID
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  1
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                0
    Open LV               0
    Max PV                255
    Cur PV                2
    Act PV                2
    VG Size               9,31 GB
    PE Size               4,00 MB
    Total PE              2384
    Alloc PE / Size       0 / 0
    Free  PE / Size       2384 / 9,31 GB
    VG UUID               iWiIv6-L0FT-K0gV-JzJh-a8l5-1ouZ-H4r3yN
  
    --- Volume group ---
    VG Name               VG01
    System ID
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  1
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                0
    Open LV               0
    Max PV                255
    Cur PV                2
    Act PV                2
    VG Size               9,31 GB
    PE Size               4,00 MB
    Total PE              2384
    Alloc PE / Size       0 / 0
    Free  PE / Size       2384 / 9,31 GB
    VG UUID               B0o0rf-zvO1-uYT0-GW9L-kOez-H37z-0RzHIh
  
  

Podemos ver que realmente criamos 2 VG, cada um com 2 PV…

Vamos agora explicar algumas linhas (as mais importantes) da saida do comando #vgdisplay

  Nome do VG:
    VG Name               VG02
  
  Acesso:
    VG Access             read/write
  
  Status:
    VG Status             resizable
  
  Numero maximo de LVs (Logical Volume) :
    MAX LV                255
  
  Numero de LVs no VG :
    Cur LV                0
  
  Numero de LVs montados :
    Open LV               0
  
  Numero maximo de PVs no VG :
    Max PV                255
  
  Numero atual de PVs no VG :
    Cur PV                2
  
  Tamanho do VG em GB/MB :
    VG Size               9,31 GB
  
  Tamanho de cada PE no VG (padrão 4MB) :
    PE Size               4,00 MB
  
  Quantidade de PEs no VG. (multiplique este numero por 4 para saber o
  tamanho do VG) :
    Total PE              2384
  
  Numero de PEs alocados :
    Alloc PE / Size       0 / 0
  
  Numero de PEs livres :
    Free  PE / Size       2384 / 9,31 GB

Acima explicamos a saida do #vgdisplay, atentem bastante para os valores em PE, que geralmente são os mais importantes.

Agora que já temos os VGs, temos que criar os LVs (LVOL), vamos utilizar o comando #lvcreate.

  
  
  [root@server root]# lvcreate -l 1000 -n LV01 VG01
    Logical volume "LV01" created
  
  
  
  Para verificar oque você fez, use o comando #lvdisplay
  Explicando o comando...
  
  lvcreate -l <numero de PEs> -n <nome do LV> <Nome do VG que você quer
  criar o LV>

Dica : Você também pode usar o L (Maiúsculo) para determinar o tamanho em MB, para maiores informações #man lvcreate .

  
  
  [root@server root]# lvdisplay
    --- Logical volume ---
    LV Name                /dev/VG01/LV01
    VG Name                VG01
    LV UUID                rQw1cG-jppl-TSJj-1wVw-8kud-oE5L-Jr1c46
    LV Write Access        read/write
    LV Status              available
    # open                 0
    LV Size                3,91 GB
    Current LE             1000
    Segments               1
    Allocation             next free (default)
    Read ahead sectors     0
    Block device           253:0
  
  

Criamos um LV com 3.91GB, mas como se eu não informei o tamanho ? Informamos sim o tamanho, mas em PE, e vamos lembrar que cada PE equivale a 4MB…

Logo 1000 x 4 = 4gb , que em miudos deu 3.91GB.

Só a titulo de curiosidade, vou novamente executar o comando vgdisplay, para ver oque mudou…

  
  
  [root@server root]# vgdisplay VG01
    --- Volume group ---
    VG Name               VG01
    System ID
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  2
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                1
    Open LV               0
    Max PV                255
    Cur PV                2
    Act PV                2
    VG Size               9,31 GB
    PE Size               4,00 MB
    Total PE              2384
    Alloc PE / Size       1000 / 3,91 GB
    Free  PE / Size       1384 / 5,41 GB
    VG UUID               B0o0rf-zvO1-uYT0-GW9L-kOez-H37z-0RzHIh
  
  

Notem as linhas:

  Cur LV                1
  
  Alloc PE / Size       1000 / 3,91 GB
  Free  PE / Size       1384 / 5,41 GB

Dispensa explicações, visto que já falamos sobre o assunto um pouco acima… Dica : Use o comando #vgdisplay com a opção ‘-v’ para ter maiores informações sobre o VG.

Já criamos um VG, um LV mas ainda não estamos utilizando eles. Agora basta formatar o mesmo com o filesystem desejado e começar a utilizar.

Por exemplo, vamos formatar ele com ext2.

Vamos formatar onde ? /dev/hdd1, /dev/hdd2 ??? Não..! Lembra do comando lvdisplay, lá temos o local que devemos usar agora, que nada mais é do que uma partição (lógica) do LVM.

Vamos formatar este com o sistema de arquivos ext2.

Ele está em /dev/<nome_do_VG>/<nome_do_LV>

  
  
  [root@server root]# mke2fs /dev/VG01/LV01
  mke2fs 1.35 (28-Feb-2004)
  Filesystem label=
  OS type: Linux
  Block size=4096 (log=2)
  Fragment size=4096 (log=2)
  768544 inodes, 1536000 blocks
  76800 blocks (5.00%) reserved for the super user
  First data block=0
  47 block groups
  32768 blocks per group, 32768 fragments per group
  16352 inodes per group
  Superblock backups stored on blocks:
          32768, 98304, 163840, 229376, 294912, 819200, 884736
  
  Writing inode tables: done
  Writing superblocks and filesystem accounting information:
  done
  
  This filesystem will be automatically checked every 25 mounts or
  180 days, whichever comes first.  Use tune2fs -c or -i to override.
  
  

Agora vamos montar o sistema de arquivos….

  
  
  [root@server root]# mkdir /LVM1
  
  [root@server root]# mount /dev/VG01/LV01 /LVM1
  
  [root@server root]# df -h
  Sist. Arq.            Tam   Usad Disp  Uso% Montado em
  /dev/hda2              28G   16G   10G  62% /
  /dev/hda1             145M  5,9M  132M   5% /boot
  none                  507M     0  507M   0% /dev/shm
  /dev/mapper/VG01-LV01
                        3,9G   33M  3,7G   1% /LVM1
  
  

Pronto, o seu LVM está pronto pra usar… Mas ainda não conseguimos ver a principal utilidade do LVM com os exemplos acima.. A principal utilidade do LVM é que você pode aumentar ou diminuir seu LV…

Como exemplo vamos aumentar o nosso primeiro LV.

Ele tem 3.9GB

Usaremos o comando #lvextend

  
  
  [root@server root]# umount /LVM1
  
  [root@server root]# lvextend -l+500 /dev/VG01/LV01
    Extending logical volume LV01 to 5,86 GB
    Logical volume LV01 successfully resized
  
  [root@server root]# mount /dev/VG01/LV01 /LVM1/
  [root@server root]# df -h
  Sist. Arq.            Tam   Usad Disp  Uso% Montado em
  /dev/hda2              28G   16G   10G  62% /
  /dev/hda1             145M  5,9M  132M   5% /boot
  none                  507M     0  507M   0% /dev/shm
  /dev/mapper/VG01-LV01
                        5,8G   20K  5,5G   1% /LVM1
  
  

Aumentamos o nosso LV01 em mais 500 PEs, totalizando agora 5,86GB (antes 3,9GB). Mas não aumentamos ainda o sistema de arquivos nos novos PEs..

Para isso usaremos o #resize2fs.

Desmonte o seu LV antes.

  
  
  [root@server root]# umount /LVM1
  
  [root@server root]# resize2fs /dev/VG01/LV01
  resize2fs 1.35 (28-Feb-2004)
  The filesystem is already 1536000 blocks long.  Nothing to do!
  
  

Nota.. Para sistemas de arquivos reiserfs, utilize o comando #resize_reiserfs

Pronto, agora já aumentamos um determinado LV, mas e como reduzi-lo ???

Essa opção também é bastante comum, visto que as vezes podemos ter necessidade de mais espaço em disco e não temos a opção de comprar ou colocar mais um disco, oque podemos fazer é diminuir um determinado LV para poder alocar mais PEs em outro LV. Vale lembrar que eles devem estar no mesmo VG.

Utilizaremos o comando #lvreduce.

*Neste caso, faça backup, pois você VAI perder seus dados.. O Backup é importante tanto pra aumentar o LV quanto para diminuir, mas no caso de aumentar, você só perde dados se der algum problema ‘anormal’ (ex: queda de energia durante o processo), mas mesmo assim é bastante importante fazer backup, nunca se sabe !

  
  
  [root@server root]# umount /LVM1/
  [root@server root]# lvreduce -l-800 /dev/VG01/LV01
    WARNING: Reducing active logical volume to 2,73 GB
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
  Do you really want to reduce LV01? [y/n]: y
    Logical volume LV01 successfully resized
  
  [root@server root]# mke2fs /dev/VG01/LV01
  mke2fs 1.35 (28-Feb-2004)
  Filesystem label=
  OS type: Linux
  Block size=4096 (log=2)
  Fragment size=4096 (log=2)
  359040 inodes, 716800 blocks
  35840 blocks (5.00%) reserved for the super user
  First data block=0
  22 block groups
  32768 blocks per group, 32768 fragments per group
  16320 inodes per group
  Superblock backups stored on blocks:
          32768, 98304, 163840, 229376, 294912
  
  Writing inode tables: done
  Writing superblocks and filesystem accounting information:
  done
  
  This filesystem will be automatically checked every 27 mounts or
  180 days, whichever comes first.  Use tune2fs -c or -i to override.
  
  [root@server root]# mount /dev/VG01/LV01 /LVM1/
  [root@server root]# df -h
  Sist. Arq.            Tam   Usad Disp  Uso% Montado em
  /dev/hda2              28G   16G   10G  62% /
  /dev/hda1             145M  5,9M  132M   5% /boot
  none                  507M     0  507M   0% /dev/shm
  
  /dev/mapper/VG01-LV01
                        2,7G   20K  2,6G   1% /LVM1
  
  

Utilizamos o #lvreduce para diminuir o tamanho de um LV.

Mas existem casos também que temos que aumentar o tamano de um VG, e como fariamos ? Como temos 4 PVs, vamos tirar um do VG02 e colocar no VG01.

Vamos criar um segundo LV (LV02) no VG01 para preencher todo o espaço do VG01 (para ilustrar um caso real), para que quando adcionar o novo PV, ele aumente o espaço em PE que é de 0 (zero).

*Relembrando – lvcreate -l <numero de PEs> -n <nome do LV> <Nome do VG>

  
  
  [root@server root]# lvcreate -l 1684 -n LV02 VG01
    Logical volume "LV02" created
  
  [root@server root]# mkfs.ext2 /dev/VG01/LV02
  mke2fs 1.35 (28-Feb-2004)
  Filesystem label=
  OS type: Linux
  Block size=4096 (log=2)
  Fragment size=4096 (log=2)
  863264 inodes, 1724416 blocks
  86220 blocks (5.00%) reserved for the super user
  First data block=0
  53 block groups
  32768 blocks per group, 32768 fragments per group
  16288 inodes per group
  Superblock backups stored on blocks:
          32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
  
  Writing inode tables: done
  Writing superblocks and filesystem accounting information:
  done
  
  This filesystem will be automatically checked every 39 mounts or
  180 days, whichever comes first.  Use tune2fs -c or -i to override.
  
  [root@server root]# vgdisplay VG01
    --- Volume group ---
    VG Name               VG01
    System ID
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  7
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                2
    Open LV               1
    Max PV                255
    Cur PV                2
    Act PV                2
    VG Size               9,31 GB
    PE Size               4,00 MB
    Total PE              2384
    Alloc PE / Size       2384 / 9,31 GB
    Free  PE / Size       0 / 0
    VG UUID               B0o0rf-zvO1-uYT0-GW9L-kOez-H37z-0RzHIh
  
  

Podemos notar que agora o VG01 não tem mais nenhum PE livre. Free PE / Size 0 / 0

Abaixo vamos conferir o resultado de um #df e do comando vgdisplay, agora com os dois LVs

  
  
  [root@server root]# mkdir /LVM2
  [root@server root]# mount /dev/VG01/LV02 /LVM2
  
  [root@server root]# df -h
  Sist. Arq.            Tam   Usad Disp  Uso% Montado em
  /dev/hda2              28G   16G   10G  62% /
  /dev/hda1             145M  5,9M  132M   5% /boot
  none                  507M     0  507M   0% /dev/shm
  /dev/mapper/VG01-LV01
                        2,7G   20K  2,6G   1% /LVM1
  /dev/mapper/VG01-LV02
                        6,5G   20K  6,2G   1% /LVM2
  
  

Podemos notar agora que o nosso VG está com todos os seus PEs alocados, mas temos a situação que preciso aumentar a partição LV01, como faço ?

  [root@server root]# vgdisplay -v VG01
      Using volume group(s) on command line
      Finding volume group "VG01"
    --- Volume group ---
    VG Name               VG01
    System ID
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  7
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                2
    Open LV               2
    Max PV                255
    Cur PV                2
    Act PV                2
    VG Size               9,31 GB
    PE Size               4,00 MB
    Total PE              2384
    Alloc PE / Size       2384 / 9,31 GB
    Free  PE / Size       0 / 0
    VG UUID               B0o0rf-zvO1-uYT0-GW9L-kOez-H37z-0RzHIh
  
    --- Logical volume ---
    LV Name                /dev/VG01/LV01
    VG Name                VG01
    LV UUID                rQw1cG-jppl-TSJj-1wVw-8kud-oE5L-Jr1c46
    LV Write Access        read/write
    LV Status              available
    # open                 1
    LV Size                2,73 GB
    Current LE             700
    Segments               1
    Allocation             next free (default)
    Read ahead sectors     0
    Block device           253:0
  
    --- Logical volume ---
    LV Name                /dev/VG01/LV02
    VG Name                VG01
    LV UUID                SXgnqF-GZrH-dEax-LKno-4y44-SRp3-Q9rFU4
    LV Write Access        read/write
    LV Status              available
    # open                 1
    LV Size                6,58 GB
    Current LE             1684
    Segments               2
    Allocation             next free (default)
    Read ahead sectors     0
    Block device           253:1
  
    --- Physical volumes ---
    PV Name               /dev/hdd1
    PV UUID               RiWHqR-gyYe-jlIQ-pjku-cdI8-cQ8M-Lkj2Y4
    PV Status             allocatable
    Total PE / Free PE    1192 / 0
  
    PV Name               /dev/hdd2
    PV UUID               oEcEui-mhig-RF06-fBd5-opAK-1Psf-bV1FLp
    PV Status             allocatable
    Total PE / Free PE    1192 / 0

Não tenho mais discos, apenas tenho PV sobrando no VG02, por isso vou tirar ele de lá e colocar no VG01 para depois aumentar o espaço daquela partição.

Utilizaremos o comando #vgreduce.

  
  
  [root@server root]# vgreduce VG02 /dev/hdd3
    Removed "/dev/hdd3" from volume group "VG02"
  
  [root@server root]# vgdisplay -v VG02
      Using volume group(s) on command line
      Finding volume group "VG02"
    --- Volume group ---
    VG Name               VG02
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  2
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                0
    Open LV               0
    Max PV                255
    Cur PV                1
    Act PV                1
    VG Size               4,66 GB
    PE Size               4,00 MB
    Total PE              1192
    Alloc PE / Size       0 / 0
    Free  PE / Size       1192 / 4,66 GB
    VG UUID               iWiIv6-L0FT-K0gV-JzJh-a8l5-1ouZ-H4r3yN
  
    --- Physical volumes ---
    PV Name               /dev/hdd4
    PV UUID               BFGFCi-2rKb-As0v-ucBy-ghkn-y869-yXcIm0
    PV Status             allocatable
    Total PE / Free PE    1192 / 1192
  
  

Notamos que o PV /dev/hdd3 não está mais no VG02.

Agora vamos adciona-lo ao nosso VG01 que está necessitando de espaço.

  [root@server root]# vgextend VG01 /dev/hdd3
    Volume group "VG01" successfully extended

Agora vamos verificar que o nosso VG01 tem mais PEs livres (não tinha, estava com 0, lembra ?), devido a nossa ação de adcionar mais um PV neste VG.

Comando #vgdisplay

  [root@server root]# vgdisplay VG01
    --- Volume group ---
    VG Name               VG01
    System ID
    Format                lvm2
    Metadata Areas        3
    Metadata Sequence No  8
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                2
    Open LV               2
    Max PV                255
    Cur PV                3
    Act PV                3
    VG Size               13,96 GB
    PE Size               4,00 MB
    Total PE              3575
    Alloc PE / Size       2384 / 9,31 GB
    Free  PE / Size       1191 / 4,65 GB
    VG UUID               B0o0rf-zvO1-uYT0-GW9L-kOez-H37z-0RzHIh

Agora o nosso VG01 tem mais 1191 PEs disponiveis, e vou adcionar ele ao LV01

Abaixo a sequencia de comandos para verificar e para adcionar.

  [root@server root]# lvextend -l+1191 /dev/VG01/LV01
    Extending logical volume LV01 to 7,39 GB
    Logical volume LV01 successfully resized
  
  [root@server root]# resize2fs /dev/VG01/LV01
  resize2fs 1.35 (28-Feb-2004)
  Please run 'e2fsck -f /dev/VG01/LV01' first.
  
  [root@server root]# e2fsck -f /dev/VG01/LV01
  e2fsck 1.35 (28-Feb-2004)
  Pass 1: Checking inodes, blocks, and sizes
  Pass 2: Checking directory structure
  Pass 3: Checking directory connectivity
  Pass 4: Checking reference counts
  Pass 5: Checking group summary information
  /dev/VG01/LV01: 11/359040 files (0.0% non-contiguous), 11281/716800 blocks
  
  [root@server root]# resize2fs /dev/VG01/LV01
  resize2fs 1.35 (28-Feb-2004)
  Resizing the filesystem on /dev/VG01/LV01 to 1936384 (4k) blocks.
  The filesystem on /dev/VG01/LV01 is now 1936384 blocks long.
  
  [root@server root]# mount /dev/VG01/LV01 /LVM1
  [root@server root]# df -h
  Sist. Arq.            Tam   Usad Disp  Uso% Montado em
  /dev/hda2              28G   16G   10G  62% /
  /dev/hda1             145M  5,9M  132M   5% /boot
  none                  507M     0  507M   0% /dev/shm
  /dev/mapper/VG01-LV02
                        6,5G   20K  6,2G   1% /LVM2
  /dev/mapper/VG01-LV01
                        7,3G   20K  7,0G   1% /LVM1

Notem que a nossa partição LVM1 (LV01) já está redimensionada.

Abaixo a titulo didático, vou apagar o VG02, já que não o utilizamos, criamos ele apenas para fins didáticos, e vamos apaga-lo para demonstrar mais alguns comandos do pacote LVM

Vou criar um LV no VG02 apenas para demonstrar como deleta-lo.

  [root@server root]# lvcreate -l1000 -n LV03 VG02
    Logical volume "LV03" created
  
  [root@server root]# vgdisplay -v VG02
      Using volume group(s) on command line
      Finding volume group "VG02"
    --- Volume group ---
    VG Name               VG02
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  3
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                1
    Open LV               0
    Max PV                255
    Cur PV                1
    Act PV                1
    VG Size               4,66 GB
    PE Size               4,00 MB
    Total PE              1192
    Alloc PE / Size       1000 / 3,91 GB
    Free  PE / Size       192 / 768,00 MB
    VG UUID               iWiIv6-L0FT-K0gV-JzJh-a8l5-1ouZ-H4r3yN
  
    --- Logical volume ---
    LV Name                /dev/VG02/LV03
    VG Name                VG02
    LV UUID                PPAHOG-v4d2-hClM-nUKy-crnG-0V3A-kwb6pw
    LV Write Access        read/write
    LV Status              available
    # open                 0
    LV Size                3,91 GB
    Current LE             1000
    Segments               1
    Allocation             next free (default)
    Read ahead sectors     0
    Block device           253:2
  
    --- Physical volumes ---
    PV Name               /dev/hdd4
    PV UUID               BFGFCi-2rKb-As0v-ucBy-ghkn-y869-yXcIm0
    PV Status             allocatable
    Total PE / Free PE    1192 / 192

Deletando o LV (LV03) que acabamos de criar.

  [root@server root]# lvremove /dev/VG02/LV03
  Do you really want to remove active logical volume "LV03"? [y/n]: y
    Logical volume "LV03" successfully removed
  
  [root@server root]# vgdisplay -v VG02
      Using volume group(s) on command line
      Finding volume group "VG02"
    --- Volume group ---
    VG Name               VG02
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  4
    VG Access             read/write
    VG Status             resizable
    MAX LV                255
    Cur LV                0
    Open LV               0
    Max PV                255
    Cur PV                1
    Act PV                1
    VG Size               4,66 GB
    PE Size               4,00 MB
    Total PE              1192
    Alloc PE / Size       0 / 0
    Free  PE / Size       1192 / 4,66 GB
    VG UUID               iWiIv6-L0FT-K0gV-JzJh-a8l5-1ouZ-H4r3yN
  
    --- Physical volumes ---
    PV Name               /dev/hdd4
    PV UUID               BFGFCi-2rKb-As0v-ucBy-ghkn-y869-yXcIm0
    PV Status             allocatable
    Total PE / Free PE    1192 / 1192

Deletando o VG02

  [root@server root]# vgremove VG02
    Volume group "VG02" successfully removed

Deletando o PV do LVM, vamos supor que este disco tenha dado problemas fisicos, e você vái tirar este disco (neste caso é uma partição), mas em produção seria um disco.

comando #pvremove

  [root@server root]# pvremove /dev/hdd4
    Labels on physical volume "/dev/hdd4" successfully wiped
  You have new mail in /var/spool/mail/root

Coloque outro disco, particione, formate pra LVM, crie o PV, adcione ele a um VG, e depois a um LV… Bem vindo ao LVM. 🙂

*Dica: caso algum VG esteja inativo, ative-o com o comando #vgchange -ay , isso ativará todos os VGs disponiveis.

Rolar para cima