ディストリビューション(オペレーティングシステム全体)と光学メディアドライブの製造元/モデル全体でこれらの動作を見たことがあります。 CD、DVD、および/またはBlu-rayドライブと同様に、トレイが開いている間にこれを試みると、トレイが閉じてopen()
/dev/sr0
終了が完了するまで通話がopen()
ブロックされます。トレイが完全に閉じると、ドライブは「認識中」状態になり、ドライブがその中にあるメディアの種類(CD、DVD、Blu-rayなどがあるかどうか、どのレーザーを含めるべきか)を確認しようとします。使用)、これは通常数秒かかります。この間、open()
デバイスへのすべての呼び出し(最初にトレイを閉じた呼び出しを含む)は、メディアなしエラーで失敗します。
別の方法:
ユーザーはCDトレイを開き、ディスクを挿入します。
一部のコマンドを実行すると、読み取りまたは書き込み用に/ dev / sr0が開きます(たとえば
mount
、dd
などdvdbackup
)。CDトレイが自動的に閉じ、トレイが完全に閉じるまでコマンドがブロックされます。
- トレイが完全に閉じると、コマンドはメディアがないことを報告して終了します。ドライブが新しくロードされたメディアを認識し始めます。
- ユーザーは、識別ステップが完了する前にコマンドを再実行しようとします(一部の「メディア付き」フラグはこの間設定されていないようです)。同じ「メディアなし」エラーのため、コマンドはすぐに失敗します。
- 数秒後、ドライブはメディアを読む準備ができます。
- ユーザーがコマンドを 3 番目に実行します。今回はコマンドが成功しました。
何が起こっているのかについての私の理論(これは単なる理論です):
- 上記の手順2では、Linuxはドライブに要求します。ドライブはトレイが開いていることを確認して閉じます。
- トレイが閉じられ、ドライブは認識フェーズに入ったことをオペレーティングシステムに報告します。おそらく「使用中」フラグを設定し、「メディアあり」をクリアするか、何をすべきかを知ることができます。
- Linuxは、「Media Present」フラグがクリアされたことを確認し、すぐにアプリケーションには関係がないことを報告します。
私の最初の質問はなぜこれが起こるのですか? Linuxが忙しいフラグをチェックしないのはなぜですか? Windowsではこれを行います(または少なくともそうです。一部のバージョンでは、この認識フェーズではカーソルの横にCDアイコンが表示されます)。 2番目の質問は、この問題を解決する方法はありますか?カーネルを完全に迂回せずにDVDドライブが認識段階であるか、実際にメディアがないかを知る方法はありますか?