
Il y a peu j’ai commencé à louer un serveur dédié par cher chez Kimsufi pour faire des sauvegardes automatiques de mon ordinateur (je vous conseille fortement de sauvegarder vos données ainsi). Le but étant d’avoir une synchronisation permanente de mes données pour être sûr de ne pas les perdre ; j’ai donc choisi OwnCloud car c’est gratuit, que ça fonctionne très bien et que ça dispose de plein de fonctionnalités.
Les outils comme OwnCloud sont géniaux, l’utilitaire se lance et synchronise en temps réel nos données entre deux points. Si jamais mon ordi explose, j’aurais toujours mes données sur mon serveur, et vice-versa.
OwnCloud et la suppression de données
Le seul « point négatif » concerne la suppression. Si jamais vous supprimez une donnée en local ou sur le serveur, la suppression se répercute sur le second point miroir. Autrement dit si je supprime un document sur mon ordinateur, OwnCloud va aller le supprimer sur le serveur.
Cette fonctionnalité est tout à fait normal, cependant si jamais vous supprimez par mégarde un document, vous le perdez également sur le serveur.
Sauvegarder les données OwnCloud chaque semaine
Pour pallier à ce problème, j’ai créé un simple script bash qui tourne dans la crontab root
.
Le script se charge de sauvegarder chaque semaine l’ensemble de mes données dans un dossier zippé.
En plus des fichiers, le script récupère également la base de données OwnCloud, utile si jamais le serveur crash.
Script de sauvegarder OwnCloud
J’ai ouvert le script dans un dist github pour que tout le monde puisse y avoir accès, le voici.
#!/bin/bash
set -e
# @explain this script is run by a cronjob every week
### “At 04:00 on Saturday.”
### 0 4 * * 6 /opt/backup-owncloud.sh > /home/alex/backup-owncloud.log 2>&1
# @vars defined
MAX_BACKUP_FILES=52 # keep my backup files during one year
# @vars global
CURRENT_DATE=`date +"%Y_%m_%d-%H_%M_%S"`
# @vars backup
BACKUP_FROM="/home/web/html/owncloud"
BACKUP_DESTINATION="/home/alex/backup"
BACKUP_OWNCLOUD="${BACKUP_DESTINATION}/owncloud/${CURRENT_DATE}"
# @vars directories
DIR_OWNCLOUD="/var/www/html/owncloud"
# @ init
mkdir -vp "${BACKUP_OWNCLOUD}"
echo "-|--- Owncloud backup started on ${CURRENT_DATE}"
# @backup database
echo "-| Backup : Database"
DB_USER="owncloud"
DB_PASS=''
mysqldump --lock-tables -h localhost -u "${DB_USER}" -p${DB_PASS} owncloud >> "${BACKUP_OWNCLOUD}/owncloud.sql"
# @backup directory
echo "-| Backup : Directory"
# rsync -AazPq "${DIR_OWNCLOUD}" "${BACKUP_OWNCLOUD}"
zip -0 -r -qq "${BACKUP_OWNCLOUD}/files.zip" "${DIR_OWNCLOUD}"
# free disk space
echo "-| Backup : Freeing space"
NUMBER_OF_FILES=`ls -1 | wc -l`
if [ "${NUMBER_OF_FILES}" -gt "${MAX_BACKUP_FILES}" ]; then
FILE_TO_DELETE=`ls -tr ${BACKUP_DESTINATION}/owncloud | head -n 1`
rm -Rf "${FILE_TO_DELETE}"
fi
echo "-| Backup size : `du -hs ${BACKUP_OWNCLOUD}`"
# @ end
echo "-|--- Owncloud backup ended on `date +"%d/%m/%Y at %H:%M:%S"`"
Je logue toute la sortie pour être sur que tout se déroule bien, vous pouvez également vous l’envoyer par e-mail pour être sur que tout se soit bien déroulé.
mkdir: création du répertoire « /home/alex/backup/owncloud/2019_10_12-04_00_01 »
-|--- Owncloud backup started on 2019_10_12-04_00_01
-| Backup : Database
-| Backup : Directory
-| Backup : Freeing space
-| Backup size : 5,3G /home/alex/backup/owncloud/2019_10_12-04_00_01
-|--- Owncloud backup ended on 12/10/2019 at 04:06:21