1 votes

Sauvegarde avancée du script.

Je suis actuellement en train d'écrire un script de démarrage avancé pour mon serveur Minecraft. Tout fonctionne comme je le veux. Mais le problème est celui des sauvegardes. J'ai créé une fonction pour cela. Il fonctionne aussi très bien et fait exactement ce que je veux qu'il fasse. Mais comme le serveur doit être arrêté pendant la sauvegarde et que la sauvegarde elle-même prend des heures, j'ai besoin d'accélérer la sauvegarde !

Ma sauvegarde actuelle fonctionne comme suit :

tar -cjvf $BACKUP_PATH/$filename $MINECRAFT_PATH

Comme je l'ai dit, cela prend du temps !

J'ai donc eu l'idée de créer un fichier tar sans le compresser, puis de démarrer le serveur et enfin de compresser l'archive.

tar -cvf $BACKUP_PATH/$filename $MINECRAFT_PATH
START_SERVER
bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

Cela devrait fonctionner plus rapidement. Mais ensuite j'ai eu une idée. Et c'est là que j'ai besoin de vous.

Tout d'abord, je voulais modifier la sauvegarde actuelle d'une manière qui montre la quantité déjà sauvegardée et une estimation du temps qu'il faudra approximativement pour terminer. Pour cela, la sortie de tar serait supprimée, la commande serait exécutée en arrière-plan et une boucle (while) (qui attend que la commande se termine) calculerait le pourcentage calculé ainsi qu'une estimation du temps restant.

Pour cela, il faut d'abord appeler du pour obtenir la taille de tous les fichiers en cours de compression. Ceci serait sauvegardé dans une variable. Le i obtiendrait l'horodatage actuel. Également enregistré dans une variable. A ce stade, la boucle commence. Puis, dans la boucle, le pourcentage et le temps restant seraient calculés (simple...) et cela serait imprimé sur deux lignes qui seraient toujours mises à jour. Et c'est là mon principal problème. Je serais très heureux si quelqu'un pouvait m'aider avec la boucle !

Un peu de code de base :

tar -cf $BACKUP_PATH/$filename $MINECRAFT_PATH &

backupsize=$(du -bs $MINECRAFT_PATH)
starttimestamp=$(date +%s)

# Here is the loop (how do I stay here while the tar command is still running?
# And how do i update the two lines with the newly created numbers?

START_SERVER

bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

Si vous êtes d'humeur serviable, vous pouvez m'aider à faire en sorte que ce genre de chose fonctionne également pour le système d'alerte précoce. bzip commande. Si ce n'est pas possible, je vais laisser tomber ! ( bzip accepte les mêmes drapeaux que zip )

4voto

MyCwoissant Points 31

Vous pourriez utiliser rsync pour créer une copie de sauvegarde de votre $MINECRAFT_PATH . Cela permettra sólo copier les parties des fichiers qui ont été modifiées depuis la dernière exécution, ce qui devrait être relativement rapide (sauf pour la toute première exécution, car il doit alors tout copier). Une fois que le rsync est terminé, vous pouvez redémarrer le serveur. Ensuite, vous utilisez tar pour créer une archive tarball de la copie de sauvegarde de $MINECRAFT_PATH .

Il est également utile de disposer d'une copie de sauvegarde sur la machine en cas de problème.

En ce qui concerne la compression, je recommande l'utilisation de la norme gzip au lieu de bzip2 . Quand j'ai fait un test la compression des vidages d'OS, gzip La taille des fichiers était d'environ 40% du fichier non compressé. La vitesse de compression était de 11,5-17,7 Mo/s. Lorsque j'ai utilisé bzip2 La taille des fichiers compressés était de 32 à 38 % de celle des fichiers non compressés, mais la vitesse de compression n'était plus que de 5,7 à 7,3 Mo/s. Si vous avez une machine multi-core, vous pouvez essayer pbzip2 qui utilise les processeurs multiples pour accélérer les choses. Mais il sera probablement toujours plus lent que gzip . De plus, l'utilisation d'un programme de décompression externe complique la restauration des sauvegardes.

1voto

Znik Points 329
  1. manipuler la variable BZIP2 exportée. par défaut, bzip2 utilise un taux de compression de -3 ou -4. En définissant la variable BZIP2 exportée, vous pouvez indiquer à bzip2 lancé par tar (tar -j) le taux de compression. voir la page http://tukaani.org/lzma/benchmarks.html

  2. essayez différents ratios pour optimiser la vitesse. aucune compression n'est la meilleure vitesse parce que vous avez une limitation de la vitesse du matériel. la meilleure compression est lente parce qu'elle utilise le CPU. c'est pourquoi le ratio -3 ou -4 est le ratio par défaut, mais vous devriez faire des expériences. après la sauvegarde vous pouvez repacker l'archive :

    bzip2 -d archive_après_repack.bz2 mais le ratio de compression est meilleur (et plus lent) si vous utilisez l'archiveur xz.

  3. utiliser rsync n'est pas la meilleure idée car vous devez avoir une seconde copie complète des données.

  4. essayez de mélanger les sauvegardes différentielles et complètes. vous pouvez utiliser l'option --newer=DATE-OR-FILE (man tar)

  5. utilisez tar avec --checkpoint ou --checkpoint-action , cela vous aidera à obtenir la progression. vous pouvez calculer cela et obtenir des estimations.

  6. Si c'est possible, utilisez le snapshot du système de fichiers. Vous pouvez combiner cela en utilisant lvm avec ext3, ext4, jfs ou xfs. Si vous le pouvez, vous pouvez utiliser le support zfs mais ce n'est pas officiellement supporté. La création d'un snapshot est très rapide. Vous ne devez pas arrêter les services. Après l'instantané, vous disposez d'un système de fichiers compact et figé que vous pouvez sauvegarder tant que vous en avez besoin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X