Giảm thời gian thử lại khối xấu / thời gian chờ trong Ubuntu


10

Làm cách nào tôi có thể giảm thời gian chờ IO và thời gian thử lại để HĐH không liên tục cố ghi vào ổ đĩa bị lỗi?

Tôi có một hệ thống mà tôi sử dụng để tạo các bản sao nội dung demo được cho khách hàng mượn trên các ổ cứng máy tính để bàn thông thường. Chúng tôi kết nối nhiều ổ đĩa cùng một lúc thông qua SAS và sao chép nội dung vào chúng bằng tập lệnh.

Bởi vì các ổ đĩa được cho mượn, đôi khi một số trở lại bị hỏng nhưng tôi không biết rằng chúng bị hỏng, vì vậy lần sau ổ đĩa đó được sử dụng lại trong một hoạt động sao chép, nó làm chậm các ổ đĩa khác khi hệ thống thử lại IO cho ổ đĩa đó. Đôi khi có thể mất vài giờ trước khi tôi nhận thấy ổ đĩa xấu và loại bỏ nó. Sau khi ổ đĩa được gỡ bỏ, phần còn lại của ổ đĩa bắt đầu ghi ở tốc độ bình thường.

Tôi không quan tâm đến việc khôi phục các ổ đĩa xấu. Tôi chỉ cần loại bỏ chúng để chúng không làm chậm mọi thứ khác.

Tôi cũng đang nghiên cứu các badblocks và smartmontools và xem xét việc viết một kiểm tra trước trên các ổ đĩa trước khi tôi bắt đầu viết.

HĐH: Ubuntu Linux (12,04 lts)


Có gì sai khi kiểm tra dữ liệu SMART thông qua udisks/ smartmonctl? Một vấn đề XY cổ điển ở đây, methinks.
Deer Hunter

2
Cảm ơn, tôi sẽ nghiên cứu smartmonctl nhiều hơn. Theo kinh nghiệm của tôi, nếu các thành phần xấu xảy ra trong lô hàng cuối cùng, trạng thái SMART cho thấy ổ đĩa vẫn hoạt động tốt và nó hoạt động tốt cho đến khi một phần ngẫu nhiên trong quá trình sao chép, sau đó chậm lại để thu thập dữ liệu, cũng ảnh hưởng đến các ổ đĩa khác cho đến khi nó được gỡ bỏ.
Ryan Sorensen

Câu hỏi chưa nhận được câu trả lời trực tiếp, vì vậy chúng tôi không biết liệu đó có phải là điều có thể có trong linux không: Làm cách nào tôi có thể giảm thời gian chờ IO và thời gian thử lại?
imz - Ivan Zakharyaschev

@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Tuy nhiên, kernel đã ghi lại các lỗi này, vì vậy nếu tất cả những gì bạn muốn làm là bắt một đĩa bị lỗi trước khi nó gặp sự cố hơn, bạn có thể quét nhật ký hệ thống tại khoảng thời gian đều đặn.
goldilocks

@gol Nếu tôi muốn bắt nó nhanh hơn thì sao? Không cần chờ đợi, Chúa có biết bao nhiêu thời gian trước khi hoạt động IO mở khóa báo cáo lỗi không? (Trên thực tế, tôi đang cố lưu dữ liệu từ một đĩa bị lỗi, nhưng vấn đề của tôi cũng tương tự: chạy vào các khu vực "có lỗi" này gây ra sự chậm trễ lớn. ... Có lẽ tôi cũng có thể làm theo lời khuyên và phát minh ra một cách để cung cấp thông tin từ bài kiểm tra SMART để ddrescuenó thậm chí không chạm vào các lĩnh vực được báo cáo bởi SMART.)
imz - Ivan Zakharyaschev

Câu trả lời:


7

Trước đây tôi chưa sử dụng điều chỉnh này nhưng có lẽ bạn muốn điều chỉnh eh_timeout (hết thời gian xử lý lỗi) cho ổ đĩa đang đề cập:

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

Các chương trình trên sdađược đặt thành 10 giây. Từ Red Hat kiến ​​thức:

Trong một số cấu hình lưu trữ nhất định (ví dụ: các cấu hình có nhiều LUN), mã xử lý lỗi SCSI có thể tiêu tốn một lượng lớn thời gian để ban hành các lệnh như TEST UNIT READY cho các thiết bị lưu trữ không phản hồi. Một tham số sysfs mới, eh_timeout, đã được thêm vào đối tượng thiết bị SCSI, cho phép cấu hình giá trị thời gian chờ cho các lệnh TEST UNIT READY và ​​REQUEST SENSE được sử dụng bởi mã xử lý lỗi SCSI. Điều này làm giảm lượng thời gian dành cho việc kiểm tra các thiết bị không phản hồi này. Giá trị mặc định của eh_timeout là 10 giây, là giá trị thời gian chờ được sử dụng trước khi thêm chức năng này.


Tôi đang kiểm tra điều này bây giờ. Ubuntu không có eh_timeout, nhưng có tệp hết thời gian chờ có thể giống nhau. Giá trị Ubuntu mặc định dường như là 30 giây. Sẽ giảm xuống còn 5 giây và báo cáo lại.
Ryan Sorensen

1
Vì tò mò, kết quả của bạn là gì?
Bratchley

Đặt cờ hết thời gian trên 12.04 dường như không làm gì cả. Tôi đang lên kế hoạch nâng cấp hệ thống thử nghiệm lên 14.04 vào cuối tuần này vì nó có eh_timeout (và cả thời gian chờ).
Ryan Sorensen

@RyanSorensen, vậy bạn có cơ hội xem liệu tham số này có hoạt động không?
Nat

Tôi không thể sửa đổi eh_timeoutnhưng tôi đã có thể thay đổi timeoutđể hoàn thành nhiệm vụ trong tay.
GuitarPicker

2

Giám sát /sys/block/<dev>/statcác thiết bị bạn quan tâm và so sánh tham số thứ 10 (io_ticks).

ví dụ, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Đây là phần trăm thời gian có sẵn mà đĩa đã dành để chờ đĩa io.

Tất nhiên, gần 100% sẽ đáng để kiểm tra, nếu không thì thực sự thông minh và so sánh nó với mức trung bình của tất cả các đĩa của bạn và chọn bất kỳ đĩa nào trên mức trung bình.

Xem tài liệu thống kê lớp khối .

Khác sử dụng một cái gì đó như Munin và vẽ biểu đồ. Bạn có thể yêu cầu Munin cảnh báo nếu vượt quá ngưỡng, ví dụ: 90% hoặc bất cứ điều gì biểu đồ của bạn hiển thị là một con số cảnh báo tốt.

ví dụ, xem hai biểu đồ Munin này cho thấy / dev / sdi cần xem xét. Trong ví dụ này nếu / dev / sdi là một phần của một mảng thì toàn bộ mảng sẽ phải chịu vì nó.

Sử dụng đĩa trên mỗi thiết bị - theo ngày

Sử dụng đĩa trên mỗi thiết bị - theo tuần

Nếu bạn nhìn vào biểu đồ tuần, bạn sẽ thấy / dev / sdc cũng có thể chậm.

Tôi nên thêm rằng / dev / sdi ở trên không bị hỏng, nó chỉ là một đĩa chậm (thực sự là một đĩa xanh mà ai đó đã thêm vào một mảng các đĩa sata cấp doanh nghiệp) làm chậm mảng. Một đĩa thất bại thực tế sẽ dính ra như ngón tay cái đau.

Tóm lại, có lẽ tôi sẽ đi theo một kịch bản nếu tôi có thời gian, nhưng Munin nếu tôi chỉ muốn một giải pháp nhanh chóng và kết nối với máy chủ thì thật dễ dàng.


Cảm ơn! Thông tin về thống kê io trong Linux thực sự mới và dường như rất hữu ích (với tôi) trong những tình huống như vậy.
imz - Ivan Zakharyaschev
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.