Поиск чистого способа монтирования каталога на одном диске HFS+ в качестве каталога на другом таком диске на той же машине.

Мне нужно легко смонтировать (и автоматически смонтировать, например, через fstab) каталог (папку) на одном диске, чтобы он отображался в командной строке и на уровне графического интерфейса как каталог на другом, на той же машине. Это делается для того, чтобы победить некоторое «умное» программное обеспечение, которое обнаруживает, что символические ссылки и псевдонимы не являются «настоящими» каталогами, и отказывается действовать на них.

В Linux это было бы тривиально легко, с:
mount --bind /path1/source_dir /path2/target_dir
Однако версия mount для Mac OS не поддерживает эту функцию привязки (в любой форме, включая mount -o bind, или mount -B), насколько я могу определить. Также кажется, что ни один из Macports, Homebrew или Fink не предоставляет портированную версию mount с такой опцией. Некоторые доступные более специализированные инструменты монтирования, похоже, также не связаны (например, xmount для образов дисков, а djmount для сетевых томов).

Чтобы было ясно, я не пытаюсь смонтировать диск или раздел как том или как локальный каталог или создать общий ресурс, который будет произвольно монтироваться разными пользователями на разных машинах. Скорее, я хочу смонтировать папку, принадлежащую и доступную для записи только определенному пользователю, на диске HFS+, как если бы это была папка на другом диске HFS+, локально, эффективно прозрачным способом, с теми же разрешениями и без безопасности. /проблемы целостности.

Неаккуратный обходной путь состоит в том, чтобы создать общий ресурс CIFS для папки, которую нужно смонтировать, и (вызвав пользовательский одноразовый вариант smb.conf) просто так ограничить его разрешения в Samba, чтобы он не был общедоступным и имел те же разрешения, что и у целевого местоположения, точно правильная маска файла и каталога и т. д.; затем монтируйте его таким образом. Но это будет неэффективно, так как будет использоваться отвратительный протокол обмена файлами Windows, а также создание видимого общего ресурса, который отображается как монтируемый том с сервера SMB для всех, кто может получить доступ к этой машине через SMB/CIFS (даже если они не могут на самом деле смонтировать его). Графический интерфейс Mac, вероятно, также будет представлять его как разделяемый том.

"...как если бы это была папка на другом диске HFS+..."
Да. Я не понимаю, почему вы мне это цитируете.
Два с половиной года спустя, я понятия не имею.
Странно, проблема с монтированием, да? Кажется, это должно быть тривиально для решения. На данный момент мне интересно, будет ли вообще работать компиляция утилиты монтирования GNU (или какой-либо другой) из исходного кода, поскольку это может быть какое-то ограничение на уровне файловой системы.

Ответы (1)

Чтобы подключить жесткий диск к пользовательской точке монтирования:

Вы можете сделать это с опцией diskutil mountи -mountPoint. Со страницы руководства:

смонтировать [только для чтения] [-mountPoint path] устройство

Смонтируйте один том. Если указано readOnly, то файловая система монтируется только для чтения, даже если базовая файловая система тома и/или устройство и/или носитель поддерживает запись; в него не может писать даже суперпользователь; это то же самое, что и опция rdonly для монтирования (8). Если указан -mountPoint, то этот путь, а не стандартный путь /Volumes/VolumeName, будет использоваться как представление содержимого файла тома; каталог по этому пути уже должен существовать.

Из man diskutil, раздел 'Глаголы'.

Синтаксис для монтирования в пользовательскую точку монтирования следующий:

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

Имейте в виду, что это /path/to/custom/mountpoint должен быть каталог , как и в случае с mount, и что ваш идентификатор/UUID/метка относятся к тому (т.е. /dev/diskXsYне /dev/diskX). Подключение к пользовательской точке монтирования не может быть выполнено с помощью diskutil mountDisk, и работает только с одним томом за раз.

Из моего ответа на Как смонтировать диск по UUID или LABEL в OS X El Capitan .

Я проверил это, «установив» USB-накопитель на внешний жесткий диск. В качестве примера,

$ 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

Как видите, /dev/disk2s1, или USB-32— это имя USB-накопителя, который я собираюсь подключить к жесткому диску, /dev/disk1s2или HDD-1T. Для этого воспользуйтесь опцией -mountPoint. Но сначала убедитесь, что есть целевой каталог для монтирования:

$ mkdir /Volumes/HDD-1T/mountpoint

А теперь, чтобы смонтировать:

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

Смонтированный диск появится в следующих местах: /Volumes, и /Volumes/HDD-1T/mountpointкак USB-32и mountpointсоответственно.

Обязательно размонтируйте ( diskutil umount) свой USB-32эквивалент перед повторным монтированием на вашем HDD-1Tэквиваленте.

Да, я уже делаю это все время (и это хорошо написанные инструкции). Однако это не относится к вопросу: «Мне нужно беспрепятственно смонтировать ... каталог (папку) на одном диске, чтобы он отображался ... как каталог на другом, на том же компьютере». Установка фактического тома не вызвала никаких проблем.
Могу ли я предложить вам рассмотреть возможность использования образа диска? Хотя это может быть громоздко и определенно не является «настоящим каталогом», он довольно близок к таковому и может быть смонтирован как том.
Не подходит для варианта использования. Это каталог, который требуется другому приложению, чтобы быть именно там, где оно «живет». В основном мне нужно два приложения для обмена данными, и оба они имеют жестко запрограммированные (разные) местоположения каталогов и не будут принимать символические ссылки или псевдонимы. Единственное известное мне решение — подделать их с помощью точки монтирования (т. е. заставить файловую систему сообщить им, что это каталог). Ну, или сделайте ту белиберду CIFS, о которой я уже упоминал. Или полагаться на какой-то постоянно работающий сценарий опроса, который копирует измененный файл из одного места в другое при изменении, но это может привести к поломке.
Я не шучу, что мне действительно нужно создать диск/каталог для монтирования drive2/directory2. Это совершенно рутинно в любой другой ОС на базе * n * x, просто бессмысленно отключено в MacOS по неизвестной причине (кроме большего количества вещей Apple «предполагать, что наши пользователи глупы»). :-)
В таком случае, боюсь, я не смогу вам помочь. На самом деле, я бы посчитал, что это больше проблема с программным обеспечением, которое вы используете (жестко запрограммированные пути), а не с MacOS.