Comment mettre en miroir des systèmes de fichiers avec des millions de liens physiques?

11

Nous avons un gros problème à l'heure actuelle: nous devons mettre en miroir un système de fichiers pour l'un de nos clients. Ce n'est généralement pas vraiment un problème, mais le voici:

Sur ce système de fichiers, il y a un dossier avec des millions de liens durs (oui! MILLIONS!). rsyncnécessite plus de 4 jours pour simplement créer la liste de fichiers.

Nous utilisons les rsyncoptions suivantes :

rsync -Havz --progress serverA:/data/cms /data/

Quelqu'un at-il une idée de la façon d'accélérer cette synchronisation, ou d'utiliser des alternatives? Nous n'avons pas pu l'utiliser ddcar le disque cible est plus petit que la source.

MISE À JOUR: Comme le système de fichiers d' origine est que ext3nous allons essayer dumpet restore. Je te tiendrai au courant

Thomas Berger
la source
Rusé. Rétrécissez d'abord le système de fichiers source, puis dd?
Bittrance

Réponses:

3

Vous devez mettre à niveau les deux côtés vers rsync 3. Dans le journal des modifications:

- A new incremental-recursion algorithm is now used when rsync is talking
  to another 3.x version.  This starts the transfer going more quickly
  (before all the files have been found), and requires much less memory.
  See the --recursive option in the manpage for some restrictions.

Cela fait plus de 2 ans que rsync 3.0.0 est sorti, mais, malheureusement, la plupart des distributions d'entreprise sont basées sur un code plus ancien que celui-ci, ce qui signifie que vous utilisez probablement rsync 2.6.

Pour référence (si quelqu'un d' autre est d' avoir ce problème), si vous êtes en cours d' exécution rsync 3 déjà, vous utilisez les options qui sont incompatibles avec la récursivité incrémentale. Depuis la page de manuel:

    Some options require rsync to know the full file list, so  these
    options  disable the incremental recursion mode.  These include:
    --delete-before,   --delete-after,    --prune-empty-dirs,    and
    --delay-updates.

De plus, encore une fois, les deux côtés doivent exécuter rsync 3 pour que la récursivité incrémentielle soit prise en charge.

Steven Pritchard
la source
Merci Pritchard pour cette biche, mais les parties incrémentales ne posent aucun problème, les deux côtés utilisent rsync> 3.0. Si nous utilisons rsync sans -H, nous avons une grande amélioration de la vitesse, mais ce n'est pas ce dont nous avons besoin.
Thomas Berger
Aie. Oui, dans ce cas, vous voudrez peut-être examiner les options pour accélérer l'accès au système de fichiers (comme passer à ext4 si vous utilisez ext3), passer à des disques plus rapides ou à des niveaux RAID (si c'est même une option), etc. Malheureusement, vous peut être à un point où le système de fichiers ne peut tout simplement pas être assez rapide et les sauvegardes au niveau du bloc peuvent être votre seule option. J'ai eu ce problème en essayant de resynchroniser un pool BackupPC d'un serveur à un autre.
Steven Pritchard
3

Nous utilisons maintenant ext * dump. Fonctionne bien et le côté restauration n'a même pas besoin d'être ext *.

Nous avons effectué une sauvegarde hors ligne, en démontant l'appareil et en l'utilisant dump vf - /dev/vg0/opt | gzip -c > /mnt/backup/ext3dump.gz.

Voici les dernières lignes dont vous pouvez voir la taille, l'heure, la vitesse et les derniers numéros d'inode:

DUMP: dumping regular inode 47169535
DUMP: dumping regular inode 47169536
DUMP: Volume 1 completed at: Wed Jun 29 05:42:57 2011
DUMP: Volume 1 54393520 blocks (53118.67MB)
DUMP: Volume 1 took 4:16:43
DUMP: Volume 1 transfer rate: 3531 kB/s
DUMP: 54393520 blocks (53118.67MB)
DUMP: finished in 15403 seconds, throughput 3531 kBytes/sec
DUMP: Date of this level  dump: Wed Jun 29 01:24:29 2011
DUMP: Date this dump completed:  Wed Jun 29 05:42:57 2011
DUMP: Average transfer rate: 3531 kB/s
DUMP: DUMP IS DONE
Thomas Berger
la source
Je ne sais pas si cela est toujours vrai, mais le vidage avait des problèmes si le système de fichiers est utilisé au moment du vidage. Puisque votre objectif est la vitesse, je suppose que vous avez déjà désactivé tous les autres accès, mais juste au cas où. Faites-nous savoir comment vous allez
SuperBOB
0

Vous pouvez utiliser LVM et prendre des instantanés du volume, puis resynchroniser l'instantané en tant que sauvegarde.

Alternativement, vous pouvez combiner cela avec l'autre réponse et l'utiliser dump sur le volume d'instantané , pour éviter d'avoir à déconnecter le volume d'origine.

Teddy
la source
Tout ce qui fonctionne au niveau du bloc, pas au niveau du système de fichiers, serait probablement une énorme amélioration.
Marcin
Comme vous pouvez le voir dans ma question, je dois refléter à travers le réseau, pas local. LVM n'est PAS non plus un miroir, c'est juste, comme vous l'avez dit, un instantané.
Thomas Berger
1
@Thomas Berger: Je pensais que vous copieriez ensuite l'instantané (en utilisant rsync) sur le réseau. Et comment définissez-vous exactement le miroir , si un instantané LVM n'en est pas un?
Teddy
Cela a toujours le même problème: cela prendrait des jours. De nos jours, il y aurait un énorme dalta (pas que nous en aurions besoin), nous devons donc réserver suffisamment d'espace, et nous n'avons pas cet espace. Et un miroir est une copie indépendante de la source. Nous devons copier les données de la production au développement pour le client.
Thomas Berger
@Thomas Berger: Je voulais dire à l'origine que vous synchroniseriez le volume réel de l'instantané, pas le système de fichiers sur l'instantané. Cependant, je pense maintenant que la solution snapshot + dump est meilleure.
Teddy