Hallo zusammen
vor etwa einem Jahr konntet ihr mir gut helfen und hoffe ihr könnt weiterhin.
Vor einem Jahr habe ich von Dennis89 ein Skript übernommen und angepasst . Post und Post 2.
Leider habe ich die Backup-Strategie leider etwas vernachlässigt . so das ich nicht weis ob der ürsprünglich Code richtig war.
habe jetzt doch die E-Mailbenachrichtigung doch mit aufgenommen und die Ergänzungen aufgenommen.
Leider läuft meine Backupplatte voll weil jede Sicherung so groß ist wie die vorherige obwohl keine Änderungen stattgefunden haben.
Ich habe den Eindruck das keine Links gesetzt werden sondern immer Full-Backups obwohl die Ausgabe Hardlink sagt.
Habe dieses mit Testdateien gemacht. Meine eigentliche Sicherung sind etwa 1,4TB. und dann ist nach 3 Tagen die Platte voll.
anbei füge ich dir mal das Skript sowie die log-Datein an ebenso die Ausgabe der Verzeichnisgrösse.
Ich habe auch schon mit Dennis89 geschrieben aber er kommt auch nicht weiter.
Ebenso habe ich SEIN Orginal-Skript ausprobiert mit gleichem Ergebnis.
#!/usr/bin/env python3
import smtplib
from datetime import date
from subprocess import run
from email.mime.text import MIMEText
from pathlib import Path
BACKUP_PATH = Path("/media/backup/Testdaten/")
DATA_PATH = Path("/media/Testdaten/")
EXCLUDE_DATA = ["lost+found", "mail"]
EMAIL_HOST = "mail.google.com"
FROM_EMAIL = "XXX@google.com"
EMAIL_PASSWORD = "dasistgeheim"
TO_EMAIL = "YYY@google.com"
def search_old_backups(date_today):
if not next(BACKUP_PATH.glob(f"{date_today:%Y}-*"), None):
return "full"
else:
return "hardlinks"
def make_backup(backup_mode, date_today):
log_file = BACKUP_PATH / "Logs" / f"{date_today:%Y-%m-%d}.log"
check_logfile_path(log_file)
exclude = collect_exclude_data()
command = [
"rsync",
"-vahHA",
f"--log-file={log_file}",
DATA_PATH,
BACKUP_PATH / f"{date_today:%Y-%m-%d}",
]
[command.append(exclude_data) for exclude_data in exclude]
if backup_mode == "hardlinks":
hardlink_folder = max(BACKUP_PATH.iterdir())
command.append(f"--link-dest={hardlink_folder}")
text = "Hardlinks-Backup"
else:
text = "Full-Backup - Extern sichern!"
run(command, check=True)
print(text)
return text
def check_logfile_path(log_file):
if not log_file.parent.exists():
log_file.parent.mkdir()
def collect_exclude_data():
exclude = []
for path in EXCLUDE_DATA:
if (DATA_PATH / path).exists():
exclude.append(f"--exclude={path}")
return exclude
def send_mail(state, text):
message = MIMEText(text)
message["Subject"] = state
message["From"] = FROM_EMAIL
message["To"] = TO_EMAIL
with smtplib.SMTP_SSL(EMAIL_HOST) as server:
server.login(FROM_EMAIL, EMAIL_PASSWORD)
server.sendmail(FROM_EMAIL, TO_EMAIL, message.as_string())
def main():
try:
date_today = date.today()
backup_mode = search_old_backups(date_today)
text = make_backup(backup_mode, date_today)
send_mail("Backup_Vorlage erfolgreich!", text)
except Exception as e:
print(e)
send_mail("Backup_Vorlage nicht erfolgreich!", str(e))
if __name__ == "__main__":
main()
Display More
du /media/backup/Testdaten/2023-02-19/
96 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Website alt/Bilder
104 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Website alt
16 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Testdateien
4 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Website neu/Bilder
4 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Website neu/Audio
4 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Website neu/Video
44 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test/Website neu
168 /media/backup/Testdaten/2023-02-19/Testdaten/Website Test
11732 /media/backup/Testdaten/2023-02-19/Testdaten/Allgemein/Fotos Ausweise
403916 /media/backup/Testdaten/2023-02-19/Testdaten/Allgemein/Gabi
449772 /media/backup/Testdaten/2023-02-19/Testdaten/Allgemein
449944 /media/backup/Testdaten/2023-02-19/Testdaten
449948 /media/backup/Testdaten/2023-02-19/
pi@NAS:~ $
Display More
du /media/backup/Testdaten/2023-02-20/
96 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Website alt/Bilder
104 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Website alt
16 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Testdateien
4 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Website neu/Bilder
4 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Website neu/Audio
4 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Website neu/Video
44 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test/Website neu
168 /media/backup/Testdaten/2023-02-20/Testdaten/Website Test
11732 /media/backup/Testdaten/2023-02-20/Testdaten/Allgemein/Fotos Ausweise
403920 /media/backup/Testdaten/2023-02-20/Testdaten/Allgemein/Gabi
449776 /media/backup/Testdaten/2023-02-20/Testdaten/Allgemein
449948 /media/backup/Testdaten/2023-02-20/Testdaten
449952 /media/backup/Testdaten/2023-02-20/
pi@NAS:~ $
Display More
Ich weiß nicht wo der Fehler liegt, Dennis sagt sein Script läuft bei ihm mit Hartlinks. Bei mir leider nicht.
Ich hoffe ihr konnt mir auch diesesmal weiterhelfen.
Gruß Sascha