我正在通过 远程与机器通信ssh
。这台机器运行定制的 Linux,它的命令集非常有限。
在某些时候,特定目录会拒绝向其中写入文件。运行ls
、点击“tab”自动完成文件名或使用通配符删除文件会挂起命令。
打开新ssh
会话后,点击ps | grep D
显示以下内容:
PID Uid VSZ Stat Command
628 root DWN [jffs2_gcd_mtd4]
930 root 2912 D rm /mnt/flash/system/config
995 root 2400 D scp -t /mnt/flash/system/
2083 root 3044 D ls -AlSh /mnt/flash/system
6994 root 2912 D chmod +x /mnt/flash/system/config
13281 root 3052 S grep D
22220 root 2400 D scp -t /mnt/flash/system/
运行mount
命令显示如下:
rootfs on / type rootfs (rw)
/dev/root on / type ext2 (rw)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw)
tmpfs on /tmp type tmpfs (rw)
/dev/mtdblock4 on /mnt/flash type jffs2 (rw)
请注意,具有状态的进程D
(这表明该进程正在执行磁盘 I/O 操作。通常不应该观察到这种状态,但ps
多次运行显示相同的状态,因此该进程实际上卡在 I/O 操作处)正在删除、列出、编辑或将文件写入挂载路径/mnt/flash
。
此安装路径文件系统为jffs2
(请注意,显示的进程之一jffs2_gcd_mtd4
的状态为DWN
)。
请记住,我对 Linux 没有明确的了解,所以请尽可能简单。
- 那么什么是
DWN
状态呢?这是否表明流程已兑现(即关闭)? - 我该如何解决这个问题?我无法编辑此路径上的文件,并且重新启动机器是一个昂贵的选择(即物流)。
答案1
ps 状态DWN
是标志的组合:
D uninterruptible sleep (usually IO)
W paging (not valid since the 2.6.xx kernel)
N low-priority (nice to other users)
陷入磁盘等待状态是一个令人担忧的问题,这很表明存在驱动程序错误。即使连接到严重损坏的驱动器的驱动程序最终也会超时并将 EIO 返回给访问它的系统调用。
如果您正在运行一个“定制”内核,正如您所说,文件系统如此罕见,以至于在您提出驱动程序可能陷入无休止等待的问题之前我没有听说过它,这表明您应该考虑您的生产机器已损坏。
就我个人而言,我会对这样的司机保持警惕似乎十年前就成了孤儿特别是自从创建驱动程序的动机闪存控制器的进步已经基本上消除了这种情况。
添加以回复评论:
不幸的是,楔入驱动程序通常会占用硬件通道,只有重新启动才能释放它。你说这个设备在操作上很难到达;我希望它不是在火星上。在派人重新启动它之前,请确保删除设备的挂载(通常在 /etc/fstab 中,但也可能在 - 例如 - /etc/rc.local 中),否则系统可能会再次挂起。
正如 @goldilocks 在评论中指出的那样,硬件故障是一种明显的可能性,因此如果闪存是可拆卸的,我会向技术人员发送替换硬件。值得注意的是,闪存在发生故障之前的写入周期数是有限的,并且较旧的闪存的写入周期数比现代闪存要少。
问题解决后,您可以在内存上构建一个新的文件系统并安装它,前提是您的远程接口允许。