断开连接的块设备仍保留在 /dev/ 中,同步命令无法终止

断开连接的块设备仍保留在 /dev/ 中,同步命令无法终止

我正在运行带有 4.10.0-38-lowlatency 内核和 KDE5 桌面的 Linux Mint 18/2。

我正在使用自定义 bash 脚本测试大量 USB 闪存,f3今天遇到了一个奇怪的情况。当一个驱动器与机器物理断开连接时,它并没有从 /dev/ 中消失。

我还注意到任何sync命令都会完全挂起,甚至sudo pkill -9 sync没有帮助。

我终于做到了sudo rm /dev/sdd,但sync仍然会永远挂着。

自错误开始以来运行的所有同步进程都保留在系统中。 Htop 说他们一直都在进行 I/O:

在此输入图像描述

有人有过这样的事吗?我可以在不重新启动机器的情况下解决这个问题吗?

答案1

您无法删除/dev/sdX file,而是需要清除设备。作为根用户:

echo "1" > /sys/block/sdX/device/delete

或者使用 sudo,执行

sudo bash -c 'echo 1 > /sys/block/sdX/device/delete'

或者

echo 1 | sudo tee /sys/block/sdX/device/delete

答案2

中的条目/dev只是一个设备文件,即应用程序与驱动程序对话的网关。创建或删除 中的条目/dev不会影响驱动程序的操作,更不用说影响设备的操作了。司机甚至不知道这些条目。

进程不应停留在状态 D。如果确实如此,则表明存在内核错误。内核错误可能是由硬件故障触发的:当硬件以非平凡的方式出现异常时,大多数驱动程序无法很好地应对。pkill -9一旦驱动程序决定它正在执行可中断的操作,就会终止该进程,但如果驱动程序陷入不可中断的代码中,则这种情况可能会永远持续下去。

寻找线索的地方是您的系统日志。那里可能会有线索,要么来自行为不当的驱动程序,要么来自检测到奇怪情况(例如设备突然断开连接或发送格式错误的消息)的通用驱动程序(例如 USB 总线驱动程序)。尝试dmesgjournalctl -kless /var/log/kern.log(我认为这是 Mint 上的名称,如果不查看包含内核日志的文件)。

/sys尝试通过条目强制断开设备连接可能有效(这取决于问题是什么)。

相关内容