GNU/Linux >> Linux の 問題 >  >> Linux

デバイスまたはリソースがビジー状態のため、rmdir が失敗しました

VM に共有フォルダーをマウントし、アンマウント後にディレクトリを削除したいので、ソリューションを共有したいだけなので、このような問題に直面しました。

<オール>
  • アンマウント パス

    sudo umount /your_path
    
  • /etc/fstab の mout パスを削除

    sudo nano /etc/fstab
    
  • 再起動

    sudo reboot
    
  • ディレクトリを削除

    sudo rm -rf /your_path
    

  • @g-v 回答ありがとうございます。しかし、結果は別の問題であることがわかりました。プロセスを fork するときに CLONE_NEWNS フラグを使用します。詳細については、CLONE_NEWNS フラグと MESOS-3349 Device busy bug を参照してください

    簡単に言えば、親プロセスにマウントします。そして、子プロセスで umount を実行すると、CLONE_NEWNS のために、親プロセスによって処理されたマウント ポイントがまだ存在します。そのため、rmdir を呼び出すと、EBUSY エラー コードが返されます。

    上記の問題を回避するには、共有マウントまたはスレーブ マウントを使用できます。詳細は LWN 159092 に記載されています


    私の経験では、次の操作は Linux では非同期です:

    • ファイルを閉じています。 close()の直後 リターン、umount() EBUSY を返す場合があります 非同期リリースを実行している間。ここでの議論を参照してください:ページ 1、ページ 2。
    • ファイルシステムをアンマウントしています。すべてのデータがディスクに書き込まれるまで、マウントされたデバイスはビジー状態になる可能性があります。
    <ブロック引用>

    私も sync && echo 2 > /proc/sys/vm/drop_caches と呼んでいます ファイル キャッシュを削除しようとしても、まだ機能しません。

    sync(8) を参照 :

    <ブロック引用>

    Linux では、sync 書き込みのためにダーティ ブロックをスケジュールすることのみが保証されます。すべてのブロックが最終的に書き込まれるまで、実際には少し時間がかかる場合があります。 reboot(8)halt(8) コマンドは sync(2) を呼び出した後、数秒間スリープすることでこれを考慮します .

    /proc/sys/vm/drop_caches について 、こちらをご覧ください:

    <ブロック引用>

    これは非破壊的な操作であり、ダーティ オブジェクトは解放されません。

    したがって、コマンドの直後に、データがまだ書き込みのためにキューに入れられていて、アンマウントがまだ完了していない可能性があります。

    更新

    ただし、非同期アンマウントが実行中の場合、カーネルは EBUSY を返します。 マウントされたデバイスでの操作用 、ただしマウントポイントは対象外 .

    したがって、上記のケースはできません あなたの問題の理由になります:P

    追記

    実際、man ページに sync(8) と記載されている理由がわかりません Linux では同期ではありません。 sync(2) を呼び出します これは次のように述べています:

    <ブロック引用>

    標準仕様 (POSIX.1-2001 など) によると、sync() 書き込みをスケジュールしますが、実際の書き込みが完了する前に戻る場合があります。ただし、バージョン 1.3.20 以降、Linux は実際に待機します。 (これでもデータの整合性は保証されません。最新のディスクには大きなキャッシュがあります。)


    Linux
    1. 読み込めない、リソースの請求に失敗しました:1?

    2. mdadm:/dev/sda1 を開けません:デバイスまたはリソースがビジーです

    3. CentOS / RHEL :UUID を使用してファイルシステムをマウントする方法

    1. 故障した Btrfs デバイスを交換する方法

    2. losetup:コマンドが見つかりません

    3. 使用中のデバイスをアンマウントする方法

    1. avrdude:ser_open():デバイスを開けません /dev/ttyACM0:デバイスまたはリソースがビジーです

    2. Android Studio - Gradle の同期に失敗しました:既に破棄されています

    3. 特定のユーザー権限でデバイスをマウントする