Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   VPHD - Virtual private hard-disc (https://www.delphipraxis.net/165508-vphd-virtual-private-hard-disc.html)

olee 3. Jan 2012 14:31


VPHD - Virtual private hard-disc
 
Hallöchen alle zusammen!

Habe mich lange Zeit nicht hier im Forum blicken lassen, da ich in letzter Zeit leider zu viel mit Uni (und zocken xD) zu tun hatte.
Aber ich dachte mir, dass ich das mal endlich hinter mich bringen sollte.
Naja lange Rede kurzer Sinn:

Ich möchte euch hier mein neustes (altes) Projekt VPHD vorstellen.

Bei diesem Tool handelt es sich wie der Name schon ausdrückt um eine art Archiv für Dateien zur sicheren Aufbewahrung.
Der große Unterschied und auch Vorteil dieses Programms im Gegensatz zu normalen verschlüsselten Archiven wie WinRar, 7zip und Co. ist, dass dieses Format auf sehr große Datenmengen und vor allem das häufig Hinzufügen, Löschen und Ändern von Daten ausgelegt ist.
Übliche Archive müssen bei jeder Veränderung des Inhaltes neu geschrieben werden, was bei einer Änderung einer kleinen Datei in einem etwa 2 GB dann schon mal so 10 minuten dauern kann.

Das Format von VPHD hingegen verhält sich, wie der Name schon sagt, mehr wie ein Dateisystem.
Der Vorteil ist, dass das Hinzufügen, Löschen und Ändern von Dateien nur so lange dauert, wie das schreiben eben dieser einen Datei.
Beim Löschen wird demnach nicht mehr gemacht als im Dateiindex des Containers der Speicherbereich der Datei als Frei markiert, ähnlich einer normalen Festplatte.
Diese Lücken werden dann nach und nach durch Hinzufügen neuer Dateien und eine einfache Optimierung nach und nach wieder gefüllt.

Die wichtigste Funktion von VPHD liegt jedoch in der (optionalen) Verschlüsselung von Containern.
Damit lassen sich beliebige Dateien in einem passwort-geschütztem Container aufbewahren, welcher sich jedoch ohne großen Aufwand schnell auslesen lässt.

Hier eine kleine Zusammenfassung der Features des Programms:
  • Einfaches Hinzufügen / Extrahieren von Dateien per Drag'n'Drop
  • Es lassen sich wahlweise verschlüsselte oder unverschlüsselte Container anlegen
  • Archive lassen sich in eine ausführbare Anwendung umwandeln, wodurch sich die Daten von überall her lesen lassen
    (Nur das Verändern in diesem Format geht noch nicht so einfach)
  • Das Programm ist (bisher) in Deutsch und Englisch verfügbar (ja nach Systemeinstellung)

Mit freundliche Grüßen
Björn Zeutzheim


PS: Hier die direkten Download-Links:
VPHD Setup (916 KB)
VPHD mit Sourcen (1.454 KB)

implementation 3. Jan 2012 14:58

AW: VPHD - Virtual private hard-disc
 
Nettes Projekt, erinnert mich an Bei Google suchenEncFS und Bei Google suchenTruecrypt.

Welche Verschlüsselungsmethoden stehen denn zur Verfügung? EncFS und Truecrypt unterstützen ausschließlich symmetrische, du könntest sie evtl. schlagen, indem du daneben auch asymmetrische (auch wenn das bei diesen Datenmengen sehr unperformant ist) oder Hybridverschlüsselung anbötest.
Zitat:

Archive lassen sich in eine ausführbare Anwendung umwandeln
Das ist natürlich eine nette Idee!
Zitat:

wodurch sich die Daten von überall her lesen lassen
... während ich das erst bewiesen haben will. Es gibt noch Plattformen weiter fern von Win/i386. EncFS und Truecrypt unterstützen sehr viel mehr ;)


DISCLAIMER:
Die Hinweise auf EncFS und Truecrypt sind nicht zum schlechtmachen gemeint, sondern mehr als Tipp zur Orientierung.
Weiterhin habe ich dein Programm bisher noch nicht getestet (bin nicht zuhause), sondern dies ist nur, was mir zur Beschreibung einfällt.

olee 3. Jan 2012 15:06

AW: VPHD - Virtual private hard-disc
 
TrueCrypt kenne ich und mein Programm bessert genau einen Nachteil davon aus:
TrueCrypt benötigt einen Treiber um das Dateisystem als Laufwerk Einzubinden.
Daraus folgt aber auch, dass es zum Ausführen (bzw. zur Installation) Administrator-Rechte benötigt.

Mein Format ist mehr auf Portabilität ausgelegt, da es sich immer und überall auslesen lässt, ohne dass Administrator-Rechte nötig wären.

Zitat:

...du könntest sie evtl. schlagen, indem du daneben auch asymmetrische (auch wenn das bei diesen Datenmengen sehr unperformant ist)
Asymmetrische Verschlüsselung lässt sich leider nicht für Archive umsetzen. Ich habe über das ganze Thema schon einmal mit einem Freund diskutiert und wir sind zu dem Schluss gekommen, dass es

a) Nicht wirklich einen Sinnvollen Anwendungszweck dafür gäbe (außer der Befriedigung des eigenen Ehrgeizes ^^)
b) Viel viel viel zu langsam wäre
c) Ein Hybrid-Verfahren wäre nicht mehr wirklich Sicher (es ließen sich über Tricks die Daten des Archives manipulieren)

Zitat:

Es gibt noch Plattformen weiter fern von Win/i386
Wenn Interesse bestehen würde, würde ich einen Port (wohl Freepascal - bzw auch eine ganz andere Programmiersprache) in Erwägung ziehen. Aber ich denke VPHD sollte auch Problemlos mit Wine unter Linux laufen (auch wenn ich es NOCH nicht probiert habe).

olee 3. Jan 2012 15:16

AW: VPHD - Virtual private hard-disc
 
Zitat:

Welche Verschlüsselungsmethoden stehen denn zur Verfügung?
Momentan ausschließlich RC4. Aber wenn man ein sicheres Verfahren hat, sehe ich keinen Großen Sinn darin, andere zu Implementieren (außer der Verwirrung des Users).
Jedoch ist intern im Format die Möglichkeit vorhanden, andere Verschlüsselungen zu verwenden. Sie müssten lediglich implementiert werden.

EDIT:
Ich habe gerade die Möglichkeit von Backups mit EncFS gelesen.
Das wäre bei meinem Format auch gut Möglich - wenn Interesse besteht, kann ich dies implementieren!

neo4a 3. Jan 2012 18:24

AW: VPHD - Virtual private hard-disc
 
Hallo Björn,

mir gefällt die Umsetzung des Konzepts sehr gut, insbesondere was die treiberlose Einbindung angeht. Planst Du eine API (in Form einer DLL) für die Einbindung z.B. in Delphi-Programme, so dass man ggf. mit einem virtuellem Filesystem arbeiten könnte?

Mir fällt da spontan BoxedApp ein. Das ist ja ein kommerzielles Angebot, was es z.B. auch ermöglicht, DLL, ActiveX- Komponenten in die Exe einzubinden und zur Laufzeit so zu benutzen, als wären sie im tatsächlichen Filesystem vorhanden. Es geht mir gar nicht um die Exe-Einbindung, sondern um den treiberlosen Container-Zugriff.

Ansonsten habe ich noch Kleinigkeiten wie:
- Der Graph-Bereich lässt sich nicht mehr per Knopfdruck/F3 einblenden, wenn er zuvor manuell minimiert wurde.
- Die Icons sind für das Menü zu groß und kollidieren teilweise mit der Beschriftung.
- Es macht mir Mühe mich zu erinnern, wann wir zuletzt Win-Programme mit Strg-Q geschlossen haben ;). Das System-Menü schlägt ja auch Alt+F4 vor.

Luckie 3. Jan 2012 18:40

AW: VPHD - Virtual private hard-disc
 
Sehr schönes Programm. Gut geeignet für den USB-Stick. Aber kann man das auch irgendwie automatisieren? Ich habe mit eine Batch-Datei geschrieben, die alle meine Dateien, die ins Backup sollen in ein verschlüsseltes 7-Zip Archiv auf dem USB-Stick legt. So lange sich deine Software nicht so automatisieren lässt, kann ich sie leider nicht gebrauchen.

Warum wird die Archivdatei nicht kleiner, wenn ich eine Datei rauslösche?

Das Fenster sollte sich in der Mitte des Monitors öffnen. Und schön wäre es, wenn es nicht gleich so groß wäre. Bzw. sich Größe und Position merken würde.

neo4a 3. Jan 2012 18:57

AW: VPHD - Virtual private hard-disc
 
Zitat:

Zitat von Luckie (Beitrag 1144191)
Warum wird die Archivdatei nicht kleiner, wenn ich eine Datei rauslösche?

Na weil der Platz nur zur Wiederverwendung frei gegeben wird. Aber schick wäre es schon, würde die nächste Script- und/oder Kommandozeilenvariante eine Option zum Komprimieren bieten ;)

Luckie 3. Jan 2012 18:59

AW: VPHD - Virtual private hard-disc
 
Ja, aber trotzdem wäre es schön, wenn es schon nicht automatisch geht, dass man die Dateigröße der tatsächlichen Größe der enthaltenen Dateien anpassen könnte.

Coffeecoder 3. Jan 2012 19:21

AW: VPHD - Virtual private hard-disc
 
Hey,

Cooles Tool! Wie bereits erwähnt ideal für Dateien auf einem USB-Stick zu hinterlegen.
Muss auf dem anderen Rechner (z.b. Arbeitsrechner) dein Tool auch installiert sein um die Archivdatei zu öffnen? Ich schätze mal ja.

Das Programm kann ich gut gebrauchen. Top :thumb:

olee 3. Jan 2012 19:24

AW: VPHD - Virtual private hard-disc
 
Die Datei wird kleiner - aber nicht immer.
Es ist intern ein Defragmentierungsalgorithmus vorhanden, welcher die Datei wieder verkleinert.
Dieser wird aber (wenn ich mich recht erinnere) nur zu gegebenem Anlass ausgeführt.

Den Ansatz einer Bibliothek habe ich auch im Sinn gehabt, aber der Gedanke ist irgendwie etwas in Vergessenheit geraten... :oops:

Ich werde mich demnächst mal darum kümmern.

Zitat:

Die Icons sind für das Menü zu groß und kollidieren teilweise mit der Beschriftung.
Da wüsste ich auch gerne mal wie man die Menüs anpassen kann, damit sie zu der Größe der Icons passen.

Zitat:

Aber kann man das auch irgendwie automatisieren?
Ich werde mich dann darum kümmern eine Kommandozeile in das Programm einzubauen (wenn ich nicht sogar schon habe... hab ich? ^^)

Zitat:

Muss auf dem anderen Rechner (z.b. Arbeitsrechner) dein Tool auch installiert sein um die Archivdatei zu öffnen?
Nein, man benötigt nur eine Kopie der Anwendung (also portabel) oder man speichert das Archiv im Anwendungsformat (welches sich dann aber nicht mehr so leicht modifizieren lässt)

MFG
Björn

Luckie 3. Jan 2012 20:11

AW: VPHD - Virtual private hard-disc
 
Zitat:

Zitat von olee (Beitrag 1144207)
Dieser wird aber (wenn ich mich recht erinnere) nur zu gegebenem Anlass ausgeführt.

Und wann ist ein gegebener Anlass?

olee 3. Jan 2012 20:13

AW: VPHD - Virtual private hard-disc
 
Ich habe gerade nachgekuckt und festgestellt, dass der Algorithmus doch nicht aufgerufen wird :oops:

Ich werde gleich eine Version hochladen wo dies automatisch geschieht.

olee 3. Jan 2012 20:25

AW: VPHD - Virtual private hard-disc
 
So.

Ich habe in der neuen Version die Defragmentierung wieder aktiviert.
Sie wird ausgeführt, sobald das Archiv geschlossen wird.

Mit freundlichen Grüßen
Björn Zeutzheim

olee 4. Jan 2012 16:04

AW: VPHD - Virtual private hard-disc
 
So, endlich ist es soweit fertig.
Ich habe nun das Projekt in eine DLL, über welche die VPHD-Bibliothek über ein Interface nutzen lässt, exportiert.
Damit sollte sich das Projekt auch in den meisten anderen Sprachen nutzen lassen.
Außerdem stellt so auch die Verwendung innerhalb einer Anwendung kein großes Problem mehr dar.
Es ist zwar noch nicht alles ganz ausgereift, aber laufen tuts wunderbar.
Zur Demonstration habe ich auch die Hauptanwendung (VPHD_Tool.exe) schnell mal auf die Verwendung der Bibliothek umgestellt, was sich ohne großen Aufwand umsetzen ließ.
Daher kann ich euch auch nun hier die Source zum Tool rausgeben.
(nicht aber die Sourcen der Bibliothek - das werde ich mir nochmal überlegen :-D - bzw auf Nachfrage)

Die Downloads sind wie immer im ersten Post verlinkt.

Mit freundlichen Grüßen
Björn Zeutzheim

neo4a 4. Jan 2012 16:53

AW: VPHD - Virtual private hard-disc
 
Ich habe mir Dein Projekt bereits angeschaut und bin sehr beeindruckt, wie schnell Du mit der DLL all die hier geäußerten Wünsche und Anregungen "erschlagen" konntest.

Vielen Dank dafür!

olee 4. Jan 2012 17:00

AW: VPHD - Virtual private hard-disc
 
Nun ja...
eigentlich war das ganze nicht so schwer wie erwartet ^^

Der Trick war folgender:
Das Projekt von VPHD besteht im Grunde aus einer einzigen Hauptklasse.
Diese habe ich nun so abgeändert, dass ich dazu ein Interface (IVphd) mit allen public Methoden anlegen konnte. Dazu musste ich im Grunde nur die ganze Klasse kopieren, interface drüber schreiben, alle nicht-public felder rauslöschen und für ein paar public-variablen noch getter und setter anlegen.

Damit das ganze nun auch als DLL nutzbar ist habe ich dann noch ein paar kleine Methoden geschrieben, welche exportiert werden. So z.B. zum öffnen / erstellen eines Archives:
Delphi-Quellcode:
function OpenVphdFile(const FileName, Password: PWideChar; CreateNew: Boolean): IVphd; stdcall;
begin
  Result := TVPHD.Create(FileName, Password, CreateNew);
end;
Diese Funktion gibt dann am ende der Anwendung ein IVphd-Interface zurück, welches sich im Grunde fast exakt wie die normale Klasse verwänden lässt.
Zuletzt war es noch nötig ale WideStrings in den Methoden des Interfaces durch PWideChar (mit daraus folgenden Code-Anpassungen) zu ersetzen und natürlich an alle Methoden stdcall dranhängen.
Das wars dann auch schon im Großen und Ganzen.

Hier mal als Beispiel das ganze Interface:
Delphi-Quellcode:
  IVPHD = interface (IInterface)
    ['{3D6C8AAE-0CED-4D71-A1E2-26D2CCD0E8A5}']
  {$REGION 'File management'}
    procedure BeginUpdate; stdcall;
    procedure EndUpdate; stdcall;
    function GetDirectory(APath: PWideChar; DoCreate: Boolean): PDirNode; stdcall;
    function GetDirectoryFile(APath: PWideChar; var FileID: Integer): PDirNode; stdcall;
    function GetFile(AFileName: PWideChar): Integer; overload; stdcall;
    function GetFile(Dir: PDirNode; AName: PWideChar): Integer; overload; stdcall;
    //==============================================================================
    procedure AddFile(const AFileName: PWideChar; Data: TStream;
      FileDate: TDateTime); overload; stdcall;
    procedure AddFile(ARoot, AFileName: PWideChar); overload; stdcall;
    //==============================================================================
    procedure ExtractDir(Dir: PDirNode; DstPath: PWideChar); stdcall;
    procedure ExtractAll(DstPath: PWideChar); stdcall;
    procedure ExtractFile(FileID : Integer; const DstFile: PWideChar); overload; stdcall;
    procedure ExtractFile(FileID : Integer; DstStream: TStream); overload; stdcall;
    //==============================================================================
    procedure ExtractFileStart(FileID: Integer); stdcall;
    function ExtractFilePart(Dst: TStream; Count: Integer): Integer; stdcall;
    function ExtractFilePartBuff(var Data; Count: Integer): Integer; stdcall;
    procedure ExtractFileEnd; stdcall;
    //==============================================================================
    procedure DeleteFile(FileID: Integer); stdcall;
    procedure DeleteDir(Dir: PDirNode); stdcall;
    procedure RenameFile(FileID : Integer; ANewName: PWideChar); stdcall;
    procedure RenameDir(Dir: PDirNode; ANewName: PWideChar); stdcall;
  {$ENDREGION}
    procedure DrawFragmentationBar(DstDC: HDC; Width, Height: Integer;
      DrawStyle : TFragBarDrawStyle); stdcall;

    procedure SaveAs(const AFileName: PWideChar); overload; stdcall;
    procedure SaveAs(AStream: TStream); overload; stdcall;
    procedure Defragment; stdcall;
    procedure Finish; stdcall;

    function GetFileCount: Integer; stdcall;
    function GetFile(Index: Integer): PVphdFileInfo; overload; stdcall;
    property FileList[Index: Integer]: PVphdFileInfo read GetFile;

    function GetUpdating: Boolean; stdcall;
    function GetProgressFile: PWideChar; stdcall;
    procedure SetProgressFile(v: PWideChar); stdcall;
    function GetOwnStream: Boolean; stdcall;
    procedure SetOwnStream(v: Boolean); stdcall;
    function GetEOF: Int64; stdcall;
    function GetDescription: PWideChar; stdcall;
    procedure SetDescription(v: PWideChar); stdcall;
    function GetFileName: PWideChar; stdcall;
    function GetOnProgress: TVphdProgressEvent; stdcall;
    procedure SetOnProgress(v: TVphdProgressEvent); stdcall;

    property Updating: Boolean read GetUpdating;
    property ProgressFile: PWideChar read GetProgressFile write SetProgressFile;
    property OwnStream: Boolean read GetOwnStream write SetOwnStream;
    property Description: PWideChar read GetDescription write SetDescription;
    property FileName: PWideChar read GetFileName;
    property EOF: Int64 read GetEOF;
    property OnProgress: TVphdProgressEvent read GetOnProgress write SetOnProgress;
  end;
Wenn man sich von der Hauptanwendung (VPHD_Tool.exe) mal die Source anschaut sieht man auch, dass der Unterschied zwischen der Nutzung über das Interface und als normale Klasse wirklich minimal ist (lässt sich nun durch einen kleinen Compilerschalter umstellen).

MFG
Björn Zeutzheim

Luckie 4. Jan 2012 17:01

AW: VPHD - Virtual private hard-disc
 
Zitat:

Zitat von neo4a (Beitrag 1144334)
Ich habe mir Dein Projekt bereits angeschaut und bin sehr beeindruckt, wie schnell Du mit der DLL all die hier geäußerten Wünsche und Anregungen "erschlagen" konntest.

Das ist Zeichen für ein gutes Konzelpt und sauberer Programmierung.

olee 4. Jan 2012 17:08

AW: VPHD - Virtual private hard-disc
 
Danke ;)

Aber ich muss noch dran arbeiten.

Auf meiner TODO-Liste steht vor allem noch ein wichtiger Punkt:

Das auslesen von Dateien soll noch besser realisiert werden. Vor allem ist es mein Ziel, eine Funktion zu schreiben, welche einen speziellen Stream zurückgibt, mit welchem man eine Datei Stück für Stück aus dem Archiv auslesen kann. Das ist nicht gerade einfach und bedarf noch einiger Anpassung. Was jedoch bisher möglich ist, ist das Stückweise Auslesen mittels der 3 Funktionen:
Delphi-Quellcode:
procedure ExtractFileStart(FileID: Integer); stdcall;
function ExtractFilePart(Dst: TStream; Count: Integer): Integer; stdcall;
function ExtractFilePartBuff(var Data; Count: Integer): Integer; stdcall;
procedure ExtractFileEnd; stdcall;
PS: Der nächste Punkt auf meiner TODO-Liste ist aktuell aber die Implementation einer Kommandozeile.
Ergebnisse sind in ca. einer Stunde zu erwarten, falls ich nicht ne Runde zocke xD

EDIT:
Eine kleine Bemerkung am Rande:
Ich habe im Laufe der Entwicklung auch eine extra Testanwendung geschrieben, welche die Library einem Stresstest unterzieht.
Dabei wurden tausende von Dateien kunterbunt hinzugefügt und gelöscht und dabei immer wieder die Datenintegrität (über Hashes der Zufallsdaten) geprüft.
Dadurch wurden alle Fehler beseitigt und die Sicherheit des Formates überprüft (also keine Memory-leaks bzw. Dateninkonsistenzen).
Außerdem habe ich dabei den gesamten Code auf höchste Performance optimiert.

EDIT #2:
Eine weitere Bemerkung:
Das ganze Projekt ist durch Nutzung der TNT-Unicode-Controls Unicode-fähig!
(Ist zwar ein etwas böser Hack, aber der Nutzen ist enorm ^^)
Ich würde die DLL ja gerne ohne diesen Hack kompilieren, doch leider habe ich nur Turbo Delphi.
Ich werde aber mal sehen ob ich zumindest für die DLL nicht eine bessere Lösung finde....
Jetzt wo ich so darüber nachdenke, würde es reichen, nur ein paar wenige Klassen und Methoden aus den TNT-units zu nehmen, anstatt gleich alles mit reinzunehmen...

olee 4. Jan 2012 23:28

AW: VPHD - Virtual private hard-disc
 
So.

Wie versprochen habe ich nun die Konsolenversion implementiert.

Der Download befindet sich wie gehabt im ersten Post.

Für eine Hilfe zur Verwendung der Konsolenanwendung diese mit dem Parameter "/help" oder "/?" aufrufen.

MFG
Björn Zeutzheim

Luckie 5. Jan 2012 04:25

AW: VPHD - Virtual private hard-disc
 
Muss ich mir mal genauer angucken, ob das reicht. Weil es wäre gut, wenn man noch Dateien (auch mit Wildcards) und Verzeichnisse ausschließen könnte. Und muss man, wenn man ein Verzeichnis hinzufügt auch einen Pfad im Archiv angeben?

olee 5. Jan 2012 15:44

AW: VPHD - Virtual private hard-disc
 
Zitat:

Zitat von Luckie (Beitrag 1144375)
Muss ich mir mal genauer angucken, ob das reicht. Weil es wäre gut, wenn man noch Dateien (auch mit Wildcards) und Verzeichnisse ausschließen könnte.

Ich habe bisher ja nur die elementarsten Funktionen in die Kommandozeile eingebaut.
Es sollen später viel mehr Optionen zur Verfügung stehen.
Ich denke dabei auch an Funktionen, die verschlüsselten Daten mit incrementellen Backups sichern zu können etc.


Zitat:

Zitat von Luckie (Beitrag 1144375)
Und muss man, wenn man ein Verzeichnis hinzufügt auch einen Pfad im Archiv angeben?

Ein Pfad im Archiv muss ja immer angegeben werden, damit VPHD weiß, wohin es den Ordner packen soll.
Wenn der Ordner ins Root-Verzeichnis gepackt werden soll, so muss nur ein "\" als Parameter angegeben werden (steht auch in der /help)

Luckie 5. Jan 2012 18:48

AW: VPHD - Virtual private hard-disc
 
Na ja, das Programm könnte ja so schlau sein, dass wenn man keinen Pfad angibt, es den Pfad nimmt von dem Verzeichnis, welches man hinzufügen will.

olee 5. Jan 2012 18:51

AW: VPHD - Virtual private hard-disc
 
Ich glaube du verstehst da etwas falsch.

Wenn man beispielsweise folgendes ausführt:
Code:
vphd_console /edit test.vphd /add "C:\MyTestDirectory" "\"
wird im Archiv unter dem Root-Verzeichnis das Verzeichnis MyTestDirectory eingefügt.
Der Name des Archives wird verwendet.
Was gefragt ist, ist nicht der Name, unter dem das Verzeichnis hinzugefügt werden soll, sondern der des Parent-Verzeichnisses im Archiv!

Code:
vphd_console /edit test.vphd /add "C:\MyTestDirectory" "MyRootSubDir\"
Dieser Befehl dagegen würde das gleiche Verzeichnis als ein Unterverzeichnis von dem neuen (bzw. evt. schon existierenden) Ordner namens "MyRootSubDir" hinzufügen.

Luckie 5. Jan 2012 19:00

AW: VPHD - Virtual private hard-disc
 
Ach so. OK, dann ist das in Ordnung.

olee 5. Jan 2012 19:03

AW: VPHD - Virtual private hard-disc
 
Momentan arbeite ich an einer Statistikfunktion für das Archiv, welche unter anderem entscheiden soll, ob eine Defragmentierung nötig ist oder nicht.
Hat vllt. jemand eine Idee, wann man eine Defragmentierung durchführen sollte?
Zur Verfügung stehen folgende Daten:
Delphi-Quellcode:
  TVphdStats = record
    FragmentedFiles    : Integer;  
    FragmentedChunks   : Integer;
    FragmentedFilesSize : Int64;
    TotalFiles         : Integer;
    TotalChunks        : Integer;
    TotalFilesSize     : Int64;
    FreeSpace          : Int64;
    HeaderSize         : Integer;
    GapCount           : Integer;
    AvgGapSize         : Int64;
    LargestGap         : Int64;
    SmallestGap        : Int64;
  end;
MFG
Björn

olee 5. Jan 2012 20:41

AW: VPHD - Virtual private hard-disc
 
Ich habe eine neue Version mit folgenden Verbesserungen hochgeladen:
  • Erweiterte Funktionalität des Konsolentools
  • Die Defragmentierung wird jetzt nur noch nach der Zustimmung des Benutzers durchgeführt (siehe unten)
  • Möglichkeit zum Anzeigen einer Statistik über das Archiv

Wenn man nun ein geöffnetes Archiv schließt, welches größere Lücken enthält oder stark fragmentiert ist, fragt das Programm, ob es das Archiv defragmentieren und optimieren soll, anstatt wie bisher jedes mal.
Vorerst verwende ich dabei folgende Kontrolle:
Delphi-Quellcode:
function TVPHD.RecommendDefrag: Boolean;
var
  stats : TVphdStats;
begin
  GetStatistic(stats);
  with stats do
    Result :=
      ((FreeSpace / TotalSize > 0.05) and (GapCount > 5)) or
      (FragmentedFiles / TotalFiles > 0.05);
end;
--> Defragmentiere wenn (Freier-Speicher im Archiv > 5%) oder (Anteil an fragmentierten Dateien > 5%)

Denkt ihr, dass ist so gerechtfertigt oder würdet ihr andere Bedingungen bevorzugen?

Luckie 5. Jan 2012 21:10

AW: VPHD - Virtual private hard-disc
 
Kann man die Defragmentierung auch manuell auslösen?

doctor-x 5. Jan 2012 21:56

AW: VPHD - Virtual private hard-disc
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

absolut ein tolles teil! Danke :-D

Anmerkungen / Verbesserungsvorschläge

1. Wenn ein falsches Passwort eingegeben wurde, würde ich es vorziehen das sich nicht ein leeres Container Fenster öffnet, sonder nach der Meldung "Falsches Passwort" die möglichkeit besteht dieses erneut einzugeben oder man die Datei erneut öffnen muss um es erneut zu versuchen.

2. Es wäre meiner bescheidenen meinung nach angenemer wenn sich das fenster in der mitte des Bildschirms öffnet.

3. Ich erhalte die Fehlermelddung im Anhang, wenn ich ein neues Archiv anlege (auch mit Admin Rechten). Dieses wird dann aber offenbar fehlerfrei angelegt und kann verwendet werden.

4. Die Defragmentierung / Optimirung wurde bei mir nicht immer (beim löschen von ca. 90% der Daten) beim schließen des Programms vorgeschlagen. Manuell geht es aber einwandfrei. Aber das ist wohl noch in arbeit :wink:

(System: Win 7 Pro 64)

Nochmal Danke :-D

olee 5. Jan 2012 22:07

AW: VPHD - Virtual private hard-disc
 
Zitat:

Zitat von doctor-x (Beitrag 1144562)
1. Wenn ein falsches Passwort eingegeben wurde, würde ich es vorziehen das sich nicht ein leeres Container Fenster öffnet, sonder nach der Meldung "Falsches Passwort" die möglichkeit besteht dieses erneut einzugeben oder man die Datei erneut öffnen muss um es erneut zu versuchen.:

Also sollte es sich so verhalten?
Passwort abfragen, bis es richtig ist oder Cancel gedrückt wurde?
Und nachdem Cancel gedrückt wurde, das Programm komplett schließen?


Zitat:

Zitat von doctor-x (Beitrag 1144562)
3. Ich erhalte die Fehlermelddung im Anhang, wenn ich ein neues Archiv anlege (auch mit Admin Rechten). Dieses wird dann aber offenbar fehlerfrei angelegt und kann verwendet werden.:

Tut mir leid, aber diesen Fehler konnte ich nicht reproduzieren.
a) Hast du die neuste Version verwendet?
b) Was GENAU hast du gemacht?


Zitat:

Zitat von doctor-x (Beitrag 1144562)
4. Die Defragmentierung / Optimirung wurde bei mir nicht immer (beim löschen von ca. 90% der Daten) beim schließen des Programms vorgeschlagen. Manuell geht es aber einwandfrei. Aber das ist wohl noch in arbeit :wink:

Wenn der die Defragmentierung nicht ausgelöst hat, wird so wohl auch nicht nötig gewesen sein (was nur beim Löschen von Dateien der Fall ist).
Ein Teil der Optimierung geschieht auch schon während Dateien gelöscht / hinzugefügt werden.
Es kommt drauf an, wo die Dateien liegen, die gelöscht wurden.
Wenn alle davon am Ende des Dateisystems lagen, entstehen überhaupt keine Lücken und damit auch keine Notwendigkeit einer Optimierung.
Am besten lässt sich das im Fragmentierungs-Graphen sehen.

BUG 5. Jan 2012 22:34

AW: VPHD - Virtual private hard-disc
 
Was imho (insbesondere für Backups) ganz interessant wäre (falls dir mal langweilig wird):
  • Die Reduzierung der Archivgröße durch Anlegen von Hardlinks oder noch schlimmer: Wiederverwenden von einzelnen Chunks
  • Anlegen einer Historie, also die Änderungen speichern und Zugriff an spezielle benennbaren Zeitpunkte (z.B. nach einem Backup) ermöglichen.
  • "Sicheres" Splitten in mehrere kleinere Dateien, vllt. so wie bei RAR, wo Teile beschädigt sein können. Natürlich sollte man es auch wieder zusammenfügen können.

Die Verschlüsselung würde ich nicht als Alternative zu TrueCrypt und Co. "bewerben", bei Kryptografie kann man so viele Fehler machen ...

Außerdem wäre es interessant zu wissen, wie sich dein Dateiformat verhält, wenn das Programm während eines Schreibvorgangs abstürzt (muss ja nicht deine Schuld sein). Wird dann die Datei korrumpiert? Cool wäre natürlich, wenn es einen Crash-Save-Modus geben würde, in dem höchsten die zuletzt geschrieben Datei unbrauchbar wird (Anwendungsfall: Backup, das sollte besser nicht korrupiert werden.).


EDIT:
Zitat:

Zitat von olee (Beitrag 1144566)
Tut mir leid, aber diesen Fehler konnte ich nicht reproduzieren.
a) Hast du die neuste Version verwendet?
b) Was GENAU hast du gemacht?

Ich konnte es Reproduzieren:
  1. neuste Version (Setup aus ersten Betrag)
  2. Programm starten, neues Archiv anlegen, im erscheinenden Passwortdialog [OK] drücken ohne ein Passwort anzugeben.
Wenn man ein Archiv geöffnet hat und ein neues anlegen will, dann gibt es auch eine schöne Division durch Null.

EDIT2:
Code:
---------------------------
Öffnen?
---------------------------
Diese Datei ist ein Archiv. Möchten Sie dieses öffnen, oder dem aktuellen Archiv anfügen?
---------------------------
Ja  Nein  
---------------------------
Was soll ich da antworten? Wenn ich [Ja] klicke gibt es eine Division durch Null.




Bei der ganzen "Meckerei" nicht zu vergessen zu erwähnen:
Schön das wieder einmal so ein größeres, durchdachtes Projekt gepostet wird :thumb:

olee 5. Jan 2012 23:00

AW: VPHD - Virtual private hard-disc
 
Zitat:

Zitat von BUG (Beitrag 1144573)
Die Reduzierung der Archivgröße durch Anlegen von Hardlinks oder noch schlimmer: Wiederverwenden von einzelnen Chunks

Eine Kompression habe ich in Erwägung gezogen, jedoch würde das dann am Hauptziel des Formates - nämlich der Geschwidigkeit - vorbei gehen.
Jedoch habe ich schon vor, das noch als Feature zu implementieren (Kompression mit ZLib).
Das Problem ist jedoch, dass vor dem Verarbeiten der Daten noch unbekannt ist, wie viel davon nach der Komprimierung noch übrig bleibt.
Wobei... das ist kein Problem, sondern nur ein Hindernis :wink:

Zitat:

Zitat von BUG (Beitrag 1144573)
Anlegen einer Historie, also die Änderungen speichern und Zugriff an spezielle benennbaren Zeitpunkte (z.B. nach einem Backup) ermöglichen.

Meinst du damit eine Art Versionierungssystem?
Wäre möglich, aber ich denke dass das nicht wirklich nötig ist.
Außerdem würden Leute, die ein solches Feature brauchen, sowieso auf andere Lösungen zurückgreifen.
(In dem Fall würde man am ehesten ein verschlüsseltes Laufwerk nutzen).

Zitat:

Zitat von BUG (Beitrag 1144573)
"Sicheres" Splitten in mehrere kleinere Dateien, vllt. so wie bei RAR, wo Teile beschädigt sein können. Natürlich sollte man es auch wieder zusammenfügen können.

Splitten ist durchaus eine interessante Idee auch wenn es das ganze um einiges komplizierter machen wird.
Man müsste dann schon beim öffnen des Archives....
Moment mal das IST möglich ^^
Gerade kam mir eine Idee.
Man kann ein Archiv mittels eines Streams öffnen.
D.h. falls der Bedarf besteht, ist nur eine von TStream abgeleitete Klasse nötig, welche mehrere Dateien in einem zusammenhängenden Stream kombiniert(sowas lässt sich ja recht einfach schreiben).
Ich werde mich mal darum kümmern, falls ich Lust drauf hab :)

Zitat:

Zitat von BUG (Beitrag 1144573)
Die Verschlüsselung würde ich nicht als Alternative zu TrueCrypt und Co. "bewerben", bei Kryptografie kann man so viele Fehler machen

An diesem Punkt sollten keine Bedenken vorhanden sein.
Ich würde ohne zu zögern meine Kontodaten mit Pin und Co. darin verpacken und weitergeben.
Das Format ist so sicher, wie das Verschlüsselungsverfahren es zulässt.
Und RC4 welches ich verwende ist da ja wohl ausreichend, um bestimmt 99,9999% der Welt davon abzuhalten, den Inhalt zu entschlüsseln.

Zitat:

Zitat von BUG (Beitrag 1144573)
Außerdem wäre es interessant zu wissen, wie sich dein Dateiformat verhält, wenn das Programm während eines Schreibvorgangs abstürzt (muss ja nicht deine Schuld sein). Wird dann die Datei korrumpiert? Cool wäre natürlich, wenn es einen Crash-Save-Modus geben würde, in dem höchsten die zuletzt geschrieben Datei unbrauchbar wird (Anwendungsfall: Backup, das sollte besser nicht korrupiert werden.).

Ich habe das Format unter genau DIESEM Aspekt entwickelt.
Es ist absolut konsistent und es können höchstens die Dateien beschädigt werden, welche gerade in Verarbeitung sind (zur Zeit eines Absturzes).
Da die Dateien, welche hinzugefügt werden, sowieso in eben diesem Moment in einem anderem Medium (im Normalfall die Festplatte) vorhanden sind, ist das Format damit absolut sicher.
Einzige schwachstelle ist bisher die Defragmentierung, da dort erst fertig defragmentiert und optimiert wird und anschließend erst das Dateisystem geschrieben wird.
Nur allein während dieses Vorgangs besteht die Gefahr eines Datenverlustes.
Dieses Problem ließe sich nur dadurch lösen, indem nach jedem einzelnen Schritt in der Defragmentierung das Dateisystem neu geschrieben wird
(was a) Die Dauer der Defragmentierung erheblich steigern würde und b) eine Qual für die Festplatte wäre)

doctor-x 6. Jan 2012 18:06

AW: VPHD - Virtual private hard-disc
 
Zitat:

Also sollte es sich so verhalten?
Passwort abfragen, bis es richtig ist oder Cancel gedrückt wurde?
Und nachdem Cancel gedrückt wurde, das Programm komplett schließen?
Ich persönlich halte dieses verhalten für das angenehmste.
(Passwort abfragen, bis es richtig ist oder Cancel gedrückt wurde und wenn Cancel gedruckt wird schließt sich das Programm)

Zitat:

Tut mir leid, aber diesen Fehler konnte ich nicht reproduzieren.
a) Hast du die neuste Version verwendet?
b) Was GENAU hast du gemacht?
  1. Ich habe die neuste Version aus deinem Beitrag (Setup) v. 1.0.0.31
  2. Programm starten, neues Archiv anlegen, im erscheinenden Passwortdialog [OK] drücken (mit oder ohne Passwort spielt keine Rolle).

Mir ist noch aufgefallen, dass wenn ich kein Passwort für ein neues Archiv vergebe, dann Dateien in dieses Archiv lege und anschließend das Programm beende ich eine Division durch 0 Meldung bekomme. Bei Archiven mit PW kommt diese Fehlermeldung nicht.

MfG

olee 7. Jan 2012 01:57

AW: VPHD - Virtual private hard-disc
 
So ich habe eine neue Version hochgeladen.
Folgende Verbesserungen wurden durchgeführt:
  • Formular schließt sich wenn ein Archiv mit Passwort geöffnet wird und die Eingabe des Pasworts abgebrochen wird
  • Große Verbesserungen am Defragmentierungs-Algorithmus
  • Viele Bugfixes.

@doctor-x: Funktioniert es mit der neusten Version?

MFG

olee 9. Jun 2012 23:03

AW: VPHD - Virtual private hard-disc
 
Hallo,

Habe mich lange nicht gemeldet, aber jetzt endlich mal wieder ein kleines Update bereit.

Habe nur ein paar kleine Bugs (Neues-Archiv-erstellen Bug und ein paar andere) behoben und die neue Version hochgeladen.

MFG

NickelM 10. Jun 2012 00:03

AW: VPHD - Virtual private hard-disc
 
Also das Programm hört sich für mich super an, da ich sowieso ein Tool gesuchthabe, womit ich auch von anderen Rechner auf die Daten zugreifen kann, und alles nur in einer Datei steckt.
So nun bekomm ich leider beim Erstellen schon einen Fehler :(
Nachdem ich beim Passwort-Dialog (egal ob etwas eingegeben oder nicht), auch egal was ich klicke, geschieht nichts. Wenn ich danach die Anwendung beende, bekomm ich diesen Fehler.
EDIT: Nach dem Dialog kommt die Meldung, dass ein andere Prozzes darauf zugreift.
Er erstellt mir die Datei mit 512 Bytes.
Komisch, nach dem Neustart des Programmes, kann ich normal auf die Datei zugreifen? Hä?

Caption der Meldung: Unexpected Memory Leak
Text der Meldung : An unexpected memory leak has occurred. The unexpected small black leaks are :
1 - 12 bytes : TFileStream x1

Ich hoffe du kannst etwas damit anfangen. Würde mich auf das Tool freuen und gerne testen.
Habe Win7 32bit. Egal ob mit Adminrechten ausgeführt oder ohne der gleiche Fehler.
Liegt auch nicht am Standort.
EDIT2: P.S. : Ich werde mir mal die Tage das Programm weiter anschauen und poste es dann, falls noch mehr Fehler sind. Wenns nur bei dem bleibt ist das okay xD

olee 10. Jun 2012 00:29

AW: VPHD - Virtual private hard-disc
 
Oh tatsächlich!
Da habe ich beim Ändern einen Fehler gemacht.
Gefixte Version in ca. 5-10 min da!

olee 10. Jun 2012 00:41

AW: VPHD - Virtual private hard-disc
 
Neue Version wurde hochgeladen!

Danke für den Hinweis!

himitsu 10. Jun 2012 02:11

AW: VPHD - Virtual private hard-disc
 
- Neues Archiv
- 2 Dateien hinzugefügt (kleines JPeg + 422 MB-Video)
- Programm reagiert lange nicht und lastet einen CPU-Kern voll aus ( keine Prozessanzeige? )
- Dateien gelöscht
= "Ungültige Gleitkommaoperation." beim Anzeigen der Statistik

[add]
Die Konsole ohne Parameter einfach so gestartet, macht sie so durchschnittlich geschätzte 10-30 Sekunden nix und raucht dann einfach ab.
Zitat:

Exception EAccessViolation in Modul VPHD_console.exe bei 0002133F.
Zugriffsverletzung bei Adresse 0042133F in Modul 'VPHD_console.exe'. Lesen von Adresse 00000000.
PS: Sicher daß Lizens in deiner Lizenz richtig geschrieben ist?

[edit]
Krass ... es wird ja doch verwendet :shock:

olee 10. Jun 2012 02:35

AW: VPHD - Virtual private hard-disc
 
Leider konnte ich den Fehler nicht reproduzieren, aber ich hatte an der Version, mit der ich es versucht habe, ein paar kleine Änderungen gemacht.
Könntest du es mit der neusten Version noch einmal versuchen bitte?

Außerdem ist das mit der Prozessauslastung etwas merkwürdig, da eigentlich fast alle Operationen fast ausschließlich I/O lastig sind, und die CPU fast icht benötigt wird, es sei denn, es kommt verschlüsselung ins Spiel.

MFG

NickelM 10. Jun 2012 16:40

AW: VPHD - Virtual private hard-disc
 
Bei dem Fehler mit der Gleitkommawert muss ich himitsu zustimmen.
Er entsteht, wenn keine Dateien im Container sind. Wenn eine drin ist kommt er nicht mehr.
Bei der Konsole meldet Windows7 nach dem Start, dass die Anwendung nicht mehr funktioniert.
Dass mit der CPU-Auslastung liegt an dem Problem, dass ich dir per PN schon geschrieben habe.

Gruß NickelM


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz