Gerenciando instantâneos LVM em LVM2

instantâneos LVM

agora começaremos a examinar alguns tópicos LVM2 mais avançados e o primeiro é gerenciar instantâneos LVM. No próximo blog, veremos o provisionamento fino no LVM. Instantâneos LVM são cópias pontuais de volumes lógicos LVM. Eles são Espaço-effecient em que eles começam a armazenar nenhum dado, mas como os dados são chenged na fonte LV os dados orignal é gravado para o volume instantâneo LVM. Os casos de uso para isso incluem:

  • Backups: Os instantâneos LVM em si não são um backup eficiente, pois precisam ser armazenados no mesmo grupo de Volume. No entanto, os instantâneos podem ser usados para aumentar os backups. Basta criar um instantâneo do volume de destino e, em seguida, fazer backup do volume do instantâneo para superar quaisquer problemas relacionados à simultaneidade de arquivos durante o backup. O instantâneo pode ser excluído no final do processo de backup
  • teste e destrua: os instantâneos LVM são uma cópia de leitura / gravação do LV original. Você pode criar um LVM instantâneos de um LV que contém scripts complexos, alterar ansd testá-los tanto quanto você deseja e, em seguida, destruir os dados quando você tiver terminado. Todos, sem afetar os scripts originais.
  • Teste de Novas Implantações de Software: A instalação de uma nova versão do software pode incluir centenas de arquivos localizados através de muitos software de diretórios. Se o local de destino para todo o software em um único Volume Lógico LVM, em seguida, podemos criar um snapshot antes de actualizar o software. Se depois de testar o software não estiver funcionando da maneira desejada. É uma tarefa simples reverter o LV original para o instantâneo. O instantâneo, é claro, mantém essa cópia pontual do volume de origem original no momento em que o instantâneo foi tirado.

siga o link abaixo para baixar o ‘Guia Completo para LVM2 no Linux’, custando apenas £1,99! Depois de baixado, o eBook pode ser impresso, se necessário.

baixar eBook

preparando-se para criar um snapshots LVM

um snapshot LVM deve ser criado no mesmo grupo de Volume que o LV de origem. Usando a tecnologia CoW (Copy on Write), o armazenamento subjacente deve ser o mesmo. Permitindo que os dados inalterados no instantâneo sejam lidos da fonte LV original. Nosso grupo de Volume está cheio, então excluiremos o Volume lógico existente e recriaremos um tamanho menor. Também usaremos dois pontos de montagem, / mnt / original e/MNT / snap.

depois de todo esse trabalho, estamos de volta à situação em que temos um Volume lógico recém-formatado que chamamos de lv1. Isso agora é montado em / mnt / original para fins da demonstração. Criamos lv1 em 600 MiB deixando 392 MiB espaço livre no grupo de Volume vg1. Lembre-se de que estamos preocupados apenas com o espaço livre no mesmo grupo de Volume que nossos Volumes lógicos. Instantâneo tem que ser criada no mesmo Grupo de Volume como a fonte LV. Se verificar a saída do comando vgs podemos ver o espaço livre disponível:

# vgs VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 992.00m 392.00m vg2 2 0 0 wz--n- 192.00m 192.00m

Este comando, como vimos antes, é uma ótima maneira de resumir Grupos de Volume. Para poder criar um instantâneo de ponto no tempo do volume lógico, lv1, precisaremos adicionar alguns dados. Vamos simplesmente copiar o arquivo / etc / services para / MNT / original.

 # cp /etc/services /mnt/original/ # wc -l /mnt/original/services 612 /mnt/original/services

também podemos ver que este arquivo, no meu servidor Ubuntu, tem 612 linhas. Agora temos dados, então vamos continuar.

criando instantâneos LVM em LVM2

os instantâneos LVM são, em essência, Volumes lógicos simples com algumas guloseimas extras aparafusadas. Então, eles são criados usando o comando lvcreate e a opção –S. Também precisamos especificar o volume de origem ao criar o instantâneo.

 # lvcreate -L 12m -s /dev/vg1/lv1 -n lv1_snap Logical volume "lv1_snap" created.

nas opções de comando, podemos ver que primeiro especificamos o tamanho como 12 MiB. Só precisamos de espaço suficiente para armazenar as alterações que fazemos na fonte. Poderíamos ter preenchido o LV de origem com 600 MiB de dados, mas se apenas 12 MiB provavelmente mudar, precisamos apenas de um volume instantâneo de 12 MiB. Dimensionamos o instantâneo para corresponder ao tamanho das alterações que ocorrerão. A opção-S ou-snapshot especifica o volume de origem para snapshot. Como antes, a opção-n define o nome do LV que estamos criando.O instantâneo é lido / escrito para que possa ser montado. Vamos em frente e montá-lo para o diretório / mnt / snap:

# mount /dev/vg1/lv1_snap /mnt/snap/

poderemos ver o mesmo conteúdo em ambos os diretórios, embora nenhuma alteração tenha ocorrido. Snapshots LVM links para os dados originais até que seja alterado.

quando olhamos para os detalhes do volume de origem e instantâneo, ele parecerá um pouco diferente. Em primeiro lugar, o volume lv1_snap. O snapshot LV.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.36% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

podemos lembrar, eu certamente espero que você faça, que criamos isso com um tamanho de 12 MiB. O tamanho do VE, no entanto, mostra como 600 MiB. O tamanho que vemos é do LV original ou de origem. o tamanho do instantâneo é mostrado no tamanho da tabela COW. A cópia na gravação ocorre quando os dados são alterados na fonte e os dados originais são copiados para o volume do instantâneo. O volume do instantâneo sempre listará os arquivos de instantâneo originais, não importa se eles mudaram ou não. Na criação do instantâneo, não há alterações de CoW para armazenar, portanto, o valor alocado é muito baixo para iniciar e aumentará à medida que as alterações são feitas nos dados de origem. Quando olhamos para os detalhes da tela agora para o lv1 LV, também será um pouco diferente:

# lvdisplay /dev/vg1/lv1 --- Logical volume --- LV Path /dev/vg1/lv1 LV Name lv1 VG Name vg1 LV UUID dmVaWm-kA9V-xouM-OZBR-b7Id-aMUh-EWymB0 LV Write Access read/write LV Creation host, time yogi, 2017-08-21 18:51:57 +0000 LV snapshot status source of lv1_snap LV Status available # open 1 LV Size 600.00 MiB Current LE 150 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0

podemos ver que ele mostra como a origem do instantâneo para lv1_snap.

alterando os dados do snapshot LVM

se agora fizermos uma alteração nos dados no volume de origem, começaremos a ver uma diferença nos dados no volume do snapshot. O volume do instantâneo manterá os dados originais, enquanto o LV de origem manterá as alterações. Primeiro, adicionaremos um novo arquivo ao volume de origem:

# cp /etc/hosts /mnt/original/

agora podemos ver que o conteúdo difere para a fonte para os volumes snaphot

também podemos ver que começamos a consumir mais espaço de vaca no Volume lógico. Voltando ao lvdisplay para lv1_snap, veremos a porcentagem alocada para instantâneo aumentando.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.98% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

mesmo que não tenhamos alterado os dados existentes, a adição de novos dados também afetará o instantâneo, pois o volume do instantâneo deve mostrar os dados como era quando o instantâneo foi feito. Se necessário, devemos ser capazes de reverter o original para os dados snapshotted.

em seguida, substituiremos o arquivo /etc/services original:

# > /mnt/original/services

o arquivo / MNT / original / serviços agora estará vazio. Se verificarmos o arquivo de instantâneo, ele ainda terá os dados. Usando o comando wc, podemos contar o número de linhas em cada arquivo:

 # wc -l /mnt/original/services /mnt/snap/services 0 /mnt/original/services 612 /mnt/snap/services 612 total

é claro que, verificando a saída de lvdisplay para lv1_snap vai mostrar que a Alocada para o instantâneo percentagem aumentou com a mudança:

Allocated to snapshot 1.17%

Alterações de Volume para LVM Instantâneos

Os atributos para a origem e instantâneo LVs vai mudar quando o instantâneo foi criado. Podemos ver isso em detalhes com o comando lvdisplay mas é melhor resumido com o comando lvs:

Há 10 atributos que nós lemos da esquerda para a direita:

Para lv1 os atributos de leitura:

  • Tipo De Volume: Origem. A origem de um instantâneo
  • Permissões: Gravável
  • Política de Alocação: Herdado do Volume de Grupo
  • Corrigido menor número não está definido
  • Estado: É marcada como activa
  • Dispositivo: Está aberta ou instalada
  • tipo de Destino: Instantâneo, isto é, ela está participando de um instantâneo

Para lv1_snap os atributos de leitura:

  • Tipo de Volume: volume Instantâneo
  • Permissões: Gravável
  • Política de Alocação de: Herdado do Volume de Grupo
  • Corrigido menor número não está definido
  • Estado: É marcada como activa
  • Dispositivo: Está aberta ou instalada
  • tipo de Destino: Instantâneo, isto é, ela está participando de um instantâneo

original e destino LVs devem estar no mesmo Grupo de Volume como já mencionado, mas não necessariamente compartilhar o mesmo dispositivos dentro desses Grupos de Volume. Isso normalmente é captada a partir de nós, mas podemos adicionar a opção para o lvs comando:

Adicionando –o para opções e +dispositivos irão mostrar subjacente dispositivos que compõem o LV. Podemos ver que lv1 é maior do que /dev/sdc1 ou /dev/sdc2 e é dividido em dois. Considerando que, vg1_snap pode fazer uso do espaço restante em /dev/sdc2. O número entre parênteses após o nome do dispositivo indica o número de extensão física que o LV inicia a partir do dispositivo. Podemos ver que lv1 começa a partir da extensão 0 para ambos/dev /sdc1 e/dev / sdc2 e lv1_snap começa na extensão 26 de /dev/sdc2. Para ver todas as opções disponíveis para você com a opção –o, use o comando:

# lvs -o help

como a lista é extensa, não incluímos a saída.

além de olhar diretamente para os Volumes lógicos, também podemos usar o comando lsblk. Aqui veremos mais mudanças do que talvez você pense:

 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 100M 0 loop sdb 8:16 0 256M 0 disk loop0 7:0 0 100M 0 loop sdc 8:32 0 1000M 0 disk ├─sdc2 8:34 0 500M 0 part │ ├─vg1-lv1-real 252:1 0 600M 0 lvm │ │ ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original │ │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap │ └─vg1-lv1_snap-cow 252:2 0 12M 0 lvm │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap └─sdc1 8:33 0 499M 0 part └─vg1-lv1-real 252:1 0 600M 0 lvm ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap sda 8:0 0 9.8G 0 disk /

já estamos familiarizados com o dispositivo VG1-lv1 e os dispositivos VG1-lv1_snap. Estes têm sido os LVs subjacentes com os quais temos trabalhado. O número principal do kernel ou driver usado com LVM2 é 252. Então, vemos isso para todos os LVs que temos no lugar. O primeiro LV foi vg1-lv1, então este tem o número menor de 0. Quando olhamos para vg1-lv1_snap, no entanto, isso tem um número menor de 3 indicando o 4º LV e não o 2º como podemos esperar. Em vez disso, dois LVs wrapper são criados para o instantâneo, vg1-lv1-real e VG1-lv1_snap-cow. Eles são gerenciados internamente e não nos envolvemos nesses objetos que o LVM2 usa para gerenciar o processo de snapshotting. Cada LV que vemos aqui também possui um dispositivo devmapper correspondente. Se listarmos o diretório / dev e o filer no dm -*, podemos mostrá-los.

# ls /dev/dm-* /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3

novamente. vemos os 4 dispositivos não apenas os 2 que podemos esperar. Portanto, em segundo plano, o LVM2 está gerenciando muito para nós e nos permitindo acessar apenas os elementos de que precisamos.

reverter um Volume para o instantâneo

um cenário de recuperação com instantâneos LVM nos permite reverter para o instantâneo.Se descobrirmos que precisamos reverter o LV original para o instantâneo do ponto no tempo, podemos fazê-lo. Lembre-se de que o instantâneo será uma representação do volume original no momento do instantâneo. Podemos fazer isso depois que uma atualização de software foi testada e a decisão foi tomada para reverter para o instantâneo que deveria ter sido feito antes do processo de atualização de software. Para garantir que nós podemos ver isso em tempo real, vamos desmontar primeiro, tanto LVs:

# umount /mnt/{original,snap}

Se nós não feche os dispositivos de nós vai precisar de esperar até que o original LV, vg1 está próximo activado. Muitas vezes isso está em uma reinicialização. Com ambos os Volumes lógicos agora desmontados e fechados, usamos o comando lvconvert para mesclar o instantâneo com o pai ou origem. Isso está revertendo o Volume lógico de origem para o conteúdo do instantâneo. O instantâneo é removido automaticamente no final do processo.

# lvconvert --merge /dev/vg1/lv1_snap Merging of volume lv1_snap started. lv1: Merged: 99.2% lv1: Merged: 100.0%

dependendo do tamanho dos dados a serem mesclados e da velocidade dos discos, é possível que isso leve algum tempo. Você faz uso da opção-b para fazer o plano de fundo do processo.

se agora montarmos lv1 novamente e verificarmos o conteúdo. Perderemos o arquivo hosts que foi adicionado após a captura do instantâneo. O arquivo de serviços agora temos o conteúdo que overwrote.

 # mount /dev/vg1/lv1 /mnt/original/ # ls /mnt/original/ lost+found services # wc -l /mnt/original/services 612 /mnt/original/services

teste e desenvolvimento

outro uso para instantâneos LVM está em um ambiente de teste. Se você preferir trabalhar diretamente com os dados snapshotted, então você pode. Quando terminar, basta desmontar o snapshot LV e excluí-lo. O LV original subjacente é deixado inalterado. Isso é ótimo onde você deseja talvez trabalhar em scripts sem efetuar os scripts de produção originais.

o processo é praticamente o mesmo, mas trabalhamos apenas com o diretório /mnt/snap agora. Um resumo dos comandos segue:

estendendo o tamanho do instantâneo

Quando criamos um volume de instantâneo, devemos definir um tamanho que consideramos adequado para armazenar todas as alterações feitas no LV original enquanto o instantâneo está no lugar. No entanto, é possível expandir automaticamente um volume de instantâneo, se necessário.

é importante observar que, se um instantâneo preencher completamente, o instantâneo será excluído automaticamente.

as configurações padrão não permitem que os instantâneos cresçam automaticamente. Temos de permitir isso. A configuração do LVM2 está no / etc / lvm / lvm.conf. Se procurarmos as configurações efetivas usando grep:

 # grep -E '^\s*snapshot_auto' /etc/lvm/lvm.conf snapshot_autoextend_threshold = 100 snapshot_autoextend_percent = 20

ter o snapshot_autoextend_threshold definido em 100% significa que o instantâneo nunca crescerá. Assim que atingimos o limite de 100%, o instantâneo é excluído. Se precisarmos de autoextend ativado, considere definir isso para algo como 70. Nesse caso, quando o instantâneo se tornar 70% completo, o tamanho será aumentado. O tamanho do aumento controlado pelo snapshot_autoexend_percent. O padrão é definido como 20%, o que significa que o tamanho aumentará em 20% de seu tamanho atual cada vez que o crescimento for necessário.

Write a Comment

O seu endereço de email não será publicado.