spu*_*der 148 disk-utility sd-card dd dev
根据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 倍。
ast*_*uct 110
接受的答案是正确的,但没有详细说明。
当您从用户空间访问它们时,/dev/disk
和之间的主要区别/dev/rdisk
之一/dev/disk
是缓冲。用于/dev/disk
将 I/O 分解为 4KB 块的读/写路径,它读入缓冲区缓存,然后复制到用户空间缓冲区(然后发出下一个 4KB 读……)。这很好,因为您可以进行未对齐的读取和写入,并且它可以正常工作。相比之下,/dev/rdisk
基本上只是将读取或写入直接传递给设备,这意味着 I/O 的开始和结束需要在扇区边界上对齐。
如果您对 进行了大于一个扇区的读取或写入操作/dev/rdisk
,则该请求将直接通过。较低层可能会将其分解(例如,由于 USB 协议中的最大有效负载大小,USB 会将其分解为 128KB 的片段),但您通常可以获得更大和更高效的 I/O。流式传输时,例如 via dd
,128KB 到 1MB 是相当不错的大小,可以在当前的非 RAID 硬件上获得接近最佳的性能。
由/dev/disk
的读写路径完成的缓存非常简单,几乎是脑死亡。即使不是绝对必要,它也会缓存;就像设备可以内存映射并直接传输到您的应用程序缓冲区一样。它执行小 (4KB) I/O,这会导致大量的 per-I/O 开销。它不进行任何预读或后写。
Dan*_*ton 101
来自man hdiutil
:
/dev/rdisk 节点是字符特殊设备,但在 BSD 意义上是“原始的”并强制块对齐 I/O。它们比缓冲区缓存更接近物理磁盘。另一方面,/dev/disk 节点是缓冲的块特殊设备,主要由内核的文件系统代码使用。
通俗地说/dev/rdisk
,几乎直接进入磁盘,/dev/disk
并通过更长更昂贵的路线
对于 HDD 和 SSD,它似乎/dev/disk
和/dev/rdisk
工作方式不同。想检查它是否有 MicroSD 卡。刚刚将 2GB 磁盘映像写入 Sandisk Ultra MicroSD 64GB ( https://www.amazon.com/gp/product/B073JYVKNX )。
反复测试几次,但效果稳定:17MB / s的为/dev/disk
VS 20MB /秒的/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)
Run Code Online (Sandbox Code Playgroud)写信给 /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)
Run Code Online (Sandbox Code Playgroud)然后,我决定测试读取速度:26MB / s的为/dev/disk
VS 87MB /秒的/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)
Run Code Online (Sandbox Code Playgroud)阅读自 /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)
Run Code Online (Sandbox Code Playgroud)小智 5
我知道这是一个旧线程,但其他人可能对我尝试过的速度影响感兴趣。我想将 MacBook Pro 13" Retina(带有 Silicon Power 1\xe2\x80\xafTB SSD)中的内部 SSD 备份到外部 USB\xe2\x80\xaf3.0 2.5"\xe2\x80\xaf 硬盘驱动器,想要捕获 macOS 和 BOOTCAMP 分区。我最初的命令行是:
\n\nsudo dd if=/dev/disk0 of=/dev/disk2 bs=1m\n
Run Code Online (Sandbox Code Playgroud)\n\n结果是复制速率约为 31.3\xe2\x80\xafMB/秒。这时间太长了,让我等不及了。因此,在第二次尝试时,命令行是:
\n\nsudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m\n
Run Code Online (Sandbox Code Playgroud)\n\n使用/dev/rdisk
而不是/dev/disk
显着加快速度,达到大约 98.4\xe2\x80\xafMB/秒!然而,它会变得更好。因此,对于第三次尝试,我使用了以下命令行:
sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m conv=sparse\n
Run Code Online (Sandbox Code Playgroud)\n\n稀疏选项告诉 DD 不要写入输入全为 0 的输出块。很酷的是,即使在磁盘“已满”区域的中间,速度也比您想象的要快得多。在任何未满的驱动器上,您都会有大量的 0,从而进一步加快 DD 速度。至少到目前为止,DD 仅仅以我的硬盘的理论传输速度运行:~116.4\xe2\x80\xafMB/秒,而且还没有达到那些大的空白区域。
\n\n尝试一下这些选项 \xe2\x80\x93 它们有效!请注意:请小心更改if=
and\xc2\xa0of=
以正确指向列出的正确驱动器(对于 Mac):
diskutil list\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
80843 次 |
最近记录: |