filesystem mounten

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.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

filesystem mounten

Beitragvon roschi » Samstag 22. November 2008, 21:15

hallo!

ich habe mir gedacht, man koennte ja ein file-object (``gzip.GzipFile`` oder ``bz2.BZ2File``) in dem sich der inhalt einer partition befindet (laufwerk im raw-mode ausgelesen - wie mit 'dd'), als laufwerk einbinden. am wichtigsten ist eine moeglichkeit unter windows, aber ich nehme natuerlich auch vorschlaege fuer linux entgegen. hat vielleicht die 'win32api' funktionen dafuer?

ist, wenn ja, wie, das moeglich?

lg
roschi
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: filesystem mounten

Beitragvon Leonidas » Samstag 22. November 2008, 21:45

roschi hat geschrieben:ich habe mir gedacht, man koennte ja ein file-object (``gzip.GzipFile`` oder ``bz2.BZ2File``) in dem sich der inhalt einer partition befindet (laufwerk im raw-mode ausgelesen - wie mit 'dd'), als laufwerk einbinden.

Prinzipiell ja, da würde man einen "Dateisystem-Treiber" (ist allerdings kein richtiger Treiber sondern ein Userspace-Programm, womit du dann auch Python nutzen könntest) schreiben und die Datei mit FUSE einbinden. Dieser Treiber würde den Inhalt der Datei (da wäre ja nur eine Datei) als Block-Device darstellen, was man dann mit ``mount`` einbinden könnte. In der Theorie klingt das zumindest machbar.

roschi hat geschrieben:hat vielleicht die 'win32api' funktionen dafuer?

Puh! Ich denke unter Windows geht das nicht so einfach. Du könntest versuchen herauszufinden wie SftpDrive & Co das machen - vielleicht wird das dort über einen echten Treiber abgewickelt. Wird allerdings wohl wesentlich schwerer zu implementieren sein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Samstag 22. November 2008, 22:10

hallo!

erstmal vielen dank fuer die schnelle antwort.

Leonidas hat geschrieben:Prinzipiell ja, da würde man einen "Dateisystem-Treiber" (ist allerdings kein richtiger Treiber sondern ein Userspace-Programm, womit du dann auch Python nutzen könntest) schreiben und die Datei mit FUSE einbinden. Dieser Treiber würde den Inhalt der Datei (da wäre ja nur eine Datei) als Block-Device darstellen, was man dann mit ``mount`` einbinden könnte. In der Theorie klingt das zumindest machbar.
und in der praxis?

Leonidas hat geschrieben:Puh! Ich denke unter Windows geht das nicht so einfach. Du könntest versuchen herauszufinden wie SftpDrive & Co das machen - vielleicht wird das dort über einen echten Treiber abgewickelt. Wird allerdings wohl wesentlich schwerer zu implementieren sein.
ich hab mir gedacht, ich schau mir das mal bei 'TrueCrypt' an. das ist ja opensource. gesagt - getan: source-code geladen und in den 'driver'-ordner geschaut... ich versteh gar nichts! kannst du mir nicht ein paar infos darueber geben, wie man einen solchen treiber schreibt? geht das ueberhaupt in python? ein paar grundlagen und denkanstoeße waeren nicht schlecht. es muss eben, wie gesagt, vorrangig unter windows laufen.

lg
roschi
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Samstag 22. November 2008, 22:13

Man kann unter GNU/Linux mithilfe des "Loop" Devices Dateien wie Block Devices behandeln lassen. Wird beispielsweise bei dem Dateisystem "cramfs" benutzt, mitunter bei sogenannten "initrd" Dateien (diese werden genutzt um den Kernel Module zugänglich zu machen beim Booten. Distributionen verlassen sich oftmals auf initrd's, um den Kernel Dateisystem Treiber zugänglich zu machen, ohne die er nicht auf die Platte zugreifen könnte, auf der die Module eigentlich liegen). Das sollte sich mit Gzip Dateien auch machen lassen, aber cramfs existiert bereits, ist frei und hat Datenkompression integriert.

Unter Windows könnte die Sache sich natürlich schwieriger gestalten, aber bei cramfs hast du wohl noch die besten Chancen.
BlackJack

Beitragvon BlackJack » Samstag 22. November 2008, 22:30

Also erst einmal eignen sich mit gzip oder bzip2 komprimierte Abbilder nicht wirklich zum "mounten" weil man nicht wahlfrei auf die Daten zugreifen kann, sondern das ganze Abbild entpacken muss, mindestens bis zu dem Block auf den zugegriffen werden soll. Also muss die Partition komplett in den Arbeitsspeicher passen.

Ansonsten gibt's unter Linux eine Python-Anbindung an `FUSE`, womit man "Dateisystemtreiber" in Python implementieren kann.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Samstag 22. November 2008, 22:56

BlackJack hat geschrieben:Also erst einmal eignen sich mit gzip oder bzip2 komprimierte Abbilder nicht wirklich zum "mounten" weil man nicht wahlfrei auf die Daten zugreifen kann, sondern das ganze Abbild entpacken muss, mindestens bis zu dem Block auf den zugegriffen werden soll. Also muss die Partition komplett in den Arbeitsspeicher passen.
stimmt - :evil:
kannst du mir dann eine andere art empfehlen, partitionen zu komprimieren und in eine datei zu speichern, um sie von dort dann zu mounten oder sie wiederherzustellen?

BlackJack hat geschrieben:Ansonsten gibt's unter Linux eine Python-Anbindung an `FUSE`, womit man "Dateisystemtreiber" in Python implementieren kann.
das habe ich gesehen. ich habe mir gerade mal 'gmailfs' angeschaut, und finde, das das schon ein bisschen in diese richtung geht. allerdings wird dort ja irgendwas an google gesendet, um die aktionen auszufuehren, und nicht in einer datei rumgeschrieben.

str1442 hat geschrieben:Man kann unter GNU/Linux mithilfe des "Loop" Devices Dateien wie Block Devices behandeln lassen. Wird beispielsweise bei dem Dateisystem "cramfs" benutzt, mitunter bei sogenannten "initrd" Dateien (diese werden genutzt um den Kernel Module zugänglich zu machen beim Booten. Distributionen verlassen sich oftmals auf initrd's, um den Kernel Dateisystem Treiber zugänglich zu machen, ohne die er nicht auf die Platte zugreifen könnte, auf der die Module eigentlich liegen). Das sollte sich mit Gzip Dateien auch machen lassen, aber cramfs existiert bereits, ist frei und hat Datenkompression integriert.

Unter Windows könnte die Sache sich natürlich schwieriger gestalten, aber bei cramfs hast du wohl noch die besten Chancen.
geht aber auch nur unter linux und ich moechte ja am liebsten selber machen :)
trotzdem vielen dank.

lg
roschi
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. November 2008, 23:01

roschi hat geschrieben:
Leonidas hat geschrieben:In der Theorie klingt das zumindest machbar.
und in der praxis?

Also sofern man via FUSE Dateien erstellen kann, die ``mount`` als loop-Dateisysteme akzeptiert, und davon gehe ich ja mal aus dann sollte das gehen.

roschi hat geschrieben:ich hab mir gedacht, ich schau mir das mal bei 'TrueCrypt' an. das ist ja opensource. gesagt - getan: source-code geladen und in den 'driver'-ordner geschaut... ich versteh gar nichts! kannst du mir nicht ein paar infos darueber geben, wie man einen solchen treiber schreibt? geht das ueberhaupt in python? ein paar grundlagen und denkanstoeße waeren nicht schlecht. es muss eben, wie gesagt, vorrangig unter windows laufen.

In Python unter Windows? Schätze gar nicht, denn der Treiber müsste im Kernel-Mode laufen und das wird man keinen Python-Interpreter nutzen können.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. November 2008, 23:04

roschi hat geschrieben:kannst du mir dann eine andere art empfehlen, partitionen zu komprimieren und in eine datei zu speichern, um sie von dort dann zu mounten oder sie wiederherzustellen?

Partitionen mit dd sind schon ok (vorrausgesetzt die Partitionen haben keine Fehler, dann sollte man etwas anderes als das normale dd verwenden), du brauchst eben ein Kompressionsverfahren mit Random Access. Vielleicht hilft der Artikel ja weiter.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Samstag 22. November 2008, 23:16

Leonidas hat geschrieben:
roschi hat geschrieben:kannst du mir dann eine andere art empfehlen, partitionen zu komprimieren und in eine datei zu speichern, um sie von dort dann zu mounten oder sie wiederherzustellen?

Partitionen mit dd sind schon ok
aber da wird doch auch nicht-belegter speicher mitkopiert. wenn ich eine partition mit 20 GB habe, aber nur 5 GB belegt sind, dann kopiert er 20 GB. das will ich ja gerade vermeiden.

zu deinem artikel:
ja, sowas suche ich, aber dafuer gibt es ja keine implementation in python. und um eine zu schreiben, habe ich es noch nicht genau genug verstanden. außerdem nuetzt mir das ja noch nichts, wenn ich unter windows keinen treiber schreiben kann, mit dem ich dann das laufwerk einbinden kann.

lg
roschi
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. November 2008, 23:26

roschi hat geschrieben:
Leonidas hat geschrieben:
roschi hat geschrieben:kannst du mir dann eine andere art empfehlen, partitionen zu komprimieren und in eine datei zu speichern, um sie von dort dann zu mounten oder sie wiederherzustellen?

Partitionen mit dd sind schon ok
aber da wird doch auch nicht-belegter speicher mitkopiert. wenn ich eine partition mit 20 GB habe, aber nur 5 GB belegt sind, dann kopiert er 20 GB. das will ich ja gerade vermeiden.

Mit Kompression sollte das kein so großes Problem sein. Unter Linux kann man es eben deswegen so einfach mounten, weil man Partionen direkt aus Dateien einbinden kann. Wenn es dir nur um die Daten geht und du auf sonderliche Metadaten keinen Wert legst, dannst du auch alles in eine Zipdatei schreiben (Zip, da man in Nicht-Solid Zip-Archiven direkt Dateien rausholen kann) und via GVFS einbinden und dann via FUSE mounten, so dass auch Applikationen die kein GVFS unterstützen darauf zugreifen können. Dann hast du dein Problem mit Null Zeilen Python-Code gelöst (na wenn ein 0 Zeilen langes Programm nicht pythonisch ist), weil alles schon implementiert ist.

roschi hat geschrieben:außerdem nuetzt mir das ja noch nichts, wenn ich unter windows keinen treiber schreiben kann, mit dem ich dann das laufwerk einbinden kann.

Die Lösung ist ganz einfach. Windows-Support vergessen. Spaß beiseite, aber ich bezweifle dass du unter Windows mit Python da irgendetwas erreichen kannst. Kannst ja gucken wie SftpDrive das macht, denn möglich ist es ja durchaus. Aber eben nicht platformunabhängig.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Samstag 22. November 2008, 23:35

@Leonidas:
plattformunabhaengig muss es ja auch nicht sein.
ich koennte fuer beide systeme verschiedene varianten implementieren.
wie soll ich nachschauen, wie 'sftpdrive' das macht? das ist doch closed-source.
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. November 2008, 23:54

roschi hat geschrieben:wie soll ich nachschauen, wie 'sftpdrive' das macht? das ist doch closed-source.

Es gibt Debugger mit denen du feststellen kannst welche API-Calls da verwendet werden - oder fragst einfach die Entwickler. Ansonsten suchst du dir ein Programm mit offenen Quellen, vielleicht macht TrueCrypt das so ähnlich, weiß ich nicht. SftpDrive bindet jedenfalls SFTP-Freigaben als Festplatte im Explorer ein und das schaut auch nach dem besten Weg aus.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Beitragvon lunar » Sonntag 23. November 2008, 00:22

str1442 hat geschrieben:Wird beispielsweise bei dem Dateisystem "cramfs" benutzt

cramfs ist ein normales Dateisystem, das man auf jeder Art von Blockgerät erzeugen kann, sei es ein Loopback-Gerät oder ein "echtes" Gerät. cramfs hat mit dem Loopback-Gerät erstmal nichts zu tun.

mitunter bei sogenannten "initrd" Dateien

Initrds werden nicht als Loop-Gerät angesprochen, sondern als Ramdisk. Der Kernel könnte das gar nicht, da die initrd beim Laden des Kernels bereits im Speicher liegt. Loopback-Geräte werden lediglich dazu genutzt, die initrd zu erzeugen. Allerdings sind initrds veraltet, moderner ist initramfs. Das sind dann normale cpio-Archive.

Die win32api bietet für Dateisystemtreiber mit Sicherheit keine Funktionen an, da Dateisystemtreiber unter Windows im Kernelspace laufen, während win32api der Userspace-Teil von Windows ist. Mit Python ist da unter Windows wenig zu machen.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Sonntag 23. November 2008, 10:47

Leonidas hat geschrieben:
roschi hat geschrieben:wie soll ich nachschauen, wie 'sftpdrive' das macht? das ist doch closed-source.

Es gibt Debugger mit denen du feststellen kannst welche API-Calls da verwendet werden - oder fragst einfach die Entwickler. Ansonsten suchst du dir ein Programm mit offenen Quellen, vielleicht macht TrueCrypt das so ähnlich, weiß ich nicht. SftpDrive bindet jedenfalls SFTP-Freigaben als Festplatte im Explorer ein und das schaut auch nach dem besten Weg aus.
na wer sagts denn:
http://chitchat.at.infoseek.co.jp/vmware/vdk.html#top

ich habe es mit floppy-images getestet - und das klappt einwandfrei!
ich verstehe zwar den quellcode des drivers nicht (er ist ja auch in C geschrieben :(), aber wenigstens habe ich jetzt schonmal was quelloffenes! mein ziel ist es ja, das so umzubauen, dass ich eine gute kompression nutzen kann, die aber trotzdem 'random access' erlaubt. koenntet ihr mir eventuell sagen, wie ich das hinbekommen koennte? das o.g. tool ist ja auf jeden fall schon fast das, was ich suche. es fehlt eben nur noch die kompression.

lg
roschi
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 23. November 2008, 11:02

Würde es nicht reichen, die NTFS-Kompression einzuschalten?
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]