Como clonar melhor um sistema em execução em um novo disco rígido usando o rsync?

22

Eu tenho um sistema executando como um servidor que possui um disco rígido com falha. Embora todos os dados importantes estejam em um RAID e com backup e tudo mais, não tenho uma imagem do próprio sistema. Não há necessidade específica, pois eu posso fazer a instalação, é claro, mas ainda quero tentar fazer um hotcopy antes de seguir o caminho de restauração. Eu sei que há algumas desvantagens nisso como um processo, mas não acho que haja muitas desvantagens em tentar isso como primeiro recurso.

  • Sistema operacional: Ubuntu 12.04.4 LTS
  • Sem cabeça
  • Não espero instalar muito software novo, pois o disco já está falhando :)
  • O sistema está em execução. Estou com medo de pará-lo, aumenta a chance de o disco não voltar. Isso significa que o dd pode estar fora?
  • O novo disco não é do mesmo tamanho (é duas vezes maior) que o antigo, complicando ainda mais o problema do dd.

Minha ideia era

  • hotplug a nova unidade no sistema
  • faça um sistema de arquivos
  • monte-o em / mnt / somedir
  • rsync os arquivos
  • alguma mágica do fstab
  • alguma mágica de inicialização

As perguntas que ainda tenho são:

O que seria um bom comando rsync? Eu estava pensando em:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Estou pulando mais alguns dirs, por exemplo, meus ataques montados etc)

Onde estão as opções:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Estou especificamente pulando -H, -v e --progress para acelerar o processo.
Isso funcionaria para o Ubuntu? Não tenho certeza se o Ubuntu usa links físicos, mas acho que não preciso da opção, preciso?

Após essa execução, eu poderia reiniciar (talvez com uma unidade USB ativa) e executar novamente o rsync se o disco antigo ainda iniciar. Isso resolveria todos os arquivos não legíveis / alterados porque o sistema estava em execução, suponho.


Como corrigir a inicialização?
Então, meu plano seria mudar o UUID /no meu fstab (ainda preciso pesquisar no google como encontrar o uuid) e fazer alguma mágica para que o sistema realmente inicialize a partir do novo disco

Esqueci alguma coisa ou planejei algo especificamente estúpido?

Nanne
fonte

Respostas:

16

Você pode pegar o UUID para todos os dispositivos de bloco com o blkidcomando (Você quer aquele que diz apenas UUID, não PARTUUID)

As opções de rsync que utilizo são -avhPHAXx.

Eu não acho que -v ou --progress acelerará qualquer coisa, a menos que você esteja em um console / tty muito lento.

O uso de -x elimina a necessidade de todas as suas exclusões, supondo que todas elas estejam em sistemas de arquivos diferentes (no meu sistema, todas, exceto as perdidas e as encontradas).

O único programa frequentemente usado que conheço que usa links físicos (pelo menos no meu sistema) é git, é por isso que adiciono a opção -H. O único problema que acho que você teria ao não usar -H é que ele ocupará um pouco mais de espaço.

Quanto ao gerenciador de inicialização, se você estiver usando o GRUB2 com MBR, o comando que eu uso será grub-install /dev/sda(substitua sda pela unidade correta para você). Isso deve tornar a nova unidade inicializável. Se você estiver usando um gerenciador de inicialização diferente ou UEFI, eu verificaria o google para saber como iniciar a nova unidade corretamente. Lembre-se de que o / boot na nova unidade precisará estar na mesma partição que está atualmente (assumindo que você não esteja usando um UUID para / boot também), caso contrário, será necessário modificar o fstab adequadamente.

bparker
fonte
Receio que não os tenha em sistemas separados, pelo que a exclusão parece prudente. Estou lendo coisas mistas sobre a velocidade de - v, então não tenho certeza do que fazer lá;). Git é um bom ponto, eu tenho certeza que / casa tem um pouco disso!
precisa saber é
11
Bem, / proc, / sys e provavelmente / dev são definitivamente diferentes sistemas de arquivos / pontos de montagem de /, portanto não há razão para excluí-los quando você tem -x. Se você não tem certeza do que faz parte do seu sistema de arquivos raiz ou não, basta correr mountpara verificar. Tudo o que estiver lá não precisará ser excluído manualmente.
bparker
Não sei bem como e por que, mas as exclusões estavam erradas de qualquer maneira. Eles estavam na corrida a seco que eu fiz, sem saber por quê. (bem, eu copiei o formato de um lugar semi-aleatório, então esse pode ser o motivo?). De qualquer forma, com o -x firmemente no lugar, de acordo com o seu conselho, não me preocupei muito, a única coisa extra aconteceu foi que algumas coisas sem importância (backups de backup antigos, por exemplo) também foram "salvos".
Nanne
Isso salvou meu $$. Clonei o sistema de 12 GB + no Linode para um novo nó. Depois de mais de 5 anos depois, isso ainda funciona. Obrigado rapazes!
geeth
Portanto, ao particionar o sistema de arquivos clonado pronto para aceitar os clones, minha partição raiz deve ter o sinalizador de inicialização definido enquanto eu os mantenho sem sincronização, ou devo defini-lo imediatamente antes de colocar a unidade clonada em produção. Caso contrário, eu diria que a unidade clonada é inicializável, o que não é realmente desejado. Na minha situação, minha unidade clone é um disco em um servidor separado. E o Rsync é usado para mantê-lo alinhado com o prod.
NZ Dev
11

Eu fiz isso com sucesso (depois de algumas tentativas).

eu usei

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Em seguida, redefino meu /mnt/etc/fstabarquivo para a partição de inicialização e meu espaço de troca.

Então eu precisava redefinir o GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub
teeks99
fonte
Observe que isso é apenas para discos formatados em MBR.
Teque5
2

Não tente corrigir a inicialização com esta unidade; minha recomendação:

  1. Conecte uma unidade em outra máquina em vez de arriscar um hotswap na máquina com falha.
  2. rsync seus arquivos não pertencentes ao sistema no novo disco.
  3. Em um disco rígido separado, crie uma inicialização, uma raiz mínima e uma troca. Instale o mesmo sistema operacional que você deseja clonar do disco rígido doente.
  4. Inicialize a partir deste novo disco (idealmente em uma máquina separada, se você não puder arriscar tempo de inatividade no host de destino, caso contrário, poderá inicializar o host de destino com este disco).
  5. Adicione o disco da etapa 2 a este novo sistema, com os pontos de montagem corretos. Agora você tem um clone da unidade do sistema. Você pode (opcionalmente) copiar as partições para esse novo disco, mas minha recomendação é manter o disco como um requisito mínimo para inicializar seu sistema operacional. Como você percebeu, ter muitas coisas na partição primária dificulta a recuperação. Certifique-se de copiar a configuração de rede corretamente, pois o servidor está sem cabeça.
  6. Simplesmente substitua a unidade no sistema doente por esse novo par de discos (se você optar por não inicializar o destino inicialmente na etapa 4).
  7. Reinicie.
Burhan Khalid
fonte
Posso arriscar tempo de inatividade, é um servidor não essencial. Eu estava indo para o hotswap (hot-add basicamente) porque essa cópia seria muito mais rápida. Não deveria haver muitos riscos, pensei, pois estamos falando de SATA (pelo menos II). Além disso, qual o motivo para sugerir um disco de inicialização extra? Isso não complicaria os problemas de alguns softwares, homedirs, etc já instalados? Parece mais trabalho que estou tentando evitar: D
Nanne
É o que eu uso na produção; Eu montei / home, / etc, / var, / usr e / opt em discos externos (atualmente no LVM) e / e / boot em um disco separado. Dessa forma, não preciso me preocupar quando o disco principal falhar. Apenas troque-o sem afetar meus serviços :) Inicialmente, é um pouco trabalhoso, mas economiza a longo prazo. Especialmente quando você fica sem espaço em uma partição e precisa adicionar a um volume sem tempo de inatividade.
Burhan Khalid
Enquanto você faz uma boa observação, não é um requisito que eu tenho atualmente, nem preciso :). Existem vários outros discos no sistema (cerca de 7) e eu tenho que desenhar a linha em algum lugar; D. Portanto, o sistema operacional não precisa ser dividido no momento. Quero dizer: concordo que o sistema é bom, mas não algo que estou procurando agora; D. Então, se eu deixar tudo em um disco, o fato de eu estar copiando para o exterior o tornará muito lento, não é?
precisa saber é
Depende da sua interface para o externo, pela Ethernet deve ser rápida, pelo USB 2 mais rápido, pelo USB 3 ainda mais rápido. Isso não tornará muito lento - é claro, não copie os diretórios que estão sendo gravados (como, por exemplo, / tmp, dos quais você não precisa mesmo) ou em qualquer lugar em que os canais estejam sendo gravados.
Burhan Khalid
0

Passei muito tempo em uma distribuição Centos Freepbx para rsync e tenho um novo disco inicializável e, finalmente, depois de corrigir o fstab e o grub UUID, ele não funciona.

O último passo para fazê-lo funcionar é

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Quando você está na CLI do Grub (ou seja, no grub>prompt):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Pressione entere agora você pode desligar, remover o disco antigo e inicializar com um novo.

Comdif
fonte