Buscando una forma limpia de montar un directorio en una unidad HFS+ como un directorio en otra unidad similar en la misma máquina

Necesito montar sin problemas (y montar automáticamente, por ejemplo, a través de fstab) un directorio (carpeta) en una unidad para que aparezca en la línea de comandos y el nivel de GUI como un directorio en otro, en la misma máquina. Esto es para derrotar a algún software "inteligente" que detecta que los enlaces simbólicos y los alias no son directorios "reales" y se niega a actuar sobre ellos.

En Linux, esto sería trivialmente fácil, con:
mount --bind /path1/source_dir /path2/target_dir
Sin embargo, la versión de montaje de Mac OS no es compatible con esta funcionalidad de vinculación (en ninguna forma, incluidos mount -o bind, o mount -B), hasta donde puedo determinar. También parece que Macports, Homebrew o Fink no ofrecen una versión adaptada de la montura con esa opción. Algunas herramientas de montaje más especializadas disponibles tampoco parecen relacionarse (por ejemplo, xmount es para imágenes de disco y djmount es para volúmenes de red).

Para ser claros, no estoy tratando de montar un disco o partición como un volumen o como un directorio local, ni crear un recurso compartido para ser montado arbitrariamente por varios usuarios en varias máquinas. Más bien, quiero montar una carpeta, propiedad y escritura solo de un usuario en particular, en un disco HFS+ como si fuera una carpeta en otro disco HFS+, localmente, de una manera que sea efectivamente transparente, con los mismos permisos y sin seguridad. /problemas de integridad.

Una solución descuidada es crear un recurso compartido CIFS de la carpeta que se va a montar, y (llamando a una variante única personalizada de smb.conf) limitar sus permisos en Samba, de modo que no sea público y tenga la mismos permisos que la ubicación de destino, exactamente el archivo correcto y la máscara de directorio, etc.; luego montarlo de esa manera. Pero esto sería ineficiente, ya que estaría utilizando el protocolo de uso compartido de archivos de Windows, además de crear un recurso compartido visible que aparece como un volumen montable desde el servidor SMB, para cualquier persona que pueda acceder a esta máquina a través de SMB/CIFS (incluso si no pueden realmente montarlo). La GUI de Mac probablemente también lo representará como un volumen compartido.

"...como si fuera una carpeta en otro disco HFS+..."
Sí. No entiendo por qué me vuelves a citar esto.
Dos años y medio después, no tengo ni idea.
Aunque raro, problema de montaje, ¿eh? Esto parece que debería ser trivial de resolver. En este punto, me pregunto si compilar una utilidad de montaje GNU (o lo que sea) desde la fuente funcionaría, ya que puede ser algún tipo de limitación a nivel del sistema de archivos.

Respuestas (1)

Para montar un disco duro en un punto de montaje personalizado:

Puede hacer esto con diskutil mounty la -mountPointopción. De la página del manual:

montar el dispositivo [solo lectura] [ruta del punto de montaje]

Montar un solo volumen. Si se especifica readOnly, el sistema de archivos se monta como de solo lectura, incluso si el sistema de archivos y/o el dispositivo y/o los medios subyacentes del volumen admiten la escritura; incluso el superusuario no puede escribir en él; esto es lo mismo que la opción rdonly para montar (8). Si se especifica -mountPoint, entonces esa ruta, en lugar de la ruta estándar de /Volumes/VolumeName, se usará como la vista del contenido del archivo de volumen; ya debe existir un directorio en esa ruta.

De man diskutil, sección 'Verbos'.

La sintaxis para montar en un punto de montaje personalizado es la siguiente:

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

Tenga en cuenta que /path/to/custom/mountpoint debe ser un directorio , al igual que con mount, y que su identificador/UUID/etiqueta son específicos del volumen (es decir, /dev/diskXsYno /dev/diskX). El montaje en un punto de montaje personalizado no se puede realizar con diskutil mountDisk, y solo funciona con un único volumen a la vez.

De mi respuesta a Cómo montar un disco por UUID o ETIQUETA en OS X El Capitan .

He probado esto "montando" una memoria USB en un disco duro externo. Como ejemplo,

$ 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

Como puede ver, /dev/disk2s1o USB-32es el nombre de la memoria USB que voy a montar en el disco duro, /dev/disk1s2o HDD-1T. Para ello, haga uso de la -mountPointopción. Pero primero, asegúrese de que haya un directorio de destino para montar:

$ mkdir /Volumes/HDD-1T/mountpoint

Y ahora, a montar:

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

El disco montado aparecerá en las siguientes ubicaciones: /Volumes, y /Volumes/HDD-1T/mountpointcomo USB-32y mountpointrespectivamente.

Asegúrese de desmontar ( diskutil umount) su USB-32equivalente antes de volver a montar en su HDD-1Tequivalente.

Sí, ya lo hago todo el tiempo (y esas son instrucciones bien escritas). Sin embargo, esto no se relaciona con la pregunta: "Necesito montar sin problemas... un directorio (carpeta) en una unidad para que aparezca... como un directorio en otra, en la misma máquina". Montar un volumen real no ha sido ningún tipo de problema.
¿Puedo sugerirle que considere usar una imagen de disco? Aunque puede ser engorroso y definitivamente no es un "directorio real", es bastante parecido a uno y se puede montar como un volumen.
No se adapta al caso de uso. Es un directorio que otra aplicación requiere para estar exactamente donde "vive". Básicamente, necesito dos aplicaciones para compartir datos, y ambas tienen ubicaciones de directorio codificadas (diferentes) y no aceptarán enlaces simbólicos ni alias. La única solución que conozco es falsificarlos con un punto de montaje (es decir, hacer que el sistema de archivos les diga que es un directorio). Bueno, eso o hacer lo de CIFS que ya mencioné. O confíe en algún tipo de secuencia de comandos de sondeo siempre en ejecución que copia un archivo modificado de una ubicación a otra cuando se produce un cambio, pero eso sería propenso a romperse.
No estoy bromeando, realmente necesito crear una unidad/directorio para montar la unidad2/directorio2. Es completamente rutinario en todos los demás sistemas operativos basados ​​​​en * n * x, simplemente se deshabilitó sin sentido en MacOS sin ninguna razón conocida (aparte de más de las cosas de Apple "presume que nuestros usuarios son estúpidos"). :-)
En ese caso, me temo que no puedo ayudarte con esto. De hecho, consideraría que esto es más un problema con el software que está utilizando (rutas codificadas) en lugar de con MacOS.