存在しないオープンファイルを含むファイルシステムをマウント解除する方法は?

存在しないオープンファイルを含むファイルシステムをマウント解除する方法は?

私はYoctoベースの組み込みLinuxシステム(カーネルバージョン5.10.48)を使用しており、USBフラッシュドライブの取り外しに問題があります。

USBドライブが接続されると、udevで実行されるスクリプトがあります。接続が完了したら、/run/media にディレクトリを作成し、そこにファイルシステムをマウントし、接続を解除するとファイルシステムをアンマウントし、マウントポイントを削除する必要があります。

ファイルシステムがUSBフラッシュドライブにマウントされていて、一部のプロセスでファイルを開いたままにしている場合、フラッシュドライブを取り外してもファイルは閉じられません。したがって、ファイルシステムをマウント解除できず、そのマウントポイントディレクトリが削除されます。

たとえば、USBフラッシュドライブを接続し、FAT32パーティション/ dev / sdc1を持つ/ dev / sdcとして検出されました。そのため、シェルで次のコマンドを実行します。

root@host:media$ mkdir usbflash
root@host:media$ mount /dev/sdc1 usbflash
root@host:media$ tail -F usbflash/dir/file &
[1] 2544

その後、USBフラッシュドライブを物理的に取り外します。その後、ファイルシステムをアンマウントしようとしましたが、ファイルがまだ開いているため、それを行うことはできませんでした。

root@host:media$ umount usbflash
umount: /run/media/usbflash: target is busy.
root@host:media$ lsof -p 2544 | grep file
tail    2544 root    3r   REG   8,33        0 1043 /run/media/usbflash/dir/file

このファイルを使用してプロセスを終了し、ファイルシステムをアンマウントしてマウントポイントを削除できることを知っていますが、他のタスクを実行するアプリケーションなので、プロセス全体を終了することはできません。

ファイルを強制的に閉じたり、ファイルが開いているファイルシステムを強制的にマウント解除したり、ファイルシステムがインストールされているディレクトリを強制的に削除したりする方法はありますか?

ベストアンサー1

Linuxカーネルはそうではありませんrevoke() システムコールしたがって、プロセスを終了することが唯一のオプションです。あなたはそれを貢献することを歓迎します。

おすすめ記事