Я могу поместить/tmp и/var/log в электронном диске на OS X?

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

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

20
задан 23.03.2010, 16:41

2 ответа

Править: Я просто собираюсь принять свой собственный ответ, поскольку он действительно решал одну часть проблемы для меня. Если кто-то отправляет что-то больше как - связывают в Linux, я приму тот ответ.

Чтобы поощрить больше ответов, я начну отвечать на свой собственный вопрос с тем, что я узнал.

Шаг 1 должен был смонтировать электронный диск при начальной загрузке каждый раз. Чтобы сделать это, я создаю сценарий удара и затем launchd запись для вызова сценария удара на начальной загрузке.

Запишите сценарий удара как это:

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. Эти три каталога являются всем symlinked в моей системе к/private/tmp,/private/var/log и/private/var/tmp. Когда я изменил символьные ссылки для указания в/Volumes/ramdisk/..., система не загрузится. Я ожидаю, что это вызвано тем, что во время начальной загрузки, что-то хочет/tmp и/var/log, ПРЕЖДЕ ЧЕМ мой com.my.ramdisk сценарий смонтирует электронный диск. Мне нужен способ смонтировать электронный диск прямо после того, как корень смонтирован, прежде чем что-либо еще будет работать.

Отметьте, Монтируете ли Вы/var/log (ядро, демон и другие критические журналы пространства пользователя) во временном пространстве, Вы потеряете его содержание в следующей перезагрузке. Это могло бы запретить Вашу способность диагностировать.

6
ответ дан 07.12.2019, 10:14

Вот сценарий для создания электронных дисков на 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

6
ответ дан 07.12.2019, 10:14

Теги

Похожие вопросы