Files
SavaneWiki/site/Synology/2020-12-04-borg-backup/index.html
2023-11-13 21:28:26 +01:00

242 lines
12 KiB
HTML

<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://docs.savaneprod.fr/Synology/2020-12-04-borg-backup/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Sauvegarde externalisée grâce à Borg Backup - Savanewiki</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Sauvegarde externalis\u00e9e gr\u00e2ce \u00e0 Borg Backup";
var mkdocs_page_input_path = "Synology/2020-12-04-borg-backup.md";
var mkdocs_page_url = "/Synology/2020-12-04-borg-backup/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> Savanewiki
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Home</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Synology</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Liens relatifs à l'utilisation de Synology DSM.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-09-01-access-synology-with-ssh-asymetrical-key/">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-12-16-wildcard-lets-encrypt-certificate/">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Sauvegarde externalisée grâce à Borg Backup</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#installation-de-borg-sur-le-synology">Installation de Borg sur le Synology</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#le-depot-de-synocommunity">Le dépot de Synocommunity</a>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#script-de-sauvegarde-avec-borg">Script de sauvegarde avec Borg</a>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2021-02-06-restore-time-machine-backup/">Restaurer un mac depuis une sauvegarde Time machine.</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Ansible</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/">Mise à jour de Nextcloud docker par Ansible</a>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../about/">About</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">Savanewiki</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a></li>
<li class="breadcrumb-item">Synology</li>
<li class="breadcrumb-item active">Sauvegarde externalisée grâce à Borg Backup</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="la-sauvegarde-de-savanecloudfr">La sauvegarde de savanecloud.fr</h1>
<p>J'ai découvert "Borg" lors du stage concluant ma formation de reconversion professionnelle. L'outil est simple, efficace, disponible sur Synology DSM et il existe des fournisseurs de services spécialisés chez lesquels, on peut externaliser nos sauvegardes.
Mais me direz-vous pourquoi externaliser des sauvegardes ? Beh ouais, avec un NAS en RAID 1 j'ai peu de risque de perdre mes données.
Effectivement. Mais le risque existe. Matérialisé par un cambriolage ou une destruction malencontreuse dudit NAS. Bref. Un jour j'ai eu peur et j'ai pris au sérieux la sauvegarde en dehors du cadre professionnel. Et bien entendu, laisser faire le boulot par Google, Dropbox, feu Hubic ou Microsoft ne me plaisais pas beaucoup.</p>
<ul>
<li>Borg backup : https://github.com/borgbackup/borg/</li>
<li>BorgBase : https://www.borgbase.com</li>
</ul>
<h2 id="installation-de-borg-sur-le-synology">Installation de Borg sur le Synology</h2>
<h3 id="le-depot-de-synocommunity">Le dépot de Synocommunity</h3>
<p>Le paquet n'est pas disponible par défaut dans le dépôt ("repository", dire "ripo" pour les franglophones) de DSM. Pour l'obtenir, il faut ajouter un dépôt depuis les paramètres du gestionnaire de paquets de DSM. Le dépôt que j'utilise est celui de <a href="https://synocommunity.com/">SynoCommunity</a>.
<img alt="Ajout d'un dépôt dans le gestionnaire de paquets de DSM." src="../borg_synocommunity.png" />
Ensuite il suffit de raffraîchir la liste des paquets disponibles et Borg Apparaît. Vous noterez en bas que Borg nécessite Python 3.11, cette dépendance est aussi à installer depuis le dépôt de SynoCommunity.
<img alt="Fiche descriptive du paquet Borg" src="../borg_package.png" /></p>
<h2 id="script-de-sauvegarde-avec-borg">Script de sauvegarde avec Borg</h2>
<pre><code class="language-bash">#!/bin/bash
# borg init --encryption=keyfile-blake2 /volume1/Backup/borgrepolzma/
#Formatage et mise en page
stars='***************************************************************************'
# Pour le calcul d'exécutoin du script
start_time=$(date +%s)
log_file='/volume1/Backup/logs/'$(date +%Y-%m-%d--%Hh%M)'_borgbase.log'
echo $(date +%d\ %b\ %Y\ %H:%M:%S) 2&gt;&amp;1 | tee -a $log_file
# Définition des variables d'environnement pour simplifier les commandes
# export BORG_RSH=&lt;clef privée pour sauvegarder sur le serveur distant&gt;
# export BORG_REPO='borgserver:/borgrepo'
export BORG_REPO='borgserver:borgrepo'
export BORG_CACHE_DIR='&lt;emplacement du cache de Borg&gt;'
# Cron n'a pas de $HOME
export HOME=/root
# Suite l'erreur &quot;Attempting to access a previously unknown unencrypted repository!&quot;
# Apparue le 28/05/2020
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
printf '\n%s\n%s\n%s\n' $stars &quot;Début de la sauvegarde &quot; $stars 2&gt;&amp;1 | tee -a $log_file
# Préparation de la sauvegarde du nextcloud
docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --on 2&gt;&amp;1 | tee -a $log_file
sleep 1m 2&gt;&amp;1 | tee -a $log_file
# Dump de la base de données Postgres
docker exec -i nextcloud_db_1 /usr/bin/pg_dump -U nextcloud nextcloud | gzip -9 &gt; /volume1/nextcloud/db_dump.sql.gz 2&gt;&amp;1 | tee -a $log_file
# Restaurer la BDD
# docker exec nextcloud_db_1 pg_restore -U postgres -d nexcloud /backups/db_dump.sql
/usr/local/bin/borg create \
--one-file-system \
--stats \
--compression lz4 \
::{now:%Y-%m-%d--%Hh%M} \
/volume1/dir1 \
/volume1/dir2 \
/volume1/nextcloud \
--exclude /volume1/nextcloud/db \
2&gt;&amp;1 | tee -a $log_file
# ne pas sauvegarder les fichiers du conteneur postgres
#--exclude /volume1/nextcloud/db \
# Fin de la sauvegarde
docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --off 2&gt;&amp;1 | tee -a $log_file
printf '\n%s\n%s\n%s\n' $stars &quot;PRUNE&quot; $stars 2&gt;&amp;1 | tee -a $log_file
# Keep 31 end of day, 0 additional end of week archives, and 0 end of month archive
/usr/local/bin/borg prune -v --list --stats --keep-daily=31 --keep-weekly=0 --keep-monthly=0 2&gt;&amp;1 | tee -a $log_file
printf '\n%s\n' '--- Fin de la sauvegarde ---' 2&gt;&amp;1 | tee -a $log_file
printf '\n%s\n%s\n%s\n' $stars &quot;borg info&quot; $stars &gt;&gt; $log_file
# Pour le mail envoyé en fin par le Task Scheduler Synology
/usr/local/bin/borg info borgserver:borgrepo &gt;&gt; $log_file
printf '\n%s\n%s\n%s\n' $stars &quot;...Suppression des logs de plus de 200 jours...&quot; $stars 2&gt;&amp;1 | tee -a $log_file
find /volume1/Backup/logs -mtime +60 -exec rm -f {} \; 2&gt;&amp;1 | tee -a $log_file
timestamp=$(date +%s)
TZ='Europe/Paris' printf '%s\nNous sommes le %(%d %b %Y)T et il est %(%H:%M:%S)T.\n%s\n' $stars $timestamp $timestamp $stars 2&gt;&amp;1 | tee -a $log_file
# Calcul du temps d'exécution du script
end_time=$(date +%s)
exec_time=$(($end_time - $start_time))
printf '\n%s\n' $stars
TZ='Europe/Paris' printf &quot;L'exécution du script a duré %(%Hh%Mm%Ss)T\n&quot; $exec_time 2&gt;&amp;1 | tee -a $log_file
</code></pre>
<p>Le service qui me permet d'externaliser facilement les sauvegardes, est <a href="https://borgbase.com">BorgBase</a>.</p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../2019-12-16-wildcard-lets-encrypt-certificate/" class="btn btn-neutral float-left" title="Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt."><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../2021-02-06-restore-time-machine-backup/" class="btn btn-neutral float-right" title="Restaurer un mac depuis une sauvegarde Time machine.">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../2019-12-16-wildcard-lets-encrypt-certificate/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../2021-02-06-restore-time-machine-backup/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>