web-dev-qa-db-ja.com

/ tmpと/ var / logをOS XのRAMディスクに入れることはできますか?

重要でないLinuxシステムの場合、ディスクへの書き込みを節約するために、/ tmpや/ var/logなどをtmpfsに移動することがよくあります。私はこれを1年ほど行っていますが、再起動後にログが必要になった場合は、/ etc/fstabの行をコメントアウトしてからデバッグを開始します。

いずれにせよ、OS Xでも同じことをしたいと思います。OSXのRAMディスクの作成に関する記事を見てきましたが、すべてのブートで機能する永続的な解決策を探しています。私は常に/ tmpと/ var/logをramdiskにマウントし、必要に応じてviでコマンドライン編集を少し行うことでそれをオフにできるようにしたいです。

20
kbyrd

編集:問題の一部が解決したので、自分の答えを受け入れるつもりです。誰かがLinuxで--bindのようなものを投稿した場合、その答えを受け入れます。 ==

より多くの回答を得るために、私が見つけたもので自分の質問に答え始めます。

ステップ1は毎回ブート時にRAMディスクをマウントすることです。これを行うには、bashスクリプトを作成してから、起動時にbashスクリプトを呼び出すlaunchdエントリを作成します。

次のような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

次に、次の内容の/Library/LaunchDaemons/com.my.ramdisk.plistというファイルを作成して、launchdに追加し、起動時に呼び出します。

<?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のramdisk内のディレクトリをシンボリックリンクまたはマウントする方法です。これらの3つのディレクトリはすべて、私のシステム上で/ private/tmp、/ private/var/log、および/ private/var/tmpにシンボリックリンクされています。/Volumes/ramdisk/...を指すようにシンボリックリンクを変更すると、システムが起動しません。これは、起動時に、com.my.ramdiskスクリプトがramdiskをマウントする前に/ tmpと/ var/logが必要なためだと思います。ルートがマウントされた直後、他の何かが実行される前に、RAMディスクをマウントする方法が必要です。

/ var/log(カーネル、デーモン、その他の重要なもの)をマウントする場合ユーザースペースログ)一時スペースでは、次回の再起動時にその内容が失われます。これにより、診断能力が阻害される可能性があります。

6
kbyrd

これはOSXでramdisksを作成するためのスクリプトです。申し訳ありませんが、それはあなたの質問に答えません。これを使用して、起動時に実行され、/ 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
xer0x