已物理断开的HDD无法卸载,存在无法终止的D状态进程求助
已物理断开的HDD无法卸载,存在无法终止的D状态进程求助
问题描述
我已经把HDD从USB接口完全拔掉了,但系统仍然显示它处于挂载状态。我发现有一些处于**D状态(不可中断睡眠)**的进程,根本无法杀死它们。尝试用fuser命令终止进程但没有效果,想请教有没有不用重启就能卸载这个HDD的方法?
我执行的命令及输出如下:
使用fuser -vmMki /mnt/HDD_bckp/的输出:
USER PID ACCESS COMMAND /mnt/HDD_bckp: root kernel mount /mnt/HDD_bckp elias 61428 F.... rsync elias 61430 F.c.. rsync root 225357 f.... (fwupdmgr elias 333843 f.... baloo_filemetad elias 337939 f.... baloo_filemetad root 347688 f.... (ostnamed elias 351650 f.... baloo_filemetad
按y确认杀死所有进程,但没有任何效果。
使用sudo lsof /dev/sdb1的输出:
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 61428 elias 3w REG 8,17 9140924 14 /mnt/HDD_bckp/09aug.log (deleted) rsync 61430 elias cwd DIR 8,17 12288 2 /mnt/HDD_bckp rsync 61430 elias 1u REG 8,17 0 117864530 /mnt/HDD_bckp/_X_PICS/400_n.jpg.oF86P8 (fwupdmgr 225357 root 4u DIR 8,17 12288 2 /run/systemd/unit-root/mnt/HDD_bckp baloo_fil 333843 elias 8r REG 8,17 207541 96 /mnt/HDD_bckp/oZ.jpg baloo_fil 337939 elias 8r REG 8,17 2619650 20 /mnt/HDD_bckp/344.gif (ostnamed 347688 root 4u DIR 8,17 12288 2 /run/systemd/unit-root/mnt/HDD_bckp baloo_fil 351650 elias 8r REG 8,17 150826 122 /mnt/HDD_bckp/7839_n.jpg
解决方案
首先得说明:那些处于D状态的进程是Linux里的“硬骨头”——它们正卡在等待硬件IO响应的阶段,现在硬盘已经被拔走,IO请求永远无法完成,所以系统不会允许强制终止这些进程(这也是fuser失效的原因)。不过我们可以先解决卸载的问题,再处理进程的后续:
- 尝试懒卸载(Lazy Unmount)
这是最实用的不重启卸载方法,它会立刻把挂载点从文件系统树中移除,等到相关进程不再引用该挂载点时,再完成真正的卸载操作。执行命令:
sudo umount -l /mnt/HDD_bckp
执行后,你会发现/mnt/HDD_bckp不再显示为挂载状态,后续可以正常复用这个挂载点。
关于D状态进程的说明
这些D状态的进程除非系统重启,否则几乎无法手动清除——Linux内核为了避免系统崩溃,不会向处于不可中断睡眠的进程发送终止信号。如果这些进程没有占用过多系统资源,你可以暂时忽略,等下次重启时它们会自动消失。预防下次出现类似问题
这次的核心原因是你在rsync等进程还在访问硬盘时直接拔掉了设备。以后建议按以下步骤操作:
- 先终止所有访问该硬盘的进程(比如用
pkill rsync终止同步进程,用balooctl stop暂停baloo索引) - 执行正常卸载命令
sudo umount /mnt/HDD_bckp - 确认卸载成功后,再物理拔掉硬盘
备注:内容来源于stack exchange,提问作者Estatistics
相关产品推荐
相关产品推荐

