web-dev-qa-db-fra.com

Copier un serveur physique en cours d'exécution dans une boîte virtuelle

J'ai un serveur sous Ubuntu 10.04. Alors que je veux tester certains travaux de maintenance, tels que la mise à niveau vers 12.04, je me suis dit que je devais créer une copie VM du serveur à l'aide de Virtual Box. Je n'ai pas d'accès physique au serveur, j'ai donc envisagé les options suivantes:

  • dd 'tout le disque dur en une image brute sur mon ordinateur, puis créer un VDI à partir de l'image brute dd.
  • Installez la même version d'ubuntu, installez la mise à jour, montez le VDI localement et rsyncz le système de fichiers du serveur sur le VDI monté, créant ainsi une copie logique du serveur.

La solution rsync est un peu plus compliquée, mais semble économiser de la bande passante et me permet de créer une "copie" du serveur avec une configuration légèrement différente (par exemple, un disque plus petit).

Quel est selon vous le meilleur moyen de le faire? Une des méthodes ci-dessus? Un différent?

7
Guy

Utiliser rsync directement s'est révélé plus problématique que je ne le pensais au début:

  1. La commande doit être exécutée en tant que root sur la machine distante.
  2. Je n'ai pas voulu activer la connexion root à distance.
  3. Le système de fichiers est basé sur LVM et il était fastidieux de monter la partition racine réelle du VM à partir de l'intérieur du LVM dans le fichier VDI.

Pour ces raisons, je me suis retrouvé avec un processus en 2 étapes:

  1. Copiez tous les fichiers de la machine distante sur la machine hôte locale.
  2. Copiez les fichiers sur l'invité.

Je suis finalement allé à la base tar, bien que j'aurais pu utiliser rdiffdir fourni par duplicity pour économiser de la bande passante.

J'ai commencé par configurer un tunnel SSH que je pourrais utiliser pour canaliser les fichiers tar afin de ne pas avoir à écrire l'archive sur le système de fichiers que je copiais.

local$ ssh user@remote -R 3000:localhost:3000
loacl$ nc -l 3000 > filesystem.tar.gz
remote$ Sudo tar -vcz / --exclude={/dev,/proc,/sys,/tmp} | nc localhost 3000

Cela a créé une archive tar de l'intégralité du système de fichiers sur ma machine hôte locale. L'étape suivante consistait à la décompresser sur l'invité:

guest$ cd /
guest$ nc -l 3000 | Sudo tar -xvz
local$ nc guest_ip 3000 < filesystem.tar.gz 

Dans mon cas, /etc/fstab a référencé les systèmes de fichiers par leurs UUID. J'ai donc dû le mettre à jour avec le résultat de guest$ Sudo blkid. J'ai également dû mettre à jour les paramètres de réseau dans /etc/udev/rules.d/70-persistent-net.rules (noms d'interface) et /etc/network/interfaces (adresses IP).

3
Guy

Certes, l’approche dd- ou la création d’une autre image du serveur est susceptible de poser des problèmes de bande passante si vous n’avez qu’un accès à distance au serveur.

L'installation du serveur Ubuntu 10.04 sur un VDI uniquement pour pouvoir copier une installation existante n'est également pas vraiment nécessaire (mais cela peut économiser de la bande passante).

Permettez-moi de suggérer l'approche suivante:

  • Créez une machine virtuelle avec un vide disque dur virtuel de la taille souhaitée.
  • Démarrez la VM avec n’importe quel système live (Ubuntu) à partir d’un fichier .iso.
  • Partitionnez le disque dur (incluez l'indicateur de démarrage et le format avec le même système de fichiers que votre ancien serveur).
  • Montez cette partition sur votre environnement réel.
  • Copiez tous les fichiers de l'ancien serveur sur la partition encore vide de votre machine virtuelle.

    rsync -avze ssh user@Host:/ /<mountpoint>
    
  • Installer Grub resp. Grub2 sur le MBR du lecteur VDI maintenant rempli.

  • Redémarrer.
2
Takkat