Tại sao là Giảm giá / dev / rdisk, nhanh hơn khoảng 20 lần so với ăn / dev / đĩa, trong Mac OS X


129

Theo tài liệu pi rasbery pi , Bạn có thể tải HĐH của mình vào thẻ flash bằng / dev / đĩa hoặc / dev / rdisk.

rdisk là viết tắt của đĩa thô.

/ dev / đĩa là một thiết bị cấp khối, tại sao ndisk lại nhanh hơn 20 lần?

Sử dụng Mac OSX

Lưu ý: Trong OS X, mỗi đĩa có thể có hai tham chiếu đường dẫn trong / dev: / dev / đĩa # là một thiết bị được đệm, có nghĩa là bất kỳ dữ liệu nào được gửi đều được xử lý thêm. / dev / rdisk # là một đường dẫn thô, nhanh hơn nhiều và hoàn toàn ổn khi sử dụng chương trình dd. Trên thẻ SD Class 4, sự khác biệt nhanh hơn khoảng 20 lần khi sử dụng đường dẫn thứ ba.


3
Như một lưu ý phụ, tôi đã chạy thử nghiệm và thực sự mất nhiều thời gian hơn.
kẻ lừa đảo

4
Như một lưu ý phụ khác, tôi cảm thấy mình cũng phải kiểm tra và nhận thấy rằng một bản sao nhanh nhất (thông qua dd) nhanh hơn gần 4 lần so với sử dụng bản sao đĩa.
Travis Griggs

Mac OSX 10.9.1 (MacBook Pro 15 inch, đầu năm 2011)
Travis Griggs

2
Tôi nghĩ rằng "ndisk" là một lỗi đánh máy trong một số hướng dẫn cho hình ảnh thẻ SD Raspberry Pi mà tôi đang đọc. Sau khi điều tra thêm, tôi đã tìm ra sự khác biệt và tìm thấy chủ đề này. Hóa ra trong trường hợp của tôi, nó nhanh hơn 13 lần để ghi hình ảnh 1,7 GB vào thẻ SD bằng cách sử dụng / dev / rdisk thay vì / dev / đĩa! Macbook Pro Retina 13 ", model đầu năm 2015.
tobias.mcn Khoa

2
Là một sidenote khác, tôi vừa gửi một hình ảnh Ubuntu ARM vào thẻ Microisk Extreme Pro mới mua của tôi. / dev / đĩa1 đã ghi ở mức 2,3 MB / s, trong khi / dev / rdisk1 đã ghi ở mức 83,7 MB / s, hoặc nhanh hơn 36,4 lần.
DanielSmedegaardBuus 11/03/2016

Câu trả lời:


93

Từ man hdiutil:

Các nút / dev / rdisk là các thiết bị đặc biệt, nhưng là "thô" theo nghĩa BSD và lực lượng I / O được căn chỉnh theo khối. Chúng gần với đĩa vật lý hơn bộ đệm. Mặt khác, các nút / dev / đĩa là các thiết bị khối đặc biệt được đệm và được sử dụng chủ yếu bởi mã hệ thống tập tin của kernel.

Trong các điều khoản của giáo dân /dev/rdiskhầu như trực tiếp vào đĩa và /dev/diskđi qua một tuyến đường đắt hơn dài hơn


14
Tại sao sử dụng đĩa khi bạn có thể sử dụng rdisk?
dùng391339

20
@ user391339 Bởi vì bộ nhớ đệm vẫn là một điều mong muốn. Trong trường hợp bạn có phương tiện lưu động, bạn muốn lấy dữ liệu trên thiết bị vật lý càng nhanh càng tốt, vì bạn muốn dữ liệu ở một vị trí thực tế khác. Ổ cứng nội bộ là một câu chuyện khác nhau. Bạn thường không mang theo chúng, vì vậy bạn không quan tâm khi dữ liệu thực sự được ghi vào thiết bị. Khi bạn lưu trữ dữ liệu được ghi vào / đọc từ các thiết bị, cách ghi vào đĩa đắt hơn, nhưng các chương trình của bạn vẫn nhanh hơn, vì họ không cần đợi cho đến khi tất cả dữ liệu họ muốn ghi được ghi vào đĩa.
Kritzefitz

@Dan, Re "ép buộc"; Ý nghĩa?
Pacerier

Không chắc lời giải thích của Krit làm việc cho tôi. Trường hợp của tôi có thể là một chút đặc biệt muốn thực hiện quét một lần đĩa ngoài lớn nhanh hơn và tôi không chắc phương pháp nào hoạt động tốt hơn cho điều đó, nhưng nếu không thì tôi vẫn ổn với việc sử dụng bình thường và chờ đợi để loại bỏ như thường thấy thực hành. Tuy nhiên, trong Windows, tôi luôn ưu tiên cấu hình 'rút phích cắm nhanh' mà tôi đoán là chế độ 'thô' hơn của Mac vì nó quảng cáo ít hỏng hệ thống tệp trong các sự kiện mất kết nối không mong muốn.
Pysis

96

Câu trả lời được chấp nhận là đúng, nhưng nó không đi sâu vào chi tiết.

Một trong những khác biệt chính giữa /dev/disk/dev/rdisk, khi bạn truy cập chúng từ không gian người dùng, đó /dev/disklà bộ đệm. Đường dẫn đọc / ghi để /dev/diskchia I / O thành các khối 4KB, nó đọc vào bộ đệm bộ đệm, sau đó sao chép vào bộ đệm không gian người dùng (và sau đó phát hành tiếp theo đọc 4KB tiếp theo). Điều này là tốt ở chỗ bạn có thể đọc và viết không được phân bổ, và nó chỉ hoạt động. Ngược lại, /dev/rdiskvề cơ bản chỉ cần chuyển đọc hoặc ghi thẳng vào thiết bị, có nghĩa là bắt đầu và kết thúc I / O cần được căn chỉnh trên ranh giới của ngành.

Nếu bạn đọc hoặc viết lớn hơn một lĩnh vực /dev/rdisk, yêu cầu đó sẽ được chuyển thẳng qua. Các lớp thấp hơn có thể phá vỡ nó (ví dụ: USB chia nó thành các mảnh 128KB do kích thước tải trọng tối đa trong giao thức USB), nhưng bạn thường có thể nhận được I / O lớn hơn và hiệu quả hơn. Khi phát trực tuyến, như qua dd, 128KB đến 1MB có kích thước khá tốt để có được hiệu năng gần như tối ưu trên phần cứng không phải RAID hiện tại.

Bộ nhớ đệm được thực hiện bởi /dev/diskcác đường dẫn đọc và ghi rất đơn giản và gần như chết não. Nó lưu trữ ngay cả khi không thực sự cần thiết; như nếu thiết bị có thể ánh xạ bộ nhớ và chuyển trực tiếp vào bộ đệm ứng dụng của bạn. Nó có I / O nhỏ (4KB), dẫn đến rất nhiều chi phí cho mỗi I / O. Nó không làm bất kỳ đọc trước hoặc viết phía sau.


6

Nó dường như /dev/disk/dev/rdiskhoạt động khác nhau cho ổ cứng và SSD. Muốn kiểm tra thẻ MicroSD. Chỉ cần ghi hình ảnh đĩa 2 GB vào Sandisk Ultra MicroSD 64GB ( https://www.amazon.com/gp/product/B073JYVKNX ).

Các thử nghiệm lặp đi lặp lại nhiều lần, nhưng kết quả vẫn ổn định: 17MB / s cho /dev/diskso với 20MB / s cho /dev/rdisk. Thay đổi bs=1mđể bs=16mcung cấp hoàn toàn không có sự khác biệt trong tốc độ viết.

  1. Viêt thư cho /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)
    
  2. Viêt thư cho /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)
    

Sau đó, tôi quyết định kiểm tra tốc độ đọc: 26MB / s cho /dev/diskso với 87MB / s cho /dev/rdisk. Thay đổi bs=1mđể bs=16mhoàn toàn không có sự khác biệt về tốc độ đọc.

  1. Đọc từ /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)
    
  2. Đọc từ /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)
    

2

Tôi biết rằng đây là một chủ đề cũ, nhưng những người khác có thể quan tâm đến ý nghĩa tốc độ của những gì tôi đã thử. Tôi muốn sao lưu SSD nội bộ trong MacBook Pro 13 "Retina (với SSD Silicon Power 1 TB) vào ổ đĩa cứng USB 3.0 2.5 bên ngoài, muốn chụp cả phân vùng macOS và BOOTCAMP. Dòng lệnh ban đầu của tôi là:

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

Kết quả là tốc độ sao chép ~ 31,3 MB / giây. Điều này chỉ là quá lâu để giữ cho tôi chờ đợi. Vì vậy, trong lần thử thứ hai, dòng lệnh là:

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

Sử dụng /dev/rdiskthay vì /dev/disktăng tốc đáng kể, lên tới khoảng 98,4 MB / giây! Tuy nhiên, nó thậm chí còn tốt hơn. Vì vậy, trong lần thử thứ ba, tôi đã sử dụng dòng lệnh này:

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

Tùy chọn thưa thớt bảo DD không bận tâm ghi vào các khối đầu ra là tất cả 0 trên đầu vào. Điều thú vị là điều này trở nên nhanh hơn nhiều so với bạn nghĩ, ngay cả khi ở giữa các khu vực "đầy đủ" của đĩa. Trên bất kỳ ổ đĩa nào không đầy, bạn sẽ có số lượng lớn 0 giây, tăng tốc hơn nữa DD. Cho đến nay, ít nhất, DD chỉ chạy theo tốc độ truyền lý thuyết của đĩa cứng của tôi: ~ 116,4 MB / giây và nó vẫn chưa đạt đến những vùng trống lớn đó.

Hãy thử các tùy chọn này - chúng hoạt động! Xin lưu ý: CẨN THẬN thay đổi if=và  of=chỉ đúng vào các ổ đĩa chính xác được liệt kê bởi (đối với máy Mac):

diskutil list

1
conv=sparsethật tuyệt vời khi bạn sao chép tập tin.    Tôi sẽ lo ngại rằng nó có thể giới thiệu tham nhũng khi sao chép toàn bộ đĩa, phân vùng hay một  hệ thống tập tin , trừ khi bạn biết với 100% chắc chắn rằng đĩa đích chứa gì, nhưng zero.
G-Man

1

Đối với bản ghi, trong macOS High Sierra ít nhất, / dev / đĩa dường như nhanh hơn nhiều so với / dev / rdisk. Chạy dd hoặc ddresTHER, sao chép so sánh thông lượng của tôi từ HD từ tính sang SSD là 3,7MBps khi sử dụng / dev / rdisk và 45MBps khi sử dụng / dev / đĩa. Vì vậy, trên các phiên bản macOS sau này, tốt nhất nên sử dụng / dev / đĩa thay vì / dev / rdisk để có hiệu suất tốt nhất.


2
Trong khi viết một hình ảnh kéo dài 4,6GB từ bộ nhớ SSD bên trong sang thẻ SD với dd và bs 1MB / dev / rdisk vẫn hoạt động nhanh hơn nhiều so với / dev / đĩa trên macbook pro 2013 chạy macOS 10.13.2. Mất 27,16 phút khi sử dụng / dev / đĩa và chỉ 5,18 phút khi sử dụng / dev / rdisk.
digitaladdictions

@digitaladdictions vừa thực hiện một vài thử nghiệm trên macOS mới nhất: superuser.com/a/1346063/126537
k06a

0

Tôi nghĩ trước khi tranh luận nút đường dẫn nào nhanh hơn hoặc lao vào kiểm tra nối tiếp. Chúng ta nên xem xét các yếu tố khác sẽ ảnh hưởng đáng kể đến tốc độ đọc / ghi cuối cùng.

như thông số kỹ thuật của thẻ Micro SD, lớp 4/10 / HC I ... giao diện và chip đầu đọc thẻ sd, usb 1.1 / 2.0 / 3.0 / 3.1 os tổng bộ nhớ / bộ nhớ trống, tải os, loại ổ cứng os, ổ cứng / SSD, ổ cứng tốc độ quay và kích thước bộ đệm, kích thước SSD / bộ nhớ cache / không gian trống / giao diện ổ cứng os, ata / sata / esata,

nếu bất kỳ yếu tố nào trở thành nút cổ chai, thì chúng ta sẽ có kết luận sai.

đây là kết quả của tôi: osx 10.12.6, ssd,

đọc thẻ nhớ microSD 16G bằng thẻ USB 2.0, đọc và ghi vào ổ cứng ngoài 3,5 inch bằng usb 3.0,

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

ghi thẻ nhớ trong và thẻ dữ liệu qua thẻ nhớ microSD 32G qua ổ cứng ngoài 3,5 inch bằng usb 3.0,

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

bạn có thể thấy, tốc độ ghi> tốc độ đọc !!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.