Aqui está a minha situação:
- Dois servidores dedicados no mesmo datacenter com Ethernet de gigabit entre eles.
- Ambos os servidores dedicados foram inicializados em um ambiente de resgate baseado no Debian Squeeze, com ferramentas e utilitários extras adicionados. Também há bastante espaço tmp (32 GB de RAM nas duas caixas) para baixar software, instalar pacotes e / ou compilar conforme necessário.
- Ambos os servidores dedicados têm aproximadamente 3 TB de espaço útil.
- O servidor "origem" possui discos de 4 x 1,5 TB no Hardware RAID-10 com um controlador de porta Adaptec 4.
- O servidor "destino" possui discos de 2 x 3 TB no Hardware RAID-1 com um controlador de porta Adaptec 2 - mesma geração que a outra, mas número diferente de portas.
- O número de blocos utilizáveis
/dev/sda
difere em menos de 10 MB, mas a matriz do servidor de destino é, por algum motivo, alguns megas menor. - As duas matrizes RAID são configuradas para usar toda a superfície do disco de todos os discos constituintes para criar um único volume RAID.
- O sistema operacional é inicializado no modo MBR; nenhuma inicialização UEFI é usada.
O que eu quero fazer:
- Copie, na camada de bloco, toda a imagem do sistema operacional (isso consiste apenas no carregador de inicialização GRUB2 na tabela de partições GPT, / partição de inicialização e / partição) do servidor "de origem" para o servidor "de destino".
- Se possível , a cópia deve ocorrer "ao vivo": isso significa que não tenho espaço suficiente para armazenar um arquivo adequado da imagem do disco no lado do destino, a menos que esteja descompactando a imagem do disco no disco rígido como a cópia está acontecendo . A conexão Ethernet de gigabit entre os servidores é confiável o suficiente para que eu me sinta confortável com isso e, é claro, executarei
fsck
nas duas extremidades (origem e destino) para verificar se o sistema de arquivos está correto antes e após a transferência. - Se possível , não transfira blocos pela rede, que não são usados pelos sistemas de arquivos constituintes em cada partição (todas as partições são formatadas como ext4). Isso ocorre porque mais de 50% do disco "de origem" é espaço livre na
/
partição. - Ajuste o tamanho da
/
partição para que, quando copiada, ela seja redimensionada para caber no tamanho um pouco menor do disco de destino. - Quando a cópia for bem-sucedida, monte cada volume e corrija as referências aos IPs estáticos para refletir os IPs do novo servidor. (Pode fazer isso muito bem sem mais ajuda)
Minhas perguntas:
- Devo primeiro calcular a diferença (em bytes) entre o tamanho de
/dev/sda
cada servidor e depois usá-loe2resize
para reduzir de maneira não destrutiva o tamanho da/
partição no lado de origem, para que ela caiba no espaço do lado de destino? - Devo executar
dd
no dispositivo de bloco bruto,/dev/sda
da origem ao destino (acimassh
), ou devo criar um layout de partição equivalente no destino e executardd
em cada partição ? Observe que lidar com uma partição de cada vez me deixa com o problema do gerenciador de inicialização, mas se eu não fizer uma partição de cada vez, serádd
necessário interromper a transferência de dados depois de escrever tantos bytes quanto o destino puder conter (que, esperamos, "feche" o final da/
partição no último bloco, logicamente "à direita de" todas as outras partições no layout da partição da fonte).
Alguns misc. especificidades:
- O sistema operacional host na caixa de origem é o Ubuntu Server 12.04 executando vários convidados OpenVZ
- Como as duas caixas são inicializadas no resgate, o acesso direto ao disco é possível sem esperar nenhuma alteração nos dados subjacentes pelo sistema operacional em execução.