在 macOS 上创建虚拟内存盘(RamDisk)

Sep 25, 2025 • 预计阅读时间 2 分钟

使用命令行工具 hdid 可以很简单的把内存创建为虚拟磁盘:

$ hdid -nomount ram://16777216

/dev/disk6

16777216 表示磁盘扇区数,每个扇区大小是 512 字节,总共就是 8GB 大小,所以计算磁盘大小的方式是字节数除以 512。

磁盘管理工具 里可以看到刚才创建出来的虚拟磁盘,可以进行初始化和加载等操作,装载之后可以和普通磁盘一样使用。

也可以使用命令格式化:

$ diskutil apfs create /dev/disk6 ramdisk

Started APFS operation on disk6
Creating a new empty APFS Container
Unmounting Volumes
Switching disk6 to APFS
Creating APFS Container
Created new APFS Container disk7
Disk from APFS operation: disk7
Finished APFS operation on disk6
Started APFS operation on disk7
Preparing to add APFS Volume to APFS Container disk7
Creating APFS Volume
Created new APFS Volume disk7s1
Mounting APFS Volume
Setting volume permissions
Disk from APFS operation: disk7s1
Finished APFS operation on disk7

设置开机自动创建虚拟磁盘

  1. 写一个 Shell 脚本,自动执行创建虚拟磁盘、格式化为 APFS,然后创建 Xcode 的缓存目录
    #!/usr/bin/env bash
    
    set -e
    
    if [ -d /Volumes/ramdisk ]; then
    echo 'found /Volumes/ramdisk.'
    exit 0
    fi
    
    ramdev=$(hdid -nomount ram://16777216)
    diskutil apfs create ${ramdev} ramdisk
    mkdir -p /Volumes/ramdisk/Xcode/DerivedData
    
    把以上脚本内容保存到 /opt/local/share/libexec/mkramdisk.sh
  2. 再写一个 launchd 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>me.lvv.mkramdisk</string>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/sbin:/usr/sbin:/bin:/usr/bin</string>
        </dict>
        <key>ProgramArguments</key>
            <array>
                <string>/bin/bash</string>
                <string>-i</string>
                <string>/opt/local/share/libexec/mkramdisk.sh</string>
            </array>
        <key>RunAtLoad</key>
            <true/>
    </dict>
    </plist>
    
    把以上内容保存到 /Library/LaunchDaemons/me.lvv.mkramdisk.plist,然后加载这个服务:
    $ sudo launchctl load -w /Library/LaunchDaemons/me.lvv.mkramdisk.plist
    
  3. 配置 Xcode 的 DerivedData 目录为虚拟磁盘:

Tips: 虚拟磁盘并不是一创建就把内存空间划走,而是等到真正写入了虚拟磁盘的时候,才会使用对应的内存空间,所以给虚拟磁盘分配大一点的空间是没有问题的。

参考资料

https://leopard-adc.pepas.com/documentation/Darwin/Reference/ManPages/man8/hdid.8.html

macOS
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

设置 TCP Keepalive,适用于 Linux、FreeBSD 和 macOS