Voici ma situation:
- Deux serveurs dédiés dans le même centre de données avec Ethernet gigabit entre eux.
- Les deux serveurs dédiés ont démarré dans un environnement de secours basé sur Debian Squeeze avec des outils et des utilitaires supplémentaires ajoutés. Aussi beaucoup d'espace tmp (32 Go de RAM sur les deux boîtiers) pour télécharger des logiciels, installer des packages et / ou compiler au besoin.
- Les deux serveurs dédiés ont environ 3 To d'espace utilisable.
- Le serveur "source" dispose de 4 disques de 1,5 To en matériel RAID-10 avec un contrôleur de port Adaptec 4.
- Le serveur «de destination» dispose de 2 disques de 3 To en matériel RAID-1 avec un contrôleur de port Adaptec 2 - même génération que l'autre, mais nombre de ports différent.
- Le nombre de blocs utilisables sur
/dev/sda
diffère de moins de 10 Mo, mais la baie du serveur de destination est pour une raison quelconque de quelques mégaoctets plus petite. - Les deux matrices RAID sont configurées pour utiliser toute la surface du disque de tous les disques constitutifs pour créer un seul volume RAID.
- Le système d'exploitation démarre en mode MBR; aucun démarrage UEFI n'est utilisé.
Ce que je veux faire:
- Copiez, au niveau de la couche de bloc, la totalité de l'image du système d'exploitation (il ne s'agit que du chargeur de démarrage GRUB2 dans la table de partition GPT, la partition / boot et / partition) du serveur "source" vers le serveur "destination".
- Si possible , la copie doit avoir lieu "en direct": cela signifie que je n'ai pas assez d'espace pour stocker un fichier approprié de l'image disque du côté destination, à moins que je ne déballe l'image disque sur le disque dur en tant que copie. a lieu . La connexion Ethernet gigabit entre les serveurs est suffisamment fiable pour que je sois à l'aise avec cela, et je vais bien sûr courir
fsck
aux deux extrémités (source et destination) pour vérifier que le système de fichiers est OK avant et après le transfert. - Si possible , ne transférez pas de blocs sur le réseau, qui ne sont pas utilisés par les systèmes de fichiers constitutifs de chaque partition (toutes les partitions sont formatées en ext4). En effet, plus de 50% du disque "source" est de l'espace libre dans la
/
partition. - Ajustez la taille de la
/
partition de sorte que lorsqu'elle est copiée, elle soit redimensionnée pour s'adapter à la taille à peine plus petite du disque de destination. - Une fois la copie réussie, montez chaque volume et corrigez les références aux adresses IP statiques pour refléter les adresses IP du nouveau serveur. (Peut le faire très bien sans autre aide)
Mes questions:
- Dois-je d' abord calculer la différence (en octets) entre la taille de
/dev/sda
sur chaque serveur, puis l'utilisere2resize
pour réduire de façon non destructive la taille de la/
partition côté source afin qu'elle tienne dans l'espace du côté destination? - Dois-je exécuter
dd
sur le périphérique de bloc brut,/dev/sda
de la source à la destination (surssh
), ou dois-je créer une disposition de partition équivalente sur la destination et l'exécuterdd
sur chaque partition ? Notez que la gestion d'une partition à la fois me laisse le problème du chargeur de démarrage, mais si je ne le fais pas une partition à la fois, ildd
faut savoir arrêter de transférer les données une fois qu'il a écrit autant d'octets que la destination peut contenir (qui, espérons-le, "fermera" la toute fin de la/
partition sur le dernier bloc, qui est logiquement "à droite de" toutes les autres partitions dans la disposition des partitions de la source).
Quelques misc. détails:
- Le système d'exploitation hôte sur la boîte source est Ubuntu Server 12.04 exécutant plusieurs invités OpenVZ
- Étant donné que les deux boîtiers sont démarrés en mode de secours, l'accès direct au disque est possible sans attendre de modification des données sous-jacentes par le système d'exploitation en cours d'exécution.
linux
raid
migration
local-area-network
allquixotic
la source
la source
Réponses:
C'est désordonné, mais faisable.
Je suppose que
/
c'est le cas/dev/sda3
et que/boot
c'est le cas/dev/sda1
.Réduisez le système de fichiers sur l'ancien serveur à sa taille minimale possible.
Partitionnez le disque du nouveau serveur avec un
/boot
espace d'échange de taille identique et une nouvelle/
partition (et tout ce dont vous avez besoin).Copiez les systèmes de fichiers
/
et/boot
.Parce que la partition sur le nouveau serveur sera légèrement plus petite que celle sur l'ancien serveur, vous recevrez un faux
No space left on device
message à la fin de cela. Cependant, puisque vous avez réduit le système de fichiers à l'étape 1, cela n'a pas d'importance.Redimensionnez le système de fichiers sur le nouveau serveur à la taille de la partition.
Installez GRUB sur le nouveau disque.
Terminez le reste de vos corrections (adresse IP, etc.).
Vous pouvez probablement trouver un moyen d'éviter de copier l'espace libre de la partition, mais cela vous prendra probablement plus de temps à rechercher qu'à simplement tout copier ...
la source
oldserver
éliminer le besoin de copier tout l'espace libre? Je m'en fiche/boot
parce que c'est si petit, mais pour/
au moins, je pourrais faire ça, non? Il suffit de définir le secteur final de la partition pour qu'il soit égal à quel secteurresize2fs
définit la fin du secteur FS. Eh bien, secteur, bloc ... probablement bloc . Mais merci pour ça! C'est bien!/dev/sda3
à environ 1,3 To et le copiera dans une partition sur la destination qui devrait contenir environ 2,9 To.J'aurais
mkfs
des systèmes de fichiers frais sur le nouveau serveur, puisrsync
ceux de l'ancien serveur. Cela peut être redémarré, cohérent et chaque fichier est facilement vérifiable individuellement. Lorsque vous jetez des sections inutilisées du système de fichiers (pas une copie médico-légale), je ne vois aucune raison de ne pas utiliser cette méthode. Il faudrait relancer GRUB, mais cela ne devrait pas être un défi.Expliquer une copie brute qui est consciente du système de fichiers me prendrait du temps, donc à moins que vous ne commentiez pourquoi ma solution rsync ne fonctionne pas, je m'épargnerai la saisie.
la source
partimage
peut faire des copies brutes qui sont conscientes du système de fichiers, mais cela ne prend pas en chargeext4
. Il y a donc cela en option ...rsync
est plus joli en tant qu'option, tant qu'il conserve tous les contrôles d'accès discrétionnaires (à lachmod
) et peut copier proprement sur les liens symboliques et les fichiers de l'appareil ...Si vous voulez VRAIMENT transférer des données au niveau d'un périphérique de bloc, je peux penser à une astuce assez utile que j'utilisais pour migrer des serveurs avec un temps d'arrêt minimal impliqué.
Le fait est que vous pouvez créer un miroir dégradé sur le serveur source avec votre partition de données étant la seule moitié active du miroir, puis exporter la partition de destination du deuxième serveur via AOE (je suppose que vos deux serveurs sont dans le même domaine de diffusion). Sur le serveur source, vous connectez ensuite le périphérique de blocage de réseau à votre miroir dégradé pour qu'il commence la reconstruction. Attendez que la reconstruction soit terminée, arrêtez votre miroir, supprimez le périphérique exporté AOE et vous êtes OK.
Un peu plus de détails suivent (je vais essayer d'être bref).
Composants:
mdadm
avec son mode de construction (miroir ad-hoc sans métadonnées);vblade
pour exporter le périphérique de bloc en tant que périphérique réseau AOE;aoe-tools
pour importer un périphérique de bloc réseau AOE.Vous devez créer une table de partition sur votre serveur de destination, puis réduire la partition source pour qu'elle corresponde à la destination. Vous pouvez facilement installer GRUB sur votre nouveau MBR; synchroniser uniquement les partitions sur la table de partition nouvellement créée est un peu moins sujet aux erreurs.
Du côté de la réception, vous devez exporter votre partition avec l'
vblade
outil, sur le serveur source, vous pouvez voir les périphériques exportés après l'installationaoe-tools
(exécutezaoe-discover
puis recherchez les/dev/ether/
périphériques).Ensuite, vous devez créer un périphérique raid1 sur le serveur source avec votre lecteur source :
Après cela, vous pouvez examiner le nouveau miroir:
À ce stade, vous pouvez attacher en toute sécurité la partition de destination exportée à ce miroir:
Ensuite, surveillez simplement la progression de la synchronisation:
Une fois la synchronisation terminée, arrêtez simplement le miroir:
mdadm --stop /dev/md0
sur le serveur source, terminez levblade
processus sur le serveur de destination, installez GRUB sur le deuxième serveur, modifiez vos adresses IP, etc.En fait, avec cette astuce, il est possible de déplacer le serveur entre des boîtes presque en direct, avec un temps d'arrêt uniquement pour redémarrer les boîtes synchronisées.
Pour des raisons de performances, je vous suggère également d'augmenter le MTU de votre lien (ou de configurer un VLAN séparé avec des trames jumbo activées, si possible).
Remarque, vous pouvez également utiliser quelque chose comme
nbd-server
/nbd-client
(ou même iSCSI, si vous le souhaitez) comme alternative à AOE, mais AOE (vblade
+aoe-tools
) a une interface très simple et de grandes performances (pas de surcharge TCP / IP),la source
mdadm
? J'utilise un RAID matériel. Et je n'ai aucune idée de ce qu'est l'AOE, et je n'ai jamais utilisé iSCSI. Je ne pense pas que mes serveurs se trouvent dans le même domaine de diffusion, juste dans le même centre de données. Il y a au moins un ou deux commutateurs entre les serveurs.nbd-server
etnbd-client
packages).mdadm
est utilisé uniquement pour synchroniser deux périphériques de bloc, aucune métadonnée n'est écrite enbuild
mode, vous pouvez donc l'utiliser au-dessus de tout périphérique de bloc (il doit d'abord être démonté). Le fait est que j'installe généralement un nouveau système sur un raid mdadm dégradé1 même si j'ai un raid matériel sous-jacent, de cette façon je peux appliquer la technique décrite sans avoir à démonter les partitions, ce qui réduit les temps d'arrêt de la migration à un seul redémarrage.