เหตุใด“ / dev / rdisk” เร็วกว่า“ / dev / disk” ประมาณ 20 เท่าใน Mac OS X


129

ตามเอกสาร rasbery piคุณสามารถโหลดระบบปฏิบัติการของคุณไปยังแฟลชการ์ดด้วย / dev / disk หรือ / dev / rdisk

rdisk หมายถึงดิสก์ดิบ

/ dev / disk เป็นอุปกรณ์ระดับบล็อกทำไม rdisk ถึงเร็วกว่าถึง 20 เท่า?

ใช้ Mac OSX

หมายเหตุ: ใน OS X แต่ละดิสก์อาจมีการอ้างอิงเส้นทางสองครั้งใน / dev: / dev / disk # เป็นอุปกรณ์ที่บัฟเฟอร์ซึ่งหมายถึงข้อมูลใด ๆ ที่ถูกส่งผ่านการประมวลผลเพิ่มเติม / dev / rdisk # เป็นเส้นทางดิบซึ่งเร็วกว่าและตกลงอย่างสมบูรณ์เมื่อใช้โปรแกรม dd บนการ์ด SD Class 4 ความแตกต่างนั้นเร็วกว่าประมาณ 20 เท่าโดยใช้เส้นทาง rdisk


3
ในฐานะที่เป็นบันทึกย่อฉันใช้การทดสอบและ rdisk ใช้เวลานานกว่าจริงมาก
spuder

4
ในฐานะที่เป็นอีกด้านหนึ่งฉันรู้สึกว่าฉันต้องทดสอบด้วยและพบว่าสำเนา rdisk (ผ่าน dd) นั้นเร็วกว่าการใช้ดิสก์คู่เกือบ 4 เท่า
Travis Griggs

Mac OSX 10.9.1 (MacBook Pro ขนาด 15 นิ้วช่วงต้นปี 2011)
Travis Griggs

2
ฉันคิดว่า "rdisk" เป็นคำที่สะกดผิดในคำแนะนำบางอย่างสำหรับภาพการ์ด SD Raspberry Pi ที่ฉันอ่าน เมื่อทำการตรวจสอบเพิ่มเติมฉันได้ค้นหาความแตกต่างและพบหัวข้อนี้ ปรากฎในกรณีของฉันมันเร็วกว่า 13 เท่าในการเขียนภาพ 1.7GB ไปยังการ์ด SD โดยใช้ / dev / rdisk แทน / dev / disk! Macbook Pro Retina 13 "รุ่นต้นปี 2558
tobias.mcnulty

2
ในฐานะที่เป็น Sididote อีกตัวฉันเพิ่งถ่ายภาพ Ubuntu ARM ไปยังการ์ด Sandisk Extreme Pro MicroSD ที่เพิ่งซื้อมา / dev / disk1 เขียนที่ 2.3 MB / s ในขณะที่ / dev / rdisk1 เขียนที่ 83.7 MB / s หรือ 36.4 เท่าเร็ว
DanielSmedegaardBuus

คำตอบ:


93

จากman hdiutil:

/ dev / rdisk nodes เป็นอุปกรณ์พิเศษสำหรับอักขระ แต่เป็น "raw" ในความรู้สึก BSD และ I / O ที่จัดบล็อกแรง พวกเขาอยู่ใกล้กับดิสก์ทางกายภาพกว่าแคชบัฟเฟอร์ ในทางกลับกัน / dev / disk nodes เป็นอุปกรณ์พิเศษ block-buffer และถูกใช้เป็นหลักโดยรหัสระบบไฟล์ของเคอร์เนล

ในแง่ของคนธรรมดา/dev/rdiskไปที่ดิสก์โดยตรงและ/dev/diskผ่านเส้นทางที่มีราคาแพงกว่าอีกต่อไป


14
เหตุใดจึงต้องใช้ดิสก์เมื่อคุณสามารถใช้ rdisk ได้
user391339

20
@ user391339 เพราะการแคชยังคงเป็นสิ่งที่ต้องการ ในกรณีที่คุณมีสื่อบันทึกข้อมูลแบบถอดได้คุณต้องการรับข้อมูลบนอุปกรณ์ทางกายภาพโดยเร็วที่สุดเนื่องจากคุณต้องการข้อมูลในตำแหน่งทางกายภาพอื่น ฮาร์ดไดรฟ์ภายในเป็นเรื่องราวที่แตกต่าง คุณมักจะไม่พกพาไปไหนมาไหนดังนั้นคุณไม่สนใจว่าข้อมูลจะถูกเขียนไปยังอุปกรณ์ใด เมื่อคุณแคชข้อมูลที่เขียน / อ่านจากอุปกรณ์นั่นเป็นวิธีที่มีราคาแพงกว่าในการเขียนลงดิสก์ แต่โปรแกรมของคุณยังเร็วกว่าเนื่องจากไม่ต้องรอจนกว่าข้อมูลทั้งหมดที่พวกเขาต้องการจะเขียนนั้นจะถูกเขียนลงดิสก์
Kritzefitz

@Dan, Re "บังคับ"; ความหมาย?
Pacerier

ไม่แน่ใจว่าคำอธิบายของ Krit ใช้ได้สำหรับฉัน กรณีของฉันอาจเป็นบิตพิเศษที่ต้องการทำดิสก์ภายนอกขนาดใหญ่ที่เร็วขึ้นการสแกนครั้งเดียวและฉันไม่แน่ใจว่าวิธีการใดที่ใช้งานได้ดีกว่านี้ แต่อย่างอื่นฉันก็ยังใช้งานได้ตามปกติ การปฏิบัติ ใน Windows แต่ฉันมักจะชอบโปรไฟล์ 'ถอดปลั๊กอย่างรวดเร็ว' ซึ่งฉันคิดว่าจะสะท้อนโหมด 'ดิบ' ของ Mac ได้มากขึ้นเพราะโฆษณาระบบไฟล์เสียหายน้อยลงในเหตุการณ์การสูญเสียการเชื่อมต่อที่ไม่คาดคิด
Pysis

96

คำตอบที่ยอมรับนั้นถูกต้อง แต่ไม่ได้ลงรายละเอียดมากนัก

หนึ่งในความแตกต่างที่สำคัญระหว่าง/dev/diskและ/dev/rdiskเมื่อคุณเข้าถึงจากพื้นที่ผู้ใช้/dev/diskคือบัฟเฟอร์ เส้นทางการอ่าน / เขียนสำหรับการ/dev/diskแบ่ง I / O ลงในกลุ่ม 4KB ซึ่งจะอ่านลงในแคชบัฟเฟอร์จากนั้นคัดลอกลงในบัฟเฟอร์พื้นที่ผู้ใช้ (แล้วออก 4KB อ่าน…ถัดไป) นี่เป็นสิ่งที่ดีที่คุณสามารถอ่านและเขียนแบบไม่ตรงแนวได้และใช้งานได้ ในทางตรงกันข้าม/dev/rdiskโดยทั่วไปเพียงแค่ส่งผ่านการอ่านหรือเขียนตรงไปยังอุปกรณ์ซึ่งหมายความว่าจุดเริ่มต้นและจุดสิ้นสุดของ I / O จะต้องสอดคล้องกับขอบเขตของเซกเตอร์

หากคุณทำการอ่านหรือเขียนที่มีขนาดใหญ่กว่า 1 ภาคให้กับ/dev/rdiskคำขอนั้นจะถูกส่งผ่านทันที เลเยอร์ที่ต่ำกว่าอาจแตกออก (เช่น USB แบ่งเป็น 128KB เนื่องจากขนาดของข้อมูลที่บรรจุสูงสุดในโปรโตคอล USB) แต่โดยทั่วไปคุณสามารถรับ I / O ที่ใหญ่และมีประสิทธิภาพมากขึ้น เมื่อสตรีมมิ่งเช่นddขนาด 128KB ถึง 1MB เป็นขนาดที่ค่อนข้างดีเพื่อให้ได้ประสิทธิภาพที่ใกล้เคียงที่สุดกับฮาร์ดแวร์ที่ไม่ใช่ RAID ปัจจุบัน

การแคชที่ดำเนินการโดย/dev/diskเส้นทางการอ่านและเขียนของนั้นง่ายมากและเกือบจะทำให้สมองตาย มันแคชแม้ว่าจะไม่จำเป็นอย่างเคร่งครัด; เช่นถ้าอุปกรณ์สามารถแม็พหน่วยความจำและโอนโดยตรงไปยังบัฟเฟอร์ของแอพของคุณ มันทำ I / O ขนาดเล็ก (4KB) ซึ่งนำไปสู่ค่าใช้จ่ายต่อ I / O จำนวนมาก มันไม่ได้ทำการอ่านล่วงหน้าหรือเขียนไว้ข้างหลัง


6

ดูเหมือน/dev/diskและ/dev/rdiskทำงานแตกต่างกันสำหรับ HDD และ SSD ต้องการตรวจสอบการ์ด MicroSD เพิ่งเขียนอิมเมจดิสก์ 2GB ลงใน Sandisk Ultra MicroSD 64GB ( https://www.amazon.com/gp/product/B073JYVKNX )

การทดสอบซ้ำหลายครั้ง แต่ผลที่มีเสถียรภาพ: 17MB / sสำหรับ/dev/diskVS 20MB / s/dev/rdiskสำหรับ การเปลี่ยนbs=1mเพื่อbs=16mให้ความเร็วในการเขียนไม่แตกต่างกันอย่างสิ้นเชิง

  1. เขียนถึง /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. เขียนถึง /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 / sสำหรับ/dev/diskVS 87MB / s/dev/rdiskสำหรับ การเปลี่ยนbs=1mเพื่อbs=16mให้ความเร็วการอ่านไม่แตกต่างกันอย่างสิ้นเชิง

  1. อ่านจาก /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. อ่านจาก /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

ฉันรู้ว่านี่เป็นเธรดเก่า แต่คนอื่น ๆ อาจสนใจความหมายความเร็วของสิ่งที่ฉันได้ลอง ฉันต้องการสำรองข้อมูล SSD ภายในของฉันใน MacBook Pro 13 "Retina (ด้วย Silicon Power 1 TB SSD) ไปยังฮาร์ดดิสก์ภายนอก USB 3.0 2.5" ต้องการเก็บทั้ง macOS และ BOOTCAMP บรรทัดคำสั่งเริ่มต้นของฉันคือ:

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

ผลลัพธ์มีอัตราการคัดลอกที่ ~ 31.3 MB / วินาที นี่มันนานเกินไปที่จะรอฉัน ดังนั้นในความพยายามครั้งที่สองบรรทัดคำสั่งคือ:

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

ใช้/dev/rdiskแทน/dev/diskสิ่งเร่งความเร็วสูงถึงประมาณ 98.4 MB / วินาที! อย่างไรก็ตามมันจะดีขึ้นกว่าเดิม ดังนั้นสำหรับความพยายามครั้งที่สามฉันใช้บรรทัดคำสั่งนี้:

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

ตัวเลือกกระจัดกระจายบอก DD ที่จะไม่รบกวนการเขียนไปยังบล็อกผลลัพธ์ที่เป็น 0s ทั้งหมดในอินพุต สิ่งที่เจ๋งคือมันเร็วกว่าที่คุณคิดแม้ในขณะที่อยู่กลางพื้นที่ "เต็ม" ของดิสก์ ในไดรฟ์ที่ไม่เต็มคุณจะมีชิ้นใหญ่ 0 วินาทีเร่ง DD ต่อไป อย่างน้อยที่สุด DD ก็กำลังวิ่งไปตามความเร็วในการถ่ายโอนทางทฤษฎีของฮาร์ดดิสก์ของฉัน: ~ 116.4 MB / วินาทีและยังไม่ถึงพื้นที่ว่างขนาดใหญ่เหล่านั้น

ลองใช้ตัวเลือกเหล่านี้ - ใช้งานได้! โปรดทราบ: เปลี่ยนอย่างระมัดระวังif=และ  of=ชี้ไปที่ไดรฟ์ที่ถูกต้องที่ระบุโดย (สำหรับ Mac):

diskutil list

1
conv=sparseดีมากเมื่อคุณคัดลอกไฟล์    ฉันจะกังวลว่ามันอาจจะแนะนำการทุจริตเมื่อคัดลอกดิสก์ทั้ง พาร์ทิชันหรือระบบแฟ้ม ,ถ้าคุณรู้ว่ามีความมั่นใจ 100% ว่าดิสก์ปลายทางมีอะไร แต่เลขศูนย์
G-Man

1

สำหรับบันทึกใน macOS High Sierra อย่างน้อย / dev / ดิสก์จะเร็วกว่า / dev / rdisk มาก ใช้ dd หรือ ddrescue ทั้งการเปรียบเทียบปริมาณงานของฉันคัดลอกจาก Magnetic HD ไปยัง SSD คือ 3.7MBps โดยใช้ / dev / rdisk และ 45MBps ใช้ / dev / disk ดังนั้นสำหรับ macOS รุ่นหลัง ๆ อาจเป็นการดีที่สุดที่จะใช้ / dev / disk แทน / dev / rdisk เพื่อประสิทธิภาพที่ดีที่สุด


2
ในขณะที่เขียนรูปภาพยืดราสเบียน 4.6GB จากที่เก็บข้อมูล SSD ภายในไปยังการ์ด SD ที่มี dd และ bs 1MB / dev / rdisk ยังคงทำงานได้เร็วกว่า / dev / ดิสก์ใน macbook 2013 รุ่นล่าสุดที่ใช้ macOS 10.13.2 ใช้เวลา 27.16 นาทีโดยใช้ / dev / ดิสก์และใช้เวลาเพียง 5.18 นาทีโดยใช้ / dev / rdisk
digitaladdictions

@digitaladdictions เพิ่งทำการทดสอบบางอย่างกับ macOS ล่าสุด: superuser.com/a/1346063/126537
k06a

0

ฉันคิดว่าก่อนที่จะเถียงว่าโหนพา ธ ใดที่เร็วกว่าหรือดำน้ำในการทดสอบแบบอนุกรม เราควรพิจารณาปัจจัยอื่น ๆ ที่จะมีผลต่อความเร็วในการอ่าน / เขียนขั้นสุดท้ายอย่างมาก

เช่นสเป็คการ์ด Micro SD, คลาส 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,

อ่าน microSD 16G ด้วยการ์ด usb 2.0 อ่านและเขียนไปยัง HDD 3.5 นิ้วภายนอกโดย usb 3.0

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

เขียน microSD 32G ผ่านการอ่านการ์ดภายในและแหล่งข้อมูลภายนอก HDD 3.5 นิ้วโดย usb 3.0

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

คุณสามารถดูเขียนความเร็ว> อ่านความเร็ว !!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.