从Mac OS X Yosemite上的启动守护程序挂载磁盘

时间:2015-06-16 08:27:10

标签: macos osx-yosemite mount launchd tmp

我正在尝试挂载/ private / tmp作为ram磁盘。我有这个" ramfs.sh"脚本,我从互联网上找到:

#!/bin/bash
ramfs_size_mb=1024
mount_point=/private/tmp

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

正常,如果我从终端手动运行。但是我从LaunchDemon运行它有问题。我在文件" /Library/LaunchDaemons/com.kalugin.ramfs-for-db.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.kalugin.ramfs-for-db</string>
        <key>Program</key>
        <string>/var/root/ramfs.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardOutPath</key>
        <string>/var/log/ramfs_for_db.log</string>
        <key>StandardErrorPath</key>
        <string>/var/log/ramfs_for_db_error.log</string>
        <key>Debug</key>
        <true/>
    </dict>
</plist>

系统加载后我有:

/dev/disk1
    #:                       TYPE NAME                    SIZE       IDENTIFIER
    0:                            Volatile HD            *1.1 GB     disk1 

但是&#34; mount&#34;没有显示/ private / tmp安装在disk1上。日志仅显示:&#34;初始化/ dev / rdisk1为1024 MB不区分大小写的HFS Plus卷&#34;。

因此,在系统启动期间确实会执行脚本,但看起来像mount命令不起作用。有任何想法吗?谢谢。

编辑

我添加了一些&#34; echo&#34;在脚本和制作&#34; mount&#34;冗长。输出结果如下:

Creating ram disk...
Initialized /dev/rdisk1 as a 1024 MB case-insensitive HFS Plus volume
Mounting ram disk...
/dev/disk1 on /private/tmp (hfs, local, noatime)
Setting permissions...

看起来脚本运行正常,甚至安装了磁盘。但看起来像在开机期间&#34; tmp&#34;文件夹被覆盖?

EDIT2

看起来一切都很好,除了在系统启动时卸载我挂载的磁盘。 也有人注意到这种行为link

2 个答案:

答案 0 :(得分:1)

更新了答案

我注意到你正试图在/private/tmp安装你的RAMdisk。我不能指出任何具体的证据,但这不是一个好主意,因为/tmp是一个系统目录。我会在/tmp下创建一个目录,例如/tmp/RAMdisk,甚至是/RAMDisk中的文件系统根目录。

原始答案

我认为问题是/sbin不在您的PATH中,因此脚本找不到mount。尝试将其添加为脚本的第二行:

export PATH="/sbin:$PATH"

同样缺少TYPE,这表示您的磁盘上没有创建文件系统,即news_hfs无法运行,而且也位于/sbin

答案 1 :(得分:0)

我通过关注plist文件解决了我的问题:

{{1}}

看起来“RunAtLoad”是不够的,或者它不起作用,我不知道。但是使用“KeepAlive”它可以正常工作。