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"
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.
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.
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.
Avez-vous un accès physique à l'hôte défaillant?
Si vous le faites, démarrez à partir d'un live CD. Alors utilisez:
tar --exclude='/dev'
.rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
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:
tar --exclude='/dev' --exclude='/proc'
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 -
vous devriez envisager d'utiliser rsync
la commande suivante suppose 2 choses:
rsync / new_partition:/wherever/you/want/
Remarque: le/final est important, sinon vos fichiers se retrouveront dans un niveau de répertoire supérieur