
我正在使用實驗性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個檔案?我正在嘗試以 root 使用者身分刪除它。我的檔案系統是 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
第一個案例, 如果你得到:
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 非零的空目錄。
您可以透過以下方式檢查是否屬於這種情況:
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
它,看看是否有幫助。