VirtualBox mit Win10-Host / Linux-Gast, wie Dateien mit vollständiger Unix-Semantik gemeinsam genutzt werden

528
R Bergmair

Ich habe Windows 10 auf einem Laptop, auf dem VirtualBox ausgeführt wird, auf dem ein Linux-Gast ausgeführt wird.

Ich programmiere viel für die Linux-Umgebung und arbeite mit Quellcode-Repositorys, die sich in einem FS / Verzeichnisbaum befinden, der vom Windows-Host und vom Linux-Gast gemeinsam genutzt wird, z. B. Bearbeiten mit SublimeText unter Windows, aber Kompilieren, Testen, Versionskontrolle usw. in ein an den Linux-Gast angeschlossenes Terminal.

Aus verschiedenen Gründen brauche ich die Verzeichnisse, in denen die Quellcode-Repositorys gehostet werden, um vollständige Unix-Semantik zu ermöglichen, dh Uid / GID für Besitzer festlegen, Berechtigungsbits festlegen, Fifos, Symlinks usw. erstellen.

Es ist mir egal, ob diese Funktionen nicht sinnvoll von Windows und Linux gemeinsam genutzt werden. Ich brauche diese Dinge nur, um auf Linux-Seite klar definiert zu sein. Auf der Windows-Seite muss ich nur den Dateiinhalt lesen / schreiben können.

Ich möchte, dass die Dateien auf der Windows- / Host-Seite gehostet werden, nicht auf dem Linux-Gast, da ich nicht den Linux-Gast hochfahren lassen muss, damit die Dateien unter Windows sichtbar / zugänglich werden.

Wie kann ich so etwas einrichten?

Ich habe verschiedene Dinge ausprobiert.

Es scheint, dass vboxsf nur einen kleinen Teil der Unix-Funktionen bietet. Bitte korrigieren Sie mich, wenn ich falsch liege.

Ich habe posixovl auf einem vboxsf-Mount ausprobiert, kann aber scheinbar keine einfache Operation wie "mkdir mydir; rm -rf mydir" unterstützen. Ein solcher Vorgang schlägt fehl, wenn "rm: 'mydir' nicht entfernt werden kann: Verzeichnis nicht leer". Meine Diagnose des Problems lautete, dass eine Datei "somedir / .pxovl" erstellt wird, um die Berechtigungsbits und ähnliches von Somedir auf der unteren FS aufzubewahren. Auf der oberen FS ist diese Datei nicht sichtbar, daher kann "rm -rf" die Datei nicht loswerden. Wenn "rm -rf" versucht, "rmdir mydir" im oberen FS zu starten, wird dies einen Versuch im unteren FS auslösen, der fehlschlägt, da die Datei ".pxovl" noch vorhanden ist. Bitte korrigieren Sie mich, wenn es eine Lösung gibt, aber das macht mich verrückt.

Ich habe versucht, ein Verzeichnis als Netzwerkfreigabe auf der Fensterseite einzurichten und dann über mount.cifs unter Linux zu mounten. Es scheint, dass ein solches Mount auch keine Unix-Funktionen bietet und in diesem Sinne ähnliche Einschränkungen wie bei vboxsf hat, und ich kann keine Optionen finden, die irgendeine Art von Emulation oder ähnliches zulassen.

Es ist mir eingefallen, dass möglicherweise Programme auf der Windows-Host-Seite eingerichtet werden können, die echte Unix-Semantik bieten und eine Art Emulation von Unix-Funktionen wie einen NFS-Server oder einen anderen Server für gemeinsam genutzte Dateisysteme im Netzwerk ausführen Ich kann scheinbar keine finden.

Es ist mir auch aufgefallen, dass Overlay-Dateisysteme ein nützliches Werkzeug sein könnten, um eine solche Lösung zu erreichen, aber nicht wirklich verstehen können, wie eine solche Lösung aussehen könnte.

Irgendwelche Ideen?

0

2 Antworten auf die Frage

0
Attie

Leider betrachtet Windows Dateien nicht als dieselben Metadaten wie Linux- / Unix-Systeme. Dies führt zu Kopfschmerzen, die Sie derzeit erleben.

Meine Lösung (leider für Sie) wäre, die Dateien auf der Linux-VM zu speichern und CIFS / Samba zu verwenden, um sie mit dem Windows-Host zu teilen - ich mache das oft.

Ich kenne keinen Weg, um die Transparenz und Zuverlässigkeit zu erreichen, die Sie beim Hosten der Dateien in einem Windows-Dateisystem (nicht Unix) suchen.


Es lohnt sich vielleicht, sich mit dem Windows-Subsystem für Linux zu beschäftigen . Sie haben in letzter Zeit Fortschritte gemacht (zB: Chmod / Chown WSL Improvements ), so dass Sie möglicherweise einen NFS-Server oder etwas unter WSL installieren können, um das zu erreichen, was Sie wollen, aber wenn NFS unter Linux (im Internet ) implementiert ist Kernel) ist dies wahrscheinlich nicht in Frage.

Danke für den Hinweis zur WSL. Ich verwende bereits WSL, wusste aber nicht, dass es jetzt diese Funktion hatte, um die Semantik von Unix-Dateisystemen in freigegebenen Ordnern zu emulieren. Ich denke, das ist ein Schritt in die richtige Richtung, wenn ich nur einen Weg finden kann, einen Dateiserver in WSL zu hosten. Ich denke, es muss kein traditioneller Dateiserver sein, da Dinge wie SSHFS existieren. Ich werde in dieser Richtung noch etwas graben / experimentieren. R Bergmair vor 6 Jahren 0
0
R Bergmair

Es stellte sich heraus, dass ich durch eine Kombination aus dem, was ich wollte, nahe kam

  • WSL mit den neuen drvfs-Funktionen, bei denen bestimmte Aspekte der Unix-Semantik unter WSL emuliert werden ( metadataOption zum Einhängen von drvfs);
  • sshd, das auf dieser WSL auf dem Windows-Host ausgeführt wird;
  • sshfs, die auf dem VirtualBox-Gast unter Linux ausgeführt werden.

Die Lösung war:

  • Ubuntu für Windows (WSL) installieren.
  • Aktivieren des kennwortlosen Sudo unter WSL über die Zeile %sudo ALL=(ALL:ALL) NOPASSWD: ALLin der /etc/sudoersWSL.
  • Wenn Sie den Befehl "bash -c 'sudo /etc/init.d/ssh start'"unter Windows mithilfe der Registrierung auf Autostart setzen, wird der WSL-basierte OpenSSH-Server automatisch gestartet, sobald ich mich anmelde.
  • Konfigurieren der Windows Defender-Firewall, um Verbindungen zu Port 22 zuzulassen.
  • Einrichten von SSH-Schlüsseln, um ein kennwortloses Anmelden vom Linux-Gast beim WSL-basierten SSH-Server zu ermöglichen.
  • Mit wsl.confden Optionen zu injizieren, metadata,umask=0002,fmask=0113wenn drvfs auf WSL Montag.
  • Auf dem Linux - Gast, setzt user_allow_otherin/etc/fuse.conf
  • Auf dem Linux-Gast, sudo -u myuser sshfs -o allow_other myuser@windowshost:/mnt/c /mnt/cum das C-Drive zu teilen.
  • Stellen Sie sicher, dass die UID für myuserWSL und Linux identisch ist.

ERGEBNIS: Auf diese Weise werden Dateinamen und Dateiinhalte von Windows, WSL und Linux auf der Gast-VM gemeinsam genutzt, zusätzliche Unix-Funktionen wie Berechtigungsbits und Links werden emuliert und diese emulierten Funktionen werden von WSL und Linux gemeinsam genutzt. Aber:

  • EINSCHRÄNKUNG: Wenn ich eine Datei erstelle, auch wenn sie von einem anderen Benutzer als myuserdem Linux-Gast ausgeführt wird, gehört sie dem Besitzer myuser.
  • EINSCHRÄNKUNG: FIFOs werden nicht unterstützt.
  • Ich kann mit diesen Einschränkungen leben, da ich keine FIFOs brauche, und es interessiert mich nur, was mit einer Datei geschieht, mit der ich unter dem Benutzer arbeite, den ich für die Softwareentwicklung auf meinem Laptop verwende.