คัดลอกไปยังหน่วยความจำ USB ช้าจริงๆเหรอ?


45

เมื่อฉันคัดลอกไฟล์ไปยังอุปกรณ์ USB มันใช้เวลานานกว่าใน windows (อุปกรณ์ usb เดียวกันพอร์ตเดียวกัน) มันเร็วกว่าความเร็ว USB 1.0 (1MB / s) แต่ช้ากว่าความเร็ว USB 2.0 (12MB / s) มาก ในการคัดลอก 1.8GB ใช้เวลามากกว่า 10 นาที (ควรเป็น <3 นาที) ฉันมีแท่ง SanDisk Cruzer 8GB สองอันที่เหมือนกันและฉันมีปัญหาเดียวกันทั้งคู่ ฉันมีความสามารถพิเศษ 32GB USB SSD ในพอร์ตเพื่อนบ้านและทำงานได้ตามความเร็วที่คาดหวัง

ปัญหาที่ฉันเห็นใน GUI คือแถบความคืบหน้าไปเกือบ 90% ในทันทีเสร็จสมบูรณ์เป็น 100% ช้าลงเล็กน้อยจากนั้นก็ค้างที่นั่นเป็นเวลา 10 นาที การขัดจังหวะการคัดลอก ณ จุดนี้ดูเหมือนว่าจะทำให้เกิดความเสียหายที่ส่วนท้ายของไฟล์ หากฉันรอให้การทำสำเนาสำเร็จ

ความคิดใด ๆ dmesg เอาท์พุทด้านล่าง:

[64059.432309] usb 2-1.2: new high-speed USB device number 5 using ehci_hcd
[64059.526419] scsi8 : usb-storage 2-1.2:1.0
[64060.529071] scsi 8:0:0:0: Direct-Access     SanDisk  Cruzer           1.14 PQ: 0 ANSI: 2
[64060.530834] sd 8:0:0:0: Attached scsi generic sg4 type 0
[64060.531925] sd 8:0:0:0: [sdd] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
[64060.533419] sd 8:0:0:0: [sdd] Write Protect is off
[64060.533428] sd 8:0:0:0: [sdd] Mode Sense: 03 00 00 00
[64060.534319] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.534327] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.537988] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.537995] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.541290]  sdd: sdd1
[64060.544617] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.544619] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.544621] sd 8:0:0:0: [sdd] Attached SCSI removable disk

Linux ให้ดิสก์เขียนเพื่อแลกเปลี่ยนกับการทำงานอื่น ๆ ได้เร็วขึ้น ลองเดาsyncดูว่ามันไม่ได้ทำให้กระบวนการเร็วขึ้นหรือไม่ <- ยังไม่ทดลอง แต่เป็นไปได้
RobotHumans

ที่ไม่สมเหตุสมผลว่ามันจะเลื่อนออกไปสำหรับ USB ประเภทหนึ่ง แต่ไม่ใช่อีกประเภทหนึ่ง ดูเหมือนว่าฉันจะจำการโทรของ linux ได้ทุก ๆ 30 วินาทีหรือไม่ อาจล้าสมัย ฉันคาดหวังว่านี่เป็นปัญหาไดรเวอร์หรือความเข้ากันได้บางอย่างเนื่องจากมันขึ้นอยู่กับประเภทของอุปกรณ์
Eloff

สิ่งที่เร็วขึ้นสำหรับ thumbdrives USB อื่นไม่ได้อยู่ในคำถามของคุณ ถ้าเป็นฉันจะแนะนำให้ดู hdparm ดังนั้นจึงสมเหตุสมผลถ้าคุณดูจากมุมมองของคนที่ไม่รู้จักการตั้งค่าทั้งหมดของคุณ แต่ขึ้นอยู่กับคำถามของคุณสำหรับรายละเอียด
RobotHumans

"ฉันมีความสามารถพิเศษ 32GB USB SSD ในพอร์ตเพื่อนบ้านและทำงานได้ตามความเร็วที่คาดหวัง" มันอยู่ในนั้น แต่ฉันจะยอมรับอย่างดี :) ดังนั้น hdparm สิ่งนี้ที่คุณพูดถึงคืออะไร?
Eloff

โอเค SSD และหน่วยความจำแฟลชนั้นไม่เหมือนกัน แต่ย้ายไปตาม hdparm เป็นโปรแกรมที่ช่วยให้คุณสามารถตั้งค่าความเร็วในการเข้าถึง / การหมุนสำหรับไดรฟ์ด้วยตนเอง
RobotHumans

คำตอบ:


29

ทำไมการคัดลอกไปยังไดรฟ์ USB ของฉันช้ามากใน Linux (และเร็วกว่าใน Windows)

แคชเหตุผล 1. ไฟล์สามารถทำให้เขียนปรากฏช้าหรือเร็ว

ปัญหาที่ฉันเห็นใน GUI คือแถบความคืบหน้าไปเกือบ 90% ในทันทีเสร็จสมบูรณ์เป็น 100% ช้าลงเล็กน้อยจากนั้นก็ค้างที่นั่นเป็นเวลา 10 นาที

สิ่งหนึ่งที่คุณต้องเข้าใจคือการแคชไฟล์ Linux (และ Windows) จะใช้ RAM "ว่าง" เป็นอย่างอื่นเพื่อแคชการอ่าน / เขียนและทำให้เร็วขึ้นในการเข้าถึงครั้งต่อไป การดำเนินการคัดลอกเพื่อชะลออุปกรณ์ส่งผลให้เกิดพฤติกรรมที่คุณเห็น - "การเสร็จสมบูรณ์อย่างรวดเร็ว" กำลังเขียนไปยังแคชจริง ๆ แล้วมันจะช้าลงและหยุดเพราะการล้างข้อมูลจริงในแคช (ซิงค์) ไปยังอุปกรณ์ที่ช้าคือ ใช้เวลานานมาก หากคุณยกเลิก ณ จุดนั้นข้อมูลจะเสียหาย (ดังที่คุณจดบันทึกไว้) เนื่องจากการซิงค์ไม่เสร็จสิ้น

การคัดลอกดังกล่าวใน Windows อาจดูเร็วขึ้น (รวมถึงความเร็ว MB / วินาทีที่รายงาน) เนื่องจากบางครั้ง Windows จะไม่รอการซิงค์และประกาศงานให้เสร็จสมบูรณ์ทันทีที่ข้อมูลถูกเขียนไปยังแคช

เหตุผลที่ 2. การเขียนไฟล์จำนวนมากโดยเฉพาะไฟล์ขนาดเล็กนั้นช้า

เพื่อคัดลอก 1.8GB

เนื่องจากวิธีการทำงานของหน่วยความจำแฟลชและระบบไฟล์ความเร็วในการรับส่งข้อมูลที่เร็วที่สุดจึงทำได้เมื่อเขียนไฟล์ที่มีขนาดใหญ่มาก การเขียนไฟล์ขนาดเล็กจำนวนมากหรือแม้กระทั่งข้อมูลแบบผสมที่มีจำนวนไฟล์ขนาดเล็กอาจทำให้กระบวนการช้าลงมาก สิ่งนี้มีผลกับฮาร์ดไดรฟ์เช่นกัน แต่ในระดับที่ค่อนข้างน้อย

เหตุผลที่ 3. ความเร็วในการเขียนของแท่ง USB และ SSD ไม่สามารถเปรียบเทียบได้

ฉันมีความสามารถพิเศษ 32GB USB SSD ในพอร์ตเพื่อนบ้านและทำงานได้ตามความเร็วที่คาดหวัง

  • โดยทั่วไปแล้ว USB stick ในสวนจะประกอบด้วยชิปหน่วยความจำแฟลชที่เขียนขึ้นตามลำดับ (ตามลำดับ) และไม่มีแคชของตัวเอง

  • ในทางกลับกัน SSD นั้นมีตัวควบคุมซึ่งเขียนไปยังชิปหน่วยความจำแฟลชแบบขนานเพิ่มปริมาณงานโดยปัจจัย 2 หรือมากกว่าบนแท่ง USB

    • หาก 32GB SSD ของคุณมีชิป 4x 8GB มันจะยังเร็วกว่าแท่ง USB ได้ถึง 4x ในทุกการเขียน
    • SSD ยังมีแคช RAM (เช่นฮาร์ดดิสก์) ดังนั้นจึงสามารถเก็บข้อมูลขาเข้าในแคชได้อย่างรวดเร็วและบอกระบบปฏิบัติการในขณะที่ยังต้องเขียนข้อมูลนั้นลงในหน่วยความจำแฟลช
  • ดังนั้นด้วยไฟล์ขนาดใหญ่หนึ่งไฟล์ 32GB GB ของคุณที่มีโครงสร้างแบบ 4x ที่เราคิดว่าจะเร็วขึ้น 4x ด้วยไฟล์ขนาดเล็กจำนวนมากมันจะเร็วขึ้น 10 เท่าหรือเร็วกว่านั้นเพราะมันสามารถเก็บไว้ในแคชได้อย่างชาญฉลาด


โดยสรุปแล้วนี่เป็นเหตุผลว่าทำไมการคัดลอกไฟล์ไปยัง USB sticks อาจช้าลงใน Linux จริง ๆ แล้วมันช้าลงเนื่องจากปัญหาฮาร์ดแวร์ / ไดรเวอร์หรืออะไรก็ตาม ....

ทำการเปรียบเทียบความเร็วในการเขียนที่เหมาะสมระหว่าง Linux และ Windows

  • ก่อนอื่นลืมเกี่ยวกับ SSD เพราะเหตุผลที่ 3 มันเหมือนกับส้มและแอปเปิ้ล
  • หากต้องการลบล้างผลของเหตุผลที่ 1 (แคช) และเหตุผลที่ 2 (ไฟล์ขนาดเล็ก) คุณจะต้องทดสอบด้วยไฟล์ขนาดใหญ่ไฟล์เดียวซึ่งมีขนาดใหญ่กว่าจำนวน RAM ในระบบทดสอบ
  • ใน Linux คุณสามารถสร้างมันdd if=/dev/urandom of=largetest bs=1M count=7500ขึ้นมาซึ่งจะให้ไฟล์ทดสอบ 7500 MB แก่คุณ สมมติว่าระบบของคุณมี RAM น้อยกว่า 4GB หรือมากกว่านั้นก็ดีพอ คัดลอกไปที่แท่ง Sandisk 8GB ที่จัดรูปแบบสดใหม่และกำหนดเวลา
  • รีบูตใน Windows และคัดลอกlargetestจาก USB stick ไปยังฮาร์ดดิสก์ของคุณ รีบูตอีกครั้ง (เพื่อลบออกจากแคช) จากนั้นทำการฟอร์แมทอุปกรณ์ USB (vfat / FAT32 เดียวกัน) และคัดลอกlargetestจากฮาร์ดดิสก์ไปยังอุปกรณ์
  • เวลาเปรียบเทียบกันอย่างไร

2
cc: @Eloff เหตุผลที่ 1 : ใช่การซิงค์แคชอาจส่งผลกระทบต่อเวลาการเขียนที่ชัดเจน แต่แคชเพียงอย่างเดียวจะอธิบายว่าทำไมมันถึงอยู่ที่นั่นเป็นเวลา 10 นาที ?? ฉันคิดว่าเราต้องการรายละเอียดเพิ่มเติมจาก OP Re เหตุผลที่ 2 : ทำไมคุณคิดว่าการถ่ายโอนนี้ประกอบด้วยไฟล์ขนาดเล็กจำนวนมาก? ฉันไม่คิดว่า OP ให้รายละเอียดใด ๆ เกี่ยวกับการถ่ายโอน 1.8GB นี้ใช่ไหม Re เหตุผลที่ 3 : ใช่ SSD เป็นสัตว์ร้ายตัวอื่น มันอาจจะถูกแนบผ่านทาง SATA และไม่ใช่ USB ฉันคิดว่า OP พูดง่าย ๆ และเรียกว่าแท่ง USB เป็น SSD แต่อีกครั้งไม่มีทางรู้จนกว่าเราจะได้รับรายละเอียดเพิ่มเติมจาก OP
ไม่มีเหตุผล John

2
คำตอบนี้โจ๋งครึ่มไม่สนใจวิธีการตั้งคำถาม คำถามพูดอย่างชัดเจนเกี่ยวกับหนึ่งไฟล์ขนาดใหญ่และความจริงที่ว่าการขัดจังหวะการคัดลอกผลในไฟล์ mangled
zrajm

4
@zrajm นั่นเป็นเรื่องจริง อย่างไรก็ตามสำหรับคนอย่างฉันกระแทกในปัญหาเดียวกันนี้มีประโยชน์มาก
Pithikos

วิธีการปิดการใช้งานพฤติกรรมแคชนี้แล้ว?
Aminu Kano

7

พบการแก้ไขทั้งหมดที่ฉันทำคือเลิกเมานท์ถอดไดรฟ์และเรียกใช้sudo modprobe ehci_hcdในเทอร์มินัล ใส่ไดรฟ์และ agian sudo modprobe ehci_hcdเมื่อฉันใส่ไดรฟ์และว้าว 20 / mbs คิดว่าฉันจะแบ่งปัน หวังว่าฉันไม่จำเป็นต้องทำทุกครั้ง ... แต่มันก็ไม่ยาก ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 กล่าวว่าพวกเขาแก้ไขข้อผิดพลาด


อย่างจริงจัง?? รายงานข้อผิดพลาดนั้นมาจากเดือนธันวาคม 2550 และอ้างอิง Ubuntu gutsy 7.10 (FYI: @MarcoCeppi)
ไม่มีเหตุผล John

3
@irrationalJohn ฉันไม่ได้ให้คำตอบฉันแค่ทำความสะอาดมัน ประการที่สองเพียงเพราะรายงานข้อผิดพลาดเก่าไม่ได้หมายความว่ามันยังไม่ถูกต้อง มันกำลังถูก
ทดลอง

@MarcoCeppi ใช่ฉันรู้ว่าคุณเพิ่งแก้ไข นั่นเป็นเหตุผลที่ฉันเปิดตัวล่วงหน้าด้วย " FYI: " ฉันคิดว่าถ้าคุณแก้ไขคุณอาจสนใจ (หรืออาจจะไม่ ) ฉันคิดว่าถ้าคุณไม่สนใจคุณก็จะเพิกเฉยต่อการแจ้งเตือน สำหรับรายงานบั๊กเก่ายังคงมีความเกี่ยวข้อง ... มากกว่า 4 ปีที่แล้วและฉันคิดว่าอย่างน้อย 8 (?) ออกมาในภายหลัง? สำหรับข้อผิดพลาดประสิทธิภาพหรือไม่ แน่นอนมันอาจเป็นไปได้ แต่ไม่ใช่สถานที่แรกที่ฉันมอง FWIW
ไม่มีเหตุผล John

7

ฉันคิดว่าโอกาสต่ำมากที่เป็นปัญหาของพอร์ต มีโอกาสมากขึ้นที่ปัญหาของ LINUX (หรือการกำหนดค่า Linux) - ไปรอบ ๆ และคุณจะพบรายงานปัญหามากมายเกี่ยวกับ USB ช้าใน linux / ubuntu สำหรับฉันมันเกือบจะเป็น showstopper สำหรับ linux - ตอนนี้ฉันมี Ubuntu 12.04 LTS และยังคงมีปัญหานี้อยู่ (ดังนั้นฉันจึงควรใช้การตั้งค่า Win7 - ส่วนใหญ่ / เพียงเพราะสิ่งนี้) ปัญหานี้ (หรือบางสิ่งที่มีอาการคล้ายกัน) อยู่ที่นั่นมาหลายปีแล้วดูเหมือนจะไม่มีการแก้ไข และในช่วงเวลานี้ฉันลองใช้พีซีจริง ๆ หลายรุ่นที่มี Ubuntu หลายรุ่น (ค่าเริ่มต้น) และ USB sticks 2-3 อันที่แตกต่างกัน ....


5

เพียงแค่umountอุปกรณ์หากมีการ automounted /mnt/foldernameแล้วและตนเองติดมันไป

ในกรณีของฉัน

umount /media/usb0
mount /dev/sdb1 /mnt/sam

หลังจากนั้นมันก็จัดการอย่างรวดเร็ว


นี้พร้อมกับrsyncแทนที่จะcpดูเหมือนจะทำเคล็ดลับ
Irfan

19
สิ่งนี้ไม่ได้สร้างความแตกต่างให้กับสถานการณ์ของฉัน นอกจากนี้ยังไม่ได้แก้ปัญหาโดยไม่มีทฤษฎีว่าทำไมสิ่งนี้ควรจะสร้างความแตกต่าง
LondonRob

@Irfan ไม่ rsync ก็ช้าลงด้วย ...
sergzach

3

มันคือ 2019 และฉันยังคงมีปัญหาเดียวกันนี้ ดังนั้นฉันคิดว่าฉันค้นหาวิธีแก้ปัญหาอินเทอร์เน็ต ฉันพบหน้าต่อไปนี้ที่แนะนำหนึ่งรายการ: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

มันบอกว่า:

ดำเนินการคำสั่งต่อไปนี้ในคอนโซลเพื่อดูว่าสามารถแก้ไขปัญหาให้คุณได้หรือไม่ คุณอาจต้องsudo suได้รับอนุญาตที่จำเป็นก่อน

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

หากใช้งานได้คุณสามารถทำการเปลี่ยนแปลงนี้อย่างถาวรตลอดการรีบูตโดยวางสองบรรทัดที่ท้าย/etc/rc.localไฟล์ของคุณ

สำหรับฉันมันมีผลต่อไปนี้:

ก่อนการคัดลอกไฟล์ขนาดใหญ่ไปยังไดรฟ์ USB จะเริ่มต้นอย่างรวดเร็ว (เช่น 60 MB / s) และช้าลงและช้าลง (<10 MB / s) จนกระทั่งดูเหมือนว่ามันจะไม่เสร็จ

ตอนนี้มันเริ่มช้าลง แต่เร็วขึ้นและเร็วขึ้นและเสร็จเร็วขึ้นกว่าเดิม ดังนั้นจึงดูเหมือนว่า "แก้ปัญหา" หรืออย่างน้อยก็มีผลในเชิงบวก


1

หากคุณเปลี่ยนเป็น USB 3.0 คุณจะเปลี่ยนจาก 1mb / s เป็น woping 5-8mb / s ฉันเปลี่ยนเป็น 3.0 USB pci และ HD ภายนอกและไม่ได้มองย้อนกลับไป


1

เมื่อคุณดูใน / etc / mtab คุณเห็นว่าอุปกรณ์ถูกเมาท์ด้วยตัวเลือก "flush" หรือไม่?

ถ้าเป็นเช่นนั้นนี่อาจเป็นสาเหตุของปัญหา (สำหรับฉัน) เพียงยกเลิกการต่อเชื่อมอุปกรณ์และติดตั้งใหม่ก็ไม่ควรตั้งค่าตามค่าเริ่มต้น


ตัวเลือกการล้างถูกตั้งค่าไว้ตามค่าเริ่มต้นแล้วจะหยุดได้อย่างไร?
Ben Lutgens

@ Ben Lutgens - ใช่คุณสามารถใส่รายการของคุณเองใน / etc / fstab ที่ไม่มีตัวเลือกฟลัช ใช้ sudo blkid เพื่อค้นหา UUID ของอุปกรณ์ที่เกี่ยวข้องและใส่รายการเช่น UUID = "อุปกรณ์ของคุณ uuid ที่นี่" / mnt / <จุดเชื่อมต่อของคุณที่นี่> uid = 1,000, gid = 1000, fmask = 0022, dmask = 0022 0 0 เปลี่ยน uid, gid เพื่อให้ตรงกับหมายเลขผู้ใช้และ groupid ของผู้ใช้ปกติที่คุณใช้ (พบโดย getent passwd <ผู้ใช้ของคุณ>)
A.Danischewski

เมื่อฉันทำสิ่งนี้การเปลี่ยนแปลงทั้งหมดคือฉันไม่ได้รับแถบความคืบหน้าอีกต่อไปสำหรับการคัดลอกและการคัดลอกดูเหมือนจะเตะใน / เสร็จจริง ๆ เท่านั้นเมื่อฉันพยายามที่จะยกเลิกการต่อเชื่อมอุปกรณ์และบอกฉันว่า "
Jenny O'Reilly

0

ฉันมีปัญหาบางอย่างกับอัตราการถ่ายโอนบนดิสก์ภายนอก WD หลังจากเปิดใน windows ดังนั้นฉันมักจะใช้ LINUX หลังจากนั้นอัตราการถ่ายโอนเป็นเหมือน 1.5mb / s มากกว่าที่ฉัน unmount ฮาร์ดไดรฟ์ภายนอกที่เรียกใช้ dmesg ที่นั่น บอกว่า sdb1 เป็น unmounted unsperly รัน fsck ซึ่งทำการซ่อมแซมเล็กน้อยและหลังจากนั้นอัตราการถ่ายโอน 20mb / s อีกครั้งเมื่อ copiyng จาก sda ไปยังดิสก์ภายนอก fsck นั้นมีความเสี่ยงอยู่เสมอหากคุณมีข้อมูล แต่มันใช้ได้ผลกับฉันโดยที่ข้อมูลไม่สูญหาย


-2

ฉันมีปัญหานี้เช่นกัน แต่ฉันใช้คำสั่ง cp และคุณอัปเดต usb stick ของคุณในไม่กี่วินาที

cp -r -u /home/user/Muziek/ /media/user/Audiousbsti
cp -r -u /home/user/Muziek/ /media/user/4F49-4A65/

ฉันคิดว่ามันเป็นคำตอบที่ช้ามาก แต่ก็ยังเปิดอยู่


-3

โอเคฉันมีปัญหาเดียวกันเป็นเวลาสามวันและวิธีที่ฉันจัดการการสำรองฮาร์ดไดรฟ์ 1TB ของฉันคือการใช้ rsync ฉันรู้ว่ามันใช้สำหรับการสำรองข้อมูล แต่ก็ทำงานเสร็จแม้ว่าจะถ่ายโอนไฟล์ขนาดใหญ่ที่ฉันใช้ไป ทำงานนั้น หากคุณต้องการใช้กับ GUI ฉันแนะนำให้ติดตั้ง Grsync ซึ่งเป็นเวอร์ชันกราฟิกของ rsync เนื่องจาก rsync ทำงานบนเทอร์มินัล

หวังว่านี่จะช่วยได้

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