Comment cloner au mieux un système en cours d'exécution sur un nouveau disque dur à l'aide de rsync?

22

J'ai un système fonctionnant en tant que serveur avec un disque dur défaillant. Alors que toutes les données importantes sont sur un RAID et sauvegardées et tout cela, je n'ai pas d'image du système lui-même. Il n'y a pas de besoin spécifique car je peux faire l'installation bien sûr, mais je veux quand même essayer de faire une hotcopy avant de suivre le chemin de la restauration. Je sais qu'il y a des inconvénients à cela en tant que processus, mais je ne pense pas qu'il y ait beaucoup d'inconvénients à l'essayer en premier recours.

  • Système d'exploitation: Ubuntu 12.04.4 LTS
  • Sans tête
  • Je n'espère pas installer trop de nouveaux logiciels car le disque est déjà en panne :)
  • Le système fonctionne. J'ai peur de l'arrêter augmente les chances que le disque ne revienne pas. Cela signifie que dd pourrait être absent?
  • Le nouveau disque n'est pas de la même taille (il est deux fois plus gros) que l'ancien, ce qui complique davantage le problème de DD.

Mon idée était de

  • branchez à chaud le nouveau lecteur dans le système
  • faire un système de fichiers
  • montez-le dans / mnt / somedir
  • rsync les fichiers
  • un peu de magie fstab
  • un peu de magie de démarrage

Les questions que j'ai encore sont:

Quelle serait une bonne commande rsync? Je prévoyais:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Je saute quelques dir de plus, par exemple mes raids montés, etc.)

Où les options sont:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Je saute spécifiquement les étapes -H, -v et --progress pour accélérer le processus.
Cela fonctionnerait-il pour Ubuntu? Je ne sais pas si Ubuntu utilise des liens physiques, mais je ne pense pas avoir besoin de cette option, n'est-ce pas?

Après cette exécution, je pourrais redémarrer (peut-être avec un lecteur USB en direct) et réexécuter le rsync si l'ancien disque démarre toujours. Cela résoudrait tous les fichiers non lisibles / modifiés parce que le système fonctionnait, je suppose.


Comment réparer le démarrage?
Ensuite, mon plan serait de changer l'UUID /dans mon fstab (encore besoin de google pour trouver l'uuid), et de faire de la magie pour que le système démarre réellement à partir du nouveau disque

Ai-je oublié quelque chose ou ai-je prévu quelque chose de particulièrement stupide?

Nanne
la source

Réponses:

16

Vous pouvez saisir l'UUID pour tous les périphériques de bloc avec la blkidcommande. (Vous voulez celui qui dit simplement UUID, pas PARTUUID)

Les options rsync que j'utilise sont -avhPHAXx.

Je ne pense pas que -v ou --progress accélérera quoi que ce soit à moins que vous ne soyez sur une console / tty très lente.

L'utilisation de -x élimine le besoin de toutes vos exclusions en supposant qu'elles se trouvent toutes sur des systèmes de fichiers différents (sur mon système, tous sauf perdu + trouvé le sont).

Le seul programme fréquemment utilisé que je connaisse qui utilise des liens durs (au moins sur mon système) est git, c'est pourquoi j'ajoute l'option -H. Le seul problème que je pense que vous auriez en n'utilisant pas -H est qu'il prendra un peu plus d'espace.

En ce qui concerne le chargeur de démarrage, si vous utilisez GRUB2 avec MBR, alors la commande que j'utilise est grub-install /dev/sda(remplacez sda par le bon lecteur pour vous). Cela devrait rendre le nouveau disque amorçable. Si vous utilisez un autre chargeur de démarrage ou UEFI, je vérifierais sur Google comment obtenir le démarrage du nouveau lecteur correctement. N'oubliez pas que / boot sur le nouveau lecteur devra être sur la même partition que celle actuelle (en supposant que vous n'utilisez pas également un UUID pour / boot), sinon vous devrez modifier fstab en conséquence.

bparker
la source
Je ne pense pas que je les ai sur des systèmes séparés, je le crains, donc l'exclusion semble prudente. Je lis des choses mitigées sur la vitesse de - v, donc je ne sais pas quoi faire là-bas;). Git est un bon point, je suis sûr que / home en a un peu!
Nanne
1
Eh bien, / proc, / sys et / dev sont très probablement des systèmes de fichiers / points de montage différents de /, donc il n'y a absolument aucune raison de les exclure quand vous avez -x. Si vous n'êtes pas sûr de ce qui fait partie de votre système de fichiers racine ou non, exécutez simplement mountpour vérifier. Tout ce qui s'y trouve n'aura pas besoin d'être exclu manuellement.
bparker
Je ne sais pas comment et pourquoi, mais les exclus étaient faux quand même. En fait, ils étaient sur le sec, je ne savais pas pourquoi. (eh bien, j'ai copié le format à partir d'un endroit semi-aléatoire, donc ça pourrait être la raison?). Quoi qu'il en soit, avec le -x fermement en place selon vos conseils, je ne me suis pas trop inquiété, la seule chose supplémentaire s'est produite, c'est que certaines choses sans importance (anciennes sauvegardes de sauvegardes par exemple) ont également été `` enregistrées ''.
Nanne
Cela m'a sauvé un $$. J'ai cloné un système de 12 Go + sur Linode vers un tout nouveau nœud. Après plus de 5 ans plus tard, cela fonctionne toujours. Merci les gars!
dents
Ainsi, lors du partitionnement du système de fichiers cloné prêt à accepter les clones, si ma partition racine a le drapeau de démarrage défini pendant que je les garde en mode de synchronisation, ou dois-je le définir juste avant de mettre le lecteur cloné en production. Sinon, je suppose que le lecteur cloné est alors amorçable, ce qui n'est pas vraiment souhaité. Dans ma situation, mon lecteur de clone est un disque sur un serveur distinct. Et Rsync est utilisé pour le maintenir aligné avec prod.
NZ Dev
11

Je viens de le faire avec succès (après quelques essais).

j'ai utilisé

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Ensuite, je réinitialise mon /mnt/etc/fstabfichier pour la partition de démarrage et mon espace de swap.

Ensuite, je devais réinitialiser GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub
teeks99
la source
Notez que cela concerne uniquement les disques formatés MBR.
Teque5
2

N'essayez pas de réparer le démarrage avec ce lecteur; Ma recommandation:

  1. Branchez un lecteur sur une autre machine au lieu de risquer un échappement sur la machine défaillante.
  2. rsync vos fichiers non système sur le nouveau disque.
  3. Sur un disque dur séparé, créez un démarrage, une racine minimale et un échange. Installez le même système d'exploitation que vous souhaitez cloner à partir du disque dur en difficulté.
  4. Démarrez à partir de ce nouveau disque (idéalement sur une machine distincte, si vous ne pouvez pas risquer un temps d'arrêt sur l'hôte cible, sinon vous pouvez démarrer l'hôte cible avec ce disque).
  5. Ajoutez le disque de l'étape 2 à ce nouveau système, avec les points de montage corrects. Vous avez maintenant un clone du lecteur système. Vous pouvez (facultativement) copier les partitions sur ce nouveau disque, mais ma recommandation est de conserver le disque comme condition minimale pour démarrer votre système d'exploitation. Comme vous l'avez compris, le fait d'avoir trop de choses sur la partition principale rend la récupération difficile. Assurez-vous de copier correctement la configuration réseau car votre serveur est sans tête.
  6. Remplacez simplement le lecteur du système en difficulté par cette nouvelle paire de disques (si vous choisissez de ne pas démarrer la cible initialement à l'étape 4).
  7. Redémarrez.
Burhan Khalid
la source
Je peux risquer des temps d'arrêt, c'est un serveur non essentiel. J'allais pour le hotswap (hot-add essentiellement) car cette copie serait beaucoup plus rapide. Il ne devrait pas y avoir trop de risques, je pensais, car nous parlons de SATA (II au moins). En dehors de cela, quelle est la raison de suggérer un disque de démarrage supplémentaire? Cela ne compliquerait-il pas les choses pour certains logiciels déjà installés, homedirs, etc.? Cela ressemble à plus de travail que j'essaie d'éviter: D
Nanne
C'est ce que j'utilise dans la production; Je monte / home, / etc, / var, / usr et / opt sur des disques externes (en fait sur LVM) et / et / boot sur un disque séparé. De cette façon, je n'ai pas à m'inquiéter lorsque le disque principal tombe en panne, je le remplace simplement sans affecter mes services :) C'est un peu de travail au début, mais vous économise à long terme. Surtout lorsque vous manquez d'espace sur une partition et que vous devez ajouter à un volume sans interruption.
Burhan Khalid
Bien que vous fassiez un bon point, ce n'est pas une exigence que j'ai actuellement, ni besoin :). Il y a plusieurs autres disques dans le système (environ 7) et je dois tracer la ligne quelque part; D. Le système d'exploitation n'a donc pas besoin d'être fractionné pour le moment. Je veux dire: je suis d'accord que le système est bon, mais ce n'est pas quelque chose que je recherche actuellement; D. Donc, si je laisse tout cela sur 1 disque, le fait que je copie externe le ralentira sérieusement, non?
Nanne
Cela dépend de votre interface avec l'extérieur, sur Ethernet, cela devrait être rapide, sur USB 2 plus rapide, sur USB 3 encore plus rapide. Cela ne le rendra pas très lent - bien sûr, ne copiez pas les répertoires qui sont en cours d'écriture (comme, par exemple, / tmp, dont vous n'avez pas besoin de toute façon) ou n'importe où les canaux sont en cours d'écriture.
Burhan Khalid
0

J'ai passé beaucoup de temps sur une distribution Centos Freepbx pour rsync et j'ai un nouveau disque amorçable et finalement après avoir corrigé fstab et grub UUID cela ne fonctionne pas.

La dernière étape pour le faire fonctionner est

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Lorsque vous êtes dans la CLI de Grub (c'est-à-dire à l' grub>invite):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Appuyez sur enteret vous pouvez maintenant arrêter, supprimer l'ancien disque et démarrer avec un nouveau.

Comdif
la source