Tại sao PC của tôi bị đóng băng trong khi tôi đang sao chép một tệp vào ổ đĩa?


61

Tôi có một tình huống thực sự kỳ lạ ở đây. PC của tôi hoạt động tốt, ít nhất là trong hầu hết các trường hợp, nhưng có một điều mà tôi không thể giải quyết. Khi tôi cố gắng sao chép một tập tin từ ổ đĩa của mình, mọi thứ đều ổn - tôi đã nhận được 16-19M / s, nó hoạt động khá tốt. Nhưng khi tôi cố gắng sao chép một cái gì đó vào cùng một ổ đĩa, PC của tôi bị đóng băng. Con trỏ chuột dừng di chuyển trong một hoặc hai giây, sau đó nó di chuyển một chút và nó dừng lại. Khi một cái gì đó đang chơi, ví dụ, ở Amarok, âm thanh hoạt động như một khẩu súng máy. Tốc độ nhảy từ 500K / s lên 15M / s, trung bình 8M / s. Điều này chỉ xảy ra khi tôi sao chép một cái gì đó vào một ổ đĩa. Khi quá trình sao chép được thực hiện, mọi thứ trở lại bình thường.

Tôi đã thử tất cả mọi thứ - ổ đĩa khác, một cổng USB khác trên bảng mặt trước hoặc các cổng đó từ phía sau, tôi thậm chí đã thay đổi các chân USB trên bo mạch chủ (bảng mặt trước), nhưng cho dù tôi có đặt USB ở đâu thì nó vẫn giống nhau. Tôi cố gắng hệ thống tập tin khác nhau - fat32, ext4. Tôi không có vấn đề với thiết bị trên Windows, trên máy tính xách tay của tôi. Nó phải là PC của tôi hoặc một cái gì đó trong hệ thống của tôi. Tôi không có ý tưởng gì để tìm kiếm. Tôi đang sử dụng thử nghiệm Debian với Openbox độc lập. PC của tôi thuộc loại cũ - Pentium D 3GHz, RAM 1GiB, đĩa WD Green 1,5TB. Nếu bạn có điều gì đó giúp tôi giải quyết vấn đề này, tôi rất vui khi biết điều đó.

Tôi không biết những gì tôi nên cung cấp thông tin khác, nhưng nếu bạn cần một cái gì đó, chỉ cần hỏi, tôi sẽ cập nhật bài viết này càng sớm càng tốt.

Tôi đã cố gắng tái tạo vấn đề này trên ub Ubuntu 13.04 live cd. Tôi đã gắn phân vùng được mã hóa + trao đổi được mã hóa và kết nối ổ đĩa của tôi với cổng usb. Tiếp theo tôi đã thử khởi động một số ứng dụng và hiện tại tôi có ~ 820MiB trong RAM và khoảng 400MiB trong SWAP. Không có vấn đề gì với việc sao chép, không có sự đóng băng nào cả, mọi thứ đều như vậy. Vì vậy, có vẻ như đó là lỗi của hệ thống, nhưng chính xác là ở đâu? Điều gì sẽ gây ra một hành vi kỳ lạ như vậy?


Khi tôi gặp một cái gì đó tương tự như vậy là do tôi gặp vấn đề về ổ cứng trên máy tính xách tay của mình. Đĩa có một số khu vực xấu và mỗi khi tôi cố đọc bất cứ thứ gì từ những khu vực đó, nó sẽ đóng băng cho đến khi hoàn thành. Chỉ là một ý tưởng để xem xét. Có thể bạn có các thành phần xấu nơi bạn đang cố đọc từ đó.
slybloty

Hdd của tôi là ok, ít nhất là thông minh nói như vậy (sau khi quét toàn bộ).
Mikhail Morfikov

Hãy thử giảm mức độ ưu tiên IO của quá trình sao chép, vd ionice -c3 cp something.tgz /media/pendrive. Điều này sẽ đặt cpquá trình mới được sinh ra trong lớp ưu tiên thứ ba (= thấp nhất) "nhàn rỗi".
n.st

Tôi đã thử điều này, nhưng nó không có hiệu quả.
Mikhail Morfikov

@MikhailMorfikov FYI, vấn đề này đã được giải quyết trong linux 4.9. Vẫn chưa tự mình kiểm tra bản sửa lỗi. YMMV.
Seamus Connor

Câu trả lời:


85

Bạn có đang sử dụng phiên bản Linux 64 bit có nhiều bộ nhớ không? Trong trường hợp đó, vấn đề có thể là Linux có thể khóa trong vài phút khi ghi lớn trên các thiết bị chậm như thẻ SD hoặc thẻ nhớ USB. Đó là một lỗi đã biết cần được sửa trong các nhân mới hơn.

Xem http://lwn.net/Articles/572911/

Giải pháp thay thế: như vấn đề gốc:

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

Tôi đã thêm nó vào /etc/rc.localtập tin của mình trong các máy 64 bit của mình.

TANSTAAFL ; thay đổi này có thể (và có thể sẽ) làm giảm thông lượng của bạn đến các thiết bị này --- đó là sự thỏa hiệp giữa độ trễ và tốc độ. Để quay lại hành vi trước đó, bạn có thể

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

... Đó là các giá trị mặc định, có nghĩa là hành vi ghi lại sẽ được kiểm soát bởi các tham số dirty_ratiodirty_background_ratio.

Lưu ý đối với những người không phải là chuyên gia với linux: các tệp trong tệp giả /proc là --- chỉ là các kênh liên lạc giữa kernel và không gian người dùng. Không bao giờ sử dụng một trình soạn thảo để thay đổi hoặc nhìn vào chúng; thay vào đó, nhắc nhở shell --- ví dụ, với sudo -i(hương vị Ubuntu) hoặc su rootvà sử dụng echocat).

Cập nhật 2016/04/18 dường như, sau tất cả, vấn đề vẫn còn ở đây. Bạn có thể xem nó tại LWN.net , trong bài viết này về hàng đợi viết lại .


3
Tôi có 64bit nhưng chỉ có 1GiB RAM và tôi phải cho bạn biết giải pháp này hoạt động! Tôi vừa mới thử nó và sau khi cài đặt hai tham số, sẽ không còn bị đóng băng nữa. :)
Mikhail Morfikov

1
Trong cài đặt 14.04 của tôi, uname -atrả về 3.13.0-32-generic, vì vậy có. Nhưng tôi đã không kiểm tra xem bản vá cho vấn đề cuối cùng đã được tích hợp trong kernel hay chưa. Tôi có một máy 16 GB và nó có vẻ hoạt động tốt mà không cần giải pháp, mặc dù tôi phải nói rằng tôi đã không thử với các thiết bị đặc biệt chậm.
Rmano

1
@ IonicăBizău --- đó là tệp giả, đừng chỉnh sửa nó vim bao giờ . Lấy một vỏ gốc (với sudo -i) và sử dụng các lệnh đã nói ở trên.
Rmano

1
@Rmano Nó hoạt động! Tuy nhiên, tôi đã chỉnh sửa nó bằng VIM. Cảm ơn!
Ionică Bizău

2
Tôi đang sử dụng Ubuntu 16.04 trên một máy tính xách tay hoàn toàn mới (có 16 GB RAM). Tôi thực sự tức giận về vấn đề này. Giải pháp của bạn làm việc như một cơ duyên! Có lẽ bạn có thể thêm rằng điều này vẫn có thể cần thiết với kernel 4.8.0-45.
LGenzelis

3

Lý do có thể là khuếch đại ghi, vì hệ thống cố gắng ghi trong các khối nhỏ hơn khối xóa (thực hiện đọc / mod / ghi) + sắp xếp sai khối.

Để kiểm tra cài đặt hiện tại của bạn, hãy làm:

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

Bạn có thể điều chỉnh quy tắc hội trường cho các thiết bị đó:

Thay đổi giá trị của "max_sector" USB cho toàn bộ họ thiết bị

Trong trường hợp này, tôi đã thay thế max_sector cho tất cả các thiết bị, sử dụng mặc định 240 (lưu trữ USB) thành 32K sector hoặc 2K sector.

Trên hệ thống của tôi (Mageia 4, 3.14.24 lõi i7) tôi đã phải thực hiện việc này do tốc độ ghi quá chậm (2MB / giây) trên Kingston DT101 G2 16GB:

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

và thêm:

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

ddtốc độ ghi đã tăng gấp 3 lần. mc cpcó thể tăng 10-20 lần (sau khi tôi đã bắt đầu phân vùng đầu tiên @ 8192'th sector và được định dạng lại với các cụm 64k được căn chỉnh):

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

để kiểm tra căn chỉnh (kiểm tra [khu vực bắt đầu dữ liệu] phải là bội số của 128 (kích thước cụm)). Điều chỉnh số lượng các khu vực dành riêng (-R) nếu cần.

Các max_sector mặc định (240) dường như gây ra sự khuếch đại ghi cao trên một số ổ đĩa mới giá rẻ. Nhưng hãy cẩn thận với cài đặt cao như vậy, hiệu ứng tương tự đạt được ở 2048 cung (có thể là các khối xóa 1M:

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

Kiểm tra tất cả các thiết bị USB cũ của bạn, rằng chúng vẫn hoạt động tốt. Sử dụng các thuộc tính nhà cung cấp / mô hình trong các tệp quy tắc để cụ thể hơn.


1

phần cứng so với phần mềm

Tôi đã gặp phải vấn đề lạ tương tự như vậy với USB, và trong nghiên cứu của tôi, hầu như luôn luôn là vấn đề về trình điều khiển hoặc phần cứng cụ thể trong PC / Bo mạch chủ.

Tôi biết điều này bởi vì tôi đã có một số hệ thống có phần cứng giống hệt nhau và trên một, tôi có thể thực hiện thao tác này mà không gặp sự cố, trong khi trên một vấn đề khác lại xuất hiện.

Phải làm sao

Bạn lựa chọn thực sự hạn chế ở đây. Về những điều duy nhất bạn có thể làm là đảm bảo rằng bạn đã cài đặt BIOS / chương trình cơ sở mới nhất trên hệ thống của bạn và đảm bảo bạn có các phiên bản mới nhất của các gói của bạn.

Ngoài ra, tất cả những gì tôi có thể đề xuất là đảm bảo rằng bạn tránh được tình huống này bằng cách không cố gắng sao chép các tệp trong khi một bản sao khác đang được tiến hành.

Nếu bạn có kiểu tính cách nơi những điều như thế làm phiền bạn, bạn có thể thử một bản phân phối trực tiếp khác của Linux và lặp lại các bước dẫn đến vấn đề của bạn. Điều này sẽ loại bỏ xem đó là vấn đề cụ thể của distro hay vấn đề phần cứng như tôi đã mô tả ở trên. Đó sẽ là một niềm an ủi nhỏ, nhưng tôi luôn muốn biết mọi thứ hơn là vùi đầu vào cát, và không.

Còn gì nữa không?

Nếu bạn thực sự bị ám ảnh, bạn có thể thử chạy ứng dụng mà bạn đang thực hiện sao chép với stracehy vọng bắt được hệ thống trong bất kỳ cuộc gọi hệ thống nào bị đóng băng. Bạn cũng có thể làm điều này từ dòng lệnh.

Thí dụ

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

Sau đó, trong khi đang chạy bắt đầu một cái khác.

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

Hệ thống hy vọng sẽ đóng băng trong hoạt động này và có thể bạn sẽ gặp may mắn và tìm thấy một chút khói trong một trong các tệp nhật ký đó.


Tôi luôn luôn sử dụng một ví dụ duy nhất của sao chép tập tin. Tôi đã cập nhật BIOS (2008) và kể từ đó không có phiên bản mới hơn. Tôi nghĩ đó không phải là BIOS. Bản phân phối debian của tôi cũng được cập nhật vào nhánh thử nghiệm. Tôi đã thử sử dụng stracevà nó bị đóng băng gần như ngay lập tức, vì vậy tôi đã đợi vài giây và giết quá trình. Tôi đã nhận được nhật ký 1Mb, nhưng tôi không thể đọc nó, tôi không biết phải tìm gì. Bạn có thể kiểm tra nó ở đây pastebin.com/u29RvqgC - đó không phải là nhật ký đầy đủ (giới hạn ở 500Kb), nhưng chỉ có những dòng tương tự như ở cuối. Tôi sẽ cố gắng tái tạo vấn đề này với ub Ubuntu live cd.
Mikhail Morfikov

Tôi đã cập nhật câu hỏi như để kiểm tra cd trực tiếp.
Mikhail Morfikov

@MikhailMorfikov - Tôi nghĩ bạn khá nhiều vào cuối những gì bạn có thể mong đợi để làm. Phần cứng của bạn khá cũ (2008) và thực sự bạn không thể làm gì khác ngoài những gì tôi đã nêu ở trên.
slm

Nhưng ngay cả những chiếc cũ hơn có thể sao chép các tập tin mà không có vấn đề.
Mikhail Morfikov

@MikhailMorfikov - Tuổi tác không phải là yếu tố duy nhất, nhưng khả năng nhận được bất kỳ bản cập nhật nào cho phần sụn hoặc cập nhật phần mềm cho phần cứng cũ là điều tôi muốn nói.
slm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.