kby*_*yrd 23 mac ramdisk tmpfs macos
对于非关键的 Linux 系统,我经常将 /tmp 和 /var/log 之类的内容移动到 tmpfs 以节省一些磁盘写入。我已经这样做了一年左右,如果我在重新启动时需要日志,我只需在 /etc/fstab 中注释掉一行,然后开始调试。
无论如何,我想在 OS X 上做同样的事情。我看过有关为 OS X 创建 ramdisk 的帖子,但我正在寻找一个更持久的解决方案,适用于每次启动。我总是希望 /tmp 和 /var/log 安装在 ramdisk 中,如果需要,可以在 vi 中通过一些命令行编辑将其关闭。
这是在 OS X 上创建 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}"
Run Code Online (Sandbox Code Playgroud)
来自@salvatore http://pastie.textmate.org/pastes/1417478/text?key=igcxuzqqvlmlbavxooj2uw
编辑:我只是要接受我自己的答案,因为它确实为我解决了问题的一部分。如果有人在 Linux 中发布更像 --bind 的内容,我会接受这个答案。
为了激发更多的答案,我将开始用我发现的东西来回答我自己的问题。
第 1 步是在每次启动时安装一个 ramdisk。为此,我创建了一个 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
Run Code Online (Sandbox Code Playgroud)
然后通过创建一个名为 /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>
Run Code Online (Sandbox Code Playgroud)
我被卡住的地方是一种在 /tmp、/var/log 和 /var/tmp 的 ramdisk 内符号链接或挂载目录的方法。这三个目录在我的系统上都符号链接到 /private/tmp、/private/var/log 和 /private/var/tmp。当我将符号链接更改为指向 /Volumes/ramdisk/... 时,系统将无法启动。我希望这是因为在启动时,在我的 com.my.ramdisk 脚本安装 ramdisk 之前,有些东西需要 /tmp 和 /var/log。我需要一种在安装 root 之后立即安装 ramdisk 的方法,然后再运行其他任何东西。
注意如果您在临时空间中挂载 /var/log(内核、守护程序和其他关键用户空间日志),您将在下次重新启动时丢失其内容。这可能会抑制您的诊断能力。
归档时间: |
|
查看次数: |
14197 次 |
最近记录: |