根据rasbery pi 文档, 您可以使用 /dev/disk 或 /dev/rdisk 将您的操作系统加载到闪存卡中。
rdisk 代表原始磁盘。
/dev/disk 是块级设备,为什么 rdisk 会快 20 倍?
使用 Mac OSX
注意:在 OS X 中,每个磁盘在 /dev 中可能有两个路径引用:/dev/disk# 是缓冲设备,这意味着发送的任何数据都会经过额外处理。/dev/rdisk# 是原始路径,速度更快,使用 dd 程序时完全没问题。在 Class 4 SD 卡上,使用 rdisk 路径的速度大约快 20 倍。
答案1
从man hdiutil
:
/dev/rdisk 节点是字符特殊设备,但在 BSD 意义上是“原始”的,并且强制使用块对齐 I/O。它们比缓冲区缓存更接近物理磁盘。另一方面,/dev/disk 节点是缓冲块特殊设备,主要由内核的文件系统代码使用。
通俗地说,数据/dev/rdisk
几乎直接进入磁盘,并且/dev/disk
经过更长更昂贵的路线
答案2
接受的答案是正确的,但没有详细说明。
当您从用户空间访问它们时,/dev/disk
和之间的一个主要区别是是缓冲的。 的读/写路径将I/O 分解为块(x86 和 arm 上为 4KB,arm64 上为 16KB),将其读入缓冲区缓存,然后复制到用户空间缓冲区(然后发出下一个块大小的读取…)。这很好,因为您可以执行未对齐的读取和写入,而且它确实有效。相比之下,基本上只是将读取或写入直接传递给设备,这意味着 I/O 的开始和结束需要在扇区边界上对齐。/dev/rdisk
/dev/disk
/dev/disk
PAGE_SIZE
/dev/rdisk
如果您对 执行大于一个扇区的读取或写入/dev/rdisk
,该请求将直接传递。较低层可能会将其分解(例如,由于 USB 协议中的最大有效负载大小,USB 会将其分解为 128KB 的片段),但您通常可以获得更大、更高效的 I/O。当进行流式传输时,例如通过dd
,128KB 到 1MB 是相当不错的大小,可以在当前的非 RAID 硬件上获得接近最佳的性能。
的读取和写入路径所进行的缓存/dev/disk
非常简单,几乎毫无意义。即使不是绝对必要的,它也会进行缓存;例如,如果设备可以进行内存映射并直接传输到应用程序的缓冲区中。它执行小 (4KB/16KB) I/O,这会导致大量的每次 I/O 开销。它不执行任何预读或后写。
答案3
对于 HDD 和 SSD 来说,它似乎/dev/disk
和/dev/rdisk
工作原理不同。想检查一下 MicroSD 卡。刚刚将 2GB 磁盘映像写入 Sandisk Ultra MicroSD 64GB (https://www.amazon.com/gp/product/B073JYVKNX)。
重复测试多次,但结果稳定:17MB/秒对于/dev/disk
vs20MB/秒为/dev/rdisk
。更改bs=1m
为bs=16m
不会对写入速度产生任何影响。
写信给
/dev/disk2
sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/disk2 bs=1m 2094006272 bytes transferred in 121.860007 secs (17183704 bytes/sec)
写信给
/dev/rdisk2
$ sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/rdisk2 bs=1m 2094006272 bytes transferred in 102.743870 secs (20380839 bytes/sec)
然后我决定测试阅读速度:26MB/秒对于/dev/disk
vs87MB/秒为/dev/rdisk
。更改bs=1m
为bs=16m
不会对阅读速度产生任何影响。
正在读取
/dev/disk2
sudo dd if=/dev/disk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531-2.img bs=1m 257949696 bytes transferred in 9.895572 secs (26067184 bytes/sec)
正在读取
/dev/rdisk2
$ sudo dd if=/dev/rdisk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img bs=1m 877658112 bytes transferred in 10.021974 secs (87573377 bytes/sec)
答案4
需要说明的是,至少在 macOS High Sierra 中,/dev/disk 似乎比 /dev/rdisk 快得多。运行 dd 或 ddrescue 时,我从磁性 HD 复制到 SSD 的吞吐量比较结果为使用 /dev/rdisk 时为 3.7MBps,使用 /dev/disk 时为 45MBps。因此,在更高版本的 macOS 中,最好使用 /dev/disk 而不是 /dev/rdisk 以获得最佳性能。