Seite 2 von 2

Verfasst: Freitag 20. Juni 2008, 11:07
von shakebox
egal ob mit oder ohne dem DELETE-Teil, bekomme ich folgenden gleichlautenden Traceback:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Administrator\Desktop\defrag\defrag.py", line 211, in <module>
main()
File "C:\Dokumente und Einstellungen\Administrator\Desktop\defrag\defrag.py", line 186, in main
cluster_size = get_cluster_size(volume)
File "C:\Dokumente und Einstellungen\Administrator\Desktop\defrag\defrag.py", line 153, in get_cluster_size
return get_disk_size(volume)/defrag.get_volume_map(volume)[1]
File "C:\Dokumente und Einstellungen\Administrator\Desktop\defrag\defrag_api.py", line 186, in get_volume_map
raise VolumeMapException(error, errors[get_last_error()])
defrag_api.VolumeMapException: (234L, 'ERROR_MORE_DATA')

Verfasst: Freitag 20. Juni 2008, 11:56
von rayo
Hi

Ist das eine grosse Partition mit kleinen Clustern?

ERROR_MORE_DATA heisst dass der Buffer den ich übergebe nicht ausreicht, sprich deine Partition besteht aus mehr als 64Millionen Clustern.

Da sollte es reichen bei der Funktion get_volume_map den Buffer zu vergrössern:

Code: Alles auswählen

out_buffer = ctypes.c_buffer('\x00',64*1024*1024)
Einfach eine grössere Zahl nehmen, z.B. 128*1024*1024 ergibt daraus aber auch einen Ram-Verbrauch von 128MB.

Kling auf jeden Fall so, also könnte es nacher funktionieren.

Gruss

Verfasst: Freitag 20. Juni 2008, 12:05
von shakebox
Danke, werd ich gleich probieren. Das Volume ist halbwegs gross, hat gut 5TB. Wie man das in "Cluster" umrechnet, keine Ahnung :)

Ist denn "Cluster" das gleiche was man so als "Block" bezeichnet?

Verfasst: Freitag 20. Juni 2008, 12:16
von rayo
Also die Clustergrösse ist abhängig von der Grösse der Partition und dem was man Einstellt beim Formatieren.

Wenn ein Cluster z.B. 4kB gross ist, belegt jede Datei mindestens soviel, ist eine Datei kleiner ist der restliche Speicherplatz verloren. Ein Cluster ist also die kleinste Einheit die belegt werden kann.

Bei 5TB gibts natürlich eine Menge Cluster, ich hab hier ein Raid von 500GB :).

Block hab ich im Quelltext zusammenstehende Cluster die belegt oder frei sind genannt.

Gruss

Verfasst: Freitag 20. Juni 2008, 12:28
von shakebox
ok, kaum setzt man die Groesse richtig, schon funktioniert es :)

Bei der Groesse dauert die Suche nach nem passenden Block natuerlich ne Weile, aber das ist glaube ich gut verschmerzbar.

Danke Dir nochmal ganz, ganz herzlich. Sag Bescheid, wie ich mich evtl. erkenntlich zeigen kann. Wenn Du magst kannst Du mir gerne ne Adresse zukommen lassen, dann schick ich ne Flasche Wein oder sonst etwas womit man Dir ne Freude machen kann, auf den Weg.

Eine kleine Frage noch:
Die Aenderungen, die wir jetzt zu Testzwecken eingebaut haben, welche davon soll ich drin lassen und welche sinnvollerweise wieder rausnehmen? Was also hing jetzt alles an der zu kleinen Buffersize und was war wirklich sonst noch "falsch". Also ich mein die Sachen mit der FILE_SHARE_READ und mit dem 0xffffffff: usw.

Verfasst: Freitag 20. Juni 2008, 12:34
von rayo
Hi

Also kannst du alle Änderungen drin lassen.
0xffffffff ist die korrekte Überprüfung ob das Handle gültig ist.
FILE_SHARE_READ brauchts noch zusätzlich damit das Volume geöffnet werden kann.
Grösserer Buffer brauchts für deine Partitionsgrösse.

Entschädigung ist nicht nötig :)

Gruss

Verfasst: Mittwoch 2. Juli 2008, 07:36
von jens
Gerade das hier gesehen: http://wiki.ubuntuusers.de/FATSort

Verfasst: Mittwoch 2. Juli 2008, 08:39
von BlackJack
Das sortiert "physikalisch" die Namen im Inhaltsverzeichnis. Die Dateien selbst werden nicht angefasst, also auch nicht umsortiert und defragmentiert. Ist also für den OP ungeeignet.