Closed5

"`rm`"をしようとすると、「rm: 'ファイル名' を削除できません: デバイスもしくはリソースがビジー状態です」が出力される際の対処

MASAMASA

事象

"rm -fr RailsTutorial"で既存のRailsTutorialディレクトリを削除しようとすると、「デバイスもしくはリソースがビジー状態です」というメッセージが出力されて削除できない。

masa@DESKTOP-0CNPS43:~$ rm -fr RailsTutorial
rm: 'RailsTutorial' を削除できません: デバイスもしくはリソースがビジー状態です

rm デバイスもしくはリソースがビジー状態です」で検索すると、"lsof"コマンドを利用して、このディレクトリを掴んでいるサービスを探してみてとのことだったので、実行してみる。

MASAMASA

"lsof"コマンドを実行

参考:デバイスもしくはリソースがビジー状態です
"
RailsTutorialを掴んでいるサービスを調べるために、"lsof | grep RailsTutorial"

masa@DESKTOP-0CNPS43:~$ lsof | grep RailsTutorial
lsof: WARNING: can't stat() tmpfs file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/tmp
      Output information may be incomplete.
lsof: WARNING: can't stat() tmpfs file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/tmp
      Output information may be incomplete.
lsof: WARNING: can't stat() tmpfs file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/tmp
      Output information may be incomplete.
lsof: WARNING: can't stat() overlay file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/rootfs
      Output information may be incomplete.
lsof: WARNING: can't stat() overlay file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/rootfs
      Output information may be incomplete.
lsof: WARNING: can't stat() overlay file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/rootfs
      Output information may be incomplete.
lsof: WARNING: can't stat() tmpfs file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/tmp
      Output information may be incomplete.
lsof: WARNING: can't stat() overlay file system /mnt/wsl/docker-desktop-data/tarcache/entries/docker.tar/b9268ff848a05ab65e57cc96045435baef2610255457be9231e34477ef01be0f/containers/services/docker/rootfs
      Output information may be incomplete.

WARNING: can't stat() overlay file system」という警告が出ているので、それを調べる。

MASAMASA

解決法

"sudo su" ルートユーザに変更。
"ps axuww | grep docker" dockerのプロセスを幅無制限で表示。
"kill [プロセスID]" プロセスを殺す。(今回は上記psコマンドで出力されたIDを指定した。)
しかし、これでも"rm"は実行できなかった。
"wsl --shutdown"(Windosのコマンドプロンプトで実行)wslをシャットダウン(その後自動で再起動される)

"rm -fr RailsTutorial" を実行すると、削除できました!

masa@DESKTOP-0CNPS43:~$ ls
RailsTutorial  RailsTutorial_toyapp
masa@DESKTOP-0CNPS43:~$ rm -rf RailsTutorial
masa@DESKTOP-0CNPS43:~$ ls
RailsTutorial_toyapp
MASAMASA

なぜ上記解決法で解決できたのか

プロの方曰く、

VSCodeとUbuntuとのコネクションが切断されたとこによってソケットが更新され、掴んでたセッションが切断されたのでビジー状態ではなくなり、削除が可能になった。

とのことです。
プロの方、お助けいただき、誠にありがとうざいました。。

このスクラップは2021/01/06にクローズされました