在 MacOS 上创建 RAM 磁盘

在 MacOS 上创建 RAM 磁盘

我正在尝试使用以下命令在 MacOS 上创建 RAM 磁盘

diskutil erasevolume HFS+ RAM_Disk_512MB `hdiutil attach -nomount ram://16384`

这在我的台式机上运行良好,但当我尝试在笔记本电脑上运行它时,出现以下错误

Unable to find disk for hdiutil attach -nomount ram://16384

谷歌搜索没有找到太多结果。有人知道我可能做错了什么或如何解决这个问题吗?

这个给我带来问题的系统运行的是 MacOS 10.13.6

答案1

简短回答:

diskutil erasevolume HFS+ RAM_Disk_512MB $(hdiutil attach -nomount ram://16384)

原始问题的解释:我很确定原始问题是由于使用了错误的引号(单引号而不是反引号)。比较以下命令:

diskutil erasevolume HFS+ RAM_Disk_512MB `hdiutil attach -nomount ram://16384`
diskutil erasevolume HFS+ RAM_Disk_512MB 'hdiutil attach -nomount ram://16384'

它们看起来真的很相似,对吧?但它们做的事情却大不相同;带反引号的那个hdiutil ...作为命令运行,并将其输出用作参数diskutil。第二个将其hdiutil ...视为文字字符串,并传递diskutil,这根本不是你想要的。这两种引号看起来非常相似(至少有一本关于 Unix 的书使用了一种字体,而它们完全相同的),所以这是一个容易(且常见)的错误。

$( )本质上和反引号的作用相同,但视觉上语法更清晰,所以使用它。

这实际上做了什么:该命令hdiutil attach -nomount ram://16384创建一个 RAM 磁盘,并打印与其对应的设备文件的路径。类似于“/dev/disk4”(除了它打印后跟一堆空格)。然后将$( )其视为主命令的参数,因此它运行类似于的东西diskutil erasevolume HFS+ RAM_Disk_512MB /dev/disk4,格式化(并隐式安装)新创建的 RAM 磁盘。

我最初建议用双引号括住该$( )部分,但结果却带来了麻烦。如果没有双引号,$( )shell 将以一种奇怪的方式解析命令的输出,这通常会带来更多问题,而不是解决问题。然而,在这种情况下,输出在末尾包含一堆空格,hdiutil如果被告知它们是设备条目路径的一部分,这些空格可能会让人感到困惑。无引号解析会删除空格,所以它就是这样工作的。

这应该是安全的,不会出现未加引号的命令扩展容易出错的情况,但有一个大警告:如果你弄乱了IFS(shell 的“内部字段分隔符”)变量的值,它可能会做出完全奇怪的事情。

答案2

您可能需要考虑使用 APFS 而不是 HFS+ 格式化 RAM 磁盘。以下是使用 Amorphous Disk Mark 4.0 制作的 64 GB RAM 磁盘(机器上的 128 GB 中)的两次速度测量,使用 HFS+ 格式化。以下语法用于创建 RAM 磁盘:

diskutil erasevolume HFS+ "RAMDisk" `hdiutil attach -nomount ram://20971520`&& touch /Volumes/RAMDisk/.metadata_never_index

最后的 touch 命令告诉 Spotlight 不要不必要地对其进行索引;请参阅下面的源代码。我发现使用此命令和不使用此命令时测量的速度没有差异。

您可以看到随机写入速度相当差:

在此处输入图片描述

相比之下,这里有两个使用以下命令创建的 APFS 格式 RAM 磁盘的测量值:

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

语法信用:用户 jdmc 在https://apple.stackexchange.com/questions/383202/ram-disks-can-i-use-apfs-and-or-compression

与 HFS+ RAM 磁盘相比,APFS 磁盘的随机写入性能要好得多。两种格式之间的顺序读写相同(在可观察到的变化范围内)。

在此处输入图片描述

奇怪的是,对于 QD1 随机读取,HFS+ RAM 磁盘的表现确实比 APFS 磁盘要好一些(在多次运行中,HFS+ 的≈290 MB/s 和 APFS 的≈250 MB/s 之间的差异是一致的)。

注 1:这些不是 RAM 磁盘较大所导致的瑕疵。在观察到的变化范围内,当 RAM 磁盘大小减小到 10 GB(对于 HFS+ 和 APFS)时,也会出现相同的结果。

注 2:系统详细信息:2019 27 英寸 i9 iMac,配备 128 GB RAM,MacOS Monterey 12.6.3

同样有趣的是,我的 2TB Western Digital SN850 SSD 在 QD64 随机读取方面的表现优于这两个 RAM 磁盘:

在此处输入图片描述

相关内容