Skip to content

Instantly share code, notes, and snippets.

@koshigoe
Created February 11, 2011 14:57
Show Gist options
  • Select an option

  • Save koshigoe/822455 to your computer and use it in GitHub Desktop.

Select an option

Save koshigoe/822455 to your computer and use it in GitHub Desktop.
Like tmpfs in Mac OSX
#!/bin/sh
# This program has two feature.
#
# 1. Create a disk image on RAM.
# 2. Mount that disk image.
#
# Usage:
# $0 <dir> <size>
#
# size:
# The `size' is a size of disk image (MB).
#
# dir:
# The `dir' is a directory, the dir is used to mount the disk image.
#
# See also:
# - hdid(8)
#
mount_point=${1}
size=${2:-64}
mkdir -p $mount_point
if [ $? -ne 0 ]; then
echo "The mount point didn't available." >&2
exit $?
fi
sector=$(expr $size \* 1024 \* 1024 / 512)
device_name=$(hdid -nomount "ram://${sector}" | awk '{print $1}')
if [ $? -ne 0 ]; then
echo "Could not create disk image." >&2
exit $?
fi
newfs_hfs $device_name > /dev/null
if [ $? -ne 0 ]; then
echo "Could not format disk image." >&2
exit $?
fi
mount -t hfs $device_name $mount_point
if [ $? -ne 0 ]; then
echo "Could not mount disk image." >&2
exit $?
fi
#!/bin/sh
# This program has two features.
#
# 1. Unmount a disk image.
# 2. Detach the disk image from RAM.
#
# Usage:
# $0 <dir>
#
# dir:
# The `dir' is a directory, the dir is mounting a disk image.
#
# See also:
# - hdid(8)
#
mount_point=$1
if [ ! -d "${mount_point}" ]; then
echo "The mount point didn't available." >&2
exit 1
fi
mount_point=$(cd $mount_point && pwd)
device_name=$(df "${mount_point}" 2>/dev/null | tail -1 | grep "${mount_point}" | cut -d' ' -f1)
if [ -z "${device_name}" ]; then
echo "The mount point didn't mount disk image." >&2
exit 1
fi
umount "${mount_point}"
if [ $? -ne 0 ]; then
echo "Could not unmount." >&2
exit $?
fi
hdiutil detach -quiet $device_name
@Roman2K

Roman2K commented Nov 17, 2014

Copy link
Copy Markdown

Here's my take using hdiutil instead of hdid (deprecated) with mount, umount and orphan commands (and the device won't show up in Finder πŸ˜‰): https://gist.github.com/Roman2K/3238fb441e298369198e

@samleb

samleb commented Aug 8, 2026

Copy link
Copy Markdown

hdid -nomount still means pre-allocating a fixed block of RAM.

Since macOS 15 there's tmpfs, which grows to fit what you actually put in it β€” no sizing guess up front.
Catch: mounting tmpfs over a folder hides whatever was already there, so you can't just overlay a working directory.

I wrote a tool around that β€” seeds the RAMDisk from an existing folder on mount and writes everything back on unmount: Persist β€” a fresh RAMDisk approach for modern macOS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment