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


95

Je souhaite copier toute la hiérarchie du système de fichiers d’un lecteur à l’autre ... le contenu de chaque répertoire ainsi que les fichiers ordinaires 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.


1
Umm ... où est l'amour dd? dd if=/dev/sda1 of=/dev/sdb1 bs=4096
juniorRubyist

@juniorRubyist +1 pour jj. J'utilise toujours ça. Mais quels drapeaux utiliser? Je l'utilise conv=notrunc,noerror,sync.
BeniBela

-1 pour dd2 raisons: premièrement, c'est une mauvaise idée de faire une copie au niveau du bloc d'un système de fichiers monté (ce qui est le cas de /) et deuxièmement dd, ne copiez pas les données des sources montées dans le système de fichiers comme /bootet /home.
Eric

Réponses:


33

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


alors que c'est vieille réponse morte , il est encore intéressant de noter que vous ne voulez pas l' habitude de copier tous les trucs présents dans /, hors -à- dire /dev, /sys, /procetc. Par conséquent , avant l' émission que cpje suggère la recherche de meilleures approches (également en utilisant rsync)
Marcin Orlowski

2
@MarcinOrlowski L'utilisation de l' -xindicateur par WolfJM signifie que les systèmes de fichiers synthétiques que vous mentionnez ne seront pas copiés.
Jim L.

192

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 l'avantage réel de l'algorithme de transfert delta de rsync est la réduction de l'utilisation du réseau.

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


1
Génie, merci. Btw, j'ai fini par utiliser, rsync -avxHAWX --numeric-ids --progress / mnt/mais j'aurais dû le faire rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out. Je soupçonne que verser la sortie sur le terminal a ralenti le processus. : D
Chris K

28
--info=progress2au lieu de --progressest utile pour les transferts volumineux, car il donne la progression générale, au lieu de (des millions de lignes pour) des fichiers individuels.
Florian

3
J'ai dû remplacer Xet Apar E, car les attributs étendus et les ACL sont couverts par Emon Mac. Testé:rsync version 2.6.9 protocol version 29
Jonathan Komar

1
En outre > ~/rsync.out, 2> ~/rsync.errenregistrera toutes les erreurs dans un fichier séparé.
Aneel

2
Si vous copiez d'un autre dossier que /, notez que ayant une barre oblique (ou non) sur le répertoire source fait une différence: rsync source/ dest/copie tout à l' intérieur source/de dest/, alors que des rsync source dest/copies du dossier sourceet tout à l' intérieur en dest/.
Semi-extrinsèque

45

La réponse de Michael Aaron Safyan ne tient pas compte des fichiers fragmentés. -Sl'option 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

1
Incroyable. C'est vraiment un bon travail
Gildas

1
Cela devrait être la réponse acceptée, fonctionne très bien. Exemple55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Drew

1
<3 c'est parfait
Tim Strijdhorst le

6

Pour une copie locale unique d'un disque à un 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 meilleur 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, ce qui vous permet d’atteindre des "copies" sécurisées synchronisées à distance. Jetez un coup d’œil à la page de manuel ainsi qu’ici pour quelques exemples .


4

Comme Michael Safyan 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 du paquet APT.

La dernière ligne exclura tous les répertoires nommés 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

2

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

Selon le post de Wolfman, cp -axest élégant et cool pour les trucs locaux.

Cependant, rsyncc'est génial aussi. En réponse à la réponse de Michael -W, changer le chiffre 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 des discussions (et des points de repère) autour de l'endroit sur le fait qu'un processeur lent est le véritable goulet d'étranglement, mais cela semble m'aider lorsque la machine est chargée effectuant d'autres tâches simultanées.

L'une des autres grandes raisons d'utiliser rsync dans une copie récursive de cette taille est due à l' option -u (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). Le faire 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 de manière raisonnable 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 la suite), si vous souhaitez synchroniser le nouveau système à l'emplacement d'origine ou quelque chose comme ça. Et,
  • --exclude - pour ignorer des répertoires / fichiers, pour des instances telles que la copie / la création d'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, car l’explorateur a un peu la tête morte depuis le début (bien que Finder soit sous OS X, c’est pire).


2

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 fichiers, 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 Here


2

Comme mentionné dans les commentaires de juniorRubyist, l’approche à privilégier devrait être ici dd. La raison principale est la performance, c'est une copie bloc par bloc au lieu de fichier par fichier.

Cloner une partition

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

Cloner 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

ddest une très mauvaise idée pour 2 raisons: premièrement, effectuer une copie au niveau du bloc d’un système de fichiers monté (ce qui est le cas pour /) entraînera plus que probablement des erreurs du système de fichiers cible et, deuxièmement dd, ne copiera pas les données des sources montées dans le système de fichiers comme /bootet /home. Votre lien est valide pour le clonage de disque, pas pour le clonage "hiérarchie de fichiers"
Eric

1

'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 ...


0

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

J'ajouterais simplement -S« gérer efficacement les fichiers fragmentés» dans le cas où un volume docker devicemapper ou similaire serait copié.


0

J'ai essayé les commandes rsync proposées ici, mais j'ai finalement obtenu des résultats beaucoup plus propres et plus rapides partclone. Démontez les partitions source et cible, puis exécutez les opérations suivantes:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Cela effectue les étapes suivantes:

  1. Cloner (uniquement les parties utilisées de) la partition
  2. assurez-vous que le système de fichiers est ok (resize2fs applique cette étape)
  3. redimensionner la partition sur le nouveau système de fichiers

Ce qui précède fonctionne dans le cas où la partition cible est de la même taille ou plus grande que la source. Si votre cible est plus petite que la source (mais s'adapte à toutes les données), procédez comme suit:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M réduit le système de fichiers à la taille minimale avant de cloner les données.

Notez que ce partclonen’est pas installé par défaut sur la plupart des systèmes. Utilisez une distribution live comme Clonezilla ou installez partclone à partir de votre gestionnaire de paquets de distribution ( apt-get install partclonesur les systèmes basés sur Debian).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.