빈 디렉토리(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은 무엇입니까? 어떻게 삭제할 수 있나요?

나는 Fuser -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

두 번째 경우, 다음을 얻는 경우:

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

그러면 i_size가 0이 아닌 빈 디렉토리가 있을 수 있습니다.

다음과 같은 경우인지 확인할 수 있습니다.

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 --repair이러한 오류는 btrfs-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

두 번째 종류의 오류는 수리 후에도 그대로 남아 있어 걱정이 되기 시작했습니다.

답변3

ReadyNAS 상자의 고아 디렉토리로 인해 이 문제가 발생했습니다. 공유는 더 이상 GUI에 표시되지 않지만 /data 아래의 디렉토리는 지금까지 존재했습니다. 그래서 이 폴더를 제거하고 싶었지만 rmdir이 작동하지 않습니다.

스냅샷별로 스냅샷을 삭제했습니다.

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그것을 실행하고 그것이 도움이되는지 확인하고 싶을 것입니다.

관련 정보