Уменьшите количество неудачных попыток блокировки / ожидания в Ubuntu

10

Как я могу сократить время ожидания ввода-вывода и повторных попыток, чтобы ОС не пыталась непрерывно записывать на неисправный диск?

У меня есть система, которую я использую для создания копий демонстрационного контента, который предоставляется клиентам на обычные жесткие диски SATA для настольных ПК. Мы подключаем множество дисков одновременно через SAS и копируем содержимое на них с помощью скрипта.

Поскольку диски сдаются в аренду, иногда некоторые возвращаются поврежденными, но я не знаю, повреждены ли они, поэтому в следующий раз, когда этот диск будет повторно использован в операции копирования, он замедляет работу других дисков, когда система повторяет ввод-вывод на этот диск. Иногда может потребоваться несколько часов, прежде чем я замечу плохой диск и уберу его После извлечения диска остальные диски начинают запись с нормальной скоростью.

Меня не волнует восстановление плохих дисков. Мне просто нужно отсеять их, чтобы они не замедляли все остальное.

Я также изучаю badblocks и smartmontools и планирую записать на диски предварительную проверку перед тем, как начать писать.

ОС: Ubuntu Linux (12.04 лтс)

Райан Соренсен
источник
Что не так с проверкой данных SMART через udisks/ smartmonctl? Классическая проблема XY здесь, метинкс.
Охотник на оленей
2
Спасибо, я буду исследовать smartmonctl больше. По моему опыту, если сбойные сектора произошли во время последней поставки, состояние SMART показывает, что диск все еще исправен, и работает нормально до некоторой случайной части во время копирования, а затем замедляется до сканирования, что также влияет на другие диски до это удалено.
Райан Соренсен
На вопрос не был получен прямой ответ, поэтому мы не знаем, возможно ли это в Linux: как я могу сократить время ожидания ввода-вывода и повторных попыток?
imz - Иван Захарящев
@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Однако ядро ​​регистрирует эти ошибки, поэтому, если все, что вам нужно, это перехватить неисправный диск, прежде чем он станет более проблемным, вы можете просмотреть системные журналы по адресу регулярные отрезки.
Златовласка
@gol Что если я хочу поймать это быстрее? Не дожидаясь, Бог знает, сколько времени до операции IO разблокирует сообщение об ошибке? (На самом деле, я пытаюсь сохранить данные с диска с ошибками, но моя проблема похожа: столкновение с этими «ошибочными» секторами приводит к огромным задержкам. ... Возможно, я мог бы также последовать совету и придумать способ передать информацию из теста SMART ddrescueтак, чтобы она даже не касалась секторов, о которых сообщает SMART.)
imz - Иван Захарящев

Ответы:

7

Я не использовал эту настройку раньше, но вы, вероятно, хотите настроить eh_timeout (тайм-аут обработки ошибок) для данного диска:

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

Выше показано, sdaустановите на 10 секунд. Из базы знаний Red Hat:

В некоторых конфигурациях хранилища (например, в конфигурациях с большим количеством LUN) код обработки ошибок SCSI может тратить много времени на выдачу команд, таких как TEST UNIT READY, на не отвечающие устройства хранения. В объект устройства SCSI добавлен новый параметр sysfs, eh_timeout, который позволяет настраивать значение времени ожидания для команд TEST UNIT READY и REQUEST SENSE, используемых кодом обработки ошибок SCSI. Это уменьшает количество времени, затрачиваемое на проверку этих не отвечающих устройств. Значение по умолчанию eh_timeout составляет 10 секунд, которое было значением времени ожидания, использованным до добавления этой функции.

Bratchley
источник
Я проверяю это сейчас. В Ubuntu нет eh_timeout, но есть файл тайм-аута, который может быть тем же. Значение Ubuntu по умолчанию составляет 30 секунд. Сократит до 5 секунд и доложит.
Райан Соренсен
1
Из любопытства, каков был твой результат?
Братчли
Установка флага тайм-аута на 12.04, похоже, ничего не делает. Я планирую обновить тестовую систему до 14.04 в эти выходные, потому что она имеет eh_timeout (и также timeout).
Райан Соренсен
@RyanSorensen, у тебя был шанс посмотреть, работает ли этот параметр?
Nat
Я не мог изменить, eh_timeoutно я мог изменить, timeoutчтобы выполнить задачу под рукой.
GuitarPicker
2

Следите /sys/block/<dev>/statза интересующими вас устройствами и сравнивайте 10-й параметр (io_ticks).

например, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Это процент доступного времени, которое диск провел в ожидании диска io.

Конечно, почти 100% стоило бы проверить, иначе вы станете умнее и сравните его со средним значением по всем вашим дискам и выберите на любом диске (дисках) выше среднего.

Смотрите документацию статистики блочного слоя .

Еще используйте что-то вроде Munin и нарисуйте это. Вы можете попросить Munin предупредить, если он превысит пороговое значение, например, 90% или то, что показывает ваш график, является хорошим показателем оповещения.

например, посмотрите эти два графика Мунина, показывающие, что / dev / sdi нужно посмотреть. В этом примере, если / dev / sdi является частью массива, весь массив будет страдать из-за этого.

Использование диска на устройство - по дням

Использование диска на устройство - по неделям

Если вы посмотрите на график недели, то увидите, что / dev / sdc также может быть медленным.

Я должен добавить, что / dev / sdi выше не сломан, это просто медленный диск (фактически зеленый диск, который кто-то добавил в массив дисков sata корпоративного уровня), который замедлил массив. Фактически неисправный диск торчал бы как больной большой палец.

Подводя итог, я бы, вероятно, пошел со сценарием, если бы у меня было время, но Мунин, если бы я просто хотел быстрое решение и подключение к серверу, было легко.

Ян Макинтош
источник
Спасибо! Информация о статистике io в Linux действительно новая и, кажется, полезна (для меня) в таких ситуациях.
imz - Иван Захарящев