Essayez tar
, pax
, cpio
avec mise en mémoire tampon de quelque chose.
(cd /home && bsdtar cf - .) |
pv -trab -B 500M |
(cd /dest && bsdtar xpSf -)
Je suggère bsdtar
au lieu de tar
parce qu'au moins sur certaines distributions Linux tar
est GNU tar qui contrairement à bsdtar
(from libarchive
) ne gère pas la préservation des attributs étendus ou des ACL ou des attributs linux.
pv
tamponnera jusqu'à 500M de données afin de mieux s'adapter aux fluctuations des vitesses de lecture et d'écriture sur les deux systèmes de fichiers (bien qu'en réalité, vous aurez probablement un disque plus lent que l'autre et le mécanisme de réécriture du système d'exploitation fera cette mise en mémoire tampon comme eh bien, cela ne fera probablement pas beaucoup de différence). Les anciennes versions de pv
ne prennent pas en charge -a
(pour les rapports de vitesse moyenne), vous pouvez les utiliser pv -B 200M
seules.
Dans tous les cas, ceux-ci n'auront pas la limitation de cp
, cela fait les lectures et les écritures séquentiellement. Ici, nous avons deux tar
fonctionnant simultanément, donc l'un peut lire un FS tandis que l'autre est occupé à attendre que l'autre FS termine l'écriture.
Pour ext4 et si vous copiez sur une partition qui est au moins aussi grande que la source, voyez aussi celle clone2fs
qui fonctionne ntfsclone
, c'est-à-dire qui copie les blocs alloués uniquement et séquentiellement, donc le stockage rotationnel sera probablement le plus efficace.
partclone généralise cela à quelques systèmes de fichiers différents.
Maintenant, quelques éléments à prendre en compte lors du clonage d'un système de fichiers.
Le clonage reviendrait à copier tous les répertoires, fichiers et leur contenu ... et tout le reste. Maintenant, tout le reste varie d'un système de fichiers à un autre. Même si nous ne considérons que les caractéristiques communes des systèmes de fichiers Unix traditionnels, nous devons considérer:
- liens: liens symboliques et liens durs. Parfois, nous devrons réfléchir à ce qu'il faut faire avec les liens symboliques absolus ou les liens symboliques qui pointent du système de fichiers / répertoire à cloner
- dernière modification, accès et temps de changement: seuls les deux premiers peuvent être copiés à l'aide de l'API du système de fichiers (cp, tar, rsync ...)
- clarté: vous avez ce fichier clairsemé de 2 To qui est une image de disque VM qui ne prend que 3 Go d'espace disque, le reste étant clairsemé, faire une copie naïve remplirait le lecteur de destination.
Ensuite, si vous envisagez ext4
et la plupart des systèmes de fichiers Linux, vous devrez considérer:
- ACL et autres attributs étendus (comme ceux utilisés pour
SELinux
)
- Attributs Linux comme des indicateurs immuables ou à ajouter uniquement
Tous les outils d' aide à tous ceux, ou quand ils le font, vous devez activer explicitement comme --sparse
, --acls
... options rsync
, tar
... Et lors de la copie sur un des systèmes de fichiers différents, vous devez considérer le cas où ils ne le font pas prendre en charge le même ensemble de fonctionnalités.
Vous devrez peut-être également tenir compte des attributs du système de fichiers eux-mêmes comme l'UUID, l'espace réservé à la racine, la fréquence fsck, le comportement de journalisation, le format des répertoires ...
Ensuite, il existe des systèmes de fichiers plus complexes, où vous ne pouvez pas vraiment copier les données en copiant des fichiers. Considérez par exemple zfs
ou btrfs
quand vous pouvez prendre des instantanés de sous-volumes et les dériver ... Ceux-ci auraient leurs propres outils dédiés pour copier les données.
La copie octet à octet du périphérique de bloc (ou au moins des blocs alloués lorsque cela est possible) est souvent la plus sûre si vous voulez vous assurer que vous copiez tout. Mais méfiez-vous du problème de conflit UUID, et cela implique que vous copiez sur quelque chose de plus grand (bien que vous puissiez redimensionner une copie instantanée de la source avant de copier).
cp
c'est lent, d'autres méthodes le seraient aussi. À moins que ce ne soit pas une copie orientée fichier