РЕДАКТИРОВАТЬ: Я просто собираюсь принять свой собственный ответ, так как он решил одну часть проблемы для меня. Если кто-то напишет что-то более похожее на --bind в Linux, я приму этот ответ.
Стремясь побудить больше ответов, я начну отвечать на свой собственный вопрос с тем, что я узнал.
Шаг 1 - каждый раз подключать виртуальный диск при загрузке. Для этого я создаю сценарий bash, а затем запись launchd для вызова сценария bash при загрузке.
Напишите bash-скрипт так:
RD=ramdisk
if [ ! -e "/Volumes/$RD" ]; then
diskutil erasevolume HFS+ "$RD" `hdiutil attach -nomount`
fi
mkdir -p /Volumes/$RD/private/tmp
mkdir -p /Volumes/$RD/private/var/log
mkdir -p /Volumes/$RD/private/var/tmp
Затем вызовите его при загрузке, добавив его в launchd, создав файл /Library/LaunchDaemons/com.my.ramdisk.plist со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.my.ramdisk</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/ramdisk.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
То, где я застрял, - это способ символической ссылки или монтирования каталогов внутри виртуального диска в /tmp, /var /log и /var /tmp. Эти три каталога все связаны в моей системе с /private /tmp, /private /var /log и /private /var /tmp. Когда я изменил символические ссылки, чтобы они указывали на /Volumes /ramdisk /..., система не загружалась. Я ожидаю, что это потому, что во время загрузки что-то хочет /tmp и /var /log ДО сценария my com.my.ramdisk монтирует виртуальный диск. Мне нужен способ монтирования виртуального диска сразу после монтирования root, прежде чем что-либо еще запустится.
Примечание. Если вы смонтируете /var /log (ядро, демон и другие важные журналы пространства пользователя) во временном пространстве, вы потеряете его содержимое при следующей перезагрузке. Это может помешать вашей способности диагностировать.