프로세스가 디스크 읽기(오류를 잡기 위해)를 기다리는(차단하는) 시간을 어떻게 줄일 수 있나요?

프로세스가 디스크 읽기(오류를 잡기 위해)를 기다리는(차단하는) 시간을 어떻게 줄일 수 있나요?

디스크에서 읽을 수 없는 섹터를 발견했을 때 너무 오래 기다리는 것은 정말 짜증나는 일입니다. (특히 백업 및 복구 목적으로 불량 섹터가 있는 디스크에서 최대한 많은 데이터를 읽고 신속하게 읽으려는 경우)

디스크는 읽기 오류(인식된 오류)를 보고합니다.

실패한 읽기가 너무 오래 걸리지 않도록 제거하고 읽기 프로세스와 디스크가 차단되지 않고 다음 읽기를 시도할 수 있도록 디스크(ATA)를 설정할 수 있습니까?

아니면 이를 달성하기 위해 Linux 디스크 드라이버를 설정할 수 있습니까?

아니면 긴 읽기를 피하기 위해 Linux의 읽기 프로세스로 무엇을 할 수 있습니까?

답변1

실패한 읽기가 너무 오래 걸리지 않도록 제거하고 읽기 프로세스와 디스크가 차단되지 않고 다음 읽기를 시도할 수 있도록 디스크(ATA)를 설정할 수 있습니까?

아니요.

내가 이해하는 바는 이것이 운영 체제가 "가능한 오류"를 처리할 것이라고 합리적으로 기대할 수 없기 때문에 작업 하드웨어의 성능과 안정성을 선호하는 설계 선택(Linux에만 국한되지 않음)으로 인해 발생하는 논리적 문제라는 것입니다. 하드웨어로 가져온 것입니다. . 우리는 가지고 있습니다이에 대한 질문과 답변.

불량 섹터가 있는 디스크에서 최대한 많은 데이터를 읽으려는 경우

불량 섹터인 경우 운이 좋게도 영향을 받은 파티션을 마운트 해제하고 e2fsck -cy /dev/whatever해당 파티션에서 실행합니다(ext 형식이라고 가정). 스위치가 -c작동하여 badblocks파티션의 "불량 블록 목록"에 개별 주소를 추가합니다. 이후에 설치하면 시스템은 해당 주소에 액세스하려고 시도하지 않습니다. 이는 아마도 일부 데이터가 손실되었음을 의미할 수 있습니다. 그 중 일부는 /lost+found디렉터리에서 찾을 수 있습니다. 이 -y스위치를 사용하면 fsck 문제가 많을 때 수동으로 "예, 수정하겠습니다"라고 말할 필요가 없습니다.

그러나 불량 블록이 아닌 경우(예: 컨트롤러 오류) 운이 없는 것입니다. 뭔가 고장났습니다. 이유는 다음과 같습니다.중요한 데이터를 정기적으로 백업하세요매우 중요합니다. 나쁜 컨트롤러가 있는 디스크에서 실행하면 문제가 더 악화되는지 잘 모르겠습니다 e2fsck -cy. 고려해야 할 사항이지만 OTOH, 어차피 원하는 것을 얻을 수 없다면 잃을 것이 없습니다.

답변2

대부분의 Unix 시스템은 로컬 디스크에서 비동기 읽기를 구현하지 않습니다. 호출을 시도하면 동기 읽기가 발생합니다. 특히 Linux에서는 로컬 디스크 절전 모드가 중단되지 않습니다(스크래치된 CD의 경우 문제가 됨).

플랫폼에서 로컬 디스크 IO가 중단될 경우 Alarm()을 사용하여 대기할 최대 시간을 설정할 수 있습니다.

관련 정보