OS Xのramdiskに/ tmpおよび/ var / logを配置できますか?


20

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

いずれにせよ、私はOS Xで同じことをしたいと思います。OSX用のRAMディスクの作成に関する投稿を見てきましたが、すべてのブートで機能するより永続的なソリューションを探しています。私は常に/ tmpと/ var / logをRAMディスクにマウントしたいのですが、必要に応じてviでコマンドラインを少し編集することでそれをオフにすることができます。


これは私にとって時期尚早な最適化のように思えます。ディスクI / Oバウンドであるため、可能な限りディスク書き込みを保存する必要がある多くの状況に本当に直面していますか?
Spiff

これはおそらく大きな最適化ではないことを公に認めます。私はもともと、安価なUSBスティックから起動するLinuxシステムでそれを行い、多くのプロセスが必要とするログとtmpスペースを提供しながら、可能な限り書き込みを避けようとしていました。アイデアは固まり、私はあきらめていました(ログを表示して、再現できない限り、発生後に気付いた問題を追跡することはできません)。「非ティンカー」システムの場合、これは行いません。私のOS Xラップトップは、いじくり回すカテゴリに分類されます。
kbyrd

6
別の正当な^ D ^ D ^ D ...エラー...合理化:私のMacbookにはSSDがあり、あまり気にしないものへのランダム書き込みを防ぐことができれば、システム全体の方が良いです。どのようにそのことについて?
kbyrd

回答:


6

OS XでRAMディスクを作成するスクリプトを以下に示します。申し訳ありませんが、質問には答えられません。これを使用して、ブート時に実行され、/ 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


このスクリプトは、OS X上でRAMディスクを作成するために非常に便利です、ありがとうございました
hanxue

6

編集:私は問題の一部を解決したので、私は自分の答えを受け入れるつもりです。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が必要になるためです。rootがマウントされた直後、他の何かが実行される前に、ramdiskをマウントする方法が必要です。

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


オッズは、あなたがこれを行うことができないことは良いことであり、たとえできたとしても、それは絶対に時間を費やす価値がないでしょう。試してみたい場合は、ブートサイクルに関するすべての公開ドキュメントをここで入手できます。bit.ly
Hasaan Chop

@NSD:リンクをありがとう。男、本当に欲しい-バインドマウント。
kbyrd

おそらく、カーネル拡張機能を記述せずにロガーの出力をリダイレクトできますが、実際に試したことはありません。
ハサーンチョップ

2
これは古い問題であり、適切な答えを投稿することはできないようですが、検索で顕著に出てきます。質問に答えるにはhdik -drivekey system-image=yes -nomount ram://262144、128MBのRAMディスクを作成し、それnewfs_hfsをフォーマットしてから、を使用mount -o union,nobrowse,noatimeしてボリュームをマウントし/tmpます。この方法では、既存のファイル/tmpは変更されませんが、新しいファイルはRAMディスクに保存されます。
ハラヴィック14年

1
私の唯一のコメントは、これを行うことに注意する必要があるということです。一方tmpfs、必要に応じてスワップを使用しますが、RAMディスクは使用しないため、アクティブなRAMのチャンクを失う/tmpことになります。割り当てるよりも多くのスペースが必要な場合に実行するものに注意してください。
ハラヴィック14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.