Confirmar ou reverter uma captura instantânea do Linux LVM?

16

Estou prestes a executar uma atualização experimental no meu servidor CentOS 5. Se a atualização falhar, desejo poder fazer o backup das alterações no sistema de arquivos. Esse cenário parece semelhante ao exemplo na Seção 3.8 do instantâneo LTO do HOWTO para LVM2 de leitura e gravação - mas o exemplo está faltando no tutorial real.

  1. Como eu confirmaria as alterações, mesclando-as novamente na partição original?

  2. Como eu reverteria as alterações, restaurando o sistema de arquivos de volta ao seu estado original? Devo assumir que precisarei reiniciar vários serviços, se não reiniciar completamente?

  3. É possível capturar instantâneos apenas determinados diretórios em uma partição ou é uma operação para toda a partição?

Shewfig
fonte

Respostas:

11

A funcionalidade de mesclagem de capturas instantâneas do LVM2 / mapeador de dispositivo estará disponível se você estiver executando o Linux 2.6.33+ e usando o LVM 2.0.58+:

lvconvert --merge

Veja este post: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

Ele faz referência a http://kernelnewbies.org/Linux_2_6_33 (veja a seção 5, MD / DM) e o changelog do LVM em 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

Mas ainda não sei como usá-lo corretamente ;-)

Bertrand Mathieu
fonte
dmsetup targetsdeve mostrar a mesclagem de instantâneo, se esse for o caso, o comando mesclar, aplicado ao snapshot-lv reverterá de volta ao estado em que o instantâneo foi tirado.
Nils
O OP parece confuso sobre confirmar alterações através de algum tipo de etapa de mesclagem. As alterações estão sendo confirmadas à medida que o instantâneo aumenta de tamanho. O instantâneo (das alterações) é a informação necessária para fazer o backup deles através do lvconvert --merge. Se o OP estiver satisfeito com as alterações, ele poderá excluir o instantâneo via lvremove.
Vince
20

Eu apenas tentei uma atualização baseada em instantâneo com o Ubuntu. E sim, eu precisava reiniciar várias vezes. Primeiro, renomeie o root-lv original para outra coisa, para que você possa dar ao snapshot o nome original (uma vez que uma atualização cria muitas alterações e as alterações são mais rápidas no snapshot do que no original):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

O tamanho deve ser escolhido adequadamente. Em seguida, reinicie, para que o 'novo' lvm / ubuntu seja montado como root e você possa executar a atualização. Agora você pode testar a nova versão e até mudar para o sistema antigo,

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

Se você deseja interromper a atualização, basta executar (no sistema antigo)

# lvremove lvm/root-new

Se você deseja confirmar as alterações, basta executar (a partir do sistema antigo)

# lvconvert --merge lvm/root-new

ou, a partir do novo sistema

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

seguido por uma reinicialização. O sistema se recusará a fazer a mesclagem imediatamente, pois os volumes estão abertos. Portanto, a mesclagem será iniciada durante a inicialização e continuada enquanto você já puder trabalhar com o sistema.

Ah, e a propósito: Ao mudar entre os sistemas, lembre-se de usar o kernel apropriado. Como o / boot não faz parte do lvm, os kernels antigos e novos seriam colocados lado a lado.

Viktor Dick
fonte
Obrigado pela sua resposta. Acabei de reproduzir seu procedimento em uma máquina virtual CentOS 7 e funcionou como um encanto. Após redefinir minha máquina virtual no meio do processo de mesclagem, o subsistema LVM a reiniciou enquanto o sistema ainda estava acessando os arquivos atualizados.
Anderson Medeiros Gomes
Parte desta resposta parece sugerir alterações através do lvconvert --merge. À medida que o instantâneo aumenta de tamanho, as alterações também estão sendo confirmadas. Um lvconvert --merge reverte (retira) as alterações usando as informações da captura instantânea.
Vince
10

Ok, acho que descobri a releitura do HOWTO 3.8.

  • Os instantâneos somente leitura (como LVM1) contêm as diferenças no nível de bloco após a criação do instantâneo - o original ainda é alterado, mas o instantâneo mantém uma representação do original. Lendo a partir das instantâneo apresenta os dados tal como se encontrava nesse momento.
  • Os instantâneos de leitura e gravação (padrão no LVM2) podem ser gravados em: eles são uma bifurcação da partição original. Escrevendo para o snapshot não muda o original.

A maneira como um instantâneo funciona é um conjunto de alterações no nível de bloco do original. Portanto, quando o original é gravado, acontecem as seguintes coisas:

  1. Algo tenta escrever no original.
  2. O original é lido e os blocos do original são copiados para o instantâneo.
  3. O original é alterado.
  4. O instantâneo contém as "diferenças reversas" - as alterações que fazem o original parecer como era quando o instantâneo foi criado.

Portanto, jogar fora o instantâneo não afetará o original - porque o original foi alterado e o instantâneo continha apenas uma lista dessas alterações.

Respondendo à minha própria pergunta:

Crie um novo instantâneo com o LVM. Se a atualização puder ser configurada para gravar no ponto de montagem do instantâneo, use um instantâneo R / W. Caso contrário, RO ou R / W servirão.

Então:

  • Se estiver gravando no ponto de montagem de captura instantânea R / W , confirme escrevendo a captura instantânea no original e reverta jogando fora a captura instantânea.
  • Se estiver gravando no ponto de montagem original , confirme jogando fora o instantâneo e reverta gravando do instantâneo no original.

Ainda não encontrei uma ferramenta específica para executar essa mesclagem - e, como meu cenário não é exatamente o uso pretendido dos instantâneos, pode não haver um. Parece um trabalho para rdiff.

Shewfig
fonte
Ainda não existe uma ferramenta de mesclagem LVM. Está em andamento, mas não acredito que esteja completo.
Ignacio Vazquez-Abrams
a ferramenta de mesclagem existe agora (pelo menos no Ubuntu Trusty) - lvconvert --merge <snapshot-name>"restaurará" seu disco original para esse instantâneo e excluirá esse instantâneo. Obviamente, você pode restaurá-lo rapidamente.
dpb 12/08/14
3

O LVM funciona no nível do bloco. Até 'não sabe' o que é um sistema de arquivos. Portanto, não é possível capturar instantâneos apenas determinados diretórios, a menos que um sistema de arquivos de um volume LVM diferente esteja montado lá.

Ao criar um instantâneo do LVM, você realmente solicita a duplicação 'copy on write' de um volume. Qualquer bloco que seria alterado no volume da captura instantânea será armazenado sem modificação na captura instantânea primeiro. Portanto, para 'confirmar alterações', você não precisa fazer nada. Basta remover o volume da captura instantânea.

Não sei bem qual é a maneira recomendada de 'reverter alterações', pois nunca usei o LVM nesse cenário, mas acho que ele foi descrito bem na documentação do LVM em algum lugar. Seja o que for, você provavelmente precisará reiniciar tudo o que foi alterado, uma reinicialização pode ser uma boa idéia.

Jacek Konieczny
fonte
2
  1. Não há razão para mesclar alguns. Basta remover o instantâneo, o LV de origem permanece alterado
  2. Mesclagem necessária para reverter as alterações lvconvert --merge <snapshot name>
  3. O LVM trabalha com dispositivos de bloco. Quaisquer alterações relacionadas ao FS devem ser feitas por utilitários especiais (xfs_growfs, e2fsck, ...) de acordo com o tipo de FS

O instantâneo 'congela' o estado original do LV. Remover instantâneo significa esquecer esse estado. Mesclar snapshot significa retornar a esse estado

Porém, dentro do LVM, ele salva os dados reescritos no instantâneo: verifique se o tamanho do instantâneo atende à quantidade esperada de alterações no LV e no instantâneo

deman_killer
fonte
Na verdade, o instantâneo não congela nada. Ele registra as alterações em um local extra, para que possam ser revertidas posteriormente, se desejado.
Vince
0

A documentação é confusa. Parece-me que lvcreate --merge significa reverter todas as alterações e lvremove significa confirmar as alterações. A distinção está em como você a usa.

Na maioria dos casos, você está apenas usando o instantâneo como uma cópia de ponto congelado no tempo e somente leitura do volume ao vivo, e o volume ao vivo continua mudando. Nesse caso, se você mesclar, logicamente isso significaria que você substituiria o volume ao vivo com a cópia congelada ou, em outras palavras, mesclar significa mudanças de reversão e remover significa alterações de confirmação.

Se você gravar no instantâneo (uma nova opção com o LVM2), que não é o comportamento padrão que parece, e provavelmente requer alteração de configuração em outro local para fazer com que os aplicativos gravem no instantâneo em vez do volume original, o inverso será verdadeiro.

Tenha cuidado ao lidar com instantâneos, pois algumas pessoas assumem que você pretende usá-los de uma maneira e fornecerão instruções que podem destruir seu sistema se você operar com a hipótese oposta!

RedScourge
fonte
Você escreve no instantâneo simplesmente montando o instantâneo; o que é montado onde tem pouco a ver com os padrões do LVM - ele não se importa muito com o que exatamente você faz com cada volume lógico, seja um instantâneo ou não, apenas rastreia se está aberto ou não.
Josip Rodin