空のディレクトリ(btrfsファイルシステム)を削除する方法は?

空のディレクトリ(btrfsファイルシステム)を削除する方法は?

実験的なファイルシステムを使用していますbtrfs

私のディレクトリは次のとおりです。

 ls -la empytfolder
 total 4
 drwxr-xr-x 1 root root   0 19. Mär 14:00 .
 drwxr-xr-x 1 root root 298 19. Mär 13:59 ..

空のフォルダを削除/削除する方法を使用して削除しようとしましたが、rm -rf emptyfolderエラーが発生しました。rm: cannot remove directory: directory not empty?なぜこのフォルダに4つのファイルがあるのですか?ルートとして削除しようとしています。私のファイルシステムはbtrfsです。

stat emptyfolder私にしてください:

 Datei: „emptyfolder“
 Größe: 0           Blöcke: 0          EA Block: 4096   Verzeichnis
 Gerät: 21h/33d Inode: 256         Verknüpfungen: 1
 Zugriff: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
 Zugriff    : 2012-03-19 14:00:28.205205566 +0100
 Modifiziert: 2012-03-19 14:00:23.925025572 +0100
 Geändert   : 2012-03-19 14:00:23.925025572 +0100
 Geburt    : -

システムクロックにはいくつかの問題があります。時々間違った時間が表示されることがあります。

$ lsof +D emptyfolder
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/user
/.gvfs Output information may be incomplete.

gvfs-fuse-daemonとは何ですか?どうすれば削除できますか?

私はfusions -uv /dev/diskを試しましたが、何の役にも立ちませんでした。どのプロセスもフォルダにアクセスしません。フォルダをtmpに移動しました。

答え1

Btrfs FAQ - 空のディレクトリを削除できません。

最初のケース、次のような場合:

rmdir: failed to remove ‘emptydir’: Operation not permitted 

「emptydir」が実際にサブボリュームであるためです。

次のようにして、これらのケースであることを確認できます。

btrfs subvolume list -a /mountpoint

サブボリュームを削除するには、以下を実行する必要があります。

btrfs subvolume delete emptydir

2番目のケース、次のような場合:

rmdir: failed to remove ‘emptydir’: Directory not empty 

これにより、i_sizeがゼロ以外の空のディレクトリがある可能性があります。

次のようにして、これらのケースであることを確認できます。

stat -c %s emptydir
3196         <-- unexpected non-zero size

適切な(アンマウントされた)ファイルシステムで実行すると、btrfs check問題が特定され、問題がある他のディレクトリ(存在する場合)が一覧表示されます。

次の出力が表示されます(抜粋)。

checking fs roots
root 5 inode 557772 errors 200, dir isize wrong
root 266 inode 24021 errors 200, dir isize wrong ...

btrfs check --repairbtrfs-progsの新しいバージョンを実行している場合は、このようなエラーを修正できます。

btrfs check --repair場合によっては、問題を解決する場合は、むしろ問題を悪化させる可能性があるため、軽く使用してはいけないことに注意してください。

答え2

btrfsパーティションを使用しても同様の症状が発生しました。

btrfs check --repair /dev/sdXY

私のために問題を解決しました。見つかったエラーの形式は次のとおりです。

root X inode Y errors 200, dir isize wrong

そして

root X inode Y errors 80, file extent overlap

修正後も2番目のエラーが発生し続けて心配になりました。

答え3

この問題は、ReadyNASシステムの別々のディレクトリに発生します。共有はもはやGUIに表示されなくなりますが、/ dataの下のディレクトリはこれまで存在し続けます。だからこのフォルダを削除したいのですが、rmdirは機能しません。

スナップショットを1つずつ削除しました。

cd /data
btrfs subvolume delete ./VirtualBox1/.snapshots/309/snapshot
...
btrfs subvolume delete ./VirtualBox1/.snapshots/2/snapshot
btrfs subvolume delete ./VirtualBox1/.snapshots/1/snapshot
btrfs subvolume delete ./VirtualBox1/.snapshots

すべてのスナップショットを削除した後、「フォルダ」自体を削除できました。

btrfs subvolume delete ./VirtualBox1

答え4

cd空のディレクトリで実行して、lsof +D /path/to/emptydir何が開いているかを確認してください。ディレクトリの内容や使用方法に応じて、何かがディレクトリを非常にすばやく開いて閉じることができます。lsを実行するとディレクトリに何もありませんが、実行時に何かがある場合はそれをキャプチャできますrm -fr emptydir。この場合は違いはありませんが、実行してみてくださいrmdir emptydir

出力の上の合計ls(insgesamtは合計を意味するようですが?)は空のディレクトリを表します。

ファイルシステムの種類も知っておくと便利です。また、これを実行して役に立つかどうかをfsck確認することもできます。

関連情報