เหตุใดพีซีของฉันค้างในขณะที่ฉันกำลังคัดลอกไฟล์ไปยัง pendrive


61

ฉันมีสถานการณ์แปลก ๆ ที่นี่ พีซีของฉันทำงานได้ดีอย่างน้อยในกรณีส่วนใหญ่ แต่มีสิ่งหนึ่งที่ฉันไม่สามารถจัดการได้ เมื่อฉันพยายามที่จะคัดลอกไฟล์จาก pendrive ของฉันทุกอย่างก็โอเค - ฉันได้ 16-19M / s มันใช้งานได้ดี แต่เมื่อฉันพยายามคัดลอกบางสิ่งไปยัง pendrive เดียวกันพีซีของฉันค้าง ตัวชี้เมาส์หยุดเคลื่อนไหวเป็นเวลาหนึ่งวินาทีหรือสองวินาทีจากนั้นมันขยับเล็กน้อยและจะหยุดอีกครั้ง ตัวอย่างเช่นเมื่อเล่นใน Amarok เสียงจะทำหน้าที่เหมือนปืนกล ความเร็วกระโดดจาก 500K / s เป็น 15M / s เฉลี่ย 8M / s สิ่งนี้เกิดขึ้นเมื่อฉันกำลังคัดลอกบางสิ่งไปยังเพนไดรฟ เมื่อกระบวนการคัดลอกเสร็จสิ้นทุกอย่างจะกลับสู่ปกติ

ฉันลองทุกอย่าง - pendrive อื่น ๆ , พอร์ต USB ที่แตกต่างกันบนแผงด้านหน้าหรือพอร์ตเหล่านั้นจากด้านหลัง, ฉันยังเปลี่ยนพิน USB บนแผงวงจรหลัก (แผงด้านหน้า), แต่ไม่ว่าฉันจะใส่ USB ติดไว้ที่ใดก็ตาม ฉันพยายามระบบแฟ้มที่แตกต่างกัน - ,fat32 ext4ฉันไม่มีปัญหากับอุปกรณ์บน Windows บนแล็ปท็อปของฉัน มันต้องเป็นพีซีของฉันหรือบางอย่างในระบบของฉัน ฉันไม่รู้ว่าจะมองหาอะไร ฉันใช้การทดสอบเดเบียนด้วย Openbox แบบสแตนด์อโลน พีซีของฉันเป็นรุ่นเก่า - Pentium D 3GHz, RAM 1GiB, ดิสก์ WD Green 1.5 TB หากคุณมีสิ่งที่จะช่วยฉันในการแก้ปัญหานี้ฉันยินดีที่จะได้ยิน

ฉันไม่ทราบว่าจะให้ข้อมูลอะไรอีก แต่ถ้าคุณต้องการอะไรถามฉันจะอัพเดทโพสต์นี้โดยเร็วที่สุด

ฉันพยายามทำซ้ำปัญหานี้บน ubuntu 13.04 live cd ฉันติดตั้งพาร์ทิชันเข้ารหัสของฉัน + สลับการเข้ารหัสและเชื่อมต่อ pendrive ของฉันเข้ากับพอร์ต usb ต่อไปฉันพยายามเริ่มบางแอพและตอนนี้ฉันมี ~ 820MiB ใน RAM และประมาณ 400MiB ใน SWAP ไม่มีปัญหากับการคัดลอกไม่มีการแช่แข็งทุกอย่างเป็นไปตามที่ควรจะเป็น ดังนั้นดูเหมือนว่ามันเป็นความผิดของระบบ แต่ที่ไหนกันแน่? อะไรจะทำให้เกิดพฤติกรรมแปลก ๆ


เมื่อฉันพบสิ่งที่คล้ายกันนี้เป็นเพราะฉันมีปัญหาฮาร์ดไดรฟ์ในแล็ปท็อปของฉัน ดิสก์มีบางพื้นที่ที่ไม่ดีและทุกครั้งที่ฉันพยายามอ่านอะไรจากพื้นที่เหล่านั้นมันจะหยุดจนกว่าจะเสร็จ เพียงแค่ความคิดที่จะมองเข้าไป บางทีคุณอาจมีเซ็กเตอร์ที่ไม่ดีที่คุณพยายามอ่าน
slybloty

hdd ของฉันก็โอเคอย่างน้อยก็พูดอย่างนั้น (หลังจากสแกนเต็ม)
Mikhail Morfikov

ลองลดความสำคัญ IO ionice -c3 cp something.tgz /media/pendriveของกระบวนการคัดลอกเช่น สิ่งนี้จะทำให้cpกระบวนการเกิดใหม่ในลำดับความสำคัญคลาสที่สาม (= ต่ำสุด) "ว่าง"
n.st

ฉันลองสิ่งนี้ แต่มันไม่มีผล
Mikhail Morfikov

@MikhailMorfikov FYI ปัญหานี้แก้ไขได้ใน linux 4.9 ยังไม่ได้ทดสอบการแก้ไขด้วยตนเอง YMMV
Seamus Connor

คำตอบ:


85

คุณใช้ Linux เวอร์ชัน 64 บิตที่มีหน่วยความจำมากมายหรือไม่? ในกรณีนี้ปัญหาอาจเป็นได้ว่า Linux สามารถล็อคได้นานหลายนาทีในการเขียนขนาดใหญ่บนอุปกรณ์ที่ช้าเช่นการ์ด SD หรือ USB sticks เป็นข้อผิดพลาดที่รู้จักที่ควรแก้ไขในเมล็ดที่ใหม่กว่า

ดูhttp://lwn.net/Articles/572911/

วิธีแก้ปัญหา: ตามปัญหาของรูท:

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

ฉันเพิ่มลงใน/etc/rc.localไฟล์ของฉันในเครื่อง 64 บิตแล้ว

TANSTAAFL ; การเปลี่ยนแปลงนี้สามารถ (และอาจจะ) ลดปริมาณงานของคุณไปยังอุปกรณ์เหล่านี้ซึ่งเป็นการประนีประนอมระหว่างเวลาแฝงและความเร็ว หากต้องการกลับไปสู่พฤติกรรมเดิมที่คุณทำได้

echo 0 > /proc/sys/vm/dirty_background_bytes
echo 0 > /proc/sys/vm/dirty_bytes

... ซึ่งเป็นค่าเริ่มต้นที่มีความหมายว่าพฤติกรรม writeback จะถูกควบคุมโดยพารามิเตอร์และdirty_ratiodirty_background_ratio

หมายเหตุสำหรับคนที่ไม่ค่อยมีผู้เชี่ยวชาญกับ linux: ไฟล์ใน/proc นั้นเป็น pseudofiles --- เป็นเพียงช่องทางการสื่อสารระหว่างเคอร์เนลและพื้นที่ผู้ใช้ อย่าใช้เครื่องมือแก้ไขเพื่อเปลี่ยนหรือดู รับ shell prompt แทนตัวอย่างเช่นด้วยsudo -i(รสชาติของ Ubuntu) หรือsu rootและใช้echoและcat)

ปรับปรุง 2016/04/18ดูเหมือนว่าหลังจากทั้งหมดปัญหายังคงอยู่ที่นี่ คุณสามารถดูได้ที่LWN.netในบทความนี้เกี่ยวกับคิวการเขียนกลับ


3
ฉันมี 64 บิต แต่ RAM เพียง 1GiB และฉันต้องบอกคุณว่าวิธีนี้ใช้งานได้! ฉันเพิ่งทดสอบและหลังจากตั้งค่าพารามิเตอร์ทั้งสองแล้วจะไม่มีการแช่แข็งอีกต่อไป :)
มิคาอิล Morfikov

1
ในการติดตั้ง 14.04 ของฉันuname -aส่งคืน3.13.0-32-genericดังนั้นใช่ แต่ฉันยังไม่ได้ตรวจสอบว่าแพทช์สำหรับปัญหาถูกรวมเข้ากับเคอร์เนลหรือไม่ ฉันมีเครื่อง 16GB และดูเหมือนว่าจะทำงานได้โดยไม่ต้องใช้วิธีแก้ปัญหาถึงแม้ว่าฉันต้องบอกว่าฉันไม่ได้ลองกับอุปกรณ์ที่ช้าเป็นพิเศษ
Rmano

1
@ IonicăBizău --- นั่นคือหลอกไฟล์ไม่แก้ไขมันด้วยเลยทีเดียวvim รับรูทเชลล์ (พร้อมsudo -i) และใช้คำสั่งข้างต้น
Rmano

1
@Rmano มันใช้งานได้! อย่างไรก็ตามฉันแก้ไขด้วย VIM ขอบคุณ!
IonicăBizău

2
ฉันใช้อูบุนตู 16.04 กับแล็ปท็อปใหม่ (พร้อม RAM 16 GB) ฉันโกรธมากกับปัญหานี้ โซลูชันของคุณทำงานได้อย่างมีเสน่ห์! บางทีคุณอาจเพิ่มได้ว่านี่อาจยังจำเป็นสำหรับเคอร์เนล 4.8.0-45
LGenzelis

3

เหตุผลสามารถเขียนแอมพลิฟายเออร์ได้เนื่องจากระบบพยายามเขียนเป็นกลุ่มที่มีขนาดเล็กกว่าลบบล็อก (ทำการอ่าน / แก้ไข / เขียน) + บล็อกไม่ตรงแนว

หากต้องการตรวจสอบการตั้งค่าปัจจุบันของคุณให้ทำ:

cat /sys/block/sd**X**/device/max_sectors

คุณสามารถปรับกฎห้องโถงสำหรับอุปกรณ์เหล่านี้:

เปลี่ยนค่าของ USB "max_sectors" สำหรับอุปกรณ์ทั้งหมดในตระกูล

ในกรณีนี้ฉันได้เปลี่ยน max_sectors สำหรับอุปกรณ์ทั้งหมดที่ใช้ค่าเริ่มต้น 240 (ที่เก็บข้อมูล USB) เป็นภาค 32K หรือภาค 2K

ในระบบของฉัน (Mageia 4, 3.14.24 core i7) ฉันต้องทำสิ่งนี้เนื่องจากความเร็วในการเขียนช้ามาก (2MB / วินาที) บน Kingston DT101 G2 16GB:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules

และเพิ่ม:

SUBSYSTEMS=="scsi", ATTR{max_sectors}=="240", ATTR{max_sectors}="32678"

และddความเร็วในการเขียนเพิ่มขึ้น 3 เท่า mc cpอาจเป็น 10-20x ขึ้นไป (หลังจากที่ฉันเริ่มพาร์ติชันแรกที่ @ 8192 ภาคและจัดรูปแบบกับกลุ่มที่จัดชิด 64k):

fdisk -u /dev/sdh # make DOS compat off if on
mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592*** and use *fsck.vfat -v /dev/sdh1

เพื่อตรวจสอบการจัดตำแหน่ง (ตรวจสอบ [ภาคการเริ่มต้นข้อมูล] ควรมีหลาย 128 (ขนาดคลัสเตอร์)) ปรับจำนวนของเซกเตอร์ที่สงวนไว้ (-R) หากจำเป็น

ค่าเริ่มต้น max_sectors (240) ดูเหมือนจะทำให้เกิดการขยายการเขียนสูงในบางไดรฟ์ใหม่ราคาถูก แต่ต้องระวังอย่างมากกับการตั้งค่าที่สูงเช่นนี้ผลที่ได้จะคล้ายกันที่ภาค 2048 (อาจลบบล็อก 1M:

SUBSYSTEMS=="scsi", ATTR{max_sectors}=="240", ATTR{max_sectors}="2048"

ทดสอบอุปกรณ์ USB เก่าทั้งหมดของคุณว่ายังใช้งานได้ดี ใช้แอททริบิวผู้ขาย / รุ่นในไฟล์กฎเพื่อให้เฉพาะเจาะจงมากขึ้น


1

ฮาร์ดแวร์กับซอฟต์แวร์

ฉันพบปัญหาแปลก ๆ เช่นนี้กับ USB thumbdrives และในการวิจัยของฉันมันมักจะเป็นปัญหาไดรเวอร์หรือฮาร์ดแวร์เฉพาะภายในพีซี / มาเธอร์บอร์ด

ฉันรู้สิ่งนี้เพราะฉันมีหลายระบบที่เป็นฮาร์ดแวร์ที่เหมือนกันและที่หนึ่งฉันสามารถดำเนินการนี้ได้โดยไม่มีปัญหาในขณะที่อีกปัญหาหนึ่งปรากฏขึ้น

จะทำอย่างไร?

ตัวเลือกของคุณมี จำกัด จริงๆที่นี่ เกี่ยวกับสิ่งเดียวที่คุณทำได้คือให้แน่ใจว่าคุณติดตั้ง BIOS / เฟิร์มแวร์ล่าสุดในระบบของคุณและตรวจสอบให้แน่ใจว่าคุณมีแพ็คเกจล่าสุดของ disto

นอกเหนือจากทั้งหมดที่ฉันสามารถแนะนำได้คือให้แน่ใจว่าคุณหลีกเลี่ยงสถานการณ์นี้โดยไม่พยายามคัดลอกไฟล์ในขณะที่อีกฉบับกำลังดำเนินการอยู่

หากคุณมีบุคลิกภาพประเภทไหนที่ทำให้คุณโกรธคุณสามารถลองใช้ distro อื่นของ Linux และทำซ้ำขั้นตอนที่นำไปสู่ปัญหาของคุณ นี่เป็นเพียงการกำจัดไม่ว่าจะเป็นปัญหาเฉพาะ distro หรือปัญหาฮาร์ดแวร์ตามที่ฉันได้อธิบายไว้ข้างต้น มันจะเป็นการปลอบใจเล็ก ๆ น้อย ๆ แต่ฉันชอบที่จะรู้ว่าสิ่งต่าง ๆ มากกว่าที่จะฝังศีรษะของฉันในทรายและไม่

มีอะไรอีกไหม

หากคุณกำลังหลงไหลอย่างแท้จริงคุณสามารถลองใช้แอปพลิเคชันที่คุณกำลังทำสำเนาstraceอยู่โดยหวังว่าจะได้รับระบบในทุกสิ่งที่ระบบเรียกว่าค้าง คุณควรทำสิ่งนี้ได้จากบรรทัดคำสั่งด้วย

ตัวอย่าง

$ strace -o cp1.log cp -r /path/to/dir1 /path/to/usb/. 

จากนั้นในขณะที่กำลังเริ่มต้นอีกอันหนึ่ง

$ strace -o cp2.log cp -r /path/to/dir2 /path/to/usb/. 

หวังว่าระบบจะหยุดในระหว่างการดำเนินการนี้และบางทีคุณอาจจะโชคดีและพบควันในไฟล์บันทึกเหล่านั้น


ฉันมักจะใช้การคัดลอกไฟล์เดียวเท่านั้น ฉันได้อัพเดตไบออส (2551) และไม่มีเวอร์ชั่นใหม่กว่าหลังจากนั้น ฉันคิดว่ามันไม่ใช่ BIOS เดเบียน distro ของฉันยังได้รับการปรับปรุงเป็นสาขาทดสอบ ฉันลองใช้straceและมันติดดาวแช่แข็งเกือบจะทันทีดังนั้นฉันจึงรอสักครู่และฆ่ากระบวนการ ฉันได้บันทึก 1Mb แต่ไม่สามารถอ่านได้ฉันไม่รู้ว่าจะหาอะไร คุณสามารถตรวจสอบได้ที่นี่pastebin.com/u29RvqgC - ไม่ใช่บันทึกแบบเต็ม (จำกัด 500Kb) แต่มีเพียงบรรทัดที่คล้ายกันกับที่ส่วนท้าย ฉันจะพยายามทำซ้ำปัญหานี้ด้วย ubuntu live cd
Mikhail Morfikov

ฉันอัปเดตคำถามเป็นการทดสอบซีดีสด
Mikhail Morfikov

@ MikailMorfikov - ฉันคิดว่าคุณสวยมากในตอนท้ายของสิ่งที่คุณคาดหวังได้ ฮาร์ดแวร์ของคุณค่อนข้างเก่า (2008) และมีอะไรอีกมากมายที่คุณสามารถทำได้นอกเหนือจากที่ฉันได้อธิบายไว้ข้างต้น
slm

แต่ชิ้นที่เก่ากว่าก็สามารถคัดลอกไฟล์ได้โดยไม่มีปัญหา
Mikhail Morfikov

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