<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Backup on TokkNet</title><link>https://tokknet.eu/tags/backup/</link><description>Recent content in Backup on TokkNet</description><generator>Hugo</generator><language>de-DE</language><managingEditor>blog@tokknet.eu (Tokk)</managingEditor><webMaster>blog@tokknet.eu (Tokk)</webMaster><lastBuildDate>Mon, 12 Aug 2024 10:00:00 +0200</lastBuildDate><atom:link href="https://tokknet.eu/tags/backup/index.xml" rel="self" type="application/rss+xml"/><item><title>Mailcow Backup Mit Systemd Timern</title><link>https://tokknet.eu/2024/mailcow-backup-mit-systemd-timern/</link><pubDate>Mon, 12 Aug 2024 10:00:00 +0200</pubDate><author>blog@tokknet.eu (Tokk)</author><guid>https://tokknet.eu/2024/mailcow-backup-mit-systemd-timern/</guid><description>&lt;p>Ein elementarer Teil der Betriebssicherheit eines IT-Systems ist die Datensicherung. Spätestens wenn man Dienste auch Freunden und Familie zur Verfügung stellt ist die Sicherung ein Muss. Wem seine eigenen Daten lieb sind, sollte sich natürlich auch schon vorher damit beschäftigen. Ein Mailserver ist hier ein Paradebeispiel, der Grundgedanke sollte aber auf alle anderen Dienste übertragen werden.&lt;/p>
&lt;p>Die &lt;a href="https://docs.mailcow.email/de/backup_restore/b_n_r-backup/">Mailcow-Dokumentation zur Datensicherung&lt;/a> ist ein guter Einstiegspunkt, beschäftigt sich allerdings nur mit der periodischen Ausführung mittels &lt;code>cron&lt;/code>. Auf meinem Server habe ich kein Cron installiert, da ich im laufe der Zeit die Vorteile von Systemd-Timern schätzen gelernt habe.&lt;/p>
&lt;h3 id="einrichtung">Einrichtung&lt;/h3>
&lt;p>Zunächst erstellen wir einen Systemd-Service, der beim Starten ein Backup von Mailcow erstellt und sich dann wieder beendet. Hierzu legen wir die Datei &lt;code>/etc/systemd/system/mailcowBackup.service&lt;/code> mit folgendem Inhalt an:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-systemd" data-lang="systemd">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">[Unit]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">Description&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">Mailcow Backup&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">[Service]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">Type&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">oneshot&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">Environment&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;MAILCOW_BACKUP_LOCATION=/opt/backup&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">ExecStart&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">[Install]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">WantedBy&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">multi-user.target&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>Type=oneshot&lt;/code> bedeutet hierbei, dass es sich um einen Prozess handlet der gestartet wird und sich nach getaner Arbeit beendet - das ist wichtig, das Backup soll ja nicht direkt wieder gestartet werden. Die Environment-Variable &lt;code>MAILCOW_BACKUP_LOCATION&lt;/code> steuert den Ausgabepfad des fertigen Backups, daher muss diese Variable natürlich gesetzt und entsprechend angepasst werden&lt;/p>
&lt;p>Sobald diese Service-Unit existiert kann der Backup-Prozess mittels &lt;code>systemctl start mailcowBackup.service&lt;/code> jederzeit manuell gestartet werden.&lt;/p>
&lt;p>Die Ausgabe des Backup-Skriptes wird im Systemlog erfasst und kann daher über &lt;code>systemctl status mailcowBackup.service&lt;/code> und &lt;code>journalctl -f -u mailcowBackup.service&lt;/code> eingesehen werden.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>user@server&lt;span style="color:#f92672">]&lt;/span>$ sudo systemctl status mailcowBackup.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>○ mailcowBackup.service - Mailcow Backup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Loaded: loaded &lt;span style="color:#f92672">(&lt;/span>/etc/systemd/system/mailcowBackup.service; disabled; preset: disabled&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Active: inactive &lt;span style="color:#f92672">(&lt;/span>dead&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/ib_buffer_pool
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/aria_log.00000001
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/aria_log_control
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/xtrabackup_checkpoints
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/backup-my.cnf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/xtrabackup_info
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url backup_and_restore.sh&lt;span style="color:#f92672">[&lt;/span>14066&lt;span style="color:#f92672">]&lt;/span>: /backup_mariadb/xtrabackup_binlog_pos_innodb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: mailcowBackup.service: Deactivated successfully.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: Finished Mailcow Backup.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Aug &lt;span style="color:#ae81ff">07&lt;/span> 07:32:16 mailcow.url systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: mailcowBackup.service: Consumed 1.056s CPU time, 14.1M memory peak.sudo 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="periodische-ausführung-mittels-timer">Periodische Ausführung mittels Timer&lt;/h3>
&lt;p>Der nächste Schritt ist die Anlage eines &lt;a href="https://wiki.archlinux.org/title/Systemd/Timers">Timers&lt;/a>, der die neu angelegte Unit zu definierten Zeitpunkten startet.&lt;br>
Hierzu legen wir die Datei &lt;code>/etc/systemd/system/mailcowBackup.timer&lt;/code> wie folgt an:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-systemd" data-lang="systemd">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">[Unit]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">Description&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">Starts the Mailcow Backup every night&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">Requires&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">mailcowBackup.service&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">[Timer]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">Unit&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">mailcowBackup.service&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">OnCalendar&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">*-*-* 00:30:00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">[Install]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">WantedBy&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">timers.target &lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Wichtig ist hier neben der Angabe der entsprechenden Service-Unit die Zeile &lt;code>OnCalendar=*-*-* 00:30:00&lt;/code>, die besagt, dass der Timer An jedem Tag jeden Monats jeden Jahres um 00:30 aktiv werden soll. Der Timer muss abschließend noch aktiviert und gestartet werden. Dies erfolgt analog zu Service Units: &lt;code>systemctl enable --now mailcowBackup.timer&lt;/code>.&lt;br>
Mittels &lt;code>systemctl list-timers&lt;/code> können aktive Timer eingesehen werden. Der Befehl zeigt eine Auflistung aller Timer inklusive dem absoluten und relativen Zeitpunkt der nächsten sowie vorherigen Ausführung.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>tokk@mx-web backup&lt;span style="color:#f92672">]&lt;/span>$ systemctl list-timers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NEXT LEFT LAST PASSED UNIT ACTIVATES
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>...&lt;span style="color:#f92672">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Thu 2024-08-08 00:30:00 UTC 16h - - mailcowBackup.timer mailcowBackup.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Wed 2024-08-14 07:05:57 UTC &lt;span style="color:#ae81ff">6&lt;/span> days Wed 2024-08-07 07:05:57 UTC 33min ago certbot-renewal.timer certbot-renewal.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>...&lt;span style="color:#f92672">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Auch hier landet die Ausgabe des Backups im System-Log und kann via &lt;code>journalctl&lt;/code> eingesehen werden. Die komplette Ausgabe der tagesaktuellen Sicherung lasen sich zum Beispiel mittels &lt;code>journalctl -S today -u mailcowBackup.service&lt;/code> anzeigen.&lt;/p>
&lt;h3 id="weiterführende-gedanken">Weiterführende Gedanken&lt;/h3>
&lt;p>Nach der Einrichtung des Timers wird jede Nacht ein Backup unter dem spezifizierten Pfad angelegt. Sollte die Festplatte des Servers oder der ganze Server jedoch ausfallen ist dadurch jedoch nicht nur Mailcow betroffen, sondern auch das Backup.&lt;br>
Daher ist es dringend notwendig, die Backups automatisiert noch anderweitig abzulegen.&lt;/p></description></item></channel></rss>