20

Для некритических систем Linux я часто перемещаю такие вещи, как /tmp и /var /log в tmpfs, чтобы сэкономить на записи на диск. Я делал это в течение года или около того, и если мне когда-нибудь понадобятся журналы при перезагрузках, я просто закомментирую строку в /etc /fstab, а затем начну отладку.

В любом случае, я хотел бы сделать то же самое на OS X. Я видел сообщения о создании виртуального диска для OS X, но я ищу более постоянное решение, которое работает при каждой загрузке. Я всегда хочу, чтобы /tmp и /var /log монтировались на виртуальном диске, с возможностью отключить это с помощью небольшого редактирования из командной строки в vi, если это необходимо.

2 ответа2

7

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

5

Вот скрипт для создания виртуальных дисков на OS X. Извините, он не отвечает на ваш вопрос. Вы можете использовать это для создания чего-то, что запускается при загрузке, а затем монтирует /tmp и /var /log.

#!/bin/bash  
ramfs_size_mb=1024  
mount_point=~/volatile  

ramfs_size_sectors=$((${ramfs_size_mb}*1024*1024/512))  
ramdisk_dev=`hdid -nomount ram://${ramfs_size_sectors}`  
newfs_hfs -v 'Volatile' ${ramdisk_dev}  
mkdir -p ${mount_point}  
mount -o noatime -t hfs ${ramdisk_dev} ${mount_point}  

echo "remove with:"  
echo "umount ${mount_point}"  
echo "diskutil eject ${ramdisk_dev}"  

От @salvatore http://pastie.textmate.org/pastes/1417478/text?key=igcxuzqqvlmlbavxooj2uw

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .