web-dev-qa-db-fra.com

Copier l'intégralité de la hiérarchie du système de fichiers d'un lecteur à un autre

Je souhaite copier l’ensemble de la hiérarchie du système de fichiers d’un lecteur à l’autre..i.e le contenu de chaque répertoire ainsi que les fichiers normaux de la plate-forme Linux. Je serais reconnaissant de connaître le meilleur moyen de le faire avec éventuellement des fonctions intégrées à Linux. Le système de fichiers est une famille ext.

87
Juggler

J'utilise souvent

> cp -ax / /mnt

Présumer/mnt est le nouveau disque monté sur/mnt et il n’ya pas d’autre monte sur /.

le -x le garde sur le seul système de fichiers.

Ceci doit bien sûr être fait en tant que root ou en utilisant Sudo.

Ce lien a quelques alternatives, y compris celle ci-dessus

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

32
WolfmanJM

Ce que vous voulez, c'est rsync .

Cette commande peut être utilisée pour synchroniser un dossier et reprendre la copie quand il est abandonné à mi-chemin. La commande pour copier un disque est:

rsync -avxHAX --progress / /new-disk/

Les options sont:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

Pour améliorer la vitesse de copie, ajoutez -W (--whole-file) afin d'éviter de calculer les différences/deltas des fichiers. C'est la valeur par défaut lorsque la source et la destination sont spécifiées en tant que chemins locaux, car le véritable avantage de l'algorithme de transfert delta de rsync est la réduction de l'utilisation du réseau.

Pensez également à ajouter --numeric-ids pour éviter de mapper les valeurs uid/gid par nom d'utilisateur/groupe.

180

La réponse de Michael Aaron Safyan ne tient pas compte des fichiers fragmentés. L'option -S corrige cela.

De plus, cette variante ne fait pas de spam avec la progression de chaque fichier et ne fait pas de synchronisation delta qui tue les performances dans les cas autres que ceux liés au réseau.

Parfait pour copier le système de fichiers d'un lecteur local vers un autre lecteur local.

rsync -axHAWXS --numeric-ids --info=progress2
31
Ilia Sidorenko

Pour une copie locale d’un disque à l’autre, je suppose que cp suffit comme décrit par Wolfmann ci-dessus.

Pour les travaux plus importants tels que les sauvegardes locales ou distantes, par exemple, le mieux est rsync .

Bien sûr, rsync est beaucoup plus complexe à utiliser.

Pourquoi rsync:

  • cela vous permet de copier (copie synchronisée) tout ou partie de votre lecteur A sur le lecteur B, avec de nombreuses options, telles que l'exclusion de certains répertoires de la copie (par exemple, l'exclusion de/proc).

  • Un autre gros avantage est que cet outil natif surveille le transfert de fichier: par exemple, pour les transferts massifs, si la connexion est interrompue, elle continuera à partir du point d'arrêt.

  • Enfin, rsync utilise la connexion SSH, vous permettant ainsi d’obtenir des «copies» sécurisées synchronisées à distance. Jetez un coup d’œil à la page de manuel ainsi qu’à ici pour quelques exemples .

6
hornetbzz

Comme Michael Safyan le suggère ci-dessus, j’ai utilisé rsync à cette fin. Je suggère d'utiliser des options supplémentaires pour exclure les répertoires que vous ne voulez probablement pas copier.

Cette version est assez spécifique aux systèmes basés sur Gnome et Debian/Ubuntu, car elle comprend des sous-répertoires des répertoires de base des utilisateurs qui sont spécifiques à Gnome, ainsi que le cache de paquets APT.

La dernière ligne exclura any répertoire nommé cache/Cache/.cache, ce qui peut s'avérer trop agressif pour certaines utilisations:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache
3
Dan

rsync

"Cette approche est jugée meilleure que le clonage de disque avec dd car elle permet d'utiliser une taille, une table de partition et un système de fichiers différents, et meilleure que la copie avec cp -a également, car elle permet un meilleur contrôle des autorisations de fichier, des attributs , Listes de contrôle d'accès (ACL) et attributs étendus. "

De:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

Man Page Ici

2
Mauro Colella

Ajouter deux bits utiles au fil de discussion sur rsync: changer de chiffrement et utiliser --update:

Selon le message de Wolfman, cp -ax est élégant et cool pour les produits locaux.

Cependant, rsync est également génial. En plus de la réponse de Michael concernant -W, changer le chiffrement peut également accélérer les choses (lisez cependant toutes les implications en matière de sécurité).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

Il y a quelques discussions (et points de repère) autour de l'endroit à propos d'un processeur lent constituant le goulot d'étranglement, mais cela semble m'aider lorsque la machine est chargée d'effectuer d'autres tâches simultanées.

Une des autres grandes raisons d'utiliser rsync dans une copie volumineuse et récursive comme celle-ci est due à-uswitch (ou --update). S'il y a un problème pendant la copie, vous pouvez le réparer, et rsync reprendra le travail là où il s'est arrêté (je ne pense pas que scp dispose de cela). En le faisant localement, cp a également un commutateur -u.

(Je ne suis pas sûr de ce que les implications de --update et - whole-file ensemble sont, mais elles semblent toujours fonctionner raisonnablement pour moi dans ce type de tâche)

Je réalise que ce n'est pas un sujet sur les fonctionnalités de rsync, mais certaines des plus courantes que j'utilise pour cela sont:

  • --delete-after etc (comme Michael l'a mentionné dans un suivi), si vous souhaitez synchroniser le nouveau système vers l'emplacement d'origine ou quelque chose du genre. Et,
  • --exclude - pour ignorer des répertoires/fichiers, par exemple pour copier/créer un nouveau système vers un nouvel emplacement tout en ignorant les répertoires personnels des utilisateurs, etc. (soit vous montez des maisons ailleurs, soit vous créez de nouveaux utilisateurs, etc. ).

Incidemment, si j’ai besoin d’utiliser Windows, j’utilise rsync de cygwin pour faire de grandes copies récursives, à cause du fait que l’explorateur veut un peu commencer à partir du début (bien que le Finder soit encore pire sous OS X)

2
herdingofthecats

Comme mentionné dans les commentaires de juniorRubyist, l’approche privilégiée dans ce cas devrait être d’utiliser dd. La raison principale est la performance, c'est une copie bloc par bloc au lieu de fichier par fichier.

Clonage d'une partition

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Clonage d'un disque entier

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Références

  1. https://wiki.archlinux.org/index.php/disk_cloning
2

'dd' est génial, mais ddrescue (pour installer install gddrescue) est encore meilleur. Si dd est interrompu, il n'y a aucun moyen de redémarrer (une autre bonne raison d'utiliser rsync). Lorsque vous utilisez ddrescue avec un fichier journal, il enregistre les blocs copiés.

Lors de la sauvegarde d'un système Windows/Linux à double démarrage, j'utilise ntfsclone pour les partitions Windows et ddrescue pour la partition Linux et dd pour le MBR. (Je n'ai pas essayé de sauvegarder un système à double amorçage à l'aide de GPT/UEFI.)

Ce que j'aimerais voir, c'est un outil ddrescue qui peut créer des fichiers comme ntfsclone où l'espace non alloué est marqué par des caractères de contrôle. Cela rend l'image non montable directement, mais lui permet d'être aussi gros que les données contenues.

Quelqu'un s'il vous plaît venez avec le "format d'image spécial" ntfsclone pour ddrescue ...

1
ECJB

rsync est la solution parfaite comme expliqué ci-dessus.

J'ajouterais simplement -S à " traiter efficacement les fichiers fragmentés " dans le cas où il y aurait un volume de docker devicemapper ou similaire à copier.

0
Jürgen Weigert