Question Copier toute la hiérarchie du système de fichiers d'un lecteur à un autre


Je voudrais copier toute la hiérarchie du système de fichiers d'un lecteur à un autre. C'est-à-dire le contenu de chaque répertoire, ainsi que les fichiers réguliers sur la plate-forme Linux. Serait reconnaissant de connaître la meilleure façon de le faire avec éventuellement des fonctions intégrées à Linux. Le système de fichiers est une famille ext.


77
2017-07-07 03:30


origine


Umm ... où est l'amour pour dd? dd if=/dev/sda1 of=/dev/sdb1 bs=4096 - juniorRubyist
@juniorRubyist +1 pour dd. Je l'utilise toujours. Mais quels drapeaux utiliser? j'utilise conv=notrunc,noerror,sync. - BeniBela


Réponses:


J'utilise souvent

> cp -ax / /mnt

Présumer / mnt est le nouveau disque monté sur / mnt et il n'y a pas d'autres montages sur /.

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

Cela 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


28
2017-07-07 03:42





Ce que vous voulez est rsync.

Cette commande peut être utilisée pour synchroniser un dossier et pour reprendre la copie lorsqu'elle est interrompue à mi-chemin. La commande pour copier un disque est la suivante:

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

Les options sont les suivantes:

-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), pour éviter de calculer les deltas / diffs des fichiers. Il s'agit de 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.


161
2017-07-07 03:36



Génie, merci. Btw, j'ai fini par utiliser rsync -avxHAWX --numeric-ids --progress / mnt/ mais j'aurais dû faire rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out. Je soupçonne que verser la sortie vers le terminal a ralenti le processus. :RÉ - Chris K
--info=progress2au lieu de --progress est utile pour les transferts volumineux, car il donne une progression globale au lieu de (millions de lignes pour) fichiers individuels. - Florian
Je devais remplacer X et A avec E, car les attributs étendus et les ACL sont couverts par E sur mon mac. Testé: rsync version 2.6.9 protocol version 29 - Jonathan Komar
En plus de > ~/rsync.out, 2> ~/rsync.err va enregistrer les erreurs dans un fichier séparé. - Aneel
Si vous copiez depuis un autre dossier que /, notez qu'avoir une barre oblique (ou non) dans le répertoire source fait une différence: rsync source/ dest/ copie tout à l'intérieur source/ à dest/, tandis que rsync source dest/ copie le dossier source et tout à l'intérieur de dest/. - semi-extrinsic


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

De plus, cette variante ne spamme pas chaque fichier progressant et ne fait pas de synchronisation delta, ce qui tue les performances dans les cas non 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

15
2018-03-05 10:42



Incroyable. Cela fait vraiment du bon travail - Gildas
Cela devrait être la réponse acceptée, fonctionne très bien. Exemple 55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534) - Drew


Je suppose que pour une copie locale ponctuelle d'un disque à l'autre cp suffit comme décrit par Wolfmann ci-dessus.

Pour les gros travaux comme 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 (synchronisé copier) tout ou partie de votre lecteur A à lecteur B, avec de nombreuses options, comme excluant certains répertoires de la copie (par exemple, à l'exclusion de / proc).

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

  • Et last but not least, rsync utilise connexion ssh, donc cela vous permet de achive remote synchronized secure "copies". Regardez le homme page aussi bien que ici pour certains exemples.


6
2017-07-07 20:53





Ajout de deux bits utiles au thread re rsync: changer de chiffrement et utiliser --update:

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

cependant, rsync C'est génial aussi. Suite à la réponse de Michael -W, changer le cryptage peut également accélérer les choses (lisez toutes les implications de sécurité si).

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

Il y a quelques discussions (et benchmarks) autour de la place sur un processeur lent étant le goulot d'étranglement réel, mais cela semble m'aider lorsque la machine est chargée de faire d'autres choses concurrentes.

L’une des autres grandes raisons d’utiliser rsync dans une grande copie récursive est due à la -u interrupteur (ou --mettre à jour). S'il y a un problème pendant la copie, vous pouvez le réparer, et rsync reprendra là où il s'est arrêté (je ne pense pas que scp l'ait). En le faisant localement, cp a également un commutateur -u.

(Je ne suis pas certain des implications de --update et --whole-file ensemble, mais elles semblent toujours fonctionner de manière raisonnable pour moi dans ce type de tâche)

Je me rends compte que ce n'est pas un sujet sur les fonctionnalités de rsync, mais certaines des plus courantes sont:

  • --delete-after etc (comme Michael l'a mentionné dans la suite), si vous souhaitez synchroniser le nouveau système à l'endroit d'origine ou quelque chose comme ça. Et,
  • --exclure - pour sauter des répertoires / fichiers, par exemple pour copier / créer un nouveau système dans un nouvel endroit en ignorant les répertoires personnels des utilisateurs, etc. (vous montez des maisons ailleurs ou créez de nouveaux utilisateurs, etc.).

Incidemment, si je dois jamais utiliser Windows, j'utilise rsync de cygwin pour faire des copies récursives volumineuses, car l'explorateur est un peu débordé de vouloir commencer depuis le début (bien que je trouve que Finder est OS X encore pire)


2
2018-03-19 23:53





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

Cette version est assez spécifique aux systèmes basés sur Gnome et Debian / Ubuntu, car elle inclut des sous-répertoires des répertoires personnels des utilisateurs spécifiques à Gnome, ainsi que le cache du package APT.

La dernière ligne exclura tout répertoire nommé cache / Cache / .cache, qui peut être 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
2018-02-06 06:11





rsync

"Cette approche est considérée comme meilleure que le clonage sur disque avec dd   puisqu'il permet une taille, une table de partition et un système de fichiers différents   être utilisé, et mieux que de copier avec cp -a aussi, car il   permet un plus grand contrôle sur les autorisations de fichiers, les attributs, l'accès   Listes de contrôle (ACL) et attributs étendus. "

De:

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

Man Page Ici


2
2018-05-18 15:45





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

Je viens d'ajouter -S à "gérer efficacement les fichiers fragmentés"Au cas où il y aurait un volume Docker Devicemapper ou similaire à copier.


0
2017-08-07 18:04





Comme mentionné dans les commentaires de JuniorRubyist, l'approche privilégiée ici devrait être d'utiliser dd. La principale raison 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

Les références

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

0
2018-06-14 17:30