staging.inyokaproject.org

ZFS: Automatisches löschen und erstellen von Snapshots

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Kamas

Anmeldungsdatum:
22. April 2009

Beiträge: 17

So heute möchte ich der Linux Community eine Kleinigkeit zurück geben:)

Falls du kein ZFS (https://wiki.ubuntuusers.de/ZFS_on_Linux/) nutzt oder es vor hast, ist da ganze hier wahrscheinlich uninteressant für dich;)

Jetzt zu dem um was es geht. Ihr kennt es bestimmt alle, natürlich sollte man Backups erstellen, natürlich kann ZFS auch Snapshots erstellen aber sind wir mal ehrlich wie alt ist das letzte Backup? Wann wurde der letzte Snapshot erstellt? Man tut sich ja nicht denken: hmm ich habe gerade vor mit sudo rm -r etwas unglaubliches Dummes anzustellen, ich sollte vor her ein Backup/snapshot machen:P

Mein Script erstellt Snapshots und sehr viel wichtiger es löscht sie auch wieder nach einer gewünschten Zeit. Den das automatische erstellen ist ja kein Problem mittels /etc/crontab.

Ansonsten noch ein paar Punkte:

  • Dieses Script setzt ihr auf eigene Gefahr ein! Testet es vorher in einer Testumgebung! Es geht um eure Daten den dieses Srcipt löscht Snapshots mittel zfs destroy !

  • Ich habe dies Sript seit Monaten im Einsatz. Das häufige erstellen und löschen von Snapshots müsste den Festplatten auch ziemlich egal sein. ZFS löscht eh erst "richtig" wenn kein Speicher mehr da ist.

  • Die jetzige Konfiguration verwende ich. Snapshots werden 30 Tage gespeichert und tätlich erstellt. Ich nutze zwei gespiegelte 3TB Platten wo von nicht einmal ein 1TB belegt ist.

  • Die Häufigkeit der Erstellung von Snapshots stellt ihr in der /etc/crontab ein. Rein theoretisch sollte ich auch jede Stunde ein Snapshot erstellen können und es würde den Speicherverbrauch nicht groß beeinflussen da ich eher selten größere Datenmengen ändere.

  • Ich habe eigentlich nur echte Erfahrung in PHP und die ist auch schon etwas eingerostet. Dieses Script wurde größtenteils mittels Google und Copy/Paste erstellt

  • Ich bin mir nicht sicher ob das rekrusive (Untergeordnete Dateisystem) löschen und erstellen richtig funktioniert. Ich teste diese Funktion es erst seit heute.

  • Dieses Script ist vollkommen frei macht was ihr wollt damit!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash

# --- Benötigte Änderungen an /etc/crontab/ --- #

# m h dom mon dow user  command

# 7  3    * * *   root    /root/sh/daily-snapshot.sh      
# Diese Zeile muss ohne # in die /etc/crontab eingefügt werden mit dem richtigen Pfad zu dieser Datei. 
# Bei diesem Beispiele wird täglich ein Snapshot um 3:07 erstellt und natürlich alte Snapshots gelöscht siehe Einstellungen unten.

# --- CONFIG --- #

# ZFS Dateisystem von dem wiederkehrenden Snapshots erstellt werden sollen
zfsFs=zfspool/home
# Prefix für die Snapshots
snapshot_prefix='daily'
# Wie lange soll ein Snapshot aufbewahrt werden
days=30 # Tage
hours=0 # Stunden
minutes=0 # Minuten

# --- SCRIPT START --- #
zfsFs=$zfsFs'@'$snapshot_prefix'-'

days=$(($days*86400))
hours=$(($hours*3600))
minutes=$(($minutes*60))
max_older=$(($days+$hours+$minutes))
unixtime=$(date +%s)
max_unixtime=$(($unixtime-$max_older))

#echo $max_unixtime
#echo $unixtime

#remove snapshots
patern=$zfsFs'[0-9_\-][0-9_\-][0-9_\-][0-9_\-]-[0-9_\-][0-9_\-]-[0-9_\-][0-9_\-]_[0-9_\-][0-9_\-]:[0-9_\-][0-9_\-]:[0-9_\-][0-9_\-]'

snapshots=($(\zfs list -H -t snapshot -o name | egrep $patern));

patern=$zfsFs;
for snapshot in "${snapshots[@]}"
do
	snapshotdate=${snapshot#$patern}
	snapshotdate=$(echo $snapshotdate | sed 's/_/ /g')
	snapshotUnixtime=$(date -d "$snapshotdate" +%s)
	
	if [ $snapshotUnixtime -lt $max_unixtime ]
	then
		echo "destroy "$snapshot;
		zfs destroy -r $snapshot;
	else
		echo "remains "$snapshot;
	fi

done



#create new snapshot
date=$(date +%Y-%m-%d_%H:%M:%S)
zfs snap -r $zfsFs$date
echo 'create '$zfsFs$date

Berlin_1946 Team-Icon

Supporter, Wikiteam

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

Hallo Kamas,

du hast in deinem Post den Link zu ZFS on Linux verwendet. Kannst du mit deinen Kenntnissen das Wiki überarbeiten? Weitere Informationen findest du im Aufruf zur Mitarbeit zum aktualisieren von trusty (14.04).

Kamas

(Themenstarter)

Anmeldungsdatum:
22. April 2009

Beiträge: 17

Ich glaube du überschätzt zwar etwas meine Kenntnisse, den meinen Homeserver habe ich gerade dank diesem Artikel auf ZFS umstellen können. Allerdings ist es tatsächlich so das mein Server mit 16.04 läuft 👍

Werde schauen das ich etwas mithelfen kann;)

Antworten |