comment copier l'intégralité du système de fichiers racine Linux sur un nouveau disque dur avec ssh et tar

18

Je dois transférer un système de fichiers racine Linux complet d'un disque dur défaillant sur un autre ordinateur doté d'une partition ouverte et disponible. Je suis assez sûr que cela implique taret ssh, mais je ne me souviens pas exactement comment faire cela.

J'imagine probablement en utilisant un cd en direct sur le nouvel hôte / cible pour exécuter quelque chose comme ceci:

ssh user@failingharddrivehost "some tar command | piped into something else"

CHK
la source
hors sujet. pas une question de programmation. mais essayezssh user@failingsys "tar cfz - /" > oldsys.tar.gz
Vous voulez faire attention à ne pas tar / dev / (par exemple, / dev / random, / dev / sdX, ...). Idem / proc /
Hennes

Réponses:

18

Utilisez rsync. À partir du nouvel hôte, vous pouvez utiliser

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

Je n'essaierais pas d'impliquer quelque chose comme tar car cela ne fonctionnerait probablement pas lorsqu'il y a des fichiers cassés.

etagenklo
la source
Nous avons fini par utiliser rsync, comme décrit ci-dessus par etagenklo et @Hennes. La migration s'est bien passée. Juste besoin de réparer la bouffe, mais ça ne devrait pas être trop grave.
CHK
7
J'ajouterais également -AHX en tant que drapeaux à rsync afin de préserver les fichiers acls, xattrs et hardlinks, créant ainsi une copie encore plus exacte du fs original.
Alexander Remesch
4
J'ajouterais -x pour ignorer les éléments n'appartenant pas au système de fichiers racine, vous pourrez alors ignorer les arguments --exclude pour différents chemins.
Alex
4

Si les deux ordinateurs sont sur le même réseau local (sécurisé), je recommande une approche différente en utilisant netcat. Ceci est généralement beaucoup plus rapide car il ne crypte pas les données.

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

qui ouvre un port d’écoute 1234 sur la bonne machine netcat -l -p 1234et envoie les données entrantes tarà extraire (en préservant mtime et les permissions). Le mauvais hôte envoie les données à ce port, en utilisant également taret netcat. J'ai inclus quelques --excludeparamètres, comme /procet /syssont des systèmes de fichiers virtuels et donc inutiles sur le nouvel hôte. (surtout le fichier représentant votre RAM en ( /proc/kcore) ajoutera une quantité inutile de données).

Cependant, vous devriez (aussi) envisager de faire un dddump des partitions du lecteur défaillant:

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

où vous deviez adopter /dev/sda1le bon appareil. Faites-le également avec d'autres partitions du lecteur défaillant.

Avec ce vidage, vous êtes certain de ne pas manquer de métadonnées importantes (telles que les ACL) qui tarne seront pas capturées.

mpy
la source
3

Pourquoi combinez-vous avec l'annuaire? N'est-il pas préférable de monter le même appareil dans un autre répertoire? les noyaux modernes le permettent. par exemple, vous avez monté

/ dev / sda1 comme / alors faites: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

après cela, vous avez: / dev / sda1 sous / / dev / sda1 sous / CLEANROOT

C'est le même système de fichiers visible à deux endroits, mais / CLEANROOT ne possède pas de montages additifs. Ensuite, vous pouvez tar ou rsync / CLEANROOT sans aucune exclusion à la place de la copie / avec des exclusions.

Bien sûr, vous devez copier d'autres partitions de données lorsque vous en avez.

La copie de la partition est la première étape de la récupération du serveur. un autre est régénérer les secteurs de démarrage, sinon le système ne démarrera pas à partir du disque copié. Utile est le mode de secours lorsque vous démarrez à partir d’un CD d’installation / de secours ou d’une clé USB.

Znik
la source
1

Avez-vous un accès physique à l'hôte défaillant?

Si vous le faites, démarrez à partir d'un live CD. Alors utilisez:

  • dump (dump / restaure des systèmes de fichiers entiers, y compris ses permissions).
  • Tar avec / dev exclu. Vous pouvez combiner cela avec la sortie à std_out et tuyauterie si netcat
    La syntaxe est exclue: tar --exclude='/dev'.
  • ou rsync avec le même exclut. Par exemple
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • ou utilisez dd comme ceci:
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

Si vous ne pouvez pas démarrer à partir d'un CD live, la plupart des solutions ci-dessus resteront inchangées, mais:

  1. Certains fichiers peuvent être utilisés / verrouillés.
  2. Assurez-vous d’exclure non seulement / dev / mais aussi / proc /.
    Par exempletar --exclude='/dev' --exclude='/proc'
Hennes
la source
Oui, j'ai un accès physique (et root) aux deux hôtes. Va essayer avec rsync. netcat s'est écrasé pour la boîte défaillante pour des raisons inconnues. le système de fichiers cible ne veut pas être monté. il échoue avec: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK
0

vous devriez envisager d'utiliser rsync

la commande suivante suppose 2 choses:

  1. vous êtes sur le système avec un disque dur en panne
  2. la nouvelle partition a une installation minimale de Linux avec ssh activé.

rsync / new_partition:/wherever/you/want/

Remarque: le / final est important, sinon vos fichiers se retrouveront dans un niveau de répertoire supérieur

MelBurslan
la source
L'OP voudra probablement utiliser le -aparamètre (et peut-être le -A), car il préserve les temps, la propriété, les liens symboliques (et peut-être les ACL), etc. et le -e sshparamètre, car les données doivent être transférées sur un autre ordinateur. Sorsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy