क्यों मैक ओएस एक्स में "/ देव / डिस्क" की तुलना में "/ देव / rdisk" लगभग 20 गुना अधिक तेज है


129

Rasbery pi प्रलेखन के अनुसार , आप अपने OS को फ्लैश कार्ड में / dev / डिस्क या / dev / ddisk के साथ लोड कर सकते हैं।

कच्चे डिस्क के लिए rdisk का अर्थ है

/ dev / डिस्क एक ब्लॉक स्तर की डिवाइस है, 20 बार तेजी से rdisk क्यों होगी?

मैक OSX का उपयोग करना

नोट: OS X में प्रत्येक डिस्क में दो पथ संदर्भ हो सकते हैं / dev / / dev / डिस्क # एक बफर डिवाइस है, जिसका अर्थ है कि किसी भी डेटा को भेजा जा रहा है अतिरिक्त प्रसंस्करण। / dev / rdisk # एक कच्चा रास्ता है, जो बहुत तेज़ है, और dd प्रोग्राम का उपयोग करते समय पूरी तरह से ठीक है। कक्षा 4 के एसडी कार्ड में rdisk पाथ का उपयोग करके अंतर लगभग 20 गुना तेज था।


3
एक साइड नोट के रूप में, मैंने एक परीक्षण चलाया और rdisk वास्तव में अधिक समय लगा।
स्पर

4
एक अन्य पक्ष के रूप में, मुझे लगा कि मुझे तब भी परीक्षण करना था, और पाया कि डिस्क समकक्ष का उपयोग करने की तुलना में एक rdisk कॉपी (dd के माध्यम से) लगभग 4 गुना तेज थी।
ट्रैविस ग्रिग्स

मैक OSX 10.9.1 (मैकबुक प्रो 15-इंच, 2011 की शुरुआत)
ट्रैविस ग्रिग्स

2
मुझे लगा कि रास्पबेरी पाई एसडी कार्ड छवि जो मैं पढ़ रहा था, उसके लिए कुछ निर्देशों में "rdisk" एक टाइपो था। आगे की जांच में मैंने अंतर को देखा और इस सूत्र को पाया। मेरे मामले में यह 13 गुना तेज था, एक 1.7 कार्ड छवि को लिखने के लिए SD कार्ड / dev / डिस्क के बजाय / dev / rdisk का उपयोग कर रहा था! मैकबुक प्रो रेटिना 13 ", 2015 की शुरुआत में मॉडल।
Tobias.mcnademy

2
अभी तक एक अन्य सिडेनोट के रूप में, मैंने अपने नए खरीदे गए सैंडिस्क एक्सट्रीम प्रो माइक्रोएसडी कार्ड में केवल उबंटू एआरएम छवि को dd'ed किया। / dev / disk1 ने 2.3 MB / s पर लिखा, जबकि / dev / rdisk1 ने 83.7 MB / s, या 36.4 गुना तेज गति से लिखा।
डैनियलस्मेडगार्डबस

जवाबों:


93

से man hdiutil:

/ dev / rdisk नोड चरित्र-विशेष उपकरण हैं, लेकिन BSD अर्थों में "कच्चे" हैं और I / O को ब्लॉक-संरेखित करते हैं। वे बफर कैश की तुलना में भौतिक डिस्क के करीब हैं। दूसरी ओर / dev / डिस्क नोड्स, बफ़र किए गए ब्लॉक-विशेष डिवाइस हैं और मुख्य रूप से कर्नेल के फाइल सिस्टम कोड द्वारा उपयोग किए जाते हैं।

आम आदमी की शर्तें /dev/rdiskलगभग सीधे डिस्क पर /dev/diskजाती हैं और अधिक लंबे मार्ग से गुजरती हैं


14
जब आप rdisk का उपयोग कर सकते हैं तो डिस्क का उपयोग क्यों करें?
user391339

20
@ user391339 क्योंकि कैशिंग अभी भी एक वांछनीय चीज है। ऐसे मामलों में जहां आपके पास हटाने योग्य मीडिया है, आप जितनी जल्दी हो सके भौतिक डिवाइस पर डेटा प्राप्त करना चाहते हैं, क्योंकि आप किसी अन्य भौतिक स्थान में डेटा चाहते हैं। आंतरिक हार्ड ड्राइव एक अलग कहानी है। आप आमतौर पर उन्हें इधर-उधर नहीं ले जाते हैं, इसलिए आपको परवाह नहीं है कि डेटा वास्तव में डिवाइस को लिखा गया है। जब आप डेटा को उन डिवाइसों से पढ़ना / लिखना पढ़ते हैं जो डिस्क पर लिखने का एक अधिक महंगा तरीका है, लेकिन आपके प्रोग्राम अभी भी तेज हैं, क्योंकि उन्हें तब तक इंतजार करने की आवश्यकता नहीं है जब तक कि वे जो डेटा लिखना चाहते हैं वह डिस्क पर नहीं लिखा जाता है।
क्रिट्ज़फ़िट्ज़

@ डन, रे "फोर्स"; जिसका अर्थ है?
पचेरियर

सुनिश्चित नहीं है कि क्रिट का स्पष्टीकरण मेरे लिए काम करता है। मेरा मामला थोड़ा बड़ा हो सकता है कि एक बार की बड़ी बाहरी डिस्क को एक बार स्कैन करने की इच्छा हो, और मुझे यकीन नहीं है कि कौन सी विधि उसके लिए बेहतर काम करती है, लेकिन अन्यथा मैं अभी भी सामान्य उपयोग के साथ ठीक हूं और इसे बेदखल करने के लिए इंतजार कर रहा हूं अभ्यास। विंडोज में हालांकि मैंने हमेशा 'क्विक अनप्लग' प्रोफाइल को प्राथमिकता दी है, जो मुझे लगता है कि यह मैक के अधिक 'रॉ' मोड का अनुमान लगाता है क्योंकि यह अप्रत्याशित कनेक्शन लॉस इवेंट्स में कम फाइल सिस्टम भ्रष्टाचार का विज्ञापन करता है।
पिसिस

96

स्वीकृत उत्तर सही है, लेकिन यह बहुत विस्तार में नहीं जाता है।

के बीच मुख्य अंतर यह है /dev/diskऔर /dev/rdisk, जब आप उन्हें उपयोगकर्ता अंतरिक्ष से भी एक्सेस, वह यह है कि /dev/diskबफ़र कर रहा है। /dev/disk4KB विखंडू में I / O को तोड़ने के लिए पढ़ने / लिखने का मार्ग , जिसे वह बफर कैश में पढ़ता है, और फिर उपयोगकर्ता स्पेस बफर में कॉपी करता है (और फिर अगले 4KB रीड जारी करता है ...)। यह अच्छा है कि आप बिना पढ़े लिखे और लिख सकते हैं, और यह सिर्फ काम करता है। इसके विपरीत, /dev/rdiskमूल रूप से डिवाइस को सीधे पढ़ने या लिखने के लिए पास किया जाता है, जिसका अर्थ है कि आई / ओ की शुरुआत और अंत को सेक्टर की सीमाओं पर गठबंधन करने की आवश्यकता है।

यदि आप पढ़ते हैं या एक से अधिक क्षेत्र में लिखते हैं /dev/rdisk, तो वह अनुरोध सीधे पारित किया जाएगा। निचली परतें इसे तोड़ सकती हैं (उदाहरण के लिए, USB प्रोटोकॉल में अधिकतम पेलोड आकार के कारण USB इसे 128KB टुकड़ों में तोड़ देता है), लेकिन आप आमतौर पर I / Os बड़ा और अधिक कुशल हो सकते हैं। जब स्ट्रीमिंग, जैसे कि के माध्यम से dd, 128KB से 1MB वर्तमान गैर-RAID हार्डवेयर पर अधिकतम-इष्टतम प्रदर्शन पाने के लिए बहुत अच्छे आकार हैं।

कैशिंग द्वारा /dev/diskपढ़ा और लिखा जा रहा है पथ बहुत ही सरल और लगभग मस्तिष्क मृत है। यह सख्ती से आवश्यक नहीं होने पर भी कैश करता है; जैसे कि डिवाइस मेमोरी मैप कर सकता है और सीधे आपके ऐप के बफर में ट्रांसफर कर सकता है। यह छोटा (4KB) I / Os करता है, जिसके कारण प्रति-I / O ओवरहेड हो जाता है। यह न आगे पढ़ता है और न पीछे लिखता है।


6

यह HDDs और SSDs के लिए अलग-अलग लगता है /dev/diskऔर /dev/rdiskकाम करता है। वाना ने इसे माइक्रोएसडी कार्ड के लिए चेक किया। सैंडिस्क अल्ट्रा माइक्रोएसडी 64 जीबी ( https://www.amazon.com/gp/product/B073JYVKNX ) पर सिर्फ 2GB डिस्क इमेज लिखी ।

: बार-बार जांच के लिए कई बार, लेकिन परिणाम स्थिर थे 17MB / एस के लिए /dev/diskबनाम 20MB / एस के लिए /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/diskबनाम 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

मुझे पता है कि यह एक पुराना धागा है, लेकिन अन्य लोगों ने मेरी कोशिश की गति के निहितार्थ में रुचि हो सकती है। मैं अपने मैकबुक प्रो 13 "रेटिना (एक सिलिकॉन पावर 1 टीबी एसएसडी के साथ) में अपने आंतरिक एसएसडी को एक बाहरी यूएसबी 3.0 2.5" हार्ड डिस्क ड्राइव पर बैकअप करना चाहता हूं, दोनों macOS और BOOTCAMP विभाजन को कैप्चर करना चाहता हूं। मेरी प्रारंभिक कमांड लाइन थी:

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

परिणाम ~ 31.3 एमबी / सेकंड की एक कॉपी दर थे। मुझे इंतजार करने में बस इतना ही समय था। तो, दूसरे प्रयास में, कमांड लाइन थी:

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

लगभग 98.4 MB / सेकंड तक, काफी स्प्रेड चीजों के /dev/rdiskबजाय का उपयोग करना /dev/disk! हालाँकि, यह और भी बेहतर हो जाता है। तो, तीसरे प्रयास के लिए, मैंने इस कमांड लाइन का उपयोग किया:

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

विरल विकल्प डीडी को बताता है कि आउटपुट ब्लॉक को लिखने में परेशान न करें जो इनपुट पर सभी 0s हैं। क्या अच्छा है कि यह डिस्क के "पूर्ण" क्षेत्रों के बीच में रहते हुए, जितना आप सोचते हैं, उससे कहीं अधिक तेज़ हो जाता है। किसी भी ड्राइव पर जो भरी हुई नहीं है, आपके पास 0s का बड़ा हिस्सा होगा, जिससे डीडी को और अधिक गति मिलेगी। अब तक, कम से कम, डीडी मेरी हार्ड डिस्क की सैद्धांतिक हस्तांतरण गति के साथ चलने के बारे में है: ~ 116.4 एमबी / सेकंड, और यह अभी तक उन बड़े खाली क्षेत्रों तक नहीं पहुंचा है।

इन विकल्पों को आज़माएं - वे काम करते हैं! कृपया ध्यान दें: (मैक के लिए) द्वारा सूचीबद्ध सही ड्राइव को सही ढंग से बदलने if=और  of=ठीक से इंगित करने के लिए:

diskutil list

1
conv=sparseजब आप फ़ाइलों को कॉपी कर रहे हैं तो बहुत अच्छा है    जब तक आप 100% निश्चितता के साथ यह नहीं जान लेते कि गंतव्य डिस्क में शून्य के अलावा कुछ भी नहीं है , तब तक मैं चिंतित हूँ कि यह एक संपूर्ण डिस्क, एक पार्टीशन या एक  फाइल सिस्टम को कॉपी करते समय हो सकता है ।
जी-मैन

1

रिकॉर्ड के लिए, macOS हाई सिएरा में कम से कम, / dev / डिस्क / dev / rdisk की तुलना में अधिक तेज़ प्रतीत होता है। या तो dd या ddrescue चल रहा है, मेरी थ्रूपुट की तुलना चुंबकीय HD से SSD तक की प्रतिलिपि 3.7MBps / dev / rdisk, और 45MBps का उपयोग करके / dev / डिस्क का उपयोग करके कर रहा था। इसलिए, macOS के बाद के संस्करणों में, सर्वश्रेष्ठ प्रदर्शन के लिए / dev / rdisk के बजाय / dev / डिस्क का उपयोग करना सबसे अच्छा हो सकता है।


2
आंतरिक SSD स्टोरेज से dd और 1MB / dev / rdisk के bs वाले SD कार्ड में 4.6GB raspbian- स्ट्रेच इमेज लिखते समय, 2013 के मैकबुक प्रो / मैकबुक 10.13.2 पर चलने वाली देर से / dev / डिस्क की तुलना में बहुत तेज प्रदर्शन करता है। यह 27.16 मिनट / देव / डिस्क का उपयोग करते हुए और केवल 5.18 मिनट में / dev / rdisk का उपयोग करता है।
digitaladdictions


0

मुझे लगता है कि बहस से पहले कि कौन सा पथ नोड तेज है या धारावाहिक परीक्षणों में गोता लगाता है। हमें अन्य कारक पर विचार करना चाहिए जो नाटकीय रूप से अंतिम पढ़ने / लिखने की गति को प्रभावित करेगा।

जैसे माइक्रो एसडी कार्ड कल्पना, क्लास 4/10 / HC I ... एसडी कार्ड रीडर चिप और इंटरफ़ेस, USB 1.1 / 2.0 / 3.0 / 3.1 ओएस कुल मेमोरी / फ्री मेमोरी, ओएस लोड, ओएस हार्डडिस्क टाइप, एचडीडी / एसएसडी, एचडीडी स्पिन गति और कैश आकार, एसएसडी आकार / कैश / मुक्त स्थान / ओएस हार्डडिस्क इंटरफ़ेस, अता / माता / एस्का,

यदि कोई कारक अड़चन बन गया, तो हमें गलत निष्कर्ष मिलेगा।

यहाँ मेरा परिणाम है: osx 10.12.6, ssd,

माइक्रोएसडी 16 जी को यूएसबी 2.0 कार्ड द्वारा पढ़ें और बाहरी 3.5 इंच एचडीडी को यूएसबी 3.0 द्वारा पढ़ें और लिखें।

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

microSD 32G थ्रू इंटरनल कार्ड रीड एंड डेटा सोर्स बाहरी 3.5 इंच HDD है।

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

आप देख सकते हैं, गति लिखें> पढ़ने की गति !!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.