Monthabril 2017

Backup e Restore de banco de dados MySQL

Olá pessoal! Este tutorial irá mostrar maneiras fáceis de realizar o backup e restaurar os dados em seu banco de dados MySQL.

Realizando backup do terminal utilizando o mysqldump

Iremos utilizar o comando “mysqldump” para realizar o backup dos dados do MySQL. Este comando se conecta ao servidor MySQL e cria um arquivo de despejo do SQL. O arquivo de despejo contém as instruções SQL necessárias para recriar o banco de dados. Veja abaixo a sintaxe utilizada:

$ mysqldump -u [usuario] -p[senha] [dbname] > [backupfile.sql]
  • [usuario] Usuário do banco de dados
  • [senha] A senha do usuário do banco de dados (não há espaço entre “-p” e a senha)
  • [dbname] O nome do banco de dados
  • [backupfile.sql] O nome do backup do banco de dados

Por exemplo, para fazer o backup do banco de dados “teste” com usuário “root” para um arquivo “teste_bkp.sql”, você poderá utilizar o comando abaixo:

$ mysqldump -u root -p teste > teste_bkp.sql

Este comando irá fazer backup do banco de dados “teste” em um arquivo chamado “teste_bkp.sql” que conterá todas as instruções SQL necessárias para recriar o banco de dados.

Com o comando mysqldump você pode especificar determinadas tabelas do banco de dados que deseja fazer backup. Por exemplo, para fazer backup somente de tabelas php_teste e asp_teste da base de dados “teste” realize o comando abaixo. Cada nome de tabela tem de ser separado por espaço.

$ mysqldump -u root -p teste php_teste asp_teste > teste_bkp.sql

Às vezes, é necessário fazer backup de mais de um banco de dados ao mesmo tempo. Neste caso, você pode usar a opção “ — databases” seguida pela lista de bancos de dados que você gostaria de fazer backup. Cada nome de banco de dados deve ser separado por espaço.

$ mysqldump -u root -p --databases teste tutoriais artigos > bancos_bkp.sql

Se você quiser fazer backup de todos os bancos de dados no servidor ao mesmo tempo, use a opção “ — all-databases”. Ele diz ao MySQL para realizar o dump de todos os bancos de dados existentes para o destino.

$ mysqldump -u root -p --all-databases > todosbancos_bkp.sql

O comando mysqldump tem também algumas outras opções úteis:

 — add-drop-table: Diz ao MySQL para adicionar uma instrução DROP TABLE antes de cada CREATE TABLE no dump.

 — no-data: Realiza o dump somente da estrutura do banco de dados, não o conteúdo.

 — add-locks: Adiciona as instruções LOCK TABLES e UNLOCK TABLES que você pode ver no arquivo de dump.

O comando mysqldump tem vantagens e desvantagens. As vantagens de usar mysqldump são que é simples de usar e cuida de questões de bloqueio de tabela para você. A desvantagem é que o comando bloqueia tabelas. Se o tamanho das suas tabelas é muito grande mysqldump pode bloquear os usuários por um longo período de tempo.

Realizando backup do banco de dados com compactação

Se o seu banco de dados mysql é muito grande, você pode querer compactar a saída do mysqldump. Basta usar o comando de backup mysql abaixo e canalizar a saída para gzip, então você terá a saída como arquivo gzip.

$ mysqldump -u [usuario] -p[senha] [dbname] | gzip -9 > [backupfile.sql.gz]

Se você quiser extrair o arquivo .gz, use o comando abaixo:

$ gunzip [backupfile.sql.gz]

Realizando restore do banco de dados

Acima realizamos o backup do banco de dados “teste” no arquivo “teste_bkp.sql”. Para recriar o banco de dados “teste” você deve seguir duas etapas:

  • Crie um banco de dados com o mesmo nome na máquina de destino
  • Carregue o arquivo usando o comando mysql:
$ mysql -u root -p teste < teste_bkp.sql

Para restaurar arquivos de backup compactados, você pode fazer o seguinte:

$ gunzip < [backupfile.sql.gz] | mysql -u [usuario] -p[senha] [dbname]

Se você precisar restaurar um banco de dados que já existe, você precisará usar o comando mysqlimport. A sintaxe para mysqlimport é a seguinte:

$ mysqlimport -u [usuario] -p[senha] [dbname] [backupfile.sql]

Se você precisar restaurar todos os bancos de dados, segue abaixo a sintaxe. Para esse comando, os bancos de dados precisam existir ou o script “todosbancos_bkp.sql” precisa conter os parâmetros CREATE DATABASE para os bancos de dados.

$ mysql -u root -p < todosbancos_bkp.sql

Então é isso amigos. Espero ter ajudado com mais uma postagem

Administração de usuários no MySQL

Olá pessoal! Dessa vez trarei em uma sequência de dois posts dicas para administração de usuários e backup/restore de bancos de dados no MySQL, o SGBD (Sistema Gerenciador de Banco de Dados) mais utilizado por pequenas, médias e grandes empresas do setor público e privado, provedores de internet, servidores de hospedagem, servidores web entre outros no mundo inteiro.

Esta documentação foi feita baseada na documentação oficial do MySQL para versão 5.7

Criação de usuários

Normalmente, um administrador de banco de dados primeiro usa CREATE USER para criar uma conta e definir suas características não prioritárias, como sua senha, se usa conexões seguras e limita o acesso aos recursos do servidor, então usa GRANT para definir seus privilégios. ALTER USER pode ser usado para alterar as características não prioritárias de contas existentes. Por exemplo:

CREATE USER 'neto'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL ON db1.* TO 'neto'@'localhost';
GRANT SELECT ON db2.invoice TO 'neto'@'localhost';
ALTER USER 'neto'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;

Exclusão de usuários

A instrução DROP USER remove uma ou mais contas MySQL e seus privilégios. Ele remove linhas de privilégios para a conta de todas as tabelas de concessão.

Para usar DROP USER, você deve ter o privilégio global CREATE USER ou o privilégio DELETE para o banco de dados mysql. Quando a variável de sistema read_only está habilitada, DROP USER requer, adicionalmente, o privilégio SUPER.

Ocorre um erro se você tentar soltar uma conta que não existe.

A partir do MySQL 5.7.8, a cláusula IF EXISTS pode ser usada, o que faz com que a declaração produza um aviso para cada conta nomeada que não existe, em vez de um erro.

DROP USER 'neto'@'localhost';

Obs.: A parte do nome do host do nome da conta, se omitida, assume como padrão ‘%’.

DROP USER não descarta ou invalida automaticamente bancos de dados ou objetos dentro deles que o usuário antigo criou. Isso inclui programas armazenados ou modos de exibição para os quais o atributo DEFINER nomeia o usuário descartado. As tentativas de acessar esses objetos podem produzir um erro se eles forem executados no contexto de segurança do definidor.

Exemplos de Permissões

Privilégios globais

Privilégios globais são administrativos ou aplicam-se a todos os bancos de dados em um determinado servidor. Para atribuir privilégios globais, use a sintaxe ON *. *:

GRANT ALL ON *.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';

Os privilégios CREATE TABLESPACE, CREATE USER, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN e SUPER são administrativos e só podem ser concedidos globalmente.

Outros privilégios podem ser concedidos globalmente ou em níveis mais específicos.

O MySQL armazena privilégios globais na tabela mysql.user.

Privilégios de banco de dados

Os privilégios de banco de dados aplicam-se a todos os objetos em um determinado banco de dados. Para atribuir privilégios de nível de banco de dados, use a sintaxe ON db_name.* :

GRANT ALL ON mydb.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';

Se você usar a sintaxe ON * (em vez de ON *. *) E tiver selecionado um banco de dados padrão, os privilégios serão atribuídos no nível do banco de dados padrão para o banco de dados. Ocorre um erro se não houver nenhum banco de dados padrão.

Os privilégios CREATE, DROP, EVENT, GRANT OPTION, LOCK TABLES e REFERENCES podem ser especificados no nível do banco de dados. Os privilégios de tabela ou de rotina também podem ser especificados no nível do banco de dados, caso em que eles se aplicam a todas as tabelas ou rotinas do banco de dados.

O MySQL armazena os privilégios do banco de dados na tabela mysql.db.

Privilégios de tabela

Os privilégios de tabela aplicam-se a todas as colunas de uma determinada tabela. Para atribuir privilégios ao nível da tabela, utilize ON sintaxe db_name.tbl_name:

GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';

Se você especificar tbl_name em vez de db_name.tbl_name, a instrução se aplica a tbl_name no banco de dados padrão. Ocorre um erro se não houver nenhum banco de dados padrão.

Os valores de priv_type permitidos no nível da tabela são ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER e UPDATE.

O MySQL armazena privilégios de tabelas na tabela mysql.tables_priv.

Privilégios de coluna

Os privilégios de colunas aplicam-se a colunas individuais em uma determinada tabela. Cada privilégio a ser concedido no nível da coluna deve ser seguido pela coluna ou colunas, entre parênteses.

GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';

Os valores priv_type permissíveis para uma coluna (ou seja, quando você usa uma cláusula column_list) são INSERT, REFERENCES, SELECT e UPDATE.

O MySQL armazena privilégios de colunas na tabela mysql.columns_priv.

Privilégios de rotina armazenados

Os privilégios ALTER ROUTINE, CREATE ROUTINE, EXECUTE e GRANT OPTION aplicam-se a rotinas armazenadas (procedimentos e funções). Eles podem ser concedidos nos níveis global e de banco de dados. Exceto para CREATE ROUTINE, esses privilégios podem ser concedidos no nível de rotina para rotinas individuais.

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Os valores de “priv_type” permitidos no nível de rotina são ALTER ROUTINE, EXECUTE e GRANT OPTION. CREATE ROUTINE não é um privilégio de nível de rotina porque você deve ter esse privilégio para criar uma rotina em primeiro lugar.

O MySQL armazena privilégios de nível de rotina na tabela mysql.procs_priv.

Privilégios do usuário do proxy

O privilégio PROXY permite que um usuário seja um proxy para outro. O usuário proxy personifica ou toma a identidade do usuário proxy.

GRANT PROXY ON 'localuser'@'localhost' TO 'externaluser'@'somehost';

Quando PROXY é concedido, ele deve ser o único privilégio nomeado na instrução GRANT, a cláusula REQUIRE não pode ser dada ea única opção WITH permitida é WITH GRANT OPTION.

Proxy requer que o usuário proxy autenticar por meio de um plugin que retorna o nome do usuário proxy para o servidor quando o usuário proxy se conecta e que o usuário proxy tem o privilégio PROXY para o usuário proxy.

O MySQL armazena privilégios de proxy na tabela mysql.proxies_priv.

Nomes de conta e senhas

Um valor de usuário em uma instrução GRANT indica uma conta MySQL à qual a declaração se aplica. Para acomodar a concessão de direitos a usuários de hosts arbitrários, o MySQL suporta especificar o valor do usuário no formato ‘user_name’ @ ‘host_name’.

Você pode especificar curingas no nome do host. Por exemplo, ‘user_name’@’%.example.com’ se aplica a user_name para qualquer host no domínio example.com, e ‘user_name’@’192.168.1.%’ aplica-se a user_name para qualquer host no 192.168.1 Classe C sub-rede.

O formulário simples ‘user_name’ é um sinônimo de ‘user_name’ @ ‘%’.

O MySQL não suporta curingas em nomes de usuário. Para se referir a um usuário anônimo, especifique uma conta com um nome de usuário vazio com a instrução GRANT:

GRANT ALL ON test.* TO ''@'localhost' ...;

Neste caso, qualquer usuário que se conectar do host local com a senha correta para o usuário anônimo terá acesso permitido, com os privilégios associados à conta de usuário anônimo.

Criação Implícita de Conta

Se uma conta nomeada em uma instrução GRANT não existir, a ação tomada depende do modo SQL NO_AUTO_CREATE_USER:

* Se NO_AUTO_CREATE_USER não estiver habilitado, GRANT cria a conta. Isso é muito inseguro, a menos que você especifique uma senha não vazia usando IDENTIFIED BY.

* Se NO_AUTO_CREATE_USER estiver ativado, GRANT falhará e não criará a conta, a menos que você especifique uma senha não vazia usando IDENTIFIED BY ou nomeie um plug-in de autenticação usando IDENTIFIED WITH.

* A partir do MySQL 5.7.2, se a conta já existir, IDENTIFIED WITH é proibido porque é destinado somente para uso ao criar novas contas.

Remover privilégios

A declaração REVOKE permite aos administradores de sistema revogar privilégios de contas MySQL.

Quando a variável de sistema read_only está habilitada, REVOKE requer o privilégio SUPER além de quaisquer outros privilégios necessários descritos na discussão a seguir.

REVOKE INSERT ON *.* FROM 'neto'@'localhost';

Obs.: A parte do nome do host do nome da conta, se omitida, assume como padrão ‘%’.

Para usar a primeira sintaxe REVOKE, você deve ter o privilégio GRANT OPTION e você deve ter os privilégios que você está revogando.

Para revogar todos os privilégios, use a segunda sintaxe, que descarta todos os privilégios globais, de banco de dados, de tabela, de coluna e de rotina para o usuário ou usuários nomeados:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

Para usar essa sintaxe REVOKE, você deve ter o privilégio global CREATE USER ou UPDATE para o banco de dados mysql.

Se as tabelas de concessão contiverem linhas de privilégios que contêm nomes de banco de dados de misto ou de tabela e a variável de sistema lower_case_table_names estiver definida como um valor diferente de zero, REVOKE não pode ser usado para revogar esses privilégios. Será necessário manipular as tabelas de concessão diretamente. (GRANT não criará tais linhas quando lower_case_table_names estiver definido, mas essas linhas poderiam ter sido criadas antes de definir a variável.)

Quando executado com êxito a partir do programa mysql, REVOKE responde com Query OK, 0 linhas afetadas. Para determinar quais privilégios resultam da operação, use SHOW GRANTS.

Então é isso amigos. Espero ter ajudado com mais uma postagem

Utilizando LVM em servidores GNU/Linux

Olá pessoal!

Esse post foi criado com a intenção de documentar um passo-a-passo para criar, remover e alterar LV’s (Logical Volumes) em servidores e estações GNU/Linux

1. Criando partição LVM

Vamos localizar o disco de 50 GB adicionado recentemente à VM

root@vm-testes:~# fdisk -l
...
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
...

Vamos utilizar o disco “/dev/sdb” como exemplo

root@vm-testes:~# fdisk /dev/sdb

Vamos criar uma nova partição

Comando (m para ajuda): n

Escolha o tipo de partição

Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended

Utilizando o sistema de particionamento MBR, somente é possível as quatro primeiras partições de um disco serem primárias.

Select (default p): p

Esta será a primeira partição

Partition number (1-4, default 1): 1

O fdisk agora pergunta qual setor a partição deverá iniciar e em Agora o fdisk me pergunta em qual setor essa partição deve começar e em seguida o último setor, definindo o tamanho, como iremos utilizar todo o disco vamos escolher as opções “default” com a tecla ENTER.

First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599):

Created a new partition 1 of type 'Linux' and of size 50 GiB.

Vamos listar as partições

Comando (m para ajuda): p

Disk /dev/sdb: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 cylinders, total 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe61fc21b

Device Boot Start End Blocks Id System
/dev/sdb1 2048 125829119 62913536 83 Linux

Vamos escolher o tipo da partição

Comando (m para ajuda): t

Selected partition 1
Partition type (type L to list all types): 8e
Changed type of partition 'Linux' to 'Linux LVM'.

Vamos gravar as alterações no disco

Comando (m para ajuda): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Vamos listar agora a tabela de partições do disco “/dev/sdb” e veja a criação da partição “/dev/sdb1”

root@vm-testes:~# fdisk -l /dev/sdb
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5673f5b0

Dispositivo Inicializar Start Fim Setores Size Id Tipo
/dev/sdb1 2048 104857599 104855552 50G 8e Linux LVM

2. Criando PV (Physical Volume)

Após criarmos uma partição LVM, vamos criar um PV

root@vm-testes:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

Vamos escanear os PVs e perceba que o “/dev/sdb1” foi criado conforme exibe abaixo.

root@vm-testes:~# pvscan
PV /dev/sda5 VG ubuntu-testvm-vg lvm2 [24,52 GiB / 32,00 MiB free]
PV /dev/sdb1 lvm2 [50,00 GiB]
Total: 2 [74,52 GiB] / in use: 1 [24,52 GiB] / in no VG: 1 [50,00 GiB]

Para maiores detalhes do PV criado utilize o comando “pvdisplay”

root@vm-testes:~# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "50,00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 50,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID spINyj-nfj0-J3Tb-oprJ-ExVl-WSlO-DkVqk3

3. Criando um VG (Volume Group)

Vamos criar o VG de exemplo “vg-teste” conforme abaixo

root@vm-testes:~# vgcreate vg-teste /dev/sdb1
Volume group "vg-teste" successfully created

Vamos escanear os VGs e perceba que o “vg-teste” foi criado conforme exibe abaixo.

root@vm-testes:~# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg-teste" using metadata type lvm2
Found volume group "ubuntu-testvm-vg" using metadata type lvm2

Para maiores detalhes do VG criado utilize o comando “vgdisplay”

root@vm-testes:~# vgdisplay vg-teste
--- Volume group ---
VG Name vg-teste
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 50,00 GiB
PE Size 4,00 MiB
Total PE 12799
Alloc PE / Size 0 / 0
Free PE / Size 12799 / 50,00 GiB
VG UUID eZ2jyt-A8tb-e1Lo-bLhn-VYcG-H8qF-ClDMco

4. Adicionando PV (Physical Volume) ao VG (Volume Group)

Vamos adicionar o PV “/dev/sdc1” ao VG “vg-teste” usando o “vgextend” conforme abaixo

root@vm-testes:~# vgextend vg-teste /dev/sdc1
Volume group "vg-teste" successfully extended

5. Criando LV (Logical Volume)

Vamos criar agora o LV “lvubuntu” no VG “vg-teste”

root@vm-testes:~# lvcreate --name lvubuntu --size 40G vg-teste

Ou para criar com 100% do espaço livre do VG

root@vm-testes:~# lvcreate -l 100%FREE -n lvubuntu vg-teste
Logical volume "lvubuntu" created.

Vamos escanear os LVs e perceba que o “lvubuntu” foi criado conforme exibe abaixo.

root@vm-testes:~# lvscan
ACTIVE '/dev/vg-teste/lvubuntu' [40,00 GiB] inherit
ACTIVE '/dev/ubuntu-testvm-vg/root' [23,74 GiB] inherit
ACTIVE '/dev/ubuntu-testvm-vg/swap_1' [764,00 MiB] inherit

Para maiores detalhes do LV criado no “vg-teste” utilize o comando “lvdisplay”

root@vm-testes:~# lvdisplay vg-teste
--- Logical volume ---
LV Path /dev/vg-teste/lvubuntu
LV Name lvubuntu
VG Name vg-teste
LV UUID C8vdEw-oDV3-MfN4-Lb0V-azZa-Mhhe-X2e9rc
LV Write Access read/write
LV Creation host, time web, 2016-08-10 10:46:51 -0300
LV Status available
# open 0
LV Size 40,00 GiB
Current LE 10240
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:2

6. Formatando a partição LVM

Vamos agora formatar a partição LVM

root@vm-testes:~# mkfs.ext4 /dev/mapper/vg--teste-lvubuntu
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 10485760 4k blocks and 2621440 inodes
Filesystem UUID: aa2a4d29-554d-4dea-9ce8-bacec86a6b5f
Cópias de segurança de superblocos gravadas em blocos:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624

Allocating group tables: pronto
Gravando tabelas inode: pronto
Creating journal (32768 blocks): concluído
Escrevendo superblocos e informações de contabilidade de sistema de arquivos: concluído

7. Montando a partição LVM

Vamos criar o diretório que a partição será montada e realizar a montagem

root@vm-testes:~# mkdir -p /dados/lvubuntu
root@vm-testes:~# mount /dev/mapper/vg--teste-lvubuntu /dados/lvubuntu/

8. Configurando fstab

Vamos utilizar o “blkid” para listar o “UUID” da partição

root@vm-testes:~# blkid | grep "lvubuntu"
/dev/mapper/vg--teste-lvubuntu: UUID="aa2a4d29-554d-4dea-9ce8-bacec86a6b5f" TYPE="ext4"

Vamos adicionar a linha abaixo como uma entrada no arquivo “/etc/fstab”

root@vm-testes:~# vim /etc/fstab
UUID=aa2a4d29-554d-4dea-9ce8-bacec86a6b5f /dados/lvubuntu ext4 defaults 0 1

9. Expandindo o LV (Logical Volume)

Vamos desmontar o LV que será estendido

root@vm-testes:~# umount /dados/lvubuntu

Vamos estender o LV com mais 5 GB

root@vm-testes:~# lvextend -L +5GB /dev/mapper/vg--teste-lvubuntu
Size of logical volume vg-teste/lvubuntu changed from 40,00 GiB (10240 extents) to 45,00 GiB (11520 extents).
Logical volume lvubuntu successfully resized.

Vamos verificar o LV executando o “e2fsck”

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2621440 files (0.0% non-contiguous), 209554/10485760 blocks

Vamos agora redimensionar a partição

root@vm-testes:~# resize2fs -p /dev/mapper/vg--teste-lvubuntu
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/mapper/vg--teste-lvubuntu to 11796480 (4k) blocks.
The filesystem on /dev/mapper/vg--teste-lvubuntu is now 11796480 (4k) blocks long.

Vamos novamente executar o “e2fsck”, porém agora para verificar a partição redimensionada.

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2949120 files (0.0% non-contiguous), 231139/11796480 blocks

Vamos montar novamente a partição

root@vm-testes:~# mount /dev/mapper/vg--teste-lvubuntu /dados/lvubuntu/

Vamos checar o tamanho da nova partição montada

root@vm-testes:~# df -kh /dev/mapper/vg--teste-lvubuntu
Sist. Arq. Tam. Usado Disp. Uso% Montado em
/dev/mapper/vg--teste-lvubuntu 45G 52M 42G 1% /dados/lvubuntu

10. Diminuindo o LV (Logical Volume)

Vamos desmontar o LV que será reduzido

root@vm-testes:~# umount /dados/lvubuntu

Vamos verificar a partição “/dev/mapper/vg–teste-lvubuntu” primeiramente

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2949120 files (0.0% non-contiguous), 231139/11796480 blocks

Vamos reduzir o tamanho da partição para 40 GB

root@vm-testes:~# resize2fs -p /dev/mapper/vg--teste-lvubuntu 40G
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/mapper/vg--teste-lvubuntu to 10485760 (4k) blocks.
Iniciar passo 3 (máximo = 360)
Varrendo tabela de inodes XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/vg--teste-lvubuntu is now 10485760 (4k) blocks long.

Vamos agora reduzir o tamanho do LV para 40 GB e confirmar com “y”

root@vm-testes:~# lvreduce -L 40G /dev/mapper/vg--teste-lvubuntu
WARNING: Reducing active logical volume to 40,00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvubuntu? [y/n]: y
Size of logical volume vg-teste/lvubuntu changed from 45,00 GiB (11520 extents) to 40,00 GiB (10240 extents).
Logical volume lvubuntu successfully resized.

Vamos verificar a partição “/dev/mapper/vg–teste-lvubuntu” novamente

root@vm-testes:~# e2fsck -f /dev/mapper/vg--teste-lvubuntu
e2fsck 1.42.13 (17-May-2015)
Passo 1: Verificando inodes, blocks, e os tamanhos.
Passo 2: Verificando estrutura directory
Passo 3: Checando conectividade com o directory
Passo 4: Checando contagens de referência
Passo 5: Procurando informações de resumo group
/dev/mapper/vg--teste-lvubuntu: 11/2621440 files (0.0% non-contiguous), 209554/10485760 blocks

Vamos montar a partição novamente

root@vm-testes:~# mount /dados/lvubuntu

Vamos checar o tamanho da nova partição montada

root@vm-testes:~# df -kh /dev/mapper/vg--teste-lvubuntu
Sist. Arq. Tam. Usado Disp. Uso% Montado em
/dev/mapper/vg--teste-lvubuntu 45G 52M 42G 1% /dados/lvubuntu

11. Removendo um PV (Phisical Volume)

Para remover o disco do VG, utilize o comando abaixo

root@vm-testes:~# vgreduce vg-teste /dev/sdb1

Para remover um disco PV

root@vm-testes:~# pvremove /dev/sdb1

© 2018 Blog do Vieira

Theme by Anders NorénUp ↑