Cloud Station Daten von Share auf USB kopieren

Status
Für weitere Antworten geschlossen.

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
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.
 

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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:

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Lass mich zunächst mal fragen: Benutzt du die neuste Version des Scripts oder nicht? Wenn nicht, ist es Zeitverschwendung.
 

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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:

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
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:

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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$
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.017
Punkte für Reaktionen
272
Punkte
393
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
 

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
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:

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Nutz einfach --exclude und gib die Datei an.
 

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.159
Punkte
754
--exclude ist eine rsync-Option und muss insofern innerhalb des rsync-Aufruf auf die übrigen Optionen folgen.
 

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
Ok und wie integriere ich diese Exclude Option nicht nur für eine Datei sondern für jede Datei die eine "~"(Tilde) beinhaltet?
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.159
Punkte
754
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.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
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 :)
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.871
Punkte für Reaktionen
1.159
Punkte
754
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.
 

Shawn26

Benutzer
Mitglied seit
21. Jan 2012
Beiträge
63
Punkte für Reaktionen
0
Punkte
6
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
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
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