我在这里安装了一个raid驱动器:
/data/
并且某些目录像这样:
/data/somedir/somesubdir/
当我跑步时
ls
带或不带任何标志,终端不返回任何内容。它不返回空目录列表。它只是转到下一行,然后空白地坐在那里,没有提示出现。我不能 CTRL-C 出来。我必须关闭这个终端实例并重新开始。
起初我以为它与 ls 命令有关,但它指向 /bin/ls 并且我可以 ls 其他目录就好了。
另外,运行这个
find /data/somedir/somesubdir
立即按预期找到所有文件。
更新:
dmesg 似乎没有吐出我看到的任何错误。我的袭击在 /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 控制器将所有磁盘显示为正常状态,并且没有显示任何关于它们的任何问题的报告。
似乎没有任何服务器妥协。
还:
ps auxww | grep somesubdir
仅返回该目录的 grep 进程。
更新#2:
我确实尝试离开命令超过一个小时,但没有结果。我不知道下一步该怎么做,所以我继续并重新启动了服务器。尽管在该子目录中获取目录列表确实需要 10 秒左右的时间,但问题不再存在。我不知道之前的问题是什么。
除了上面的建议之外,当您列出的目录中有大量文件时,我也看到了这个问题,这可能会导致文件系统用完 inode。如果这是可能的,请尝试离开 ls 命令,看看它是否在一段时间后完成。
您的磁盘可能有问题。你可以试试这个:
如果您的 ls 的状态是
D
,则表示它正在等待磁盘执行某些操作。查看dmesg
状态消息,如果您还没有使用它,请查看 SMART 以查看这些磁盘的健康程度。为什么
find
工作正常?因为它不对stat()
每个文件执行 a 。这表明目录正常,但一个或多个文件位于磁盘的损坏部分(或类似的部分)。如果目录为空,不带任何标志的 ls 将不返回任何内容。如果您想在目录为空的情况下查看任何内容,则至少需要 ls -a 。
如果目录不为空,则可能您的文件系统已损坏 - 运行 fsck 进行检查。如果文件系统正常并且目录不为空,那么接下来就是质疑 ls - 也许您的 ls 副本已被替换为非常原始的 rootkit 形式?
尝试通过运行找出它挂在哪里
也许有一个文件名,其中包含阻止终端的字节序列。您有时可以取消阻止已阻止的终端发送
Ctrl-Q
键盘快捷键(Ctrl-S
阻止它)。尝试做
/bin/ls -N | less -S
并查看是否有任何带有可疑或控制字符的文件名。Less 会将此字符显示为尖括号中的十六进制代码,例如<BF>
.存在代码低于 32(从
<01>
到<1F>
)的字符的文件可能是系统受损的迹象。或者在某些程序中创建文件的内存管理错误。