Backups sind nur was für Weicheier, oder?
Ich habe in den letzten Jahren - sehr spät - LVM lieben gelernt. Vorher habe ich es irgendwie nie gebraucht. Aber jetzt, wo ich in mehr und mehr flexiblen Umgebungen unterwegs bin, weiß ich es als leichtgewichtige Lösung zum Umgang mit #Speichermedien sehr zu schätzen.
Zuhause nutze ich es, damit ich Dinge wie Striped und Mirrored Volumes auch ohne viel Resourcen schnell und einfach umsetzen kann.
Aber auch hier will ich hin und wieder ein Backup machen. LVM stellt mir die Möglichkeit mit Snapshots zu arbeiten. Nicht ganz so mega wie ZFS, aber mehr als ausreichend.
Jetzt muss nur noch ein Backup-Skript her. Nichts leichter als das:
#!/bin/bash
KEEP_DAYS=7
VG="datastore" # LVM volume group we are snapshoting
LV="Verena privatestuff learningstuff" # Name of LVM-volume to take a snapshot of
BACKUP_PREFIX="backup-volume" # Prefix of snapshot volume name.
SIZE=10G # Amount of disk space to allocate for the snapshot
# Create new snapshot
TODAY="$(date +%F)"
for i in $LV
do
NEW_VOLUME="$BACKUP_PREFIX-$i-$TODAY"
if ! lvs | grep -q -F "$NEW_VOLUME"; then
/sbin/lvcreate --size $SIZE --permission r --snapshot "$VG/$i" --name "$NEW_VOLUME"
#echo "$NEW_VOLUME"
else
echo "Backup already exists: $NEW_VOLUME"
fi
done
# Clean old snapshots.
# We need to work around debian bug #659762
# See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659762
# We do that by disabling udev while removing snapshots
if service udev status >/dev/null 2>&1; then
UDEV_RUNNING=1
service udev stop >/dev/null 2>&1
else
UDEV_RUNNING=0
fi
for i in $LV
do
lvs -o lv_name --noheadings | sed -n "s@$BACKUP_PREFIX-$i-@@p" | while read DATE; do
TS_DATE=$(date -d "$DATE" +%s)
TS_NOW=$(date +%s)
AGE=$(( (TS_NOW - TS_DATE) / 86400))
if [ "$AGE" -ge "$KEEP_DAYS" ]; then
VOLNAME="$BACKUP_PREFIX$DATE"
/sbin/lvremove -f "$VG/$VOLNAME"
fi
done
done
if [ "$UDEV_RUNNING" = "1" ]; then
service udev start >/dev/null 2>&1
fi
Danke!
Quellen und Links
Wer wie ich gern offline ist (verrückt, oder?) der kommt an einem gewissen Punkt an seine Grenzen. Meiner ist, dass ich die Kurse von a cloud guru ziemlich nett finde, wenn ich mich mal aufschlauen muss und mitreden können möchte.
Problem: geht nicht gut im Wald. Lösung: https://github.com/r0oth3x49/acloud-dl
Funktioniert super und ich kann endlich in einer motivierenden Umgebung machen, was ich gern mache - lernen, leben und genießen
Manchmal kommt es vor, dass man eine Datei oder einen Ordner auf seinem Server beobachten möchte, um im Fale eines Zugriffs, oder einer Aktion darauf reagieren zu können.
In meinem Fall geht es darum, dass die von mir gesetzte SGID ignoriert wird, weil ein Prozess explizit die Benutzer- und Gruppenzugehörigkeit beim schreiben einer Datei angibt.
Daher habe ich mir einen Service gebaut, welcher die Zugriffe auf einen Ordner überwacht und entsprechende Anpassungen (chmod und chown) ausführt, wenn es notwendig ist.
Dazu nutze ich inotifywait.
Zuerst erstelle ich ein Skript, das diese aufgabe für sich erledigen kann. Es kann auch händisch ausgeführt werden, damit man ordentlich testen kann.
nano /usr/bin/lookup_folder.sh
#!/bin/bash
while true; do
inotifywait -e modify,create,move -r -m --format '%w%f /PATH/TO/FOLDER |
while read -r fname
do
chmod -v -R 775 "$fname"
chown -v -R $USER:$GROUP "$fname"
done
done
Anschließend - wenn alle Tests erfolgreich sind - wird ein systemd service erstellt, der eben dieses langlaufende Skript "startet"
nano /lib/systemd/system/lookup_folder.service
[Unit]
Description=Change file permissions
[Service]
ExecStart=/usr/bin/lookup_folder.sh
[Install]
WantedBy=multi-user.target
Anschließend muss man das alles noch enablen
systemctl daemon-reload
systemctl enable lookup-folder-service.service
systemctl start lookup-folder-service.service
und wenn man alles richtig gemacht hat, dann sieht man die Ausgabe der Befehle im Journal
journalctl -f -u lookup-folder-service.service