2011-07-07 03:30:57 +0000 2011-07-07 03:30:57 +0000
100
100

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

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

Ответы (11)

208
208
208
2011-07-07 03:36:43 +0000

Ce que vous voulez, c'est rsync .

Cette commande peut être utilisée pour synchroniser un dossier, et aussi reprendre la copie lorsqu'elle est interrompue à 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), pour éviter de calculer les deltas/diffs des fichiers. C'est la valeur par défaut lorsque la source et la destination sont toutes deux spécifiées comme chemins locaux, puisque le véritable avantage de l'algorithme de transfert delta de rsync est de réduire l'utilisation du réseau.

Envisagez également d'ajouter --numeric-ids pour éviter le mappage des valeurs uid/gid par nom d'utilisateur/groupe.

56
56
56
2017-03-05 10:42:04 +0000

La réponse de Michael Aaron Safyan n'explique pas la rareté des dossiers. L'option -S corrige cela.

Cette variante ne spamme pas non plus avec la progression de chaque fichier et ne fait pas de synchronisation delta, ce qui réduit les performances dans les cas hors réseau.

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

rsync -axHAWXS --numeric-ids --info=progress2
35
35
35
2011-07-07 03:42:40 +0000

J'utilise souvent

> cp -ax / /mnt

En supposant que /mnt est le nouveau disque monté sur /mnt et qu'il n'y a pas d'autres montages sur /.

le -x le maintient sur le même système de fichiers.

Cela doit bien sûr être fait en tant que root ou en utilisant sudo.

Ce lien a quelques alternatives, dont celle ci-dessus http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

6
6
6
2011-07-07 20:53:25 +0000

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

Pour les gros travaux comme les sauvegardes locales ou à distance 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 vers le lecteur B, avec de nombreuses options, comme l'exclusion de certains répertoires de la copie (par exemple en excluant /proc).

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

  • Et enfin, rsync utilise une connexion ssh, ce qui vous permet d'obtenir des “copies” sécurisées synchronisées à distance. Consultez la page de manuel ainsi que ici pour quelques exemples .

5
5
5
2014-02-06 06:11:42 +0000

Comme Michael Safyan le suggère ci-dessus, j'ai utilisé rsync dans ce but. Je vous suggère d'utiliser quelques 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, puisqu'elle inclut les sous-répertoires des répertoires personnels des utilisateurs qui sont spécifiques à Gnome, ainsi que le cache des paquets APT.

La dernière ligne exclura tout répertoire nommé cache/Cache/.cache, ce 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
2
2
2012-03-19 23:53:05 +0000

Ajout de deux bits utiles au fil de discussion re rsync : changement de chiffre, et utilisation de --update :

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

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

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

Il y a quelques discussions (et benchmarks) dans le coin sur le fait qu'un CPU lent est le véritable goulot d'étranglement, mais cela semble m'aider quand la machine est chargée et fait d'autres choses en même temps.

Une des autres grandes raisons d'utiliser rsync dans une grande copie récursive comme celle-ci est le commutateur -u (ou –update). 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 la scp ait ça). En le faisant localement, cp a aussi un commutateur -u.

(je ne suis pas certain des implications de –update et –whole-file ensemble, mais ils semblent toujours fonctionner raisonnablement pour moi dans ce type de tâche)

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

  • –supprimer-après etc (comme Michael l'a mentionné dans la suite), si vous voulez synchroniser le nouveau système à l'endroit original ou quelque chose comme ça. Et,
  • –exclure - pour sauter des répertoires/fichiers, par exemple pour copier/créer un nouveau système à un nouvel endroit tout en sautant les répertoires personnels des utilisateurs, etc (soit vous montez des maisons à partir d'un autre endroit, soit vous créez de nouveaux utilisateurs, etc).

Incidemment, si jamais je dois utiliser windows, j'utilise rsync depuis cygwin pour faire de grosses copies récursives, à cause du fait que l'explorateur est légèrement en mort cérébrale et veut recommencer depuis le début (bien que je trouve que Finder est encore pire sous OS X)

2
2
2
2015-05-18 15:45:08 +0000

rsync

“Cette approche est considérée comme 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 plus grand contrôle des autorisations de fichiers, des attributs, des listes de contrôle d'accès (ACL) et des attributs étendus.

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

Man Page Here

2
2
2
2018-06-14 17:30:20 +0000

Comme mentionné dans les commentaires de juniorRubyist, l'approche préférée ici 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
1
1
1
2019-01-27 21:53:49 +0000

dd" est génial, mais ddrescue (apt install gddrescue) est encore mieux. 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 garde la trace des blocs qui ont été copiés.

Lors de la sauvegarde d'un système à double démarrage Windows/Linux, 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 démarrage en utilisant GPT/UEFI.)

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

Quelqu'un peut trouver le “format d'image spécial” ntfsclone pour ddrescue…

1
1
1
2019-07-31 21:30:35 +0000

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

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

Ceci exécute les étapes suivantes :

  1. cloner (uniquement les parties utilisées) la partition
  2. s'assurer que le système de fichiers est correct (le redimensionnement de 2fs permet d'appliquer cette étape)
  3. redimensionner la partition en fonction du nouveau système de fichiers

Les étapes ci-dessus fonctionnent dans le cas où la partition cible est de la même taille ou plus grande que la partition source. Si votre cible est plus petite que la source (mais correspond à 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 partclone n'est pas installé par défaut sur la plupart des systèmes. Utilisez une distribution en direct comme clonezilla ou installez partclone à partir de votre gestionnaire de paquets de distribution (apt-get install partclone sur les systèmes basés sur debian).

0
0
0
2015-08-07 18:04:55 +0000

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

Je voudrais juste ajouter -S à “gérer efficacement les fichiers épars” au cas où il y aurait un volume de Docker Devicemapper ou similaire à copier.