LVM e clonagem de HDs

5

Usando o Linux, tenho vários níveis de backup. Um deles é um setor periódico por cópia setorial (usando dd ) do disco rígido do meu laptop para um disco USB externo. Sim, eu tenho outros backups também, como o rsync remoto.

Essa abordagem (o disco dd ) está OK ao clonar um disco rígido sem volumes LVM, pois eu posso conectar o disco externo a qualquer momento e montar as partições simplesmente montando /dev/sdb* em vez de /dev/sda* . Trivial e prático.

Hoje mudei TODO meu disco rígido (incluindo o /boot ) para o LVM. Tudo funciona bem. Vou enfatizá-lo por alguns dias, e então farei uma cópia setorial por setor para o meu disco rígido externo.

Agora eu tenho um problema, eu acho.

Se, no futuro, eu conectar o HDD USB externo para recuperar qualquer arquivo, o SO detectará uma configuração duplicada do LVM, com o mesmo nome e o mesmo UUID. Mesmo fazendo um vgrename ( qual LVM seria renomeado, o HDD interno ou o HDD externo? ), o UUID clonado não será alterado. Existe algum comando para alterar o nome e o UUID? Idealmente, eu clonaria o HDD e depois mudaria o nome do grupo LVM e seu UUID, mas não sei como fazê-lo.

Outra questão relacionada seria ...

No passado, inicializei meu laptop usando o disco externo, usando o menu de inicialização do BIOS e alterando manualmente as entradas do GRUB para inicializar a partir de /dev/sdb em vez de /dev/sda . Mas agora minha configuração atual do GRUB inicializa diretamente de um volume lógico do LVM, algo como: set root='(LVM-root)' no meu grub.cfg . Então ... O que vai acontecer com volumes duplicados?

Alguma sugestão?

Acho que consegui reparticionar meu disco rígido externo e alterar a estratégia de backup de dd para rsync , mas esse disco também tem o Windows instalado e eu realmente gostaria de ter uma cópia física "real".

    
por jcea 11.03.2011 / 03:22

4 respostas

2

Fechando este problema, depois de um ano. Escrevi a resposta no meu site pessoal . Espero que seja útil para outra pessoa.

I use several levels of backup, from rsync to an external disk to rsync+ZFS over a remote computer. One of the backups I do is a -from time to time- "dd" from my laptop harddisk to an external USB attached (connected only for the duration of the backup procedure). I do this, for instance, before taking my laptop for a trip.

This procedure worked well for ages. Until I started using LVM on my laptop.

If you use LVM on your computer, you copy your harddisk using dd (booting from a LiveCD) and you plug the external harddisk while the computer is running normally, later, YOU WILL CORRUPT YOUR DATA, EVEN LOSE ALL YOUR FILESYSTEM BEYOND ANY REPAIR!!!.

Why?. Because when you plug the external harddisk the OS will see the same LVM configuration in both disks and will naively assume that both disks are the same, accessible via a multipath link, so it will spread reads and writes between both disks, irredeemably corrupting BOTH. You will trash both your live data and your backup!.

This happened to me once. I lost data. I had other backups, for a few days before, so I didn't lose anything very important, but it was quite annoying and exposed a flaw in my backup strategy.

Solution: Make sure the LVM configuration in the backup disk is different. The problem is... How to do it?

I posted the question on superuser.com (Stack Exchange) but I didn't get any good answer. So I developed my own procedure and, after more than a year of battletesting it, I am posting it here and closing the original question:

  • Be sure that if something goes bad, your computer will not boot automatically. In my case, my laptop doesn't boot automatically if the power goes off and on again. Moreover, the harddisk is encrypted, so it will ask for a password.

    This is necessary because you can corrupt BOTH disks if you reboot with the backup disk attached before completing the procedure.

  • Boot from a Live CD. You can not do a "dd" from a live partition, if you expect to be able to recover your data :-).

    Something to try in the future would be to use LVM snapshots to be able to do the backup while I am using the computer, but then I have the duplicate LVM issue, that I am trying to avoid here. Another option would be to reconfigure LVM to mirror the data live to the external harddisk, and break the mirror after the sync is complete. But that sounds risky, and wouldn't backup my Windows partition or the data I don't keep in LVM volumes.

  • After booting the LiveCD, plug the external USB harddisk.

  • Login as "root" and execute vgchange -a n. This command will disable LVM in both disks. I execute the command a couple of times, to be sure.

  • Be sure /dev/sda is the source (internal harddisk) and /dev/sdb is the destination (USB external harddisk). For instance, do dd if=/dev/sdb of=/dev/null and check which harddisk LED blinks.

  • When you are sure about which disk is which, you do the copy with dd if=/dev/sda of=/dev/sdb bs=65536. With my configuration, the backup takes four hours. My internal harddisk is 500GB, and my USB is copying at 35MB/s. I do this at night, while I sleep.

    Your external USB harddisk must be, AT LEAST, as big as your internal harddisk. It is obvious, isn't it?

  • After this copy is done, you have an exact clone of your internal harddisk. The backup is done. But now you will have an issue if you ever plug this harddisk to your computer while you are working with your internal harddisk, as already described. We need to change the LVM configuration.

  • Now, after the "dd" is done, do "sync" and unplug the external UDB harddisk.

  • You execute pvchange --uuid /dev/sda*. This command will change the UUID of all the physical volumes in your internal harddisk. This command is safe even if you have partitions that are not physical volumes for LVM, because they will be automatically and safely skipped.

    The system knows which partitions are physical volumes because the partition type and because you executed "pvcreate" when you created the LVM.

  • You execute vgchange -u LVM. This command will change the UUID of the LVM volume group. My volume group is called "LVM", by the way.

  • You execute vgscan. This command will scan internal harddisk (the only currently attached) and will locate your LVM volume group there.

  • You execute vgrename LVM LVM2, to change the name of your Volume Group.

  • Now you plug your external USB harddisk.

  • You "vgscan" again, this time to locate the Volume Group in the external USB harddisk. Now you will have two Volume Groups. One called "LVM2" in your internal harddisk and other called "LVM" in your USB external harddisk.

  • Rename the Volume Group in the external USB harddisk with vgrename LVM LVM_BACKUP.

  • And rename the Volume Group in the internal harddisk back to the original name: vgrename LVM2 LVM.

  • You are done. You can review the situation with vgdisplay -v.

    You will see that Logical Volumes UUIDs are the same in both Volume Groups, but that doesn't seem to cause any problem, and I don't know how to change them.

  • Unplug your external USB harddisk, store it in a safe place, reboot your computer, eject the LiveCD and go back to business.

    
por 31.05.2012 / 14:23
3

Concordo com uma das respostas anteriores - executar o dd em todo o disco não é uma ótima solução aqui. Se o motivo pelo qual você está preso no dd tem a ver com o backup de outro sistema operacional, então você pode usar o dd apenas para as outras partições do sistema operacional e o rsync para as partições do linux.

Parte do problema é que, se você executar o dd de todo o disco enquanto tiver sistemas de arquivos ativados e montados a partir dele, não será possível garantir que o backup seja consistente. Pode funcionar 9 vezes em 10, mas sob qualquer carga, o backup resultante pode estar corrompido. A única maneira de garantir que isso não aconteça é desmontar todos os sistemas de arquivos e desativar todos os grupos de volumes durante todo o tempo em que o dd estiver sendo executado. Não é muito conveniente se o seu / é montado a partir do LVM.

Em qualquer caso, se você insistir em manter essa abordagem, a ferramenta que você está procurando para renomear um vg duplicado é chamada de "vgimportclone". Ele é destinado ao uso com instantâneos no nível do dispositivo, mas também funcionará com o dd.

    
por 17.12.2011 / 00:03
1

Estudando a questão com cuidado, acho que a abordagem correta seria:

  1. Conecte o HD externo.

  2. Desative o gerenciamento de LVM do segundo HD: "vgchange -a n / dev / LVM2".

  3. Clone o disco rígido, com "dd".

  4. Para cada volume físico, gere novos UUIDs para o disco clone, com "pvchange -u / dev / hdb *".

  5. Altere o UUID VG com "vgchange -u LVM". Isso vai mudar o UUID de um dos VG, pode ser o original ou o clone. Não importa. Ser diferente é o suficiente.

  6. Altere o nome do VG do disco clonado de "LVM" para "LVM2", com "vgrename". Eu não sei se isso funcionaria sem um "vgscan" anterior para "descobrir" o novo VG.

Isso funcionaria?.

    
por 11.03.2011 / 04:05
0

Eu realmente não acho que o dd seja a melhor opção para backups na maioria dos casos, por vários motivos. Uma opção como mencionada é usar o espelhamento do LVM. Você pode desconectar a unidade externa e, ao reconectá-la, ela será ressincronizada sem precisar copiar 100% de tudo, incluindo setores vazios, como o dd faria. Mas pessoalmente eu acho ainda melhor / mais simples é apenas usar o rsync para copiar para o seu disco externo. Não só será por faaaaaar o mais rápido, seu backup também é imediatamente utilizável sem quaisquer etapas extras necessárias a todos. Combine isso com os instantâneos do LVM na unidade externa e você terá várias cópias pontuais que podem ser usadas a qualquer momento sem qualquer truque extra.

    
por 29.03.2011 / 13:31

Tags