Как уменьшить время ожидания (блокировки) процессов для чтения диска (только для обнаружения ошибки)?

Ожидание слишком долго, когда сталкивается с нечитаемым сектором на диске, очень раздражает. (Особенно, если вы пытаетесь прочитать как можно больше данных, которые можно прочитать с диска с плохими секторами, и сделать это быстро, для резервного копирования и восстановления.)

Диски сообщают о ошибках чтения (ошибки восприятия).

Можно ли настроить диск (ATA) так, чтобы сбой чтения не занимал слишком много времени, чтобы его можно было отбросить, и процесс чтения и диск не были заблокированы, и можно было бы попробовать следующее чтение?

Или, возможно, драйвер Linux-диска можно настроить для достижения этого?

Или процесс чтения в Linux может что-то сделать, чтобы избежать длительного чтения?

Можно ли настроить диск (ATA) так, чтобы сбой чтения не занимал слишком много времени, чтобы его можно было отбросить, и процесс чтения и диск не были заблокированы, и можно было бы попробовать следующее чтение?

Нет .

Мое понимание этого заключается в том, что это логическая проблема, связанная с выбором дизайна (не уникальным для Linux), который способствует повышению производительности и стабильности рабочего оборудования, поскольку от ОС нельзя разумно ожидать бесконечных возможностей, представленных «возможно, неисправным» оборудованием , У нас есть вопросы и ответы .

если вы пытаетесь прочитать столько данных, сколько можно прочитать с диска с плохими секторами

Если это плохие сектора, вам повезло; umount затронутые разделы и (предположив, что они форматированы ext) запускают e2fsck -cy /dev/whatever на них. Переключатель -c запускает badblocks и добавляет отдельные адреса в список «плохих блоков» в разделе; когда он будет впоследствии установлен, система никогда не попытается получить к ним доступ. Это может означать, что вы потеряли некоторые данные; бит его можно найти в каталоге /lost+found . Переключатель -y избавляет вас от необходимости вручную указывать «Да, исправить» на вопросы fsck, которых может быть очень много.

Однако, если это не плохие блоки (например, это неисправный контроллер), вам не повезло. Разбивка предметов, поэтому сохранение регулярных резервных копий жизненно важных данных так важно. Я не уверен, что если запуск e2fsck -cy на диске со сломанным контроллером может ухудшить ситуацию, о чем нужно подумать, но OTOH, если вы все равно не сможете получить то, что вам нужно, вам нечего терять.

Большинство систем Unix не применяли асинхронные чтения локальных дисков; попытка вызова приводит к синхронному чтению. В частности, в Linux спящий режим для локальных дисков является бесперебойным (что раздражает на поцарапанных компакт-дисках).

Если локальный диск IO прерывается на вашей платформе, вы можете использовать alarm (); читать(); чтобы установить максимальное время, которое вы готовы подождать.