web-dev-qa-db-ja.com

.Fuse_hidden *ファイルを削除する方法?

いくつかのWindowsマシンといくつかのフォルダを共有するように設定されたSambaサーバーを実行する小さなLinuxサーバー(Debian Squeeze)があります。 Windowsからいずれかのディレクトリを削除しようとすると、「フォルダを削除できません」というエラーが表示されました。

Linuxのコンソールからディレクトリを削除しようとすると、同様のエラーが発生しました。

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty

ディレクトリの内容を一覧表示したところ、.Fuse_hiddenという名前のファイルに続いて16進数(000bd8c100000185)が見つかりました。

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .Fuse_hidden000bd8c100000185

.Fuse_hiddenファイルを削除しようとしましたが、すぐに新しいファイルが作成されました(16進数の変更に注意してください)。

# rm dir-name/.Fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .Fuse_hidden000bd8c100000186

また、Midnight Commanderを使用してファイルを削除しようとしましたが、成功しませんでした。

これまでに見つけた他のソリューションにはGUIが含まれ、コンソールしかありません。

任意の提案をいただければ幸いです。

35
Lando

これは、NFSマウントで別のシステムが開いているファイルを削除した場合と同様です。問題は、「リンクカウント」が1を超えているときにファイルシステムからファイルが削除されたことです。これは、他のプロセスがファイルを開いたままにしていることを意味します。

  • ファイルが物理的に存在するシステムにログインします。 (ネットワークマウントなし)
  • 実行lsof dir-name/.Fuse_hidden000bd8c100000185ファイルハンドルを開いたままにしているプロセスを確認します。
  • 必要に応じてこれらのプロセスを終了するか、プロセスを終了せずに開いているファイルハンドルを「正常に」解放するために実行できる手順を見つけます。

通常、別のプロセスが開いているローカルファイルシステム上のファイルを削除すると、OSは要求に応じてそれをディレクトリツリーから削除しますが、ツリーが指しているiノードは引き続きオペレーティングシステムで使用されていると見なされます。ファイルが開かれるたびに、その「リンクカウント」は1ずつ増加し、そのリンクカウントがゼロに達したときにのみ、スペースが本当に解放されます。

この種の問題に遭遇した場合、それはOSが何らかの理由でnotをそのファイルをディレクトリツリーから削除することを決定したことを意味します。直接のiノード番号を利用できないものによってアクセスされます。最初は準拠しているように見えるかもしれませんが、舞台裏では、OSは非表示のドットプレフィックスを持つように名前を変更しています。リンク数がゼロに達した場合でもスペースは解放されますが、そのオブジェクトはリンクがなくなるまでディレクトリに残ります。

55
Andrew B

提案をありがとう、しかし私には何もうまくいきませんでした。しかし、解決策を見つけました。Windowsを実行しているPCに外付けSSDを移動しました。ファイルエクスプローラーを使用して([非表示の項目]がオンになっている).Trashesディレクトリに移動すると、.fuser_hiddenファイルを削除できました。

お役に立てれば!

0
RobertC