Eigenes Virtuelles Laufwerk Programmieren

OP (Firma: Privat) #5025055
Hallo,

Ich möchte gerne ein eigenes Virtuelles Laufwerk programmieren.

Ziel ist im System ein Laufwerk zu haben, wo aber die Angezeigte Datei- 
und Ordnerstruktur durch eine im Treiber programmierte Logik aus einer 
Datenbank und mehreren Storage System erzeugt wird.

Als Zielsystem ist entweder Linux (Red Hat oder Ubuntu) oder Windows 
(Windows 7 oder höher) angedacht. Ich würde mich einfach für das System 
entscheiden, wo sich das ganze einfacher Umsetzten lässt.

Die einzelnen Logiken für die Datenbank abfragen und Storage Zugriffe 
habe ich bereits fertig, allerdings nur in c# und java. Wahrscheinlich 
werde ich das ganze noch nach c oder c++ portieren müssen.

Nun aber zu meiner eigentlichen Frage, ich habe schon verzweifelt bei 
Google gesucht, aber immer nur Einträge in Richtung gefunden, wie ich 
virtuelle Laufwerke einbinde, nicht aber wie ich selber eins mit eigener 
Logik implementiere. Also wer in diese Richtung schon mal was gemacht 
hat, oder mir einen Denkanstoß geben kann, dem wäre ich sehr dankbar. 
Vielleicht suche ich auch einfach nur nach den falschen Stichwörtern bei 
Google.

Gruß

Jacob
#5025073
Jacob L. schrieb:
> Nun aber zu meiner eigentlichen Frage, ich habe schon verzweifelt bei
> Google gesucht, aber immer nur Einträge in Richtung gefunden, wie ich
> virtuelle Laufwerke einbinde, nicht aber wie ich selber eins mit eigener
> Logik implementiere. Also wer in diese Richtung schon mal was gemacht
> hat, oder mir einen Denkanstoß geben kann, dem wäre ich sehr dankbar.
> Vielleicht suche ich auch einfach nur nach den falschen Stichwörtern bei
> Google.

Vermutlich hast Du tatsächlich nach "virtuelle *Laufwerke*" gesucht - 
"Laufwerk" ist in diesem Zusammenhang aber reiner Windows-Sprech; mit 
einer Suche nach "virtuelle Dateisysteme" hättest Du wahrscheinlich mehr 
gefunden.

Unter Linux dürfte "FUSE" ("Filesystem in userspace") so ziemlich der 
beste Suchbegriff sein, da wirst Du auch genug Webseiten zur 
Implementierung eines virtuellen Dateisystems in allen diversen 
Programmiersprachen finden.
#5025152
Ich würde hier auch fuse empfehlen, das kann unter linux, bsd, etc. 
verwendet werden. Unter Windows gibt es als fuse implementation, neben 
dem schon genannten winfsp, noch dokan-fuse von dokany: 
https://github.com/dokan-dev/dokany/wiki/FUSE#compiler

Wenn das ganze Portabel bleiben soll, verwende nur fuse.h, und keine 
Funktionen aus fuse-lowlevel.h, sonst wird das Portieren nach Windows 
und BSD schwierig bis unmöglich.

Es ist immer gut, wenn man sich bestehende Programme anschaut. 
Beispielsweise ist https://github.com/sahlberg/fuse-nfs für Linux und 
Windows (dokany und winfsp) kompillierbar.

Ein fuse Programm implementiert im einfachsten fall einfach die 
Funktionen im struct fuse_operations [1] und ruft dann fuse_main auf 
[2].

1) https://github.com/sahlberg/fuse-nfs/blob/master/fuse/fuse-nfs.c#L370
2) https://github.com/sahlberg/fuse-nfs/blob/master/fuse/fuse-nfs.c#L778
Gast #5025519
Jacob L. schrieb:
> Ich möchte gerne ein eigenes Virtuelles Laufwerk programmieren

Was du brauchst, ist ein eigenes Dateisystem - das kann unter Windows 
als Laufwerk auftreten oder unter Linux gemountet werden. Soll beides 
gehen (ist das nötig?), wäre es am einfachsten wenn es wie FAT32 
aussieht.

Georg
#5025608
Hallo Jacob,

ich habe noch kein eigenes neues Dateisystem gebaut!

In der Windows-Welt heißt Dein Suchbegriff:

https://en.wikipedia.org/wiki/Installable_File_System

Für Dein Anliegen ist es nötig, Code zu schreiben, der ein Minimum von 
API-Aufrufen bedienen kann.

Dazu gehört vermutlich
-Größe des freien Speicher zurückmelden
-Datein öffnen und schließen, Lese- und Schreibvorgänge ausführen
-Ordner anlegen und löschen

Nützlich wäre eine quellcodeoffene Beispielsimplementierung für 
irgendein Dateisystem:

https://en.wikipedia.org/wiki/Ext2Fsd

"Storage Zugriffe" klingt so, als ob Du mehrere Speichergeräte 
kombinieren willst.
"Datenbank abfragen" klingt wie ein Zugriff auf höhere Ebene, der 
normalerweise auf einem funktionierendem Dateisystem aufsetzt. Das würde 
Dein Projekt aber überflüssig machen.
Dein Anliegen suggeriert, dass Dein Dateisystem eine interne Art von 
Datenbankstruktur hat, die sich auf mehrere Datenträger "Storage" 
verteilt.

Das müsstest Du dann auch programmieren, nicht nur 
Datenbanktransaktionen auf einem herkömmlichen Dateisystem.
#5026029
Frueher gab es mal eine Firma, die hat Treiber Kits und Kurse angeboten. 
Die hiess Sysinternals und wurde mittlerweile von Microsoft gekauft. Die 
Kurse waren um die paar Tausend Pfund und die Zeit, die man brauchte 
fuer so einen Treiber, Kernel Treiber, lief um die 2 Monate fuer sehr 
gut eingearbeitete Spezialisten, bis nach oben offen fuer Neulinge. Das 
Schwierige ist der vermurkste Unterbau, der sich selbst in den Weg 
kommt, und das Zusammentragen der Informationen dazu. Dann benoetigt man 
auch noch einen Kerneldebugger, der glaub immer noch eine Einschubkarte 
ist.
Ich kann mich aber auch taeuschen.
OP (Firma: Privat) #5026726
Hallo,

vielen Dank für die vielen Anregungen und Tips.

Peter M. schrieb:
> "Storage Zugriffe" klingt so, als ob Du mehrere Speichergeräte
> kombinieren willst.
> "Datenbank abfragen" klingt wie ein Zugriff auf höhere Ebene, der
> normalerweise auf einem funktionierendem Dateisystem aufsetzt. Das würde
> Dein Projekt aber überflüssig machen.
> Dein Anliegen suggeriert, dass Dein Dateisystem eine interne Art von
> Datenbankstruktur hat, die sich auf mehrere Datenträger "Storage"
> verteilt.

Und Ja, es gibt mehrere Storage Systeme, die Verknüpfung der Daten ist 
aber in der Datenbank hinterlegt. Und diese Ganze Struktur würde ich 
aber gerne hinter einem virtuellen Dateisystem verbergen.

Ich werde es erstmal mit FUSE probieren und werde mich dann mal melden, 
wie es ausgegangen ist.

Gruß

Jacob
Gast #5026745
Das klingt für mich ein wenig nach AFS, bzw. OpenAFS... eine Datenbank 
hält die Informationen zum abgelegten Ordner, Rechte etc. bereit... der 
Benutzer sieht alle seine Dateien in seinen Ordner, physikalisch können 
diese dann verstreut über mehrere Platten / Server liegen.

Wird zusätzlicher Speicher benötigt, stellt man diesen über die 
Datenbank bereit...

Da OpenAFS opensource ist, kannst Du Dir die Sourcen mal anschauen...
Gast #5026785
Moin,
Clearcase hat so eine ähnliche Funktion.
Nennt sich, glaube ich, VOB. Kannst mal gucken ob Es dazu im Netz Infos 
gibt.  Da CC proprtitär ist könnte es schwer werden.

Gruss

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.