Existem várias maneiras de clonar uma máquina. Faça uma imagem e restaure a imagem em outro hardware. No entanto, se você quiser mover seu servidor para um novo hardware, com muito pouco tempo de inatividade (dentro de alguns minutos), você pode usar a descrição em este artigo . O artigo pressupõe um sistema Debian Linux, mas isso também funcionará com o Ubuntu.
Instale um sistema básico
Você precisará de algumas coisas antes de começar a usar o sistema de cliques:
uma instalação mínima em execução (demora no máximo 10 minutos) uma placa de rede em execução discos e partições montados do jeito que você quer ssh e rsync instalados Nenhum outro serviço em execução (exceto o sshd, se você fizer esse controle remoto como no exemplo). pare inetd, atd, crond, klogd, syslogd
Sincronize os dados
Usando o rsync, podemos sincronizar old_machine para new_machine. O Rsync só transfere diferenças, portanto, você pode parar e reiniciar o rsync a qualquer momento e também pode ressincronizar vários dias depois sem iniciar tudo de novo, ou executar novamente o rsync para transferir todos os arquivos alterados.
Excluir padrões para o rsync
Alguns arquivos não devem ser transferidos porque são específicos do hardware ou estão disponíveis por padrão ou gerados automaticamente.
Estes são específicos para o seu hardware e sua configuração de partições:
/boot/
/lib/modules
/etc/modules
/etc/lilo.conf
/etc/fstab
/etc/mtab
Estes já estão disponíveis. /proc
é um sistema de arquivos virtual fornecido pelo kernel em execução, /dev
é a árvore de dispositivos da instalação base, lost+found
são diretórios criados durante a formatação da partição:
/proc
/dev
lost+found/
Eles são excluídos porque você deseja manter os logs separados para cada máquina e deseja (por enquanto) ter uma configuração de rede diferente para cada máquina:
/var/log
/etc/network/interfaces
Um arquivo de exclusão contém todas essas entradas, todas as entradas de uma nova linha. Se isso não estiver claro, consulte man rsync
Aqui está um exemplo do arquivo hotclone_exclude que você irá armazenar no diretório / root e referência com o comando rsync:
/boot/
/lib/modules
/etc/modules
/etc/lilo.conf
/etc/fstab
/etc/mtab
/proc
/dev
lost+found/
/var/log
/etc/network/interfaces
/root
Atenção: se você tem montagens de rede, você precisa adicioná-las ao arquivo de exclusão também!
Sincronizar dados
rsync -e ssh -avz --exclude-from=/root/hotclone_exclude old_server:/ /
Alterne os servidores!
pare os serviços no old_server
rerun rsync (não deve demorar muito, já que a maioria das transferências já foi feita)
atualize / etc / network / interfaces em new_server para conter o endereço IP do old_server execute ifdown -a no old_server execute ifdown -a no novo_servidor execute ifup -a no novo_servidor
Coloque o antigo servidor de lado inalterado como sobressalente (melhor prevenir do que remediar).
Você deve estar pronto.
Nota adicional:
Se você precisar excluir os arquivos de um pacote específico, poderá obtê-los com o apt-file, como em apt-file packagename
, o que fornecerá uma lista de arquivos nesse pacote e seus locais de instalação.
Exemplo:
$apt-file list trash-cli
trash-cli: /usr/bin/restore-trash
trash-cli: /usr/bin/trash
trash-cli: /usr/bin/trash-empty
trash-cli: /usr/bin/trash-list
trash-cli: /usr/bin/trash-put
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/__init__.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/assert_equals_with_unidiff.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/describe_trash_list.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/files.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/output_collector.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_file_descriptions.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_filesystem.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_persist.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_restore_trash.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_trash_empty.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_trash_put.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/trashinfo.py
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/PKG-INFO
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/SOURCES.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/dependency_links.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/entry_points.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/top_level.txt
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/__init__.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/cmds.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/list_mount_points.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/trash.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_available_trash_dirs.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_characterization.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_joining_paths.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_list_mount_points.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_parser.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_parsing_trashinfo_contents.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash_new_tests.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash_put.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trashdir.py
trash-cli: /usr/share/doc/trash-cli/changelog.Debian.gz
trash-cli: /usr/share/doc/trash-cli/copyright
trash-cli: /usr/share/man/man1/restore-trash.1.gz
trash-cli: /usr/share/man/man1/trash-empty.1.gz
trash-cli: /usr/share/man/man1/trash-list.1.gz
trash-cli: /usr/share/man/man1/trash-put.1.gz
trash-cli: /usr/share/man/man1/trash.1.gz
trash-cli: /usr/share/pyshared/integration_tests/__init__.py
trash-cli: /usr/share/pyshared/integration_tests/assert_equals_with_unidiff.py
trash-cli: /usr/share/pyshared/integration_tests/describe_trash_list.py
trash-cli: /usr/share/pyshared/integration_tests/files.py
trash-cli: /usr/share/pyshared/integration_tests/output_collector.py
trash-cli: /usr/share/pyshared/integration_tests/test_file_descriptions.py
trash-cli: /usr/share/pyshared/integration_tests/test_filesystem.py
trash-cli: /usr/share/pyshared/integration_tests/test_persist.py
trash-cli: /usr/share/pyshared/integration_tests/test_restore_trash.py
trash-cli: /usr/share/pyshared/integration_tests/test_trash_empty.py
trash-cli: /usr/share/pyshared/integration_tests/test_trash_put.py
trash-cli: /usr/share/pyshared/integration_tests/trashinfo.py
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/PKG-INFO
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/SOURCES.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/dependency_links.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/entry_points.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/top_level.txt
trash-cli: /usr/share/pyshared/trashcli/__init__.py
trash-cli: /usr/share/pyshared/trashcli/cmds.py
trash-cli: /usr/share/pyshared/trashcli/list_mount_points.py
trash-cli: /usr/share/pyshared/trashcli/trash.py
trash-cli: /usr/share/pyshared/unit_tests/test_available_trash_dirs.py
trash-cli: /usr/share/pyshared/unit_tests/test_characterization.py
trash-cli: /usr/share/pyshared/unit_tests/test_joining_paths.py
trash-cli: /usr/share/pyshared/unit_tests/test_list_mount_points.py
trash-cli: /usr/share/pyshared/unit_tests/test_parser.py
trash-cli: /usr/share/pyshared/unit_tests/test_parsing_trashinfo_contents.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash_new_tests.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash_put.py
trash-cli: /usr/share/pyshared/unit_tests/test_trashdir.py
Se você não tem, você pode instalá-lo com sudo apt install apt-file
Para algumas ferramentas mais úteis, veja @drysdam answer aqui e @Ressu answer aqui
Fontes:
man rsync