Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

lvm [2019/11/07 16:40]
andre [Para remover o cache associado ao pool]
lvm [2020/04/20 15:08]
Linha 1: Linha 1:
-====== Logical Volume Manager ====== 
- 
-O LVM permite que exista uma abstração entre a parte física de armazenamento e os sistemas de arquivos apresentados ao sistema operacional. 
- 
-Então uma das principais utilidades do LVM é concatenar discos, permitindo a criação de filesystem maiores que o limite físico do hardware. ​ 
-Entretanto, pode-se também utilizar o LVM, para aumentar a granularidade na alocação de espaços de filesystems e também para permitir modificações nos tamanhos das "​partições"​ depois de tudo instalado. 
- 
-===== Criando o LVM através da linha de comando ===== 
- 
-==== Preparação Inicial ==== 
- 
-Para usar o LVM temos que preparar os discos, ou seja, você precisa de pelo menos uma partição com o tipo "Linux LVM", para que o dispositivo seja reconhecido como parte do LVM. 
- 
-Primeira providência então é criarmos a partição LVM.  
-Execute o comando como root: 
- 
-<file bash> 
-# fdisk -l 
-</​file>​ 
- 
-Uma vez identificado qual(is) dispositivo(s) serão usados, executar a seqüência abaixo (vamos usar o sdb como exemplo): 
- 
-<file bash> 
-Execute o fdisk, como root, apontando para o dispositivo exemplo: fdisk /dev/sdb 
-Crie a partição (opção n); 
-Altere o tipo da partição para 8e (opção t); 
-Saia do fdisk escrevendo a configuração no dispositivo (opção w).  
-</​file>​ 
- 
-Agora pode verificar as partições criadas com o comando ''​fdisk -l /​dev/​sdb''​. ​ 
-Se não ocorreu nenhum erro, será possível ver que a nova partição estará com o tipo "Linux LVM". Neste ponto já é possível começar a configurar o LVM.  
- 
-==== Criando o PV, VG, o LV e o filesystem ==== 
- 
-Nas próximas etapas, passaremos pelos comandos para criação dos PV, VG, LV e filesystems de maneira simplificada. Vamos imaginar que temos duas partições,​ /dev/sdb1 e /dev/sdc1. 
- 
-== Criação dos PV (Physical Volumes), com o comando == 
- 
-<file bash> 
-# pvscan 
-# pvcreate /dev/sdb1 /dev/sdc1 
-</​file>​ 
- 
-== Criação o VG (Volume Group) == 
- 
-<file bash> 
-# vgcreate nome_do_vg /dev/sdb1 /dev/sdc1 
-</​file>​ 
- 
-== Ativação do VG criado == 
- 
-  * Primeiro vamos desativar todos os VGs que estiverem montados 
-  <file bash> 
-  # vgchange -an 
-  </​file>​ 
- 
-  * Depois ativamos somente o que achamos necessário 
-  <file bash> 
-  # vgchange -a y nome_do_vg 
-  </​file>​ 
- 
-== Criação do LV (Logical Volume) == 
- 
-<file bash> 
-# lvcreate -L tamanho(M/​G/​T) nome_do_vg -n nome_do_lv 
-</​file>​ 
- 
-O parâmetro -L é para informar o tamanho do Logical Volume, deve ser informado acompanhado da ordem de grandeza em bytes, ex.: 100M, 10G, 1T. 
- 
-== Criação do filesystem == 
- 
-<file bash> 
-# mkfs.xfs -L nome_do_fs /​dev/​nome_do_vg/​nome_do_lv 
-</​file>​ 
- 
-== Montagem do filesystem == 
- 
-Após tudo executado, teremos um filesystem pronto para ser montado dentro do sistema operacional,​ e assim basta executar o comando a seguir para termos finalizarmos o processo. 
-<file bash> 
-# mount /​dev/​nome_do_vg/​nome_do_lv /​mount_point ​ 
-</​file>​ 
- 
-Se por ventura for necessário colocar o comando de montagem dentro do fstab, para que o sistema de arquivos seja montado automaticamente no momento do boot, faça-o usando o UUID. 
-Para saber o UUID que foi criado use o seguinte comando: 
- 
-<file bash> 
-# xfs_admin -u /​dev/​nome_do_vg/​nome_do_lv 
-</​file>​ 
- 
-===== Usando cache no LVM ===== 
- 
-Como fazer para termos um HDD e um SSD trabalhando juntos para termos o melhor dos dois mundos, a capacidade de armazenamento de um HDD e a velocidade de acesso de um SSD. 
- 
-Farei um exemplo aqui usando o ubuntu 16.04, por que os anteriores não tem o suporte do lvmcache, mas pode ser adaptado para outras distribuições. 
- 
-==== Preparação Inicial ==== 
- 
-O exemplo a seguir será feito a partir de uma instalação já funcional feita usando o LVM no disco de root.  
-Antes de começar é necessário que se tenha instalado os seguintes pacotes nesta instalação,​ para que na finalização da configuração com cache, o sistema volte após o reboot. Todos os comandos devem ser executados com a conta administrativa (root). 
- 
-<file bash> 
-apt install dmraid 
-apt install thin-provisioning-tools 
-</​file>​ 
- 
-Depois disso temos que fazer algumas customizações na criação do initrd. Para isso é necessário executar dois passos: 
- 
-Primeira modificação é acrescentar no arquivo modules, que está em /​etc/​initramfs-tools os seguintes parâmetros:​ 
-<file bash> 
-echo "​dm_cache"​ >> /​etc/​initramfs-tools/​modules 
-echo "​dm_cache_mq"​ >> /​etc/​initramfs-tools/​modules 
-echo "​dm_cache_smq"​ >> /​etc/​initramfs-tools/​modules 
-echo "​dm_persistent_data"​ >> /​etc/​initramfs-tools/​modules 
-echo "​dm_bufio"​ >> /​etc/​initramfs-tools/​modules 
-</​file>​ 
- 
-Segunda modificação a ser realizada é acrescentar o seguinte script dentro do diretório /​etc/​initramfs-tools/​hooks com o nome lvmcache. O conteúdo do referido script deve ser o seguinte: 
-<file bash> 
-#!/bin/sh 
- 
-PREREQ="​lvm2"​ 
- 
-prereqs() 
-{ 
-    echo "​$PREREQ"​ 
-} 
- 
-case $1 in 
-prereqs) 
-    prereqs 
-    exit 0 
-    ;; 
-esac 
- 
-if [ ! -x /sbin/lvm ]; then 
-    exit 0 
-fi 
- 
-. /​usr/​share/​initramfs-tools/​hook-functions 
- 
-copy_exec /​usr/​sbin/​cache_check 
-copy_exec /​usr/​sbin/​cache_dump 
-copy_exec /​usr/​sbin/​cache_metadata_size 
-copy_exec /​usr/​sbin/​cache_repair 
-copy_exec /​usr/​sbin/​cache_restore 
- 
-for x in dm_cache_cleaner dm_cache_smq dm_cache dm_persistent_data dm_bio_prison dm_cache_mq dm_bufio 
-do 
-    manual_add_modules ${x} 
-done 
-</​file>​ 
- 
-Depois disso devemos executar dois comandos para gerar a nova imagem do initrd: 
-<file bash> 
-chmod +x /​etc/​initramfs-tools/​hooks/​lvmcache 
-update-initramfs -u 
-</​file>​ 
-  
-==== Criando o disco de cache ==== 
- 
-Acrescentar o disco SSD que será usado como cache, como o sistema já estava instalado e funcionando,​ neste exemplo assumirei que o SSD entrou no sistema como o /dev/sdb. 
- 
-Vamos prepará-lo para ser usado como lvm, através do seguinte comando: 
-<file bash> 
-pvcreate /dev/sdb 
-</​file>​ 
- 
-Depois que o disco foi preparado para fazer parte do lvm, temos que anexá-lo ao vg no qual se usará o disco como cache, isto deve ser feito usando o comando a seguir: 
-<file bash> 
-vgextend <​nome_do_vg>​ /dev/sdb 
-</​file>​ 
- 
-A partir daí já se pode criar o logical volume que será usado como cache e anexá-lo ao logical volume que queiras que tenha o cache. Isto pode ser feito em apenas um passo, usando o seguinte comando, onde estarei anexando o cache ao disco de root: 
-<file bash> 
-lvcreate --type cache -L 10000M --cachemode writeback -nCacheLV ubuntu-vg/​root /dev/sdb 
-</​file>​ 
- 
-Se não quiseres que cache atue no momento da escrita, deve-se usar o outro modo de cache, neste caso o comando seria: 
-<file bash> 
-lvcreate --type cache -L 10000M --cachemode writethrough -nCacheLV ubuntu-vg/​root /dev/sdb 
-</​file> ​ 
- 
-Pronto !!! O seu disco agora tem a capacidade de um HDD, com a velocidade de um SSD. 
- 
-==== Atualização para o ubuntu 18.04. ==== 
-No caso dos ubuntu'​s mais novos os comandos tem uma outra seqüência. Vou descrevê-las abaixo: 
-  - Criar a área de cache de dados 
-<file bash> 
-lvcreate -n DCache -L 10000M ubuntu-vg /dev/sdb 
-</​file>​ 
-  - Criar a área de cache de metadados 
-<file bash> 
-lvcreate -n MCache -L 10M ubuntu-vg /dev/sdb 
-</​file>​ 
-  - Criar o pool que combina as duas áreas 
-<file bash> 
-lvconvert --type cache-pool --poolmetadata ubuntu-vg/​MCache ubuntu-vg/​DCache 
-</​file>​ 
-  - Associar este pool criado ao disco que se pretende cachear 
-<file bash> 
-lvconvert --type cache --cachepool ubuntu-vg/​DCache --cachemode writeback ubuntu-vg/​ubuntu-lv 
-</​file>​ 
- 
-==== Para remover o cache associado ao pool ==== 
-Aqui temos alguns passos a fazer, mas mesmo assim é uma operação simples. Entretanto demanda um tempo razoável. 
-Bom, vamos lá. 
-   - Comando para remover o volume lógico do cache 
-<file bash> 
-lvremove ubuntu-vg/​DCache 
-</​file>​ 
-   - Executar o comando pvdisplay e vgdisplay para identificar qual dispositivo físico deve ser retirado 
-<file bash> ​ 
-# pvdisplay 
-  --- Physical volume --- 
-  PV Name               /​dev/​sda3 
-  VG Name               ​ubuntu-vg 
-  PV Size               <​31.00 GiB / not usable 1.00 MiB 
-  Allocatable ​          yes (but full) 
-  PE Size               4.00 MiB 
-  Total PE              7935 
-  Free PE               0 
-  Allocated PE          7935 
-  PV UUID               ​Sd7F59-8xtc-Ccou-TFOV-GpVo-tQQZ-5FuExu 
-    
-  --- Physical volume --- 
-  PV Name               /​dev/​sdc 
-  VG Name               ​ubuntu-vg 
-  PV Size               8.00 GiB / not usable 4.00 MiB 
-  Allocatable ​          ​yes ​ 
-  PE Size               4.00 MiB 
-  Total PE              2047 
-  Free PE               2047 
-  Allocated PE          0 
-  PV UUID               ​0pvYxd-4pTf-HzGh-X1cX-lVH1-of1Q-gX0vOI 
- 
-# vgdisplay 
-  --- Volume group --- 
-  VG Name               ​ubuntu-vg 
-  System ID              
-  Format ​               lvm2 
-  Metadata Areas        2 
-  Metadata Sequence No  15 
-  VG Access ​            ​read/​write 
-  VG Status ​            ​resizable 
-  MAX LV                0 
-  Cur LV                1 
-  Open LV               1 
-  Max PV                0 
-  Cur PV                2 
-  Act PV                2 
-  VG Size               38.99 GiB 
-  PE Size               4.00 MiB 
-  Total PE              9982 
-  Alloc PE / Size       7935 / <31.00 GiB 
-  Free  PE / Size       2047 / <8.00 GiB 
-  VG UUID               ​9JlN4z-HffT-g4k0-xFuZ-gGyN-xv0y-B14hIG 
-  
-</​file>​ 
-Então para o nosso caso atual,vimos que temos 8G de espaço livre no VG através do comando vgdisplay e aí podemos remover o dispositivo /dev/sdc como mostra o pvdisplay. 
-    - Executando a diminuição do grupo de volume 
-<file bash> 
-vgreduce ubuntu-vg /dev/sdc 
-</​file>​ 
-    - Removendo o dispositivo físico do grupo de volume 
-<file bash> 
-pvremove /dev/sdc 
-</​file>​ 
-Para verificar que tudo foi apagado, podemos executar os comandos pvdisplay e vgdisplay novamente. 
-<file bash> 
-# pvdisplay 
-  --- Physical volume --- 
-  PV Name               /​dev/​sda3 
-  VG Name               ​ubuntu-vg 
-  PV Size               <​31.00 GiB / not usable 1.00 MiB 
-  Allocatable ​          yes (but full) 
-  PE Size               4.00 MiB 
-  Total PE              7935 
-  Free PE               0 
-  Allocated PE          7935 
-  PV UUID               ​Sd7F59-8xtc-Ccou-TFOV-GpVo-tQQZ-5FuExu 
-    
-# vgdisplay 
-  --- Volume group --- 
-  VG Name               ​ubuntu-vg 
-  System ID              
-  Format ​               lvm2 
-  Metadata Areas        1 
-  Metadata Sequence No  16 
-  VG Access ​            ​read/​write 
-  VG Status ​            ​resizable 
-  MAX LV                0 
-  Cur LV                1 
-  Open LV               1 
-  Max PV                0 
-  Cur PV                1 
-  Act PV                1 
-  VG Size               <​31.00 GiB 
-  PE Size               4.00 MiB 
-  Total PE              7935 
-  Alloc PE / Size       7935 / <31.00 GiB 
-  Free  PE / Size       0 / 0    
-  VG UUID               ​9JlN4z-HffT-g4k0-xFuZ-gGyN-xv0y-B14hIG 
-</​file>​ 
- 
- 
-==== Monitorando o uso do disco de cache ==== 
- 
-Se quiseres observar como o disco de cache esta se comportando no sistema, basta executar o comando abaixo: 
-<file bash> 
-lvs -o cache_read_hits,​cache_read_misses,​cache_write_hits,​cache_write_misses ubuntu-vg/​root 
-</​file>​ 
- 
-