Hi,
Klaus wrote:...
Da ich das nicht regelmäßig mache (alter Man vergisst schon mal was) denke ich darüber nach
ob sich das automatisieren lässt.
Vielleicht so, USB-Festplatte am Abend anstecken. NAS erkennt die Platte z.B. über die Seriennummer, script mountet die Platte ,startet rsync
und hängt die Platte wieder aus wenn rsysc fertig ist.
...
Ja, das geht, ich selbst mache das schon seit vielen Jahren so. Ich weiß, dass es allgemein nicht empfohlen wird, USB Festplatten am N4F zu verwenden aber rein technisch funktioniert es einwandfrei und zumindest seit FreeBSD 9.1 gibt es auch keine Systemabstürze, wenn man versehentlich eine gemountete USB Platte abschaltet (was ja in jedem Fall nicht günstig ist, weil das Filesystem nicht geschlossen wird - ist mE bei eSATA aber dasselbe Problem).
Klaus wrote:...
Nun meine Frage: Gibt es für FreeBSD etwas vergleichbares wie udev oder lässt sich das vielleicht ganz anders lösen.
...
Ich habe das über ein automount script gelöst, welches auch in der letzten Version meiner Extension für N4F inkludiert ist ->
Extended GUI. Wenn du die Extension nicht verwenden möchtest, kann das Script natürlich mit ein paar kleinen Modifikationen auch standalone verwendet werden. Das Script checkt in regelmäßigen Abständen nach neuen, nicht gemounteten USB HDDs und wenn eine neue gefunden wird, wird diese automatisch gemountet (
da ich kein eSATA in meinen Systemen habe wäre das generell interessant, das Script dahingehen zu modifizieren - vielleicht könnte sich bei Interesse da mal jemand in dieser Richtung aufmachen !!!). Über die N4F WebGUI bräuchtest du nur einen rsync Job definieren, der zB immer nachts läuft und bei gemounteter USB Platte das Backup durchführt. Nachteil bei dieser einfachsten Lösung ist natürlich, das der Job immer mit einem Fehler beendet wird wenn keine USB Platte im System ist und dass die USB Platte nicht automatisch am Ende eines Backups unmounted wird.
Ich habe daher noch ein eigenes rsync-script geschrieben, dass ich nachts als cron-job laufen lasse und das
1. checkt, ob eine und wenn ja, welche, USB Platte im System ist und
2. bei vorhandener Platte das Backup durchführt, am Ende des Backups die USB Platte unmounted (damit sie dann auch sicher aus dem System entfernt werden kann) und
3. im Falle eines Fehlers während des Backups eine email warnung versendet.
Nachfolgend das Skelett des scripts zur eigenen Verwendung:
Code: Select all
#!/bin/sh
# filename: rsync_local.sh
# usage: rsync_local.sh [--dry-run] [--delete-excluded] [...]
# notes: the script is expected to stay in /var/scripts and is used in conjunction with Extended GUI extension
# version: date: description:
VERSION="x.xx" # skeleton for rsync backups
#------------- initialize variables ------------
cd `dirname $0`
. CONFIG
INPUT_PARMS="$@"
LOG_FILE=$LOG_DIR/rsync_local_$LOG_DATE.log
LOG_MSG=$SYSTEM_LOG_DIR/rsync_local.log
ERROR_COUNT=0
WARNING_COUNT=0
#------------- functions -----------------------
SAVE_COUNTER ()
{
ERROR_COUNT_OLD=$ERROR_COUNT; WARNING_COUNT_OLD=$WARNING_COUNT
ERROR_COUNT=0; WARNING_COUNT=0
}
RESTORE_COUNTER ()
{
ERROR_COUNT=$ERROR_COUNT_OLD; WARNING_COUNT=$WARNING_COUNT_OLD
}
RSYNC_ECHO ()
{ logger -p local4.notice "$1"; echo `date +"$DT_STR"` "$1" >> $LOG_MSG; echo "$1" >> $LOG_FILE; }
RSYNC_F ()
{
echo "`date +"$DT_STR"` $SCRIPT_NAME Backup: $1 ..." >> $LOG_MSG
echo "Backup: $1 ..." >> $LOG_FILE
/usr/local/bin/rsync -avi $4 $INPUT_PARMS --log-file=$LOG_FILE --progress --human-readable --iconv=CP1252,CP1252 "$2" "$3"
if [ $? -eq 0 ]
then echo "`date +"$DT_STR"` $SCRIPT_NAME Backup: $1 - successfully finished" >> $LOG_MSG
else echo "`date +"$DT_STR"` $SCRIPT_NAME Backup: $1 - error in execution, see log!" >> $LOG_MSG; ERROR_COUNT=$((ERROR_COUNT+1))
fi
}
#-----------------------------------------------
LOCK_SCRIPT "WARNING Previous local synchronization still running ... exiting" # check if another rsync script is still running
RSYNC_ECHO "*** Start of local RSYNC Cron Job - Version $VERSION - options: $INPUT_PARMS"
# some examples for backups from NAS_1 to NAS_2
RSYNC_F "Backup" "/mnt/NASXXX1/XXX1/" "DESTINATION_IP::MODULE_NAME/_XXX1/"
RSYNC_F "Video" "/mnt/NASXXX1/Video/" "DESTINATION_IP::MODULE_NAME/_Video/" "--whole-file" # for big files it's sometimes better to use --wholefile
RSYNC_F "....." "....." "....." # ... and another one ...
# USB0750GB: external 750GB USB HDD start --------------------------------------------- # ... and now to a local mounted USB drive
if [ -e /mnt/USB0750GB/USB0750GB.mounted ]; then # check if a specific USB (USB0750GB in this case) drive is online
RSYNC_ECHO "*** RSYNC: Backup to USB drive USB0750GB"
SAVE_COUNTER
RSYNC_F "Backup" "/mnt/NASXXX1/XXX1/" "/mnt/USB0750GB/_XXX1/" # do the backup(s) and finally write the results to BACKUP_Datum.txt on the USB drive
echo "Backupdatum: $LOG_DATE, $0 finished with $WARNING_COUNT warning(s), $ERROR_COUNT error(s)" >> /mnt/USB0750GB/BACKUP_Datum.txt
umount /mnt/USB0750GB # unmount the USB drive to let it safely remove
RESTORE_COUNTER
RSYNC_ECHO "*** RSYNC: auto umount Backup USB drive USB0750GB"
else
RSYNC_ECHO "*** RSYNC: Backup USB drive USB0750GB is OFFLINE, no backup to USB0750GB ...";
fi
# USB0750GB: external 750GB USB HDD end -------------------------------------------------------------------------------------------------
RSYNC_ECHO "*** End of local RSYNC Cron Job, finished with $WARNING_COUNT warning(s), $ERROR_COUNT error(s)" # finish and report and ...
if [ $ERROR_COUNT -gt 0 ]; then $SYSTEM_SCRIPT_DIR/email.sh $HOST"-RSLOC w"$WARNING_COUNT"e"$ERROR_COUNT "$LOG_MSG"; fi # in case of errors send an email
UNLOCK_SCRIPT
##### --dry-run ... test without actions --delete-excluded ... delete all in destination what's not in source even if it's in the excluded list
Ich habe versucht, das script so zu dokumentieren, dass es einfach an die eigenen Erfordernisse anzupassen ist. Im wesentlichen sind die Zeilen im unteren Teil des scripts, die mit
RSYNC_F beginnen, diejenigen, die die zu sichernden Verzeichnisse angeben. Beispielsweise
Code: Select all
...
RSYNC_F "Backup" "/mnt/NASXXX1/XXX1/" "DESTINATION_IP::MODULE_NAME/_XXX1/"
...
wobei jeweils drei Parameter anzugeben sind (immer unter den doppelten Hochkommata):
1. "Backup" ... Name, was gesichert wird
2. "/mnt/NASXXX1/XXX1/" ... Quelle
3. "DESTINATION_IP::MODULE_NAME/_XXX1/" ... Ziel (kann lokal, auf einem andere Server oder eben auf einer USB Platte liegen)
Im Fall einer USB Platte wären dann noch die Zeilen, die für das Beispiel als
USB0750GB angegeben sind, auf das eigene System anzupassen.
Wenn du das testen möchtest, würde ich folgende Schritte zur Vorbereitung vorschlagen:
1. Installation der Extension Extended GUI wie unter dem Link oben beschrieben. Unter Tools dort USB Automount aktivieren und Speichern.
2. das beigefügte script an dein System anpassen und in das Extensions scipts Verzeichnis kopieren (in meinem Fall ist das
/mnt/DATA/extensions/extended-gui/scripts) und das script mit
ausführbar zu machen
3. nochmals das Extended GUI installations script mit
aufrufen und Option 2 "Update" ausführen, damit wird das rsync script mit den anderen Extension scripts nach /var/scripts kopiert.
4. Einen cron job definieren, der zB nachts das rsync script laufen lässt, als Kommando gibst du das script, zB
ein
5. und dann noch deine USB Platte(n) vorbereiten, d.h. an das NAS anschließen, mit dem Filesystem UFS formatieren (hier empfehle ich wirklich nur
UFS zu verwenden, obwohl das auch mit anderen Filesystemen möglich wäre) und dann im Wurzel Verzeichnis dieser Festplatte eine Datei mit einem eindeutigen Namen zu erstellen, damit die Platte nach dem einhängen dann automatisch eindeutig Identifiziert (nach dem Muster zB nnnnnn.mounted - ist auch nochmals etwas ausführlicher in der Extension beschrieben).
Die Benutzung nochmals ganz kurz:
1. USB Platte anschließen -> wird automatisch gemounted
2. nach erfolgtem Backup - die Platte wird im script automatisch unmounted die Platte ausschalten und wegsperren, fertig.
NB: man kann die Platte natürlich auch über die Extended WebGUI (ist auf der Statusseite wie jede andere fix verbaute Platte zu sehen, je nach USB Controller/Platte etc. werden auch SMART Werte, Temperatur usw. abrufbar sein - im Bild die USB1500GB am device da1) händisch auf Knopfdruck un-/remounten, um zB über CIFS direkt zugreifen zu können, beispielsweise um Files/Verzeichnisse wiederherzustellen (siehe Bild).
So, das ist jetzt doch eine ganze Menge zum Verdauen, ich hoffe, es ist trotzdem klar, wenn nicht, jederzeit fragen ...
Wie bereits erwähnt verwende ich das Ganze schon seit vielen Jahren ohne Probleme, natürlich gilt aber wie immer, dass die Verwendung des oben genannten ohne Gewähr und auf eigenes Risiko durchgeführt wird
BG
crest