РЕДАКТИРОВАТЬ: Я просто собираюсь принять свой собственный ответ, так как он решил одну часть проблемы для меня. Если кто-то напишет что-то более похожее на --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 (ядро, демон и другие важные журналы пользовательского пространства) во временном пространстве, вы потеряете его содержимое при следующей перезагрузке. Это может помешать вашей способности диагностировать.