我在这里安装了一个 RAID 驱动器:
/data/
还有一些目录如下:
/data/somedir/somesubdir/
当我跑步的时候
ls
无论有没有标志,终端都不会返回任何内容。它不会返回空目录列表。它只是转到下一行,然后空白地坐在那里,没有提示出现。我无法按 CTRL-C 退出。我必须关闭这个终端实例并重新开始。
起初我以为这与 ls 命令有关,但它指向 /bin/ls 并且我可以正常 ls 其他目录。
另外,运行这个
find /data/somedir/somesubdir
正如预期的那样立即找到所有文件。
更新:
dmesg 似乎没有显示任何我看到的错误。我的 raid 位于 /dev/sda5,因此如果我
dmesg | grep sda
我明白了
sd 0:0:0:0: [sda] 1953083392 512-byte hardware sectors (999979 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
sd 0:0:0:0: [sda] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sd 0:0:0:0: [sda] 1953083392 512-byte hardware sectors (999979 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
sd 0:0:0:0: [sda] Write cache: enabled, read cache: disabled, doesn't support DPO or FUA
sda: sda1 sda2 sda3 sda4 <<7>libata version 2.21 loaded.
sda5 >
sd 0:0:0:0: [sda] Attached SCSI disk
EXT3 FS on sda3, internal journal
EXT3 FS on sda5, internal journal
EXT3 FS on sda2, internal journal
EXT3 FS on sda1, internal journal
没什么不寻常的。
此外,我的 3ware raid 控制器显示所有磁盘均为 OK 状态,并且没有显示任何问题的报告。
似乎没有出现任何服务器被入侵的情况。
还:
ps auxww | grep somesubdir
仅返回该目录的 grep 进程。
更新 #2:
我确实尝试将命令保留一个多小时,但没有结果。我不知道下一步该怎么做,所以我继续重新启动服务器。问题不再存在,尽管获取该子目录中的目录列表确实需要 10 秒左右。我不知道之前的问题是什么。
答案1
除了上述建议之外,我还发现,当您列出的目录中有大量文件时也会出现此问题,这可能会导致文件系统的 inode 不足。如果有可能,请尝试只保留 ls 命令,看看它是否会在一段时间后完成。
答案2
您的磁盘可能有问题。您可以尝试以下操作:
Terminal 1$ ls /data/somedir/somesubdir/
(hang)
Terminal 2$ ps auxww | grep somesubdir
如果 ls 的状态为D
,则表示它正在等待磁盘执行某些操作。查看dmesg
状态消息,并查看 SMART(如果您尚未使用)以查看这些磁盘的健康状况。
为什么可以find
正常工作?因为它不会stat()
对每个文件执行操作。这表明目录正常,但一个或多个文件位于磁盘的损坏部分(或类似情况)。
答案3
如果目录为空,则不带任何标志的 ls 将不返回任何内容。如果目录为空,则如果您想查看任何内容,则至少需要 ls -a。
如果目录不为空,则可能是文件系统已损坏 - 运行 fsck 进行检查。如果文件系统正常且目录不为空,则下一步是询问 ls - 也许您的 ls 副本已被替换为非常原始的 rootkit 形式?
答案4
也许有一个名为的文件,其中包含阻止终端的字节序列。有时,您可以发送Ctrl-Q
键盘快捷键(Ctrl-S
阻止它)来解除阻止的终端。
尝试执行/bin/ls -N | less -S
并查看是否有任何文件名包含可疑字符或控制字符。Less 会将这些字符显示为尖括号中的十六进制代码,例如<BF>
。
如果文件包含代码低于 32 的字符(从<01>
到<1F>
),则可能是系统受到攻击的迹象。或者在创建文件的某些程序中存在内存管理错误。