Forum: PC-Programmierung Eigenes Virtuelles Laufwerk Programmieren


von Jacob L. (Firma: Privat) (jacoblange)


Lesenswert?

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

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?


von Joachim S. (oyo)


Lesenswert?

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.

von Daniel A. (daniel-a)


Lesenswert?

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

von Georg (Gast)


Lesenswert?

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

von Peter M. (r2d3)


Lesenswert?

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.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

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.

von Jacob L. (Firma: Privat) (jacoblange)


Lesenswert?

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

von Tux (Gast)


Lesenswert?

Iirc kann man webdav Server unter Windows als Laufwerk einhängen. Unter 
Linux ebenso.

von Skyper (Gast)


Lesenswert?

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...

von Freddy (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.