sr0에 액세스하면 트레이가 닫히지만 CD/DVD/Blu-Ray가 드라이브로 선택되면 오류가 반환되는 이유는 무엇입니까?

sr0에 액세스하면 트레이가 닫히지만 CD/DVD/Blu-Ray가 드라이브로 선택되면 오류가 반환되는 이유는 무엇입니까?

배포판(운영 체제 전반에 걸쳐)과 광학 미디어 드라이브 제조업체/모델 전반에서 이러한 동작을 본 적이 있습니다. CD, DVD 및/또는 Blu-ray 드라이브와 마찬가지로 트레이가 열려 있는 동안 이 작업을 시도하면 트레이가 open() /dev/sr0닫히고 종료가 완료될 때까지 통화가 open()차단됩니다 . 트레이가 완전히 닫히면 드라이브는 "인식 중" 상태로 전환되어 드라이브가 그 안에 있는 미디어 유형(CD, DVD, Blu-ray 등이 있는지 여부, 어떤 레이저를 포함해야 하는지)을 확인하려고 시도합니다. 사용), 이 작업은 일반적으로 몇 초 정도 소요되며, 이 시간 동안 open()장치에 대한 모든 호출(처음에 트레이를 닫게 한 호출 포함)은 미디어 없음 오류와 함께 실패합니다.

또 다른 방법:

  1. 사용자는 CD 트레이를 열고 디스크를 삽입합니다.

  2. 일부 명령을 실행하면 읽기 또는 쓰기를 위해 /dev/sr0이 열립니다(예: mount, dddvdbackup).

  3. CD 트레이가 자동으로 닫히고 트레이가 완전히 닫힐 때까지 명령이 차단됩니다.

  4. 트레이가 완전히 닫히면 명령은 미디어가 없다고 보고하고 종료됩니다. 드라이브가 새로 로드된 미디어를 인식하기 시작합니다.
  5. 사용자는 식별 단계가 완료되기 전에 명령을 다시 실행하려고 시도합니다(일부 "미디어 있음" 플래그는 이 시간 동안 설정되지 않은 것으로 보입니다). 동일한 "미디어 없음" 오류로 인해 명령이 즉시 실패합니다.
  6. 몇 초 후에 드라이브는 미디어를 읽을 준비가 됩니다.
  7. 사용자가 명령을 세 번째로 실행합니다. 이번에는 명령이 성공했습니다.

무슨 일이 일어나고 있는지에 대한 나의 이론(이것은 단지 이론일 뿐입니다):

  1. 위의 2단계에서 Linux는 드라이브에 요청합니다. 드라이브는 트레이가 열려 있는 것을 확인하고 닫습니다.
  2. 트레이가 닫히고 드라이브는 인식 단계에 진입했음을 운영 체제에 보고합니다. 아마도 "사용 중" 플래그를 설정하고 "미디어 있음"을 지우거나 무엇을 할 것인지를 알 수 있습니다.
  3. Linux는 "Media Present" 플래그가 지워진 것을 확인하고 즉시 애플리케이션에 아무 관련이 없음을 보고합니다.

내 첫 번째 질문은 왜 이런 일이 발생합니까? Linux가 바쁜 플래그를 확인하지 않는 이유는 무엇입니까? Windows에서는 이 작업을 수행합니다(또는 적어도 그렇게 보입니다. 일부 버전에서는 이 인식 단계에서 커서 옆에 CD 아이콘이 나타납니다). 두 번째 질문은 이 문제를 해결할 수 있는 방법이 있습니까?입니다. 커널을 완전히 우회하지 않고도 DVD 드라이브가 인식 단계인지 아니면 실제로 미디어가 없는지 알 수 있는 방법이 있습니까?

관련 정보