आपकी समस्या शायद आपके कंप्यूटर के साथ नहीं है, प्रति से, यह शायद ठीक है। लेकिन उस USB फ्लैश ट्रांस्फ़ॉर्मेशन लेयर का अपना एक प्रोसेसर होता है जिसे 90% दोषपूर्ण फ़्लैश चिप जितना हो सकता है उसकी भरपाई करने के लिए आपके सभी राइट्स को मैप करना होगा, कौन जानता है? आप इसे बाढ़ते हैं फिर आप अपने बफ़र्स को बाढ़ते हैं फिर आप पूरी बस में बाढ़ करते हैं, फिर आप फंस जाते हैं, आदमी - आखिरकार, यह वह जगह है जहां आपका सारा सामान है। यह काउंटर-सहज ज्ञान युक्त लग सकता है लेकिन आपको वास्तव में I / O को अवरुद्ध करने की आवश्यकता है - आपको एफटीएल को गति सेट करने की आवश्यकता है और फिर बस ऊपर रखें।
(हैकिंग पर एफटीएल माइक्रोकंट्रोलर: http://www.bunniestudios.com/blog/?p=3554 )
उपरोक्त सभी उत्तर काम करने चाहिए, इसलिए यह "मुझे भी!" किसी और चीज़ की तुलना में: मैं पूरी तरह से वहाँ रहा हूँ, यार। मैंने rsync --bwlimit arg (2.5mbs को सिंगल, एरर-फ्री रन - कुछ भी और मैं राइट- प्रोटेक्ट एरर के साथ वाइंड अप करता हूं) के लिए स्वीट स्पॉट लगता है। rsync मेरे उद्देश्य के लिए विशेष रूप से अनुकूल था क्योंकि मैं पूरे फाइल सिस्टम के साथ काम कर रहा था - इसलिए बहुत सारी फाइलें थीं - और बस rsync चलाने से दूसरी बार पहली बार चलने वाली सभी समस्याओं को ठीक कर देगा (जो जरूरी था जब मैं अधीर हो जाऊंगा और कोशिश करूंगा पिछले 2.5mbs रैंप के लिए)।
फिर भी, मुझे लगता है कि एक फ़ाइल के लिए यह उतना व्यावहारिक नहीं है। आपके मामले में आप सिर्फ dd को रॉ-राइट करने के लिए सेट कर सकते हैं - आप इस तरह से किसी भी इनपुट को संभाल सकते हैं, लेकिन एक समय में केवल एक ही लक्ष्य फ़ाइल (हालांकि वह एकल फ़ाइल संपूर्ण ब्लॉक डिवाइस हो सकती है)।
## OBTAIN OPTIMAL IO VALUE FOR TARGET HOST DEV ##
## IT'S IMPORTANT THAT YOUR "bs" VALUE IS A MULTIPLE ##
## OF YOUR TARGET DEV'S SECTOR SIZE (USUALLY 512b) ##
% bs=$(blockdev --getoptio /local/target/dev)
## START LISTENING; PIPE OUT ON INPUT ##
% nc -l -p $PORT | lz4 |\
## PIPE THROUGH DECOMPRESSOR TO DD ##
> dd bs=$bs of=/mnt/local/target.file \
## AND BE SURE DD'S FLAGS DECLARE RAW IO ##
> conv=fsync oflag=direct,sync,nocache
## OUR RECEIVER'S WAITING; DIAL REMOTE TO BEGIN ##
% ssh user@remote.host <<-REMOTECMD
## JUST REVERSED; NO RAW IO FLAGS NEEDED HERE, THOUGH ##
> dd if=/remote/source.file bs=$bs |\
> lz4 -9 | nc local.target.domain $PORT
> REMOTECMD
यदि आप इसे शॉट देते हैं, तो आप डेटा ट्रांसपोर्ट के लिए ssh से थोड़ा तेज़ हो सकते हैं। वैसे भी, दूसरे विचार पहले ही ले लिए गए थे, इसलिए क्यों नहीं?
[संपादित करें]: मैंने अन्य पोस्ट में lftp, scp और ssh के उल्लेखों पर ध्यान दिया और सोचा कि हम एक दूरस्थ प्रतिलिपि के बारे में बात कर रहे थे। स्थानीय बहुत आसान है:
% bs=$(blockdev --getoptio /local/target/dev)
% dd if=/src/fi.le bs=$bs iflag=fullblock of=/tgt/fi.le \
> conv=fsync oflag=direct,sync,nocache
[EDIT2]: क्रेडिट जहां यह कारण है: अभी देखा कि ptman ने टिप्पणी में पांच घंटे की तरह मुझे इसे हराया।
निश्चित रूप से आप एक गुणक के साथ यहां प्रदर्शन के लिए $ bs को ट्यून कर सकते हैं - लेकिन कुछ फाइल सिस्टम को लक्ष्य एफएस के सेक्टराइज के एक से अधिक होने की आवश्यकता हो सकती है इसलिए इसे ध्यान में रखें।
ionice
यह सुनिश्चित करने के लिए उपयोग किया जा सकता है कि आपकी डिस्क-टू-डिस्क कॉपी प्रक्रिया नियमित प्रक्रियाओं की तुलना में कम प्राथमिकता पर I / O निर्धारित है।