29

通常使用以下命令创建 RAM 磁盘

hdid -nomount ram://<blocksize>

返回例如 /dev/disk2 然后我会格式化磁盘,说

newfs_hfs /dev/disk2

然后安装它:

mount -t hfs /dev/disk2 /some/mount/target

此过程似乎不适用于 APFS。我在 High Sierra beta 9 上。 mount 命令没有输出任何错误,但路径没有挂载。

在我的情况下,hdid命令完成后,newfs_apfs -i /dev/disk2产生

nx_kernel_mount:1364: checkpoint search: largest xid 1, best xid 1 @ 1
nx_kernel_mount:1422: sanity checking all nx state... please be patient.
spaceman_metazone_init:278: no metazone for device 0, of size 209715200 bytes, block_size 4096
apfs_newfs:18075: FS will NOT be encrypted.

然后当我输入时mount -t apfs /dev/disk2 /some/target/path,挂载命令似乎工作了 2 秒,没有给出任何输出,并且挂载不成功。

谁能告诉我如何真正制作一个 APFS RAM 磁盘它可以工作?:p

PS:我也尝试过类似diskutil partitionDisk /dev/disk2 GPT APFS myvolumename 0b的方法,它确实将卷安装到/Volumes/myvolumename但创建了另一个磁盘(disk3在这种情况下),这对我来说似乎很奇怪!

4

3 回答 3

31

@Glyph 在对接受的答案的评论中提供了最佳答案,但它值得拥有自己的答案:

diskutil partitionDisk $(hdiutil attach -nomount ram://$((2048*sizeInMB))) 1 GPTFormat APFS 'Ramdisk' '100%'

更改sizeInMB为您想要的尺寸。

我更新了 Glyph 的答案以稍微简化卷名。

于 2017-11-17T16:12:49.330 回答
20

找到了解决方案:

hdid -nomount ram://<blocksize>
diskutil erasedisk <format> <diskname> <output path of previous hdid command>

其中<format>取自diskutil listFilesystems“个性”列。是的,你可能不得不引用这个参数对我来说也很奇怪,例如在指定区分大小写的变体时,但是哦,好吧......

<blocksize>是 2048 *desired size in megabytes

最后一条命令格式化 RAM 磁盘并将其挂载到/Volumes/<diskname>

似乎是这样,当现在进入时diskutil list,您会看到两个新磁盘,一个是hdid创建的,一个是合成的。

要再次销毁RAM 磁盘,请调用diskutil eject <output path of previous hdid command>,例如diskutil eject /dev/disk2

这将为您完成所有工作,卸载/Volumes/<diskname>路径并销毁两个磁盘,释放您的内存。

请记住, 的最小值/最大值<blocksize>取决于所选的<format>. 此外,<diskname>不能总是随意选择。例如,FAT32 要求它由大写字母组成!

干杯!

于 2017-09-18T06:36:12.450 回答
0

此外,需要更正删除/销毁 RAM 磁盘的信息。ramdisk 将在路径 /Volumes/'ramdisk' 中创建,因此命令为:

diskutil eject /Volumes/'ramdisk'
于 2019-08-03T09:30:33.180 回答