빈 디렉토리(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

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

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 --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

수정한 후에도 두 번째 오류가 계속 발생하여 걱정이 되었습니다.

답변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도움이 되는지 확인할 수도 있습니다.

관련 정보