根据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倍。


评论

附带说明一下,我进行了测试,而rdisk实际上花费了更长的时间。

另一个需要注意的地方是,我当时也必须进行测试,发现rdisk复制(通过dd)几乎比使用磁盘副本快4倍。

Mac OSX 10.9.1(MacBook Pro 15英寸,2011年初)

我以为“ rdisk”是我正在阅读的Raspberry Pi SD卡图像的某些说明中的错字。经过进一步调查,我搜索了差异并找到了该线程。在我的情况下,使用/ dev / rdisk而不是/ dev / disk将1.7GB图像写入SD卡的速度提高了13倍! Macbook Pro Retina 13英寸,2015年初型号。

作为另一个说明,我刚刚将Ubuntu ARM映像添加到新购买的Sandisk Extreme Pro MicroSD卡中。 / dev / disk1的写入速度为2.3 MB / s,而/ dev / rdisk1的写入速度为83.7 MB / s,或速度的36.4倍。

#1 楼

man hdiutil开始:/ dev / rdisk节点是字符专用设备,但在BSD意义上是“原始”节点,并强制执行块对齐的I / O。它们比缓冲区高速缓存更靠近物理磁盘。另一方面,/ dev / disk节点是缓冲的块专用设备,主要由内核的文件系统代码使用。


用外行术语来说,/dev/rdisk几乎直接进入磁盘,而/dev/disk经过更长的更昂贵的路线

评论


为什么可以使用rdisk时使用磁盘?

–user391339
15年1月4日在22:34

@ user391339因为缓存仍然是可取的事情。如果您有可移动介质,则希望尽快在物理设备上获取数据,因为您希望数据在另一个物理位置。内部硬盘驱动器则不同。通常,您不会随身携带这些数据,因此您不必担心何时将数据实际写入设备。当您缓存写入设备或从设备读取的数据时,这是写入磁盘的一种更昂贵的方式,但是您的程序仍然更快,因为它们不需要等待所有要写入的数据都写入磁盘。

– Kritzefitz
15年5月12日在9:01



@ Dan,Re“强制”;含义?

–起搏器
18年3月3日,0:19

不确定Krit的解释对我有用。我的情况可能有点特殊,想进行一次较大的外部磁盘一次更快的扫描,而且我不确定哪种方法能更好地解决此问题,但是我仍然可以正常使用并等待它像通常那样弹出实践。但是,在Windows中,我一直首选“快速拔出”配置文件,我猜想它反映了Mac的更多“原始”模式,因为它在意外的连接丢失事件中通告了较少的文件系统损坏。

–解毒
19-6-28在11:23



#2 楼

可接受的答案是正确的,但并没有涉及太多细节。

从用户空间访问/dev/disk/dev/rdisk之间的主要区别之一是,/dev/disk是经过缓冲的。 /dev/disk的读/写路径将I / O分解为4KB块,然后将其读入缓冲区高速缓存,然后复制到用户空间缓冲区中(然后发出下一个4KB读取…)。这样做很不错,因为您可以执行未对齐的读取和写入,并且可以正常工作。相反,/dev/rdisk基本上只是将读取或写入直接传递给设备,这意味着I / O的开始和结束需要在扇区边界上对齐。

如果进行读取或写入大于/dev/rdisk的一个扇区,该请求将直接通过。较低的层可能会将其分解(例如,由于USB协议中最大的有效负载大小,USB会将其分解为128KB的碎片),但是通常您可以获得更大,更高效的I / O。当通过dd进行流传输时,128KB到1MB的大小是相当不错的,可以在当前的非RAID硬件上获得接近最佳的性能。

/dev/disk的读写路径进行的缓存非常简单几乎死了即使不是绝对必要,它也会缓存。例如设备是否可以进行内存映射并直接传输到应用程序的缓冲区中。它执行小的(4KB)I / O,这会导致大量的每个I / O开销。它不会进行任何先读或后写。

#3 楼

/dev/disk/dev/rdisk对于HDD和SSD似乎工作不同。要检查它的MicroSD卡。刚刚将2GB磁盘映像写入了Sandisk Ultra MicroSD 64GB(https://www.amazon.com/gp/product/B073JYVKNX)。

重复了几次测试,但结果稳定:每秒17MB / s /dev/disk/dev/rdisk的20MB / s相比。将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)



然后我决定测试读取速度:/dev/disk为26MB / s,/dev/rdisk为87MB / s。将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 楼

我知道这是一个古老的话题,但是其他人可能会对我尝试过的速度带来的影响感兴趣。我想将MacBook Pro 13英寸Retina(带有Silicon Power 1TB固态硬盘)中的内部SSD备份到外部USB3.0 2.5英寸硬盘驱动器上,希望同时捕获macOS和BOOTCAMP分区。我最初的命令行是:

sudo dd if=/dev/disk0 of=/dev/disk2 bs=1m


结果是大约31.3MB /秒的复制速率。这太久了,让我久等了。因此,在第二次尝试时,命令行为:

sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m


使用/dev/rdisk而不是/dev/disk可以大大加快速度,达到大约98.4MB /秒!但是,它变得更好。因此,对于第三次尝试,我使用了以下命令行:

sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m conv=sparse


sparse选项告诉DD不要麻烦写输出全为0的输出块。很棒的是,即使在磁盘“满”区域的中间,它也比您想象的要快得多。在任何未满的驱动器上,您将拥有巨大的0块,从而进一步加快了DD的速度。到目前为止,至少到目前为止,DD几乎可以按照我的硬盘的理论传输速度运行:〜116.4MB /秒,但尚未达到那些大的空白区域。

给这些选项一个尝试–他们工作!请注意:仔细更改if=of=以正确指向(对于Macs)列出的正确驱动器:

diskutil list


评论


当您复制文件时,conv = sparse很棒。我担心在复制整个磁盘,分区或文件系统时可能会导致损坏,除非您100%确信该目标磁盘不包含零。

– G-Man说“恢复莫妮卡”
19年8月2日在22:05

#5 楼

至少在macOS High Sierra中,/ dev / disk似乎比/ dev / rdisk快得多。运行dd或ddrescue,使用/ dev / rdisk从磁高清复制到SSD的吞吐量比较为3.7MBps,使用/ dev / disk复制为45MBps。因此,在更高版本的macOS上,最好使用/ dev / disk而不是/ dev / rdisk以获得最佳性能。

评论


在2013年末运行MacOS 10.13.2的Macbook Pro上,虽然将内部SSD存储中的4.6GB raspbian-stretch映像写入具有dd和1MB bs的SD卡的SD / dev / rdisk仍然比/ dev / disk快得多。使用/ dev / disk花费了27.16分钟,而使用/ dev / rdisk仅花费了5.18分钟。

–数字瘾
18年1月22日在21:03

@digitaladdictions在最新的macOS上进行了一些测试:superuser.com/a/1346063/126537

– k06a
18年8月4日在7:27

#6 楼

我认为在争论哪个路径节点更快或更深入进行串行测试之前。我们应该考虑其他会极大影响最终读写速度的因素。

像Micro SD卡规格,Class 4/10 / HC I ...
sd读卡器芯片和接口, USB 1.1 / 2.0 / 3.0 / 3.1
操作系统总内存/可用内存,操作系统负载,
操作系统硬盘类型,HDD / SSD,HDD旋转速度和缓存大小,SSD大小/缓存/可用空间/ <硬盘界面,ata / sata / esata,

如果任何因素成为瓶颈,那么我们将得出错误的结论。

这是我的结果:
osx 10.12.6,ssd,

通过USB 2.0卡读取microSD 16G,并通过USB 3.0读写外部3.5英寸HDD,

15193+1 records in
15193+1 records out
15931539456 bytes transferred in 1423.067033 secs (11195214 bytes/sec)

通过内部卡读取microSD 32G并通过USB 3.0读取数据源是外部3.5英寸HDD,

0+253945 records in
0+253945 records out
15931539456 bytes transferred in 440.093686 secs (36200336 bytes/sec)


您可以看到,写入速度>读取速度! !