必须先终止占用进程、清除不可变属性、解除只读挂载,再用rsync同步清空;若存.fuse_hidden残留,需kill对应FUSE进程并拔除外部设备。

你在银河麒麟系统里想卸载一个被进程持续读写、右键删除无响应、rm -rf后仍残留.fuse_hidden文件的目录,图形界面卡死、终端报“Device or resource busy”或“Permission denied”,必须穿透进程锁定与底层挂载限制才能彻底清空。
确认并终止占用该目录的所有进程
先定位谁在锁着它——进入目录所在父路径,执行:sudo lsof +D /path/to/target_dir(把/path/to/target_dir换成你的真实路径)。若输出为空但删不掉,说明可能是内核级挂载或FUSE伪文件系统在占位。
更暴力但更彻底的方式是直接杀光访问该目录树的全部进程:cd /path/to/target_dir → sudo fuser -k -v .。注意末尾的英文点号不能漏,它代表当前目录;-v会打印被杀进程详情,-k强制终止,比逐个kill PID快得多。
若提示command not found,先运行sudo apt install psmisc安装fuser工具。
解除不可变属性与只读挂载限制
方法一:查i属性并清除
执行lsattr -d /path/to/target_dir。若输出含字母i(如----i--------e--),说明目录本身被设为不可变,必须先运行sudo chattr -i /path/to/target_dir,否则任何删除操作都静默失败。
方法二:检查是否挂载在只读设备上
运行mount | grep "$(df /path/to/target_dir 2>/dev/null | tail -1 | awk '{print $1}')" | grep ro。如果返回结果含“ro,”,说明该分区是只读挂载。此时需执行sudo mount -o remount,rw /mount/point(/mount/point替换为df输出中的挂载点,如/data或/mnt/usb)。
用rsync清空替代rm -rf(尤其适合含海量小文件的顽固目录)
① 创建空目录:mkdir /tmp/empty_for_rsync
② 同步抹除目标目录全部内容:rsync -a --delete /tmp/empty_for_rsync/ /path/to/target_dir/
③ 删除已变为空的目录和临时空目录:rm -rf /tmp/empty_for_rsync /path/to/target_dir
这一步绕过shell参数长度限制,不会因上万个.fuse_hidden*文件触发“Argument list too long”,且能精准清除所有隐藏项和元数据。
处理.fuse_hidden类残留文件
如果清空后仍发现类似.fuse_hidden0000046100000006的文件残留,说明它们正被FUSE挂载进程(如rclone、sshfs、gvfs)持有句柄。先运行lsof | grep fuse找出对应进程名(如rclone、gio-daemon),再执行sudo killall -9 进程名。杀完立即重试rsync清空步骤。
若该目录原属外部U盘或移动硬盘,拔掉设备后再执行上述全部操作——很多“无法卸载”本质是设备物理断连但内核未清理挂载记录。

















