ปัญหาของคุณอาจไม่ได้อยู่ที่คอมพิวเตอร์ของคุณ แต่เลเยอร์การเปลี่ยนแปลงของ USB flash นั้นมีหน่วยประมวลผลของตัวเองที่ต้องแมปการเขียนทั้งหมดของคุณเพื่อชดเชยสิ่งที่อาจเป็นชิปแฟลชที่ผิดพลาด 90% ใครจะรู้? คุณท่วมมันจากนั้นก็ท่วมเกราะของคุณจากนั้นก็ท่วมรถบัสทั้งคันจากนั้นคุณก็ติดอยู่มนุษย์นั่นคือสิ่งที่คุณมีอยู่ทั้งหมด มันอาจฟังดูง่าย แต่สิ่งที่คุณต้องการจริงๆคือการปิดกั้น I / O - คุณต้องปล่อยให้ FTL ก้าวไปข้างหน้าและตามทัน
(ในการแฮ็คไมโครคอนโทรลเลอร์ FTL: http://www.bunniestudios.com/blog/?p=3554 )
คำตอบทั้งหมดข้างต้นควรได้ผลดังนั้นนี่จึงเป็น "ฉันด้วย!" กว่าสิ่งอื่นใด: ฉันเคยไปที่นั่นโดยสิ้นเชิงผู้ชาย ฉันแก้ไขปัญหาของตัวเองด้วย rsync ของ--bwlimit arg (2.5mbs ดูเหมือนจะเป็นจุดที่ดีสำหรับการรันครั้งเดียวที่ปราศจากข้อผิดพลาด - มีอะไรมากกว่านั้นและฉันจะปิดท้ายด้วยข้อผิดพลาดในการป้องกันการเขียน) rsync เหมาะสมกับวัตถุประสงค์ของฉันเป็นพิเศษเพราะฉันทำงานกับระบบไฟล์ทั้งหมด - ดังนั้นจึงมีไฟล์จำนวนมาก - และการใช้ rsync ครั้งที่สองจะแก้ไขปัญหาการเรียกใช้ครั้งแรกทั้งหมด (ซึ่งจำเป็นเมื่อฉันหมดความอดทนและลอง เพื่อไล่ระดับ 2.5mbs ที่ผ่านมา)
ถึงกระนั้นฉันก็เดาว่ามันไม่ได้เป็นประโยชน์สำหรับไฟล์เดียว ในกรณีของคุณคุณสามารถไปป์ที่ dd ตั้งค่าเป็น raw-write ได้คุณสามารถจัดการอินพุตได้ด้วยวิธีนั้น แต่จะมีไฟล์เป้าหมายได้ครั้งละหนึ่งไฟล์เท่านั้น (แม้ว่าไฟล์นั้นจะเป็นอุปกรณ์บล็อกทั้งหมด)
## 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
คุณอาจพบว่า netcat นั้นเร็วกว่า 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
[แก้ไข 2]: เครดิตที่ถึงกำหนด: เพิ่งสังเกตเห็นว่า ptman เอาชนะฉันได้โดยชอบในความคิดเห็นห้าชั่วโมง
แน่นอนคุณสามารถปรับแต่ง $ bs เพื่อประสิทธิภาพที่นี่ด้วยตัวคูณ - แต่ระบบไฟล์บางระบบอาจต้องการให้มันเป็นเซกเตอร์ของ fs เป้าหมายหลายตัวดังนั้นอย่าลืมว่า
ionice
สามารถใช้เพื่อให้แน่ใจว่ากระบวนการคัดลอกดิสก์ต่อดิสก์ของคุณถูกกำหนดเวลา I / O ที่ระดับความสำคัญต่ำกว่ากระบวนการปกติ