5

I use a 200MB Ram disk to write some throwaway files that I use repeatedly but can forget from run to run and don't mind losing on a shutdown. I often run out of space however and have to clean house.

This comes from a typical recommendation to mount a RAM disk until Macos:

  • can I use APFS instead? Would there be much benefit in a Ramdisk? Would it compress?

  • can I activate compression by default? I am dumping out a bunch of throw-away diagnostic HTML files that would take a lot less space if there was transparent file system compression like you can do on NTFS.

                  old-school, what about APFS?
                     👇
diskutil erasevolume HFS+ 'RAMDisk' `hdiutil attach -nomount ram://409600`

Diskutil itself doesn't help much:

Not one mention of APFS.

$ diskutil erasevolume -h

Usage:  diskutil eraseVolume format name MountPoint|DiskIdentifier|DeviceNode
Erase a single disk partition or whole, laying down a new file system volume
that will be empty of files. Format is the specific file system personality
name of the new volume, e.g. "Journaled HFS+" or a common alias e.g. "jhfs+".
Name is the new volume name (subject to file system naming restrictions) or
can be specified as %noformat% to skip initialization (to skip newfs). You
cannot erase the boot volume. A pseudo-format of "free" or "Free Space" will
remove the partition altogether, leaving a free space gap in the partition map.
Ownership of the affected disk is required.
Examples: diskutil eraseVolume JHFS+ UntitledHFS /Volumes/SomeDisk
          diskutil eraseVolume "Journaled HFS+" FooWholeVolEgRaid disk7
          diskutil eraseVolume ms-dos FOO disk0s5
          diskutil eraseVolume free free disk0s5

Not much documentation from Apple - it's terminal stuff.

Looking at man page we still only have old file systems.

Here's what using the GUI has to say:

enter image description here

Compressed Disk Images. what's that?

I have also seen the term compressed disk image with regards to macos. Does it have any relevance here?

giving it a try didn't help much:

Mount a 50MB

diskutil erasevolume APFS 'ram2'hdiutil attach -nomount ram://102400``

output: No clear error, but no disk either:
Started erase on disk2
Unmounting disk
Erasing
Mounting disk
Could not mount disk2 after erase 👈 not good
Finished erase on disk2
ls /Volumes doesn't show a ram2 disk
total 0
drwxr-xr-x+  4 root  wheel  128 Feb 26 16:03 .
drwxr-xr-x  28 root  wheel  896 Sep 30 13:10 ..
lrwxr-xr-x   1 root  wheel    1 Feb  8 12:51 MacHD -> /
drwxrwxr-x   8 jluc  staff  340 Feb 14 23:01 RAMDisk 👈 existing one
0

2 Answers 2

2

@klanomath has the correct command in the comments above.

diskutil partitionDisk $(hdiutil attach -nomount ram://SIZE) 1 GPTFormat APFS 'RAMDisk' '100%'

My results:

$ diskutil partitionDisk $(hdiutil attach -nomount ram://12128430) 1 GPTFormat APFS 'RAMDisk' '100%'
Started partitioning on disk15
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk15s2 as APFS with name RAMDisk
Mounting disk
Finished partitioning on disk15
/dev/disk15 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +6.2 GB     disk15
   1:                        EFI EFI                     209.7 MB   disk15s1
   2:                 Apple_APFS Container disk16        6.0 GB     disk15s2

enter image description here

0
2

@klanomath's answer will work, but it's needlessly complicated. There's no need for a RAM disk to have partitions, or a partitioning table, or an EFI boot partition. (Go ahead, try booting from a RAM disk! I'll wait.)

All that's needed here is a partitionless disk image, formatted in APFS and consisting of a single APFS container, enclosing a single APFS volume. That's easy with the "diskutil apfs create" verb. Furthermore, we should add a tweak to prevent macOS from wasting cycles trying to Spotlight-index that volume. Putting those two things together yields the following single command line (note that I'm using "SIZE" as a placeholder):

 diskutil apfs create $(hdiutil attach -nomount ram://SIZE) RAMDisk && touch /Volumes/RAMDisk/.metadata_never_index

That's it. "SIZE" will be the integer number of 512-byte blocks you want the RAM disk to comprise. For example, a RAM disk of 1GiB (1,073,741,824 bytes) would be specified with the number "2097152" (without the quote marks).

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .