Bildsequenzen "defragmentiert" kopieren?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Bildsequenzen "defragmentiert" kopieren?

Beitragvon shakebox » Mittwoch 18. Juni 2008, 16:02

Hi!

Es kommt jetzt ne Frage bei der ich die (verneinende) Antwort schon erwarte/vermute/weiss. Nur will ich nicht aus Faulheit ne Chance auslassen, dass es wider Erwarten doch ne Loesung fuer das Problem gibt. Deshalb stell ich die Frage trotzdem :)

Es geht darum dass ich mit nem Script hochaufgeloeste Einzelbildsequenzen von nem Server auf ein lokales RAID kopieren muss. Das klappt auch wunderbar. Problem ist: da es lauter einzelne Dateien sind werden diese natuerlich irgendwo auf der Zielplatte abgelegt. Damit ein Realtime-Playback dieser Daten aber zuverlaessig und ruckelfrei funktioniert, sollten die Dateien in der richtigen Reihenfolge auf dem RAID liegen.

Normale Defragmentierprogramme koennen ja nicht Zusammenhaenge zwischen Dateien erkennen sondern nur Dateien "in sich" defragmentieren. Es gibt fuer mein Problem zwar ein kommerzielles Produkt, das Einzelbildsequenzen in der Art "defragmentieren" kann. Leider arbeitet das aber nur ueber ne GUI, so dass sich das nicht so einfach in bestehende Workflows und Scripte einbinden laesst.

Deshalb die Frage:
besteht wider Erwarten doch irgendwie ne Chance, beim Kopieren per Pythonscript die Ordnung der Dateien auf dem Zielvolume irgendwie zu beeinflussen? Faellt da irgendjemandem was dazu ein oder sollte ich die Idee aufgrund der Komplexitaet lieber gleich begraben?

Danke und Gruss, Shakebox
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Mittwoch 18. Juni 2008, 16:54

Hi

Arbeitest du mit Windows XP/Vista?

Falls ja:
Windows hat eine deframentierungs API (weiss nicht ab wann), ich hab mit der mal ein wenig gespielt.

Es läuft etwa so ab:
Von der ganzen Festplatte gibt es einen Array der zu jedem Block sagt ob belegt oder frei.

Dann gibts von der Datei eine Liste von Fragmenten, die den virtuellen Block der Datei (beginnt bei jeder Datei bei 0) auf den logischen Block der Platte zuordnet.

z.B. Datei1.txt

Besteht aus 3 Blöcken, virtueller Block 0 startet bei logischem Block 10000 und ist z.B. 100 Blöcke lang
der nächste Block ist der virtuelle Block 100 und startet beim logischen Block 500 und ist au 100 Blöcke lang
usw.

Dann gibt es eine Funktion, bei der du sagen kannst, du möchtest von der Datei1.txt den virtuellen Block 100 mit der Länge 100 zum logischen Block 10100 schieben, da der rest der Datei auch dort ist.

Somit könntest du auch Dateien schön nacheinander auf die Platte legen, falls es einen genug Grossen leeren block auf der Platte hat.

Infos hier:
MSDN zu defragmentieren: http://msdn.microsoft.com/en-us/library/aa363911(VS.85).aspx
C Beispiel

Zu meinem Code:
Ich hab das ganze via ctypes angesprochen. Muss den Code noch ein wenig überarbeiten bevor ich ihn veröffentlichen möchte, ev schaffe ich das noch diese Woche.

Das ganze ist aber eher langsam weil er aus dem Array der für jeden Block sagt ob die Disk frei ist oder nicht, eine Liste von leeren zusammenhängenden Blöcken erstellt.

Gruss
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Mittwoch 18. Juni 2008, 17:30

ok, danke fuer den Hinweis. Das klingt ja schonmal so als gaebe es zumindest ne Chance. Jetzt muesste man nur noch besser programmieren koennen ;) Das duerfte ne Hausnummer zu hoch sein fuer mich. Aber ja: es geht um ne Windowskiste. Koennte also tatsaechlich klappen. Muss ich mal meine Admins drauf ansetzen.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 18. Juni 2008, 17:39

Oder nehmt ne Linux/BSD/sonstwas Kiste, die hat das Problem mit der Fragmentierung erst gar nicht ;)
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Mittwoch 18. Juni 2008, 17:49

inwiefern, lieber audax?

Es geht wie gesagt nicht um die Defragmentierung INNERHALB eines Files sondern darum dass ne Folge von Bildern, also Einzeldateien, auf der Platte hintereinander stehen soll und nicht wild durcheinander.

Ich hab deshalb ja "defragmentiert" auch eben immer in Anfuehrungszeichen geschrieben, weil das ja eigentlich gar keine echte Defragmentierung ist.

Was soll Linux/BSD/... da jetzt anders machen als Windows? Ne Zusammengehoerigkeit von Einzeldateien kann doch auch Linux nicht erkennen, oder?
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Mittwoch 18. Juni 2008, 18:00

Und fragmentiert wird auch auf einer Linux/BSD/sonstwas Kiste, vielleicht nicht so stark wie Windows aber verhindern lässt sich die ganze fragmentierung nur durch umkopieren von Dateien.

Bin gerade dabei meinen Code umzuschreiben, damit könntest du vielleicht was anfangen.

Gruss
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Mittwoch 18. Juni 2008, 18:08

rayo hat geschrieben:Bin gerade dabei meinen Code umzuschreiben, damit könntest du vielleicht was anfangen.


Ui, na da bin ich ja gespannt. Merci vielmals!
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Mittwoch 18. Juni 2008, 18:18

rayo hat geschrieben:Und fragmentiert wird auch auf einer Linux/BSD/sonstwas Kiste, vielleicht nicht so stark wie Windows aber verhindern lässt sich die ganze fragmentierung nur durch umkopieren von Dateien.


Naja es kommt vorallem auf das Dateisystem an. Da hat M$ allerdings genügend Böcke geschossen, dass man bei Ext2/3 sagen kann, dass es sowas wie Fragmentierung nich gibt. AFAIK tritt das Problem der Fragmentierung erst bei ner Plattenbelegung von >70% auf, natürlich neben der internen Fragmentierung, dass ne Datei nen Block nicht ganz ausfüllt und so Platz verschwendet wird.
Aber ist schon ne weile her, dass ich mich drüber informiert hab -> meine Hand würd ich dafür nicht ins Feuer legen :roll:
BlackJack

Beitragvon BlackJack » Mittwoch 18. Juni 2008, 19:17

Unter Linux könnte man auch eine unformatierte Partition nehmen und sich mit `libfuse` ein eigenes Dateisystem basteln, dass den Anforderungen genügt.

Ansonsten gibt's für das XFS-Dateisystem Möglichkeiten im laufenden Betrieb zu defragmentieren und Streamingeigenschaften zu garantieren. Da weiss ich aber nicht in wie weit man das auf Einzeldateien festnageln kann.

Notfalls könnte man sich auch eine Containerdatei mit einem "dummen" Dateisystem anlegen und die Einzeldateien dort hinein kopieren.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 18. Juni 2008, 21:42

An XFS habe ich nämlich auch gedacht, das kann sowas nämlich. Mal abgesehen davon, das Performance von XFS auch so schon reichen würde ;)

Ich würd mir das mit nem Linux-Rechner dafür ernsthaft überlegen, eventuelle Windows-only Software läuft vielleicht auch ganz gut über Wine.

Das ist hier nicht als Missionierungspost gedacht ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. Juni 2008, 22:01

BlackJack hat geschrieben:Ansonsten gibt's für das XFS-Dateisystem Möglichkeiten im laufenden Betrieb zu defragmentieren und Streamingeigenschaften zu garantieren. Da weiss ich aber nicht in wie weit man das auf Einzeldateien festnageln kann.

ext4 wird/unterstützt auch Online-Defragmentierung, aber ich muss sagen, dass ich es bisher nicht getestet habe.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Mittwoch 18. Juni 2008, 22:22

XSF bietet aber wohl ziemlich weitreichende Möglichkeiten die Verteilung der Daten zu beeinflussen um Garantien für festgelegte, durchgehende Datenraten zu geben.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 18. Juni 2008, 22:34

Es ist eben durch und durch für fette Datenblobs und auf Schnelligkeit optimiert..das merkt man schon ;)
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Donnerstag 19. Juni 2008, 12:05

Hi

Also ich habs mal ein wenig umgeschrieben und jetzt werden alle Dateien in einem Ordner alphabetisch sortiert auf der Festplatte abgelegt.

Aber als Warnung! Ich hab es nicht ausführlich getestet, bei mir hat er einfach 20 jpeg Dateien sortiert. Kann dir keine Garantie geben dass nacher nicht irgendwie das Filesystem defekt ist oder so. Ausprobieren auf eigene Verantwortung.

Ausprobiert wurde es auf Windows Vista auf einer externen Platte (keine RAID Platte, weiss nicht ob es da nicht funktioniert)

Einfach mit "defrag.py <pfad>" starten

defrag_api.py
errors.py
defrag.py

Bei grossen Platten empfehle ich dir noch psyco zu installieren, das Script verwendet es automatisch falls es vorhanden ist.

Gruss
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Donnerstag 19. Juni 2008, 12:29

wow, werde ich mir anschauen. Danke vielmals. Hat sich also doch gelohnt dass ich mir diese eigentlich aussichtslose Frage nicht verkniffen habe. Man sollte halt einfach nix unversucht lassen.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]