簡體   English   中英

從Mac OS X Yosemite上的啟動守護程序掛載磁盤

[英]Mount disk from launch daemon on Mac OS X Yosemite

我正在嘗試掛載/ 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 

但是“mount”沒有顯示掛載在disk1上的/ private / tmp。 日志僅顯示:“初始化/ 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”文件夾被覆蓋?

EDIT2

看起來一切都很好,除了在系統啟動時卸載我掛載的磁盤。 也有人注意到這種行為也鏈接

更新的答案

我注意到你正在嘗試將你的RAMdisk掛載到/private/tmp 我不能指出任何具體的證據,但這不是一個好主意,因為/tmp是一個系統目錄。 我會在/tmp下創建一個目錄,比如/tmp/RAMdisk ,甚至是/RAMDisk中的文件系統根目錄。

原始答案

我認為問題是/sbin不在你的PATH中,所以腳本找不到mount 嘗試將其添加為腳本的第二行:

export PATH="/sbin:$PATH"

同樣缺少TYPE ,這表示磁盤上沒有創建文件系統,即news_hfs無法運行,而且也位於/sbin

我通過以下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.local.ramdisk</string>
                <key>Program</key>
                <string>/usr/libexec/ramdisk.sh</string>
                <key>RunAtLoad</key>
                <true/>
                 <key>KeepAlive</key>
                <dict>
                        <key>PathState</key>
                        <dict>
                                <key>/private/tmp/ram</key>
                                <false/>
                        </dict>
                </dict>
                <key>StandardOutPath</key>
                <string>/var/log/ramdisk.log</string>
        </dict>
</plist>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM