web-dev-qa-db-fra.com

Comment mieux cloner un système en cours d'exécution sur un nouveau disque dur en utilisant rsync?

J'ai un système fonctionnant en tant que serveur dont le disque dur est défaillant. Bien que toutes les données importantes se trouvent sur un RAID et soient sauvegardées, je n'ai pas d'image du système lui-même. Bien sûr, il n’ya pas de besoin spécifique car je peux effectuer l’installation, mais je veux tout de même essayer de faire une copie à chaud d’abord avant de descendre dans le chemin de restauration. Je sais que ce processus présente certains inconvénients, mais je ne pense pas qu'il y ait beaucoup d'inconvénients à l'essayer en premier recours.

  • OS: Ubuntu 12.04.4 LTS
  • Sans tête
  • Je n'espère pas installer trop de nouveaux logiciels car le disque est déjà défaillant :)
  • Le système est en marche. J'ai peur que cela empêche le disque de revenir en arrière. Cela signifie que dd pourrait être sorti?
  • Le nouveau disque n’a pas la même taille (il est deux fois plus gros) que l’ancien, ce qui complique encore le problème de la DD.

Mon idée était de

  • hotplug 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 de 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 un peu plus de dir, par exemple mon raid monté, 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 -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 processus rsync si l'ancien disque démarre toujours. Cela corrigerait tous les fichiers non lisibles/modifiés car le système fonctionnait, je suppose.


Comment réparer le démarrage?
Ensuite, mon plan serait de changer l’UUID pour / dans mon fstab (il reste à rechercher Google comment trouver l’uuid) et de faire un peu de magie pour que le système s’amorce à partir du nouveau disque.

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

22
Nanne

Vous pouvez récupérer l'UUID de tous les périphériques en mode bloc avec la commande blkid. (Vous voulez celui qui dit simplement UUID, pas PARTUUID)

Les options de rsync que j'utilise sont -avhPHAXx.

Je ne pense pas que -v ou --progress accélérera quoi que ce soit, sauf si vous êtes 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, à l'exception de lost + found).

Le seul programme fréquemment utilisé que je connaisse qui utilise des liens physiques (du moins sur mon système) est git, c'est pourquoi j'ai ajouté l'option -H. Le seul problème que je pense que vous auriez si vous n’utilisiez pas -H, c’est que cela prendra un peu plus de place.

En ce qui concerne le chargeur de démarrage, si vous utilisez GRUB2 avec MBR, la commande que j’utilise est grub-install /dev/sda (remplace sda ​​par le lecteur correct pour vous). Cela devrait rendre le nouveau disque amorçable. Si vous utilisez un autre chargeur de démarrage ou un autre UEFI, je vérifierai dans Google comment faire en sorte que le nouveau lecteur démarre correctement. Rappelez-vous simplement que/boot sur le nouveau lecteur devra se trouver sur la même partition qu’aujourd’hui (en supposant que vous n’utilisez pas non plus d’UUID pour/boot), sinon vous devrez modifier fstab en conséquence.

16
bparker

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 fichier /mnt/etc/fstab pour la partition de démarrage et mon espace d'échange.

Ensuite, j'avais besoin de 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
10
teeks99

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 échange à chaud 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 malade.
  4. Démarrez à partir de ce nouveau disque (idéalement sur une machine distincte, si vous ne pouvez pas risquer une indisponibilité de l'hôte cible, sinon vous pouvez initialiser l'hôte cible avec ce disque).
  5. Ajoutez le disque de l'étape 2 à ce nouveau système, avec les points de montage appropriés. Vous avez maintenant un clone du lecteur système. Vous pouvez (facultativement) copier les partitions sur ce nouveau disque, mais je vous recommande de conserver le disque au minimum pour pouvoir démarrer votre système d'exploitation. Comme vous l'avez compris, le fait de disposer de trop d'éléments 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 sur le système défaillant par cette nouvelle paire de disques (si vous choisissez de ne pas initialiser la cible initialement à l'étape 4).
  7. Redémarrer.
2
Burhan Khalid

J'ai passé beaucoup de temps sur une distribution Centos freedbx vers rsync et sur un nouveau disque amorçable. Enfin, après la réparation de fstab et de 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'invite grub>):

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

Presse enter et vous pouvez maintenant éteindre, supprimer l’ancien disque et en démarrer un nouveau.

0
Comdif