Suche nach einer sauberen Möglichkeit, ein Verzeichnis auf einem HFS+-Laufwerk als Verzeichnis auf einem anderen solchen Laufwerk auf derselben Maschine bereitzustellen

Ich muss ein Verzeichnis (Ordner) auf einem Laufwerk nahtlos mounten (und automatisch mounten, z. B. über fstab), um auf der Befehlszeilen- und GUI-Ebene als Verzeichnis auf einem anderen Laufwerk auf demselben Computer angezeigt zu werden. Dies dient dazu, einige "intelligente" Software zu besiegen, die erkennt, dass symbolische Links und Aliase keine "echten" Verzeichnisse sind, und sich weigert, darauf zu reagieren.

Unter Linux wäre dies trivial einfach, mit:
mount --bind /path1/source_dir /path2/target_dir
Allerdings unterstützt die Mount-Version von Mac OS diese Bindungsfunktion nicht (in irgendeiner Form, einschließlich mount -o bind, oder mount -B), soweit ich feststellen kann. Es scheint auch, dass keiner von Macports, Homebrew oder Fink eine portierte Version von mount mit einer solchen Option anbietet. Einige verfügbare, spezialisiertere Mount-Tools scheinen auch nicht in Beziehung zu stehen (z. B. xmount ist für Disk-Images und djmount für Netzwerk-Volumes).

Um es klar zu sagen, ich versuche nicht, eine Festplatte oder Partition als Volume oder als lokales Verzeichnis zu mounten, noch eine Freigabe zu erstellen, die willkürlich von verschiedenen Benutzern auf verschiedenen Computern gemountet werden soll. Vielmehr möchte ich einen Ordner, der nur einem bestimmten Benutzer gehört und beschreibbar ist, auf einer HFS+-Festplatte bereitstellen, als wäre es ein Ordner auf einer anderen HFS+-Festplatte, lokal, auf eine Weise, die effektiv transparent ist, mit denselben Berechtigungen und ohne Sicherheit /Integritätsprobleme.

Eine schlampige Problemumgehung besteht darin, eine CIFS-Freigabe des Ordners zu erstellen, der gemountet werden soll, und (durch Aufrufen einer benutzerdefinierten, einmaligen Variante von smb.conf) seine Berechtigungen in Samba einfach so einzuschränken, dass er nicht öffentlich ist und die hat gleiche Berechtigungen wie der Zielort, genau die richtige Datei- und Verzeichnismaske etc.; dann so montieren. Dies wäre jedoch ineffizient, da es das blöde Windows-Filesharing-Protokoll verwenden und eine sichtbare Freigabe erstellen würde, die als ein montierbares Volume vom SMB-Server für jeden angezeigt wird, der über SMB/CIFS auf diesen Computer zugreifen kann (auch wenn dies nicht möglich ist). tatsächlich montieren). Die Mac-GUI wird es wahrscheinlich auch als freigegebenes Volume darstellen.

"...als wäre es ein Ordner auf einer anderen HFS+-Festplatte..."
Ja. Ich verstehe nicht, warum Sie mir das zurück zitieren.
Zweieinhalb Jahre später, keine Ahnung.
Seltsam, Mount-Problem, huh? Dies scheint trivial zu lösen sein. An diesem Punkt frage ich mich, ob das Kompilieren eines GNU- (oder was auch immer) Mount-Dienstprogramms aus dem Quellcode überhaupt funktionieren würde, da es sich möglicherweise um eine Art Einschränkung auf Dateisystemebene handelt.

Antworten (1)

So mounten Sie eine Festplatte an einem benutzerdefinierten Mountpoint:

diskutil mountSie können dies mit und der Option tun -mountPoint. Aus der Manpage:

mount [schreibgeschützt] [-mountPoint-Pfad] Gerät

Mounten Sie ein einzelnes Volume. Wenn readOnly angegeben ist, wird das Dateisystem schreibgeschützt gemountet, selbst wenn das zugrunde liegende Dateisystem und/oder Gerät und/oder Medium des Volumes Schreiben unterstützt; selbst der Superuser darf nicht darauf schreiben; Dies ist dasselbe wie die rdonly Option zum Einhängen (8). Wenn ein -mountPoint angegeben ist, wird dieser Pfad anstelle des Standardpfads von /Volumes/VolumeName als Ansicht des Inhalts der Volume-Datei verwendet; ein Verzeichnis unter diesem Pfad muss bereits vorhanden sein.

Aus man diskutil, Abschnitt 'Verben'.

Die Syntax zum Mounten an einem benutzerdefinierten Mountpoint lautet wie folgt:

diskutil mount -mountPoint /path/to/custom/mountpoint [volume (identifier/UUID/label)]

Denken Sie daran, dass es /path/to/custom/mountpoint sich um ein Verzeichnis handeln muss , genau wie bei mount, und dass Ihre Kennung/UUID/Label spezifisch für das Volume sind (dh /dev/diskXsYnicht /dev/diskX). Das Mounten an einem benutzerdefinierten Mountpoint kann nicht mit durchgeführt werden diskutil mountDiskund funktioniert nur mit jeweils einem Volume.

Aus meiner Antwort auf So mounten Sie die Festplatte per UUID oder LABEL in OS X El Capitan .

Ich habe dies getestet, indem ich einen USB-Stick auf einer externen Festplatte "gemountet" habe. Als Beispiel,

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh SSD           499.4 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk1
   1:                        EFI EFI                     209.7 MB   disk1s1
   2:                  Apple_HFS HDD-1T                  999.8 GB   disk1s2
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.6 GB    disk2
   1:               Windows_NTFS USB-32                  31.6 GB    disk2s1

Wie Sie sehen können, ist /dev/disk2s1, oder USB-32der Name des USB-Sticks, den ich auf der Festplatte mounten werde, /dev/disk1s2, oder HDD-1T. Nutzen Sie dazu die -mountPointOption. Stellen Sie jedoch zuerst sicher, dass es ein Landing-Verzeichnis gibt, in das gemountet werden kann:

$ mkdir /Volumes/HDD-1T/mountpoint

Und jetzt zum montieren:

$ diskutil mount -mountPoint /Volumes/HDD-1T/mountpoint /dev/disk1s2

Die bereitgestellte Festplatte wird an den folgenden Orten angezeigt: /Volumes, und /Volumes/HDD-1T/mountpointals bzw.USB-32mountpoint

Stellen Sie sicher, dass Sie Ihr Äquivalent unmounten ( diskutil umount) , bevor Sie es erneut auf Ihrem Äquivalent mounten.USB-32HDD-1T

Ja, das mache ich schon die ganze Zeit (und das sind gut geschriebene Anleitungen). Dies bezieht sich jedoch nicht auf die Frage: "Ich muss ... ein Verzeichnis (Ordner) auf einem Laufwerk nahtlos mounten, damit es ... als Verzeichnis auf einem anderen Laufwerk auf demselben Computer angezeigt wird." Das Mounten eines tatsächlichen Volumes war überhaupt kein Problem.
Darf ich vorschlagen, dass Sie erwägen, ein Disk-Image zu verwenden? Obwohl es umständlich und definitiv kein "echtes Verzeichnis" sein mag, ist es einem ziemlich ähnlich und kann als Volume gemountet werden.
Passt nicht zum Anwendungsfall. Es ist ein Verzeichnis, das eine andere App benötigt, um genau dort zu sein, wo sie "lebt". Ich brauche grundsätzlich zwei Apps, um Daten zu teilen, und beide haben fest codierte (unterschiedliche) Verzeichnisspeicherorte und akzeptieren keine Symlinks oder Aliase. Die einzige Lösung, die ich kenne, besteht darin, sie mit einem Einhängepunkt vorzutäuschen (dh das Dateisystem ihnen mitteilen zu lassen, dass es sich um ein Verzeichnis handelt). Nun, das oder das blöde CIFS-Ding, das ich bereits erwähnt habe. Oder verlassen Sie sich auf eine Art ständig laufendes Polling-Skript, das eine geänderte Datei bei einer Änderung von einem Speicherort an einen anderen kopiert, aber das wäre bruchanfällig.
Ich scherze nicht, dass ich wirklich ein Laufwerk/Verzeichnis erstellen muss, um Laufwerk2/Verzeichnis2 zu mounten. Es ist völlig Routine in jedem anderen * n * x-basierten Betriebssystem, es wurde nur in MacOS ohne bekannten Grund sinnlos deaktiviert (außer mehr von Apples "Vermute, dass unsere Benutzer dumm sind"). :-)
In diesem Fall kann ich Ihnen leider nicht weiterhelfen. Tatsächlich würde ich dies eher als Problem mit der von Ihnen verwendeten Software (fest codierte Pfade) als mit MacOS betrachten.