Como efetuar um reduce em LVM

Ok, quem conhece LVM sabe de sua praticidade, quem não conhece pode ir aqui para ver o quão prático ele pode ser. O LVM nos traz vários benefícios, um deles é justamente aumentar e reduzir um volume, com um sistema em LVM podemos por exemplo adicionar um HD em algum volume lógico e adicionar espaço (um stripping), e também podemos fazer o oposto, diminuir para, por exemplo, colocar em algum outro volume lógico.
Enquanto adicionar é fácil, remover para colocar em outro local pode ser um pouco complicado, ou até mesmo desafiador, já que TEMOS dados nos volumes, como fazer isso SEM perdê-los? É sobre isso que é essa dica.Vamos supor que tenhamos que passar 2G do volume lógico que armazena a partição /usr/local para o volume lógico responsável pelo /tmp, como fazer?

Não é nenhum dragão de sete cabeças, basta seguir os seguintes passos nessa mesma ordem:

  1. Desmontar as partições.
  2. Verificá-las com e2fsk -f.
  3. Efetuar o resize2fs na partição que se deseja diminuir.
  4. Efetuar o lvreduce no volume lógico que se deseja diminuir.
  5. Efetuar o lvextend no volume lógico que se deseja aumentar.
  6. Efetuar o resize2fs na partição que se deseja aumentar.
  7. Efetuar, novamente, o  e2fsck -f em ambas as partições.
  8. Montá-las e utilizá-las normalmente.

Importante frisar que a ordem dos passos, principalmente a 3 e 4, não podem ser alteradas, caso contrário você poderá render o seu sistema inoperante na partição a ser diminuída!

Nada melhor do que mostrar com um exemplo certo? Vamos então redimensionar a partição /usr/local de 27Gb para 25Gb, e aumentar a /tmp com o diferença:

  1. Verificando o tamanho e desmontando as partições

    [root@localhost ~]# df -h /usr/local/ /tmp/
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/sys-local
    27G 173M 25G 1% /usr/local
    /dev/mapper/sys-tmp 3.9G 69M 3.7G 2% /tmp
    [root@localhost ~]# umount /usr/local /tmp
  2. Verificação com o e2fsk -f

    [root@localhost ~]# e2fsck -f /dev/sys/local
    e2fsck 1.39 (29-May-2006)
    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/sys/local: 42/7077888 files (2.4% non-contiguous), 265736/7077888 blocks
    [root@localhost ~]# e2fsck -f /dev/sys/tmp
    e2fsck 1.39 (29-May-2006)
    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/sys/tmp: 14/1048576 files (7.1% non-contiguous), 50276/1048576 blocks
  3. Efetuando o resize2fs na partição a ser diminuida

    [root@localhost ~]# resize2fs /dev/sys/local 25G
    resize2fs 1.39 (29-May-2006)
    Resizing the filesystem on /dev/sys/local to 6553600 (4k) blocks.
    The filesystem on /dev/sys/local is now 6553600 blocks long.
  4. Efetuando o lvreduce na partição a ser diminuida

    [root@localhost ~]# lvreduce /dev/sys/local -L -2G
    /dev/hdc: open failed: No medium found
    WARNING: Reducing active logical volume to 25.88 GB
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce local? [y/n]: y
    Reducing logical volume local to 25.88 GB
    Logical volume local successfully resized
  5. Efetuando o lvextend no volume lógico a ser aumentado

    [root@localhost ~]# lvextend /dev/sys/tmp -L +2G
    /dev/hdc: open failed: No medium found
    Extending logical volume tmp to 6.00 GB
    Logical volume tmp successfully resized
  6. Efetuando o resize2f na partição a ser extendida

    [root@localhost ~]# resize2fs /dev/sys/tmp 6G
    resize2fs 1.39 (29-May-2006)
    Resizing the filesystem on /dev/sys/tmp to 1572864 (4k) blocks.
    The filesystem on /dev/sys/tmp is now 1572864 blocks long.
  7. Efetuando o e2fsk -f nas partições, novamente

    [root@localhost ~]# e2fsck -f /dev/sys/local
    e2fsck 1.39 (29-May-2006)
    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/sys/local: 42/6553600 files (2.4% non-contiguous), 249320/6553600 blocks
    [root@localhost ~]# e2fsck -f /dev/sys/tmp
    e2fsck 1.39 (29-May-2006)
    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/sys/tmp: 14/1572864 files (7.1% non-contiguous), 66692/1572864 blocks
  8. Montando e correndo para o abraço
    [root@localhost ~]# mount /usr/local/
    [root@localhost ~]# mount /tmp
    [root@localhost ~]# df -h /usr/local /tmp
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/sys-local
    25G 173M 23G 1% /usr/local
    /dev/mapper/sys-tmp 5.9G 69M 5.5G 2% /tmp
    [root@localhost ~]# touch /tmp/a
    [root@localhost ~]# ls /tmp/
    a hsperfdata_daemon lost+found
    [root@localhost ~]# ls /usr/local/
    bin etc games include lib lib64 libexec lost+found sbin share src

Nnovamente, atenção na ordem, se diminuir o volume lógico ANTES de diminuir a partição, você pode perder tudo nesse partição. Caso isso aconteça, a única solução que encontrei até hoje foi:

  1. Antes de efetuar o resize2fs, ele irá pedir para rodar o e2fsck -f, que irá falhar, esse é o indício de que algo aconteceu errado.
  2. Então efetue o inverso, um lvextend e comece novamente.

Vamos mostrar na prática:


[root@localhost ~]# umount /tmp/
[root@localhost ~]# lvreduce /dev/sys/tmp -L -2G
/dev/hdc: open failed: No medium found
WARNING: Reducing active logical volume to 4.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce tmp? [y/n]: y
Reducing logical volume tmp to 4.00 GB
Logical volume tmp successfully resized
[root@localhost ~]# resize2fs /dev/sys/tmp 4G
resize2fs 1.39 (29-May-2006)
Please run 'e2fsck -f /dev/sys/tmp' first.
[root@localhost ~]# e2fsck -f /dev/sys/tmp
e2fsck 1.39 (29-May-2006)
The filesystem size (according to the superblock) is 1572864 blocks
The physical size of the device is 1048576 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort? yes

Ok, aqui vimos que algo muito feio aconteceu, vamos tentar voltar:

[root@localhost ~]# lvextend /dev/sys/tmp -L +2G
/dev/hdc: open failed: No medium found
Extending logical volume tmp to 6.00 GB
Logical volume tmp successfully resized
[root@localhost ~]# e2fsck -f /dev/sys/tmp
e2fsck 1.39 (29-May-2006)
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/sys/tmp: 15/1572864 files (6.7% non-contiguous), 66692/1572864 blocks
[root@localhost ~]# mount /tmp/
[root@localhost ~]# df -h /tmp
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/sys-tmp 5.9G 69M 5.5G 2% /tmp
[root@localhost ~]# touch /tmp/a
[root@localhost ~]# ls /tmp/
a hsperfdata_daemon lost+found

E tudo volta ao normal, agora volte e faça na ordem certa!

About Zarnick

Programer, sysadmin, guitarrist, and Italian. That's what I am. Plain simple.
Tips , , , , , , ,