Cloud Station Daten von Share auf USB kopieren

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.
Vielleicht klappt's mit Quoting besser::

Code:
#!/bin/sh
PATH=/bin:/usr/bin
quelle=""
ziel="/volumeUSB1"
for folder in /Volume1/Share/automatic_fullbackup/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]/vuplus ; do
  quelle="${folder}"
done
[ ! -e "${quelle}" ] && echo "Quelle nicht verfügbar" && exit 1
mount | grep -qv "${ziel}" && echo "Ziel nicht verfügbar" && exit 1
$( which rsync ) -av --delete-after "${quelle}"/ "${ziel}/usbshare/vuplus"/

"VO2QQP~7" ist womöglich eine Dateileiche aus einem früheren Sync, lösch sie. Die Fehlermeldungen bei den Dateirechten sieht man häufig, wenn die Linux-Rechte nicht auf einen DOS/FAT/VFAT/EXFAT-Stick abgebildet werden können. Das könnte man ignorieren.
 
Ne das war es auch nicht.
Aber eigentlich auch klar...da die Ausgabe "Ziel nicht verfügbar" ja schon hier kommt....

Rich (BBCode):
mount | grep -qv "${ziel}" && echo "Ziel nicht verfügbar" && exit 1

und wenn ich die Zeile lösche dann kommt es ja "nur" zu der Fehlermeldung mit der scheinbar "defekten" Datei.
Hinweis: Wenn ich die Datei "VO2QQP~7" lösche kommt es zu keiner Fehlermeldung wenn die obere Zeile gelöscht ist.

Dann kann eine Änderung der letzten Zeile in....

Rich (BBCode):
$( which rsync ) -av --delete-after "${quelle}"/ "${ziel}/usbshare/vuplus"/

nicht die Lösung bringen.
Der Fehler muss definitiv in dieser Zeile hier liegen....

Rich (BBCode):
mount | grep -qv "${ziel}" && echo "Ziel nicht verfügbar" && exit 1

@hvkls
Kannst Du da vielleicht noch einmal ein Auge drauf werfen?

Vielen Dank weiterhin für die ganze Unterstützung.

Shawn26
 
Zuletzt bearbeitet:
Lass mich zunächst mal fragen: Benutzt du die neuste Version des Scripts oder nicht? Wenn nicht, ist es Zeitverschwendung.
 
Natürlich.
Ich habe die Version genutzt die Du drei Einträge über diesem gepostet hast. Oder verstehe ich Dich jetzt gerade falsch?

Also diese hier...:

Rich (BBCode):
#!/bin/sh
PATH=/bin:/usr/bin
quelle=""
ziel="/volumeUSB1"
for folder in /Volume1/Share/automatic_fullbackup/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]/vuplus ; do
  quelle="${folder}"
done
[ ! -e "${quelle}" ] && echo "Quelle nicht verfügbar" && exit 1
mount | grep -qv "${ziel}" && echo "Ziel nicht verfügbar" && exit 1
$( which rsync ) -av --delete-after "${quelle}"/ "${ziel}/usbshare/vuplus"/

Da war aber wie oben beschrieben weiterhin der Fehler das das Ziel nicht verfügbar sei.

Shawn26
 
Zuletzt bearbeitet:
Poste mal, bei eingestecktem USB-Stick, die Ausgaben sowohl von

mount
which mount
which rsync
ls /volumeUSB1/*/*

Edit: Ich sehe hier gerade einen Schreibfehler von mir, schreib "volume" überall im Script klein!!
 
Zuletzt bearbeitet:
Volume hatte ich schon alles mit einem kleinen "v" geschrieben das war mir aufgefallen.

Hier die Antworten zu Deinen Fragen...
Rich (BBCode):
Ausgabe (mount)
admin@xxxxxxx:~$ cd /volume1
admin@xxxxxxx:/volume1$ cd Share
admin@xxxxxxx:/volume1/Share$ mount
/dev/md0 on / type ext4 (rw,relatime,user_xattr,barrier=0,journal_checksum,data=ordered)
none on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=122604k,nr_inodes=30651,mode=755)
none on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
none on /proc type proc (rw,nosuid,nodev,noexec,relatime)
none on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
/tmp on /tmp type tmpfs (rw,relatime)
/run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
/dev/shm on /dev/shm type tmpfs (rw,nosuid,nodev,relatime)
/proc/bus/usb on /proc/bus/usb type usbfs (rw,relatime)
/dev/mapper/vg1000-lv on /volume1 type ext4 (rw,relatime,user_xattr,synoacl,barrier=0,journal_checksum,data=writeback,jqfmt=vfsv0,usrjquota=aquota.user,grpjquota=aquota.group)
none on /config type configfs (rw,relatime)
none on /proc/fs/nfsd type nfsd (rw,relatime)
/dev/sds1 on /volumeUSB1/usbshare type vfat (rw,relatime,uid=1024,gid=100,fmask=0000,dmask=0000,allow_utime=0022,codepage=default,iocharset=default,shortname=mixed,quiet,utf8,flush,errors=remount-ro)
admin@xxxxxxx:/volume1/Share$


Ausgabe (which mount)
admin@xxxxxxx:~$ cd /volume1
admin@xxxxxxx:/volume1$ cd Share
admin@xxxxxxx:/volume1/Share$ which mount
/bin/mount
admin@xxxxxxx:/volume1/Share$


Ausgabe (which rsync)
admin@xxxxxxx:~$ cd /volume1
admin@xxxxxxx:/volume1$ cd Share
admin@xxxxxxx:/volume1/Share$ which rsync
/bin/rsync
admin@xxxxxxx:/volume1/Share$


Ausgabe (ls /volumeUSB1/*/*)
admin@xxxxxxx:/volume1/Share$ ls /volumeUSB1/*/*
/volumeUSB1/@eaDir/usbshare:
SYNO@.attr

/volumeUSB1/usbshare/@eaDir:
@tmp

/volumeUSB1/usbshare/System Volume Information:
IndexerVolumeGuid  WPSettings.dat

/volumeUSB1/usbshare/@tmp:

/volumeUSB1/usbshare/vuplus:
duo2
admin@xxxxxxx:/volume1/Share$
 
Hallo,
lass beim
Rich (BBCode):
mount | grep -qv "${ziel}" && echo "Ziel nicht verfügbar" && exit 1
das v bei -qv weg, also
Rich (BBCode):
mount | grep -q "${ziel}" && echo "Ziel nicht verfügbar" && exit 1

Gruß Götz
 
Nein auch das funktioniert nicht. Wenn ich das "v" weglasse dann kommt auch "Ziel nicht verfügbar".
Also so....

Rich (BBCode):
mount | grep -q "${ziel}" && echo "Ziel nicht verfügbar" && exit 1

Noch jemand eine Idee warum es nicht funktioniert?

Vielen Dank weiterhin.

Shawn26
 
Ich habe keine Idee mehr, es müsste m. E. funktionieren, Punkt.

Probier mal

Rich (BBCode):
df | grep -v "${ziel}" && echo "Ziel nicht verfügbar" && exit 1

oder

Rich (BBCode):
grep -v "${ziel}" /proc/mounts && echo "Ziel nicht verfügbar" && exit 1

oder

Rich (BBCode):
mount | grep "${ziel}" || ( echo "Ziel nicht verfügbar" ; exit 1)

aber ich sehe da keinen substantiellen Unterschied.

Wenn du die Zeile weglässt, schreibt dir rsync die Backupdaten im schlimmsten Fall ins Dateisystem der Syno.
 
Zuletzt bearbeitet:
So ich habe jetzt folgende Variante ausprobiert...

Rich (BBCode):
mount | grep "${ziel}" || ( echo "Ziel nicht verfügbar" ; exit 1)

und das kam dabei raus....

Rich (BBCode):
admin@xxxxxxx:~$ cd /volume1
admin@xxxxxxx:/volume1$ cd Share
admin@xxxxxxx:/volume1/Share$ ./copy_Fehler.sh
/dev/sds1 on /volumeUSB1/usbshare type vfat (rw,relatime,uid=1024,gid=100,fmask=0000,dmask=0000,allow_utime=0022,codepage=default,iocharset=default,shortname=mixed,quiet,utf8,flush,errors=remount-ro)
building file list ... done
./
duo2/
duo2/imageversion
duo2/kernel_cfe_auto.bin
duo2/noforce.update
duo2/reboot.update
duo2/root_cfe_auto.bin

sent 183 bytes  received 33 bytes  432.00 bytes/sec
total size is 228196519  speedup is 1056465.37 (DRY RUN)
admin@xxxxxxx:/volume1/Share$

Ich interpretiere das jetzt das es funktioniert. Richtig?

Jetzt hätte ich noch eine Bitte. Ich habe festgestellt das es immer wieder zu einem Fehler wegen der "defekten" Datei (VO2QQP~7)kommt, die scheinbar immer wieder in dem Backup erscheint.
Gibt es die Möglichkeit diese Datei für den Kopiervorgang auszuschließen?

Vielen Dank bis hierher für die perfekte Arbeit und vielleicht für den letzten Feinschliff.

Shawn26
 
Nutz einfach --exclude und gib die Datei an.
 
Ok danke schon einmal für die Antwort.
Es kann sein das der Dateiname nicht immer gleich ist aber zumindest die "~"(Tilde) im Dateinamen vorkommt.
Wie müsste ich es dann machen? Und wo trage ich den Befehl "--exclude" ein? Vor dem rsync, nach dem rsync oder nutze ich das in der gleichen Befehlszeile wie Rsync?

Danke weiterhin für den klasse Support.

Shawn26
 
--exclude ist eine rsync-Option und muss insofern innerhalb des rsync-Aufruf auf die übrigen Optionen folgen.
 
Ok und wie integriere ich diese Exclude Option nicht nur für eine Datei sondern für jede Datei die eine "~"(Tilde) beinhaltet?
 
Per wildcard. Wenn die Tilde immer vorn steht, verwendest Du z.B. "~*". Es könnte sein, dass die Tilde noch "escapt" werden muss, dann wäre es "\~*". Müsstest Du testen.
 
Müsste er es nicht aber so machen?
--exclude='*~*' oder halt so --exclude='*\~*' obwohl ich denke, dass er da nicht escapen muss.

Aber paar mal testen und das klappt :)
 
Ja, das ist die allgemeinere Variante, die aber auch riskanter ist, weil so vielleicht auch Dateien ausgeschlossen werden, bei denen das nicht gewollt ist. Die korrekte RegEx muss sich der TO schlicht selbst überlegen.
 
Dann müsste es also so lauten....

Rich (BBCode):
$( which rsync ) --exclude='*~*' -av --delete-after ${quelle}/ ${ziel}/vuplus/

Richtig?

Die Datei hatte, falls sie nicht immer gleich war (habe ich noch nicht drauf geachtet), die Tilde "~" immer an vorletzter Stelle (VO2QQP~7).

Vielen Dank weiterhin.

Shawn26
 
Wenn es immer die vorletzte Stelle ist geht es vielleicht so
--exclude='*~.$'
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat