web-dev-qa-db-fra.com

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

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 presque certain que cela implique tar et 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"

17
CHK

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.

16
etagenklo

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 1234 et dirige les données entrantes vers tar pour les extraire (en préservant mtime et les autorisations). Le mauvais hôte envoie les données à ce port, en utilisant également tar et netcat. J'ai inclus des paramètres --exclude, car /proc et /sys sont des systèmes de fichiers virtuels et sont donc inutiles sur le nouvel hôte. (surtout le fichier représentant votre RAM in (/proc/kcore) ajoutera une quantité inutile de données).

Cependant, vous devriez (aussi) envisager de faire un dump dd 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 avez dû adopter /dev/sda1 sur le bon périphérique. 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) que tar ne capturera pas.

4
mpy

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.

3
Znik

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 sur std_out et la tuyauterie bien que netcat
    La syntaxe d'exclusion est la suivante: 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 exemple. tar --exclude='/dev' --exclude='/proc'
1
Hennes

Voici une description de la procédure à suivre pour copier des fichiers à l'aide de tar et ssh. En principe, vous exécuteriez l'une des opérations suivantes, selon que vous souhaitiez copier en local -> distant ou distant -> local:

tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'

ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -
1
Kenster

vous devriez envisager d'utiliser rsync

la commande suivante suppose 2 choses:

  1. vous êtes sur le système avec un disque dur défaillant
  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

0
MelBurslan