我正在尝试使用以下命令在 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 磁盘: