How to create a read-only RAM disk on macOS from the command line?
On macOS Catalina, a RAM disk with 512MB space can be created with the following command:
diskutil eraseVolume HFS+ "RAMDisk" `hdiutil attach -nomount ram://1048576`
On Ubuntu, a RAM disk and its read-only shadow can be created by:
mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk
mount -t aufs -o br:/mnt/ramdisk=ro none /mnt/readonly
So how can I create a read-only RAM disk on macOS Catalina with command line like this, or create a read-only shadow of existing RAM disk?
-
Get the device number of the RAM disk:
diskutil list
(e.g. disk3)Add some content to the RAM disk 😉.
- Unmount the volume:
diskutil umount disk3
- Mount the RAM disk read-only:
diskutil mount readOnly /dev/disk3
.
Apply the disk number according to your environment!
-
unmount/mount
works for an HFS+ disk (in case of a RAM disk)/volume or an APFS volume only -
unmountDisk/mountDisk
works for HFS+ disks and APFS container schemes.
If you format the RAMDisk as APFS container and one APFS volume
diskutil partitionDisk $(hdiutil attach -nomount ram://1048576) 1 GPTFormat APFS 'RAMDisk' '100%'
you can either mount the APFS container scheme or the APFS volume:
- Get the device number of the RAM disk's container scheme:
diskutil list
(e.g. disk4) - Unmount the volume:
diskutil umountDisk disk4
- Mount the RAM disk read-only:
diskutil mountDisk readOnly /dev/disk4
or the RAM disk's APFS volume:
- Unmount the volume:
diskutil umount disk4s1
- Mount the RAM disk read-only:
diskutil mount readOnly /dev/disk4s1
As one-liner for an HFS+ volume with the unique name RAMDisk:
RD=$(diskutil list | awk '/RAMDisk/ { print $5 }'); diskutil umount $RD; diskutil mount readOnly $RD; exit
As one-liner for an APFS volume with the unique name RAMDisk:
RD=$(diskutil list | awk '/RAMDisk/ { print $7 }'); diskutil umount $RD; diskutil mount readOnly $RD; exit
Thanx to user3439894 for all his hints & comments...