私は毎日複数のユーザーによってアクセスされているいくつかのsambaドライブを持っています。共有ドライブを(SQLテーブルから)認識し、それらをすべてのユーザーがアクセスできる特別なディレクトリにマウントするコードをすでに持っています。
SQLテーブルからドライブを削除した場合(事実上オフラインにした場合)、ビジー状態のデバイスをマウント解除する方法はありますか。これまでのところ、umount
のどの形式でもうまくいかないことがわかりました。
データを破壊する可能性を無視する - 現在読み込まれているデバイスをマウント解除することは可能ですか?
はい!!ビジー状態のデバイスをすぐに切り離す方法があります(ビジー状態で強制的にマウント解除できない場合でも)。後ですべてクリーンアップできます。
umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS(NETWORK-FILE-SYSTEM)
注:
可能であれば、プロセスをビジー状態にして識別し、プロセスを強制終了してから、samba共有をアンマウントして損傷を最小限に抑えます。
lsof | grep '<mountpoint of /dev/sda1>'
(またはマウントされているデバイスがなんであれ)
pkill target_process
(名前による忙しい手順を強制終了| kill PID
| killall target_process
)
umount /dev/sda1
(またはマウントされているデバイスがなんであれ)
マウント解除しようとしているときに、まだマウントされていないデバイスにいることを確認してください。
次のことを試してみてください、しかしそれを実行する前に-k
フラグは実行中のプロセスをすべて終了させ、デバイスをビジー状態にします。
-i
フラグは、殺す前にfuser
に尋ねます。
fuser -kim /address # kill any processes accessing file
unmount /address
Exportfs -vを使用して、エクスポートされたNFSファイルシステムを確認してください。見つかった場合は、exportfs -d share:/ディレクトリで削除してください。これらはfuser/lsofリストには表示されず、umountが成功するのを妨げる可能性があります。
umount2
をチェックしてください。
Linux 2.1.116では、umount2()システムコールが追加されました。これは、umount()と同様に、ターゲットをマウント解除しますが、操作の動作を制御する追加のフラグを許可します。
MNT_FORCE(Linux 2.1.116以降)ビジー状態でもアンマウントする。 (NFSマウントの場合のみ)MNT_DETACH(Linux 2.4.11以降)遅延マウント解除を実行します。マウントポイントを新しいアクセスに使用できないようにし、実際にマウントポイントがビジー状態にならなくなったらマウント解除を実行します。 MNT_EXPIRE(Linux 2.6.8以降)マウントポイントを期限切れとしてマークする。マウントポイントが現在使用されていない場合、このフラグを指定したumount2()への最初の呼び出しはエラーEAGAINで失敗しますが、マウントポイントは期限切れとしてマークされます。マウントポイントは、どのプロセスからもアクセスされない限り、期限切れのままです。 MNT_EXPIREを指定した2番目のumount2()呼び出しは、期限切れのマウントポイントをマウント解除します。このフラグは、MNT_FORCEまたはMNT_DETACHと一緒に指定することはできません。戻り値
成功すると、ゼロが返されます。エラーが発生した場合は-1が返され、errnoが適切に設定されます。
何かうまくいったときのもう一つの選択肢は、/etc/fstab
を編集し、noauto
フラグを追加してマシンをリブートすることです。デバイスはマウントされず、何でもやり終わったら、フラグを外して再度リブートしてください。