在 UOS 系统中,经常遇到设备挂载失败或卸载时反复报错“device is busy”或“target is busy”,这属于常见且令人头疼的问题。核心原因其实很简单:内核仍在引用挂载点,系统拒绝释放资源。那么,如何将这个“钉子户”彻底请走?下面直接给出操作步骤。

首先明确一点:不要使用 umount -f 硬干。很多新手遇到 busy 错误就立刻上 -f,但在本地文件系统(如 ext4、xfs、NTFS)上这个参数完全无效,它只对 NFS 这类网络文件系统起作用。因此,与其浪费时间试错,不如按照下面的步骤逐一排查。
确认设备是否被进程占用
先找出是谁在占用资源。执行 sudo lsof +D /mnt/mydisk 可以列出所有正在访问该挂载点及其子目录的打开文件。如果系统未安装 lsof,先运行 sudo apt install lsof 进行安装。
还有一个更轻量的命令:sudo fuser -v /mnt/mydisk。它会直接输出用户、PID、访问类型(例如 cwd 表示当前工作目录)以及命令名,信息一目了然,非常适合快速定位问题。
请注意,不要跳过这一步就直接执行 umount -f —— 前面已经说明,该参数在本地文件系统上形同虚设,白白浪费时间还可能掩盖真实问题。
安全终止占用进程
方法一:交互式终止
运行 sudo fuser -ki /mnt/mydisk,系统会逐个询问是否终止每个占用进程,输入 y 确认。这种方式较为保险,适合桌面环境,若担心误杀重要服务,可以优先选择。
方法二:一键终止所有
直接使用 sudo fuser -k /mnt/mydisk,向所有占用进程发送 SIGKILL。如果提示“No processes found”,说明当前没有活跃进程占用——此时问题可能出在 shell 当前路径上,先执行 cd / 让工作目录离开挂载点,再尝试卸载。
方法三:处理顽固残留
有时进程已经退出,但挂载点仍然显示为 busy,这通常是内核缓存未清空所致。此时可以用 sudo umount -l /mnt/mydisk——这里的 -l 表示 lazy,即立即断开挂载点与文件系统的关联。执行后挂载点目录会变空,但底层设备仍在后台静默释放引用,因此不能马上拔出设备或重新格式化,需要等待几秒钟再操作。
验证卸载结果
运行 findmnt | grep mydisk,如果输出为空,说明挂载点已从列表移除。
然后再执行 ls /mnt/mydisk,应返回“No such file or directory”。如果依旧能列出内容,说明卸载未生效,需要回头检查是否存在绑定挂载(bind mount)未卸载,或者容器、虚拟机仍在占用该路径。
