A melhor maneira de duplicar o servidor Linux

0

Minha empresa tem um antigo sistema CentOS 5 que precisamos duplicar para testes. Estou executando o dd em 2 das partições que são pequenas e salvando-as em / home, mas a partição / home não pode salvar em si mesma ou em outra partição, pois não há espaço suficiente.

/ home é apenas cerca de 7% cheio, então copiar todos os seus arquivos para um tarball deve ser fácil, mas eu estou querendo saber se existe uma maneira melhor de fazer isso.

Não consigo colocar a máquina off-line e não consigo conectar uma unidade USB externamente e copiar para arquivos dessa maneira, portanto, é melhor usar SCP, dd ou tar.

Alguma sugestão? Aqui está um resumo rápido de df -h

Filesystem Size Used Left usage% Mount point /dev/sda2 97G 17G 75G 19% / /dev/sda1 99M 15M 80M 16% /boot tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/sda3 352G 22G 312G 7% /home

    
por Tensigh 28.03.2014 / 09:57

2 respostas

1

Definitivamente, há maneiras "melhores" de fazer isso, mas a maneira como você faz isso depende dos recursos disponíveis. Vou listar algumas maneiras diferentes e você pode decidir o que funciona melhor para você.

Para começar, copiar dados em / home para um tarball é inútil. Você não pode salvá-lo localmente, o que significa que, para isso, será necessário um servidor remoto para o qual você possa enviar os dados. De preferência, um servidor na mesma rede que este computador, acessível via SSH. Francamente, fazer tarballs das outras partições e colocá-las em / home é uma perda de tempo.

Se você deseja duplicar este servidor, o que eu faria é usar dd para criar uma imagem de / dev / sda e enviar os dados por SSH para outro servidor. As duas melhores maneiras de fazer isso são ou imaginar outro disco rígido ao mesmo tempo ou salvar a imagem como um arquivo.

dd if=/dev/sda bs=4096 conv=notrunc,noerror,sync | ssh user@machine "dd of=/dev/sdX"

Isso clonará toda a unidade, incluindo o MBR (e, portanto, o carregador de inicialização), todas as partições, UUIDs e dados, enviando-os por SSH para outra máquina e gerando imagens de uma unidade de sua escolha. As opções sugeridas por mim fazem o seguinte:

  • notrunc ou 'não truncar' mantém a integridade dos dados instruindo dd não truncar nenhum dado.
  • noerror instrui o dd para continuar a operação, ignorando todos os erros de leitura. O comportamento padrão do dd é parar em qualquer erro.
  • a sincronização grava zeros para erros de leitura, portanto, os deslocamentos de dados permanecem sincronizados.
  • bs = 4096 define o tamanho do bloco para 4k, um tamanho ideal para o disco rígido eficiência de leitura / gravação e, portanto, velocidade de clonagem.

Para que isso funcione, o usuário que você usa faz login com o SSH como raiz ou parte do grupo disk . / dev / sdaX deve ser o modo 660, dando acesso de leitura / escrita em grupo. O proprietário do grupo padrão deve ser disk .

Como alternativa, você pode criar uma imagem que possa ser usada para gravar diretamente no disco.

dd if=/dev/sda bs=4096 conv=notrunc,noerror,sync | ssh user@machine "dd of=/path/to/wherever/server.img"

Para gravar a imagem em um disco rígido do computador em que ela está salva, você pode usar o seguinte comando.

dd if=/path/to/server.img bs=4096 conv=notrunc,noerror,sync of=/dev/sdX

Por último, se o espaço é uma preocupação, você pode compactar a imagem antes de enviá-la pelo SSH.

dd if=/dev/hda conv=sync,noerror bs=4096 | gzip -c | ssh user@machine "of=/path/to/wherever/server.img.gz"

e escrevendo por

gunzip -c /path/to/server.img.gz | dd of=/dev/sdX

Por último, se você quiser extrair arquivos individuais da imagem sem gravá-los em outra unidade, poderá montá-los. No entanto, isso não funcionará se estiver compactado.

Você precisará fdisk -lu /path/to/server.img para obter o deslocamento das partições individuais. Depois de fazer isso, você precisa do setor inicial da partição que deseja montar. Por uma questão de argumento, digamos que a partição que queremos acessar começa no setor 122441728.

$ fdisk -lu server.img

Disk server.img: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x86308630

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   114441469    57220703+  83  Linux
/dev/sda2       114442240   122441727     3999744   82  Linux swap / Solaris
/dev/sda3       122441728   625141759   251350016   83  Linux

Você usaria então mount -o ro,loop,offset=$((122441728 * 512)) server.img /mnt para montar a terceira partição em / mnt.

Fontes:

por 28.03.2014 / 11:26
0

Um pouco de googling deve dar a resposta que você precisa.

Basicamente, se as duas máquinas puderem ser conectadas em rede, tar sobre scp deverá resolver o problema.

Esta página mostra exatamente esse tipo de exemplo . O fato de o usuário estar usando o Slackware não deve ser um problema para você.

EDIT: Este documento de falha do servidor tem algumas anotações sobre as coisas que você precisa fazer / pensar antes / quando você abrir seu servidor duplicado.

    
por 28.03.2014 / 11:04