解決策 1:
通常、ハード マウントは、ローカル ディスクや SAN などのブロック リソースに使用されます。ソフト マウントは通常、NFS や CIFS などのネットワーク ファイル プロトコルに使用されます。
ソフト マウントの利点は、NFS サーバーが利用できない場合、事前に構成された時間が経過するとカーネルが I/O 操作をタイムアウトにすることです。欠点は、NFS ドライバーがデータをキャッシュし、ソフト マウントがタイムアウトした場合、NFS ボリュームへのどの書き込みが実際にディスクにコミットされたかをアプリケーションが認識できない可能性があることです。
解決策 2:
ハードマウントと「intr」(割り込み可能)は良い妥協点です(2.6.25より前のカーネルの場合、Ryan Horrisbergerによるコメントを参照してください)。アプリケーションは書き込みの成功にだまされませんが、何かがチューブを詰まらせた場合、それらを強制終了できます。
解決策 3:
ある種のネットワーク ファイル システム (nfs またはヒューズ) を使用したハード マウントは、切断された接続を再確立しようとしている間に (場合によっては) 永久にブロックされる可能性があります。つまり、そのマウントにアクセスしようとするすべてのプロセスは、デバイスが再び使用可能になるか、システムが再起動されるまで、ディスク スリープ (D) になります。
ディスクのスリープを中断または強制終了することはできません。ゾンビ プロセスのゾンビのようなものです。
つまり、ネットワーク ファイル システムにハード マウントを使用しないでください。 I/O が不可能な場合は、ファイル システムを (すぐに、syscall を使用するプロセスに) 失敗させたい。そうしないと、FS が失敗した場合に、彼らが主張するメモリがリークされる可能性があります。