DirSync (Backup) Software für Mac

Nun habe ich mal 2 einfache Fragen:
1. kann das eigentlcih irgendjemand so lesen? Auch ohne Passwort oder Encryption sieht das für mich unleserlich aus. Wie machst du das?
ich verschlüssele immer, wenn ich in der Cloud was lagere.

Die Dateien sind halt einfach chunks. Ohne Verschlüsselung sollte jeder, der Zugang zu deiner Cloud hat, die wiederherstellen können. Für den restore ohne Passwort brauchst du ja nicht mehr als duplicacy und die Clouddaten.

2. Ich habe erstmal verstanden, dass man immer in das Verzeichnis rein muss bevor man duplicacy startet, da dort die config-Dateien liegen.

ja

Wie händelst du das mit verschiedenen Verzeichnissen, die du sichern willst? Per Script?

ich sichere auf dem MacBook eh nur das Homeverzeichnis, auf dem Studio habe ich 2 launchagents, einmal für home, einmal für eine externe SSD

Und beide Male ein kleines script, welches den lauchagent vereinfacht, auf dem MBA das heimische WLAN prüft und ein saubers logging erledigt. Hier das script fürs MBA

Bash:
#!/bin/zsh

base="/Users/ich"
ssid="lisanet"

#----
device=$(/usr/sbin/networksetup -listallhardwareports | /usr/bin/awk '/Wi-Fi/{getline; print $2}')
air=$(/usr/sbin/networksetup -getairportnetwork $device | /usr/bin/cut -d " " -f4)
if [ "$air" <> "$ssid" ]; then
    echo
    echo -n "network $air not allowed for backup on "
    date
    exit
fi


tag=$(date +%Y-%m-%d)
echo
echo -n "duplicacy backup started : "
date

cd "$base"
/usr/local/bin/duplicacy backup -threads 1 -vss -t "$tag" -stats | grep -v -e "ed chunk" -e "Uploaded"
# prune on Saturday, Sunday
if [ $(date +%u) -gt 5 ]; then
    /usr/local/bin/duplicacy prune -keep 0:180 -keep 30:90 -keep 7:7
    #/usr/local/bin/duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:3
fi
echo -n "duplicacy backup finished: "
date

Es geht aber auch anders -> https://forum.duplicacy.com/t/move-duplicacy-folder-use-symlink-repository/1097

habe ich aber noch nicht probiert und habe auch keinen so richtigen usecase dafür, da ich unterschiedliche excludes habe. Aber das ist eigentlich Geschmackssache.
 
ich verschlüssele immer, wenn ich in der Cloud was lagere.

Die Dateien sind halt einfach chunks. Ohne Verschlüsselung sollte jeder, der Zugang zu deiner Cloud hat, die wiederherstellen können. Für den restore ohne Passwort brauchst du ja nicht mehr als duplicacy und die Clouddaten.

OK. Nur noch: Verschlüsselung mit RSA ( -key ) oder reicht wohl auch normales Passwort (-encrypt) ?
Ich denke mal, dass RSA Verschlüsselung besser ist, oder?

ich sichere auf dem MacBook eh nur das Homeverzeichnis, auf dem Studio habe ich 2 launchagents, einmal für home, einmal für eine externe SSD

Und beide Male ein kleines script, welches den lauchagent vereinfacht, auf dem MBA das heimische WLAN prüft und ein saubers logging erledigt. Hier das script fürs MBA

Danke, so habe ich mir das fast gedacht.

Es geht aber auch anders -> https://forum.duplicacy.com/t/move-duplicacy-folder-use-symlink-repository/1097

habe ich aber noch nicht probiert und habe auch keinen so richtigen usecase dafür, da ich unterschiedliche excludes habe. Aber das ist eigentlich Geschmackssache.
Schau ich mir mal an ...

Bislang lasse ich mir immer das backup von meiner Synology (mein Backup-NAS) in die C2-Cloud machen - kostet aber was - wenn auch nicht viel.
Nun könnte ich mal schauen, ob das nicht auch kostenlos und direkt über duplicacy von meinem omv-RPi in die 1&1Cloud geht.
 
Ich hatte nur dieses gelesen:
The -e option controls whether or not encryption will be enabled for the storage. If encryption is enabled, you will be prompted to enter a storage password. The storage password is used to encrypt the config file only.

Quelle: https://github.com/gilbertchen/duplicacy/wiki/init

Dein Link sagt irgendwie etwas anderes ...

Aber ok, ich lese mal weiter
 
Ich hatte nur dieses gelesen:
The -e option controls whether or not encryption will be enabled for the storage. If encryption is enabled, you will be prompted to enter a storage password. The storage password is used to encrypt the config file only.

Quelle: https://github.com/gilbertchen/duplicacy/wiki/init

Dein Link sagt irgendwie etwas anderes ...

Aber ok, ich lese mal weiter

-> https://forum.duplicacy.com/t/rsa-encryption-use-case/4796/6

4 keys verschlüsselen chunks, etc

diese 4 keys werden im config-file auf dem storage gespeichert

dieses config file ist mit dem -e password verschlüsselt.

Das config file ist nicht das was auf deinem Mac ist.
 
  • Gefällt mir
Reaktionen: jteschner
device=$(/usr/sbin/networksetup -listallhardwareports | /usr/bin/awk '/Wi-Fi/{getline; print $2}')
air=$(/usr/sbin/networksetup -getairportnetwork $device | /usr/bin/cut -d " " -f4)
if [ "$air" <> "$ssid" ]; then
echo
echo -n "network $air not allowed for backup on "
date
exit
fi
Hallölle, ich habe dein Script mal für mich angepasst - passt soweit gut.
Zwei Punkte, die echt bei mir etwas Bastelei erforderten, da ich nicht so versiert bin was Shell-Programming angeht:
1. Meine ssid hat leider ein Leerzeichen im Namen. Da musste ich das "cut" ensprechend anpassen. Kein Problem. Besser wäre gewesen die ssid zu ändern (ohne Leerzeichen) - ich hatte aber keine Muße, meine 2 restlichen WLAN-smart-home Geräte umzustellen.
2. Was mich echt fast eine Stunde gekostet hat war im Test das "<>" - das funktionierte bei mir ums verrecken nicht. Erst ein Blick in "man test" brachte mich auf "!=" . Das ging dann. Wobei ich nicht genau weiß warum es bei dir mit "<>" klappt. Shell spezifisch? Ich habe aber die zsh ...

Na ja, das erste Backup meiner wichtigsten Dokumente ist durch ... nun gehe ich heute noch eben an den LaunchAgent.
Kurze Frage noch: ich gehe davon aus, dass du das script einmal am Tag starten lässt - über ein Startintervall? Welches Intervall hast du gewählt? Ich würde mal als ersten Ansatz 4 oder 6h wählen, da ich den Rechner nicht den ganzen Tag anhabe. Oder hast du eine feste Uhrzeit?
 
Was mich echt fast eine Stunde gekostet hat war im Test das "<>" - das funktionierte bei mir ums verrecken nicht.

oh shit.... "<>" ist ja auch falsch.

Das kommt davon, wenn man permanent zwischen Programmiersprachen wechselt. Ich frage mich nur gerade, warum ich das nicht bemerkt habe...

LaunchAgent:
Das kommt halt drauf an , was du willst. Ich habe eine feste Uhrzeit. launchd holt den Start ja dann nach, wenn der Rechner zu dieser Zeit aus / schlafend war.

Edit:
Ich habe meine Logs durchgesehen: das script läuft problemlos durch.

Der Test in Terminal.app schlägt aber fehl. Das script gestartet via launchd / LaunchControl läuft aber. Ich habe aber gerade echt keine Ahnung, warum.

Ich bin seit langem erstmals wieder mit Shell-Scripten vollkommen ratlos. Irgendwo muss ein Unterschied zwischen launchd und Terminal.app liegen....
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: jteschner
oh shit.... "<>" ist ja auch falsch.

Das kommt davon, wenn man permanent zwischen Programmiersprachen wechselt. Ich frage mich nur gerade, warum ich das nicht bemerkt habe...

LaunchAgent:
Das kommt halt drauf an , was du willst. Ich habe eine feste Uhrzeit. launchd holt den Start ja dann nach, wenn der Rechner zu dieser Zeit aus / schlafend war.

Edit:
Ich habe meine Logs durchgesehen: das script läuft problemlos durch.

Der Test in Terminal.app schlägt aber fehl. Das script gestartet via launchd / LaunchControl läuft aber. Ich habe aber gerade echt keine Ahnung, warum.

Ich bin seit langem erstmals wieder mit Shell-Scripten vollkommen ratlos. Irgendwo muss ein Unterschied zwischen launchd und Terminal.app liegen....
Nett, dass du auch mal nicht weißt woran es liegt ;-)
Für mich sieht es so aus, als ob bei der launchd-Ausführung nicht die zsh genommen wird, obwohl im script angegeben.

Zur Ausführung per launchd: ich nehme mal eine feste Uhrzeit und schaue wie es läuft. Irgendwo hatte ich gelesen, dass es nicht nachgeholt wird sollte der Rechner schlafen, sondern auf den nächsten Zeitpunkt verschoben wird. Werde ich dann ja im log sehen ...
 
Nett, dass du auch mal nicht weißt woran es liegt ;-)
Für mich sieht es so aus, als ob bei der launchd-Ausführung nicht die zsh genommen wird, obwohl im script angegeben.

ich kann es jetzt nachvollziehen und erklären. Der Fehler ist aber echt gut, da er im konkreten Fall dazu führt, dass das script immer läuft. Und da ich es halt zuhause getestet habe, ist mir auch nie aufgefallen, dass der Test so aussieht als ob er immer "false" ergäbe.

Das Ganze ist so zu erklären:

  • die beiden Zeichen <> werden als Shell-Redirect gewertet. Einmal als input durch das < und einmal als output durch das >
  • somit wird versucht die Variable $air aus der Datei der Variablen $ssid zu lesen und zugleich den Wert von $air in die Datei $ssid zu schreiben (also natürlich in die Datei mit dem Namen der sich aus der Variablen $ssid ergibt)
  • launchd startet alles aus /, also einem Verzeichnis ohne Schreibrechte
  • die shell versucht also die Datei $ssid zum Schreiben zu öffnen und schlägt natürlich fehl, da eben keine Schreibrechte vorhanden sind.
  • dadurch ergibt der Test "false" und somit sieht es so aus, als ob $air und $ssid identisch wären
  • Folge: das script geht immer nach dem if-statement weiter und führt das backup durch
  • man erkennt den Fehler also nur dann, wenn das script in einem fremden WLAN gestartet wird und man das log zu diesem Zeitpunkt liest. Denn auch in einem fremden WLAN geht es eben immer nach dem if-statement weiter.

Wenn man nun das script bspw im Homeverzeichnis testet, dann kriegt man angezeigt, dass $air und $ssid unterschiedlich seien, da das Homeverzeichnis Schreibrechte erlaubt und somit eine Datei mit Namen $ssid angelegt werden kann. Ergo ist der Test "true" und das script endet.

q.e.d.

;)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: jteschner
Zur Ausführung per launchd: ich nehme mal eine feste Uhrzeit und schaue wie es läuft. Irgendwo hatte ich gelesen, dass es nicht nachgeholt wird sollte der Rechner schlafen, sondern auf den nächsten Zeitpunkt verschoben wird. Werde ich dann ja im log sehen ...

Kuckst du -> man launchd.plist

du verwechselst StartInterval mit StartCalendarInterval

StartCalendarInterval <dictionary of integers or array of dictionaries of integers>

This optional key causes the job to be started every calendar interval as specified. Missing arguments are considered to be wildcard. The semantics are similar to crontab(5) in how firing dates are specified. Multiple dictionaries may be specified in an array to schedule multiple calendar intervals.

Unlike cron which skips job invocations when the computer is asleep, launchd will start the job the next time the computer wakes up. If multiple intervals transpire before the computer is woken, those events will be coalesced into one event upon wake from sleep.
 
  • Gefällt mir
Reaktionen: jteschner
Für alle anderen, die hier mit lesen: hier das korrigierte script (und einer kleinen Ergänzung, die Meldungen des "prune" etwas heraus zu filtern im log)

Bash:
#!/bin/zsh

base="/Users/ich"
ssid="lisanet"

#----
device=$(/usr/sbin/networksetup -listallhardwareports | /usr/bin/awk '/Wi-Fi/{getline; print $2}')
air=$(/usr/sbin/networksetup -getairportnetwork $device | /usr/bin/cut -d " " -f4-)
if [ "$air" != "$ssid" ]; then
    echo
    echo -n "network $air not allowed for backup on "
    date
    exit
fi


tag=$(date +%Y-%m-%d)
echo
echo -n "duplicacy backup started : "
date

cd "$base"
/usr/local/bin/duplicacy backup -threads 1 -vss -t "$tag" -stats | grep -v -e "ed chunk" -e "Uploaded" -e "ly removed"
# prune on Saturday, Sunday
if [ $(date +%u) -gt 5 ]; then
    /usr/local/bin/duplicacy prune -keep 0:180 -keep 30:90 -keep 7:7
    #/usr/local/bin/duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:3
fi
echo -n "duplicacy backup finished: "
date
 
  • Gefällt mir
Reaktionen: BEASTIEPENDENT und jteschner
ich kann es jetzt nachvollziehen und erklären. Der Fehler ist aber echt gut, da er im konkreten Fall dazu führt, dass das script immer läuft. Und da ich es halt zuhause getestet habe, ist mir auch nie aufgefallen, dass der Test so aussieht als ob er immer "false" ergäbe.

Das Ganze ist so zu erklären:

  • die beiden Zeichen <> werden als Shell-Redirect gewertet. Einmal als input durch das < und einmal als output durch das >
  • somit wird versucht die Variable $air aus der Datei der Variablen $ssid zu lesen und zugleich den Wert von $air in die Datei $ssid zu schreiben (also natürlich in die Datei mit dem Namen der sich aus der Variablen $ssid ergibt)
  • launchd startet alles aus /, also einem Verzeichnis ohne Schreibrechte
  • die shell versucht also die Datei $ssid zum Schreiben zu öffnen und schlägt natürlich fehl, da eben keine Schreibrechte vorhanden sind.
  • dadurch ergibt der Test "false" und somit sieht es so aus, als ob $air und $ssid identisch wären
  • Folge: das script geht immer nach dem if-statement weiter und führt das backup durch
  • man erkennt den Fehler also nur dann, wenn das script in einem fremden WLAN gestartet wird und man das log zu diesem Zeitpunkt liest. Denn auch in einem fremden WLAN geht es eben immer nach dem if-statement weiter.

Wenn man nun das script bspw im Homeverzeichnis testet, dann kriegt man angezeigt, dass $air und $ssid unterschiedlich seien, da das Homeverzeichnis Schreibrechte erlaubt und somit eine Datei mit Namen $ssid angelegt werden kann. Ergo ist der Test "true" und das script endet.

q.e.d.

;)
Sehr gut! Da wäre ich nicht drauf gekommen ...
 
Kuckst du -> man launchd.plist

du verwechselst StartInterval mit StartCalendarInterval

StartCalendarInterval <dictionary of integers or array of dictionaries of integers>

This optional key causes the job to be started every calendar interval as specified. Missing arguments are considered to be wildcard. The semantics are similar to crontab(5) in how firing dates are specified. Multiple dictionaries may be specified in an array to schedule multiple calendar intervals.

Unlike cron which skips job invocations when the computer is asleep, launchd will start the job the next time the computer wakes up. If multiple intervals transpire before the computer is woken, those events will be coalesced into one event upon wake from sleep.
Ich hatte das so in Erinnerung und nicht nochmal nachgeschaut. Werden nun mal das "StartCalendarIntervall" aufsetzen im Wissen, dass der Rechner nach 80:20 Regel zu dem Zeitpunkt an ist. Und dann im Log überprüfen ob alles wie geplant läuft.
Ich werde berichten ...
Danke nochmal!
 
@lisanet ich bin schon wieder zu doof ... :-/
Das script läuft aus dem Terminal perfekt - und duplicacy holt sich aus dem Schlüsselbund das PW für die Cloud sowie für den storage
Aufgesetzt als LauchAgent holt er sich das PW offensichtlich nicht - und ich komme nicht darauf warum nicht.
Mein Logfile sagt:
Code:
duplicacy backup startet: Tue Mar 26 14:12:25 CET 2024
Storage set to webdav://j----hier-stehen-meine-cloud-infos-p
Last backup at revision 3 found
Error while mounting snapshot: exit status 77

Muss ich vorher noch irgendwas setzen? zB die Umgebungsvariablen mit den Passworten??

Edit:
nachdem ich duplicacy Festplattenvollzugriff gegeben habe lief es ...
Seltsam - so etwas hatten wir doch schon mal mit rsync ...
 
nachdem ich duplicacy Festplattenvollzugriff gegeben habe lief es ...
Seltsam - so etwas hatten wir doch schon mal mit rsync ...

es werden doch log-Dateien geschrieben und snapshots und bei launchagents braucht es das halt, oder du sicherst halt irgendwas, was diese Rechte braucht. So aus der Ferne ist es immer schwer, den Grund zu nennen.

Aber Festplattenzugriff ist ja eindeutig. Eben immer dann, wenn man einen Dienst als anderer User laufen lässt, oder ein Verzeichnis anspricht, dass man als User nicht ansprechen darf (z.B. in Library, /etc usw.)

Beurteilen kannst nur immer du es selbst, da es ja von deinem System abhängig ist, was du da wie eingerichtet oder verändert hast.
 
  • Gefällt mir
Reaktionen: jteschner
@lisanet darf ich dich mal fragen welchen cloud Anbieter du nutzt? Meine 1&1 Cloud funktioniert zwar, die Upload-Raten sind aber mit 2,5-3 MB/s recht eingeschränkt und für größere Datenmengen echt ein Geduldsspiel ...
Mein 50000er DSL-Upload könnte schon etwas mehr denke ich.
Und Synologies C2-Speicher kann ich nur von meiner Synology aus nutzen.
 
@lisanet darf ich dich mal fragen welchen cloud Anbieter du nutzt?

oneDrive, also faktisch MS 365.

Du kriegst MS 365 regelmäßig so um die 40+ EUR für 12-15 Monate. oneDrive solltest du aber mit max 1 thread bei duplicacy nutzen. Ich habe mir MS 365 wegen des Cloudspeichers gekauft und habe somit Office als Beigabe kostenlos mit dazu. Du kannst auch das familiy-Paket nehmen. Dann sind es 6 TB, zwar aufgeteilt auf mehrere Accounts, aber wenn du den Platz brauchst, warum nicht.

Aber nicht via Finder einbinden oder verwenden. Falls doch, solltest du das explizit in die excludes / filter aufnehmen.
 
  • Gefällt mir
Reaktionen: jteschner
Ah, ok.
An OneDrive habe ich auch mal gedacht - allerdings benötige/nutze ich die Office Produkte überhaupt gar nicht.
Der Preis ist natürlich sehr ok.
Ich dachte auch alternativ an eine Hetzner Storage Box - 1TB für 3,20€/Monat - finde ich auch fair und vom Platz würde mir das dicke reichen. Vor allen Dingen bei den möglichen Anbindungen (sFTP, smb, webdav, ssh, ...).
 
Ich dachte auch alternativ an eine Hetzner Storage Box - 1TB für 3,20€/Monat - finde ich auch fair und vom Platz würde mir das dicke reichen. Vor allen Dingen bei den möglichen Anbindungen (sFTP, smb, webdav, ssh, ...).

wenn du ssh und so brauchst, ist das natürlich sinnvoll. Für eine Backup-cloud bringt das aber wenig (bis auf den Zugang fürs backup)

Und, du weißt schon, dass auf deine 3,20 EUR noch 19% Umsatzsteuer drauf kommen?
 
wenn du ssh und so brauchst, ist das natürlich sinnvoll. Für eine Backup-cloud bringt das aber wenig (bis auf den Zugang fürs backup)
sonst benötige ich auch keine "cloud"-Funktionen. Ich habe ja noch iCloud und die kostenlose 1&1Cloud wenn ich mal temporär diese Funktionen benötige (so einmal im Jahr ungefähr). Für mich würde die StorageBox die C2-Storage-Lösung ersetzen, die ja auch nur "Backup-Speicher" darstellt.
Und, du weißt schon, dass auf deine 3,20 EUR noch 19% Umsatzsteuer drauf kommen?
Nee, ups, ich dachte das wären brutto Preise, da es ein deutscher Anbieter ist ...

Edit. gerade nochmal nachgeschaut - du hast Recht. Inkl. MwSt sind es 3,81€/Monat

Aber ich überlege noch und arbeite erst einmal mit 1&1.
Gerade läuft die Sicherung meiner Fotos dahin - was natürlich ein paar Stunden dauert.
Und dann lass ich das erstmal ein paar Wochen laufen und analysiere dann.
 
Zuletzt bearbeitet:
Zurück
Oben Unten