maveric
Goto Top

Konkatenierten Pfad mit integiertem Symlink erstellen

Moin zusammen,

ich stehe gerade vor folgendem Problem. Ich habe einen Server mit zwei Partitionen.
/part1 und /part2 zweitere ist so gut wie voll. 1% left...

Folgendes habe ich jetzt gemacht:

1. /part1/xxx/xxx/xxx/thumbs/ori/ -> rsync -av nach /part2/home/user/thumbs_ori
2. ori zu ori_old umbenannt
3. ln -s /part2/home/user/thumbs_ori ori - Also einen symlink mit dem namen des alten ordners auf die zweite partition gebaut.


So weit so gut das läuft... jetzt kommt das Problem.
Es läuft mindestens ein Perl Skript, welches in den Ordner
ori dateien und ordner anlegt, schreibt, löscht. Das Skript
crascht jetzt an folgender stellt.

viel code...

line 10: $pathori="/part1/xxx/xxx/xxx/thumbs/ori";

viel code...

line 50: mkpath("$pathori"."/$number", 1, 0711);

viel code...

Der Logfile output ist: mkdir /part1/xxx/xxx/xxx/thumbs/ori: Die Datei existiert bereits at line 50 im Skript


Wenn wer eine Idee hat, immer her damit. Mein erster Gedanke war: Das Kopieren hat 2h gedauert. In der Zeit hat er vermutlich weitere Dateien im Original Ordner angelegt und jetzt irgendwie ein Problem weil diese im neuen nicht mehr vorhanden sind. Würde es helfen jetzt noch mal ein rsyn zu machen von ori_old in den thumbs_ori Ordner? Und was macht er dann? Kopiert er nur die Änderungen oder alles und überschreibt alles noch mal?

Ich hatte noch die Vermutung das der symlink hart ersetzt wird und das dann sowas wie /part1/xxx/xxx/xxx/thumbs/part2/home/user/thumbs_ori daraus wird aber ich bin dafür zu sehr Anfänger.

Viele Grüße
Maveric

Content-Key: 201059

Url: https://administrator.de/contentid/201059

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: 64748
64748 31.01.2013 aktualisiert um 13:34:38 Uhr
Goto Top
Hallo Maveric,

Zitat von @Maveric:
...
line 10: $pathori="/part1/xxx/xxx/xxx/thumbs/ori";

viel code...

line 50: mkpath("$pathori"."/$number", 1, 0711);

viel code...

Der Logfile output ist: mkdir /part1/xxx/xxx/xxx/thumbs/ori: Die Datei existiert bereits at line 50 im Skript


Wenn wer eine Idee hat, immer her damit. Mein erster Gedanke war: Das Kopieren hat 2h gedauert. In der Zeit hat er vermutlich
weitere Dateien im Original Ordner angelegt und jetzt irgendwie ein Problem weil diese im neuen nicht mehr vorhanden sind.
Würde es helfen jetzt noch mal ein rsyn zu machen von ori_old in den thumbs_ori Ordner? Und was macht er dann? Kopiert er nur
die Änderungen oder alles und überschreibt alles noch mal?
Wie der Name schon sagt, rsync synchronisiert, das heißt, es werden nur die Dateien kopiert, die noch nicht am Zielort vorhanden sind.
rsync hat auch eine -z Option, dann werden die Dateien vor dem Kopieren komprimiert. Das bringt Geschwindigkeitsvorteile, allerdings nur, wenn sich die Dateien auch komprimieren lassen (bei Text besonders viel).

Ich hatte noch die Vermutung das der symlink hart ersetzt wird und das dann sowas wie
/part1/xxx/xxx/xxx/thumbs/part2/home/user/thumbs_ori daraus wird aber ich bin dafür zu sehr Anfänger.

Viele Grüße
Maveric
Was macht denn die Funktion mkpath genau? und wo kommt $number her?

Also der Link mit dem o.g. Befehl ist ein symbolischer Link.

Das Problem scheint zu sein, dass Du das Perlskript und rsync gleichzeitig laufen lässt. Du müsstest aber das Perlskript vorher anhalten. Anderenfalls müsstest Du in dem Perlskript implementieren, dass es testet ob eine Datei bereits vorhanden ist. Allerdings bringt es vermutlich nichts, für die vorliegende Aufgabe das Skript zu ändern (mit der Aussicht auf neue Fehler).

Markus
Mitglied: Maveric
Maveric 31.01.2013 um 13:37:38 Uhr
Goto Top
mkpath ist eine Perl Funktion und erstellt einen Pfad oder erweitert diesen.
In unserem Fall nimmt er /part1/xxx/xxx/xxx/thumbs/ori und erstellt in ori den Ordner XXX der über die variable $number gesetzt wird.
Das könnte dann zum beispiel so aussehen: /part1/xxx/xxx/xxx/thumbs/ori/1234/
In dem erstellten Ordner werden dann Daten abgelegt.

Den rsync habe ich manuell gemacht um die Daten zu verschieben/kopieren. Das Problem das beides gleichzeitig läuft gibt es also nicht. Das Perl Skript läuft alle 30min und aktualisiert die Ordner legt neue an usw.
Mitglied: 64748
64748 31.01.2013 aktualisiert um 13:57:48 Uhr
Goto Top
Zitat von @Maveric:
...
Den rsync habe ich manuell gemacht um die Daten zu verschieben/kopieren. Das Problem das beides gleichzeitig läuft gibt es
also nicht. Das Perl Skript läuft alle 30min und aktualisiert die Ordner legt neue an usw.
Moment, das verstehe ich nicht. Wenn das Perlskript alle 30 Minuten läuft und der rsync-Vorgang zwei Stunden dauert, dann überschneiden die sich doch? oder habe ich das falsch verstanden?

Markus

Edit: Du kannst auch den rsync-Vorgang für die Zeit in der das Perlskript läuft jeweils anhalten und danach fortsetzen.
Mitglied: Maveric
Maveric 31.01.2013 um 19:23:38 Uhr
Goto Top
Das Kopieren der Daten hat 2 Stunden gedauert, das läuft nicht alle zwei Stunden
Mitglied: 64748
64748 31.01.2013 um 19:30:26 Uhr
Goto Top
Naja, das ist immer noch nicht verständlich, jedenfalls für mich. Während der zwei Stunden in denen die Daten kopiert wurden, müsste doch das Perlskript 4 mal gelaufen sein???
Mitglied: Maveric
Maveric 01.02.2013 um 15:25:10 Uhr
Goto Top
Zitat von @64748:
Naja, das ist immer noch nicht verständlich, jedenfalls für mich. Während der zwei Stunden in denen die Daten
kopiert wurden, müsste doch das Perlskript 4 mal gelaufen sein???

Wenn man das so sieht ja.

Ich habe den Fehler der weilen gefunden.
Was mir leider vorher nicht so ganz ersichtlich war
bzw. aufgefallen ist... das Skript wurde auf einem anderen
Server ausgeführt. Dementsprechend kannte das /home Verzeichnis nicht.
Gab jetzt zwei Möglichkeiten. Zum einen das Skript auf den Server
schieben, wo ich auch die Dateien verschoben habe oder die Verknüpfung
auf dem anderen Server anpassen. Ich habe Variante 1 gewählt weil der
Server eh noch Kapazitäten hatte.