Jump to content

Sauvegarde serveur Debian


Zappi

Recommended Posts

Bonjour à tous,

Je possède un petit serveur sous debian chez OVH ( le ks2G de la gamme kimsuffi) et ma question porte sur la sauvegarde.

Je ne suis pas très calé en sauvegarde et après moultes recherches je ne sais pas trop vers quoi m’orienter pour sauvegarder complétement à chaud un serveur et envoyer cette sauvegarde sur un FTP ou autre.

Si vous avez des idées ou solution je vous écoutes.

Merci pour votre aide.

Link to post
Share on other sites

Hello,

A l'epoque quand j'etais sous une debian pure, j'utilise backup-manager avec un petit script pour upload le tout sur un ftp mais il y a d'autres alternatives ici : https://wiki.debian.org/fr/BackupAndRecovery (une bonne liste avec explications). Les wiki sont vraiment bien foutus quand même et bien fournis donc à toi de potasser si le coeur t'en dit ^^

Link to post
Share on other sites

backup manager gère directement l'upload ftp (entre autres) si je ne m'abuse, dans les versions les plus récentes. Quand on a que des trucs courants sur une machine (typiquement un site web ou deux), ça fait parfaitement l'affaire. Il permet de choisir les dossiers à sauvegarder, plusieurs méthodes (dont mysql pour les bases de données des sites). Et il est très facile d'accès.

Plus généralement, quand on parle de sauvegarde "à chaud", il faut d'abord savoir de quoi on parle. Qu'y-a-t-il d'installé et d'hébergé sur la machine ? Car parfois, un script maison fera probablement l'affaire. C'est notamment mon cas où backup-manager ne sait pas gérer le cas des machines virtuelles.

Link to post
Share on other sites

Déjà merci à vous deux pour les réponses.

Mon serveur héberge un client torrent avec son interface web pour mes films de vacances et un serveur Minecraft plus deux trois bricoles encore au stade de projet et non finalisées.

En gros je souhaite sauvegarder principalement les fichiers et dossier de conf et les data de Minecraft.

Link to post
Share on other sites

Pour le client torrent, je ne sais pas s'il est nécessaire de se pencher sur une éventuelle sauvegarde. Pour Minecraft, mon cher collègue utilise un script de lancement modifié qui ajoute les fonctions de sauvegarde et de mise à jour du serveur.

Je le colle dans un spoil :

#!/bin/bash

# /etc/init.d/minecraft

# version 0.3.9 2012-08-13 (YYYY-MM-DD)



### BEGIN INIT INFO

# Provides:   minecraft

# Required-Start: $local_fs $remote_fs

# Required-Stop:  $local_fs $remote_fs

# Should-Start:   $network

# Should-Stop:    $network

# Default-Start:  2 3 4 5

# Default-Stop:   0 1 6

# Short-Description:    Minecraft server

# Description:    Starts the minecraft server

### END INIT INFO



#Settings

SERVICE='minecraft_server.jar'

OPTIONS='nogui'

USERNAME='minecraft'

WORLD='world'

MCPATH='/home/minecraft/minecraft'

BACKUPPATH='/media/remote.share/minecraft.backup'

MAXHEAP=2048

MINHEAP=1024

HISTORY=1024

CPU_COUNT=1

INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \

-XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \

-jar $SERVICE $OPTIONS"



ME=`whoami`

as_user() {

  if [ $ME == $USERNAME ] ; then

    bash -c "$1"

  else

    su - $USERNAME -c "$1"

  fi

}



mc_start() {

  if  pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    echo "$SERVICE is already running!"

  else

    echo "Starting $SERVICE..."

    cd $MCPATH

    as_user "cd $MCPATH && screen -h $HISTORY -dmS minecraft $INVOCATION"

    sleep 7

    if pgrep -u $USERNAME -f $SERVICE > /dev/null

    then

      echo "$SERVICE is now running."

    else

      echo "Error! Could not start $SERVICE!"

    fi

  fi

}



mc_saveoff() {

  if pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    echo "$SERVICE is running... suspending saves"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"

    sync

    sleep 10

  else

    echo "$SERVICE is not running. Not suspending saves."

  fi

}



mc_saveon() {

  if pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    echo "$SERVICE is running... re-enabling saves"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"

  else

    echo "$SERVICE is not running. Not resuming saves."

  fi

}



mc_stop() {

  if pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    echo "Stopping $SERVICE"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"

    sleep 10

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"

    sleep 7

  else

    echo "$SERVICE was not running."

  fi

  if pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    echo "Error! $SERVICE could not be stopped."

  else

    echo "$SERVICE is stopped."

  fi

}



mc_update() {

  if pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    echo "$SERVICE is running! Will not start update."

  else

    MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`

    as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"

    if [ -f $MCPATH/minecraft_server.jar.update ]

    then

      if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`

      then

        echo "You are already running the latest version of $SERVICE."

      else

        as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"

        echo "Minecraft successfully updated."

      fi

    else

      echo "Minecraft update could not be downloaded."

    fi

  fi

}



mc_backup() {

   mc_saveoff

   

   NOW=`date "+%Y-%m-%d_%Hh%M"`

   BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"

   echo "Backing up minecraft world..."

   #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"

   as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"



   echo "Backing up $SERVICE"

   as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"

   #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""



   mc_saveon



   echo "Compressing backup..."

   as_user "gzip -f \"$BACKUP_FILE\""

   echo "Done."

}



mc_command() {

  command="$1";

  if pgrep -u $USERNAME -f $SERVICE > /dev/null

  then

    pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`

    echo "$SERVICE is running... executing command"

    as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"

    sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds

    # print output

    tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"

  fi

}



#Start-Stop here

case "$1" in

  start)

    mc_start

    ;;

  stop)

    mc_stop

    ;;

  restart)

    mc_stop

    mc_start

    ;;

  update)

    mc_stop

    mc_backup

    mc_update

    mc_start

    ;;

  backup)

    mc_backup

    ;;

  status)

    if pgrep -u $USERNAME -f $SERVICE > /dev/null

    then

      echo "$SERVICE is running."

    else

      echo "$SERVICE is not running."

    fi

    ;;

  command)

    if [ $# -gt 1 ]; then

      shift

      mc_command "$*"

    else

      echo "Must specify server command (try 'help'?)"

    fi

    ;;



  *)

  echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"

  exit 1

  ;;

esac



exit 0

Bien évidemment il faut modifier les chemins pour qu'il pointe sur le bon dossier.

Link to post
Share on other sites

Pour le client torrent je m'en fous un peu des données téléchargées c'est juste la config que je souhaites sauvegarder.

Sinon je vais regarder le script et les logiciels cités plus haut et essayer de me débrouiller.

Merci

Link to post
Share on other sites

On parle d'un serveur Minecraft et d'une Seedbox, pas non plus des données d'une PME. Le FTP n'est qu'un exemple de méthode de transfert, la plus simple à comprendre dans un premier temps. Car manifestement le niveau de Zappi est un peu faible pourrait-on dire. SCP, RSync, BTSync (j'ai déjà vu) sont aussi des méthodes utilisables, mais à mon sens moins triviales à mettre en place. Rien n'est critique ici, pas besoin non plus de partir dans des solutions qu'on ne comprend pas.

@Zappy, en reparlant du script Minecraft que je te propose, il faudra gérer à part le transfert sur une autre machine. La sauvegarde consiste juste en un verrouillage en lecture seule, copie, puis retour à l'écriture. C'est cette copie qu'il faudra récupérer.

Link to post
Share on other sites

Mes sauvegardes Linux je les ai toujours fait en faisant mon propre script en Bash. Voici des exemples de ce que je fais qui pourrait s'appliquer à ton besoin.

1- Déterminer les répertoires à sauvegarder

2- Déterminer les types de fichiers à sauvegarder (Fichiers purs tel que des images, vidéo, texte, etc.; Fichier de base de données que l'on doit créer une copie comme une BDD MySQL; Boot Sector, etc.)

3- Déterminer la destination = outil de copie vers la destination (FTP = Client FTP, Disque à disque en local = Simple cp, Disque réseau (Partage Samba) = simple cp, etc.)

4- Déterminer le journal de l'évément = Comment être alerté du résultat (Lecture d'un fichier LOG, envoyer un email si erreur, envoyer un email tout le temps, etc.)

5- Écriture du script !

#!/bin/bash

# Exemple d'une savegarde sur un autre disque (ou partage Samba)

echo "Script de sauvegarde" > /backupdisk/log.txt

date >> /backupdisk/log.txt

#

echo Copie du /etc >> /backupdisk/log.txt

cp -R /etc/* /backupdisk/etc

#

# Copie des BDD MySQL

mysqldump --databases mabdd1 > mabdd1.sql

mysqldump --databases mabdd2 > mabdd2.sql

#

Sinon, il existe des outils payant et très coûteux tel qu'un client BackupExec Agent ou IBM Tivoli TSM si tu possèdes un serveur d'archivage.

Link to post
Share on other sites

FTP pour sauvegarder la config, pas un bonne idée... un protocole sécurisé, genre sftp serait préférable.

Ou FTPS ;) (Parce que SFTP n'est pas forcément accessible : sur ma machine où j'interdis le login root et l'utilisation de MdP via sshd, bin ça complique un peu les choses :chinois:)

Le mod_tls de proftpd permet une gestion assez poussée des paramètres de chiffrements (du niveau de ce qu'on peut avoir sur un serveur apache), c'est donc pour moi une bonne alternative au SFTP

Link to post
Share on other sites

Car manifestement le niveau de Zappi est un peu faible Faible en scripting et stratégie/méthode de sauvegarde après je ne suis pas non plus un débutant sous linux et je suis capable d'assimiler des notions complexes si bien expliquées.

Pour l'instant je n'ai pas trop cherché par manque de temps, je vais essayer de voire ça dans la semaines car j'ai du temps libre et je vous tiens au cournat de la solution qui me semble le plus viable.

Link to post
Share on other sites

Je ne cherche pas à minimiser tes capacités d'apprentissage, seulement parfois les choses les plus simples suffisent, donc pas besoin non plus de partir dans des délires qui demanderont plusieurs jours d'apprentissage quand deux heures suffisent à mettre en place/tester/valider une solution simple, même si "peu" sécurisée au regards des autres options.

Link to post
Share on other sites

D'autant plus que si le système est complexe alors il y aura bien plus de risque d'erreur de configuration et donc de perte de données lorsqu'il sera nécessaire de les restaurer.

Certains systèmes de sauvegardes comme Bacula utilisent une base de données pour retrouver leurs fichiers. Si cette base est perdue la récupération des données devient ... compliquée :transpi: .

Link to post
Share on other sites

FTP pour sauvegarder la config, pas un bonne idée... un protocole sécurisé, genre sftp serait préférable.

Ou FTPS ;) (Parce que SFTP n'est pas forcément accessible : sur ma machine où j'interdis le login root et l'utilisation de MdP via sshd, bin ça complique un peu les choses :chinois:)

Le mod_tls de proftpd permet une gestion assez poussée des paramètres de chiffrements (du niveau de ce qu'on peut avoir sur un serveur apache), c'est donc pour moi une bonne alternative au SFTP

Ben FTPS, ça a surtout un intérêt si tu as besoin d'une approche "tiers de confiance".

Sinon, pour faire du backup, tu n'as pas besoin de te connecter comme root ou d'utiliser un mdp, les clefs c'est facile à mettre en place surtout si tu es le gestionnaire du récepteur du backup.

Également, le sftp devient tout de suite plus intéressant si tu utilises le serveur "builtin" au lieu du serveur binaire externe de sshd... tu peux mettre par exemple des directives de config sshd distinctes par groupe d'utilisateurs.

Link to post
Share on other sites

Bon va falloir que je regardes ça dans le détail. :D

Comme j'avais de toute façon besoin d'un serveur FTP, je ne me suis pas trop pris la tête et mis en place une solution FTPS.

Quoique, le plus simple avec ma config serait de rapatrier les sauvegardes de mon KS vers mon Raspberry Pi via un bête scp.

Link to post
Share on other sites

Le problème pour faire ça avec mon RPi, c'est que j'ai pas de support de stockage à lui mettre à côté. Et j'ai pas les moyens d'en acheter ces temps-ci. Sinon question transfert si tout est déjà en place (ssh des deux côtés) c'est clair que c'est le plus pratique.

Link to post
Share on other sites

Perso mon RPi, je lui ai collé une clé USB 4 Go que je n'utilisais pas et un disque 3.5" 500 Go USB (avec alim externe) que je n'utilisais pas non plus :D

Du coup, sur le RPi, j'ai une sauvegarde incrémentale quotidienne sur la clé USB (que je renouvelle toute les semaines) et une sauvegarde hebdo tous les dimanches sur le disque externe (sur laquelle je fais une rotation sur 30 jours). Je fais aussi une sauvegarde de la liste des programmes installé via dpkg. Ça évite à priori de sauvegarder tout /usr/bin.

J'aimerai bien en faire autant avec mon KS mais avec ma bande passante en mousse (4 Mbits/s), c'est plus tendu. Peut-être si Hubic propose un moyen de s'interfacer avec une distrib' Linux, j'y collerai mes sauvegardes (en les chiffrant avant peut-être), ayant un compte d'1 To que je n'utilise pas (via mon abo ADSL)

Link to post
Share on other sites

attention le client hubix fait de la COPIE en gros tu va devoir stocker sur ton serveur les mêmes données que sur hubic.

par contre il est possible de monter hubic en tant que répertoire via quelques bidouilles (il faut juste compiler cloudfuse et avoir un apache qui tourne)

tu as quoi à sauvegarder ? (j'ai pas tout compris dsl)

perso moi je ferais un zip crypter (ou autre) puis je le mettrais sur hubic (si 25Go te suffisent)

je sais pas si je suis clair la :/

Link to post
Share on other sites

J'ai tout à sauvegarder :D

Mais grosso-modo, je fais la scission "classique" : système/données (essentiellement liées à OwnCloud, et bientôt WordPress). Le premier prend peu de place une fois compressé (de l'ordre de 250-300 Mo), le deuxième... max 400 Go (bon en réalité env. 100 Mo aujourd'hui, sachant qu'OwnCloud prendra max 100 Go par contre, WP, je sais pas, mais une bonne taille sachant que le dit site me servira à diffuser mes photos). Sachant que la copie pure ne me dérange pas, c'est ce que j'avais prévu : création d'une sauvegarde via tar des fichiers via 2 scripts (système et données donc), copie sur le compte Hubic et suppression de l'archive sur mon serveur. Me reste à trouver un moyen de chiffrer l'archive.

Sachant aussi qu'avec 1 To de stockage dispo sur Hubic, j'ai le temps de voir venir et je peux me permettre de faire le ménage dans les vieilles sauvegarde tous les 36 du mois, quand j'y pense :D

Link to post
Share on other sites

tu veux utiliser un point de montage pour hubic ? ou la méthode classique avec le client hubic et avoir une copie locale ?

si c'est la deuxième option c'est pas compliquer suffit de faire un rm des fichier ayant une date de modification supérieur a x jours. cette opération n'est pas possible avec un point de montage car ça utilise du web pour faire le point de montage et ça ne gère pas les dates.

pour le chiffrement tu as plein d'option, la plus simple est je pense le zip. ou du pgp (attention gz ne permet pas le cryptage)

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...