我正在尝试将/private/tmp作为内存磁盘挂载。我有一个名为"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
但是,“mount”命令并没有将/private/tmp显示为已在磁盘1上挂载。日志只显示:“将/dev/rdisk1初始化为1024 MB大小写不敏感HFS Plus卷”。
因此,脚本肯定在系统启动时执行,但似乎mount命令不起作用。 有什么想法吗?谢谢。
编辑
我在脚本中添加了一些“echo”,并使“mount”命令详细说明。 这是输出:
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...
看起来脚本运行良好,甚至挂载了磁盘。但似乎在引导过程中“tmp”文件夹被覆盖了?
编辑2
看起来一切都很好,只是有东西在系统启动时卸载了我的挂载磁盘。 也有人注意到了这种行为,链接在这里。
/Library
的启动守护进程作为系统服务运行,而不是作为您的用户执行,因此它们不会执行您的配置文件。 - Mark Setchellsbin
是用于在其他尚未挂载的文件系统上动态库可用之前,在系统启动期间需要的静态链接二进制文件。我不知道为什么/sbin
不在launchd
的 PATH 中 - 我猜这是因为如果需要,你可以自己添加它们。 - Mark Setchell