command not found 与 磁盘空间不足(出core导致)

问题:原正常运行的一服务无法运行,报错command not found,日志显示disk no space;

排查信息:df -hl 

根目录所在磁盘空间已满,使用命令在/noah下

解决:通过df -h 目录名,确认处于sda2上的目录,发现大量出core文件,清理,问题解决

gdb php -c core.xxx

后续一:还是有个很傻的问题没有清晰,Linux是如何查找文件的,根目录所在磁盘已满是怎样影响到另一个文件系统下的命令的。

推测是由根目录逐层寻找,但细节未确定,总觉得少点什么,整理之。

一 文件系统与磁盘管理

(参考:主机规划与磁盘分区

安装linux系统时就进行了磁盘分区(类似于windows 划分出C/D/E盘),如上所述,出现sda6,无sda1,应该是磁盘划分使用了扩展分区。

而不同的目录使用哪个磁盘分区则是通过“挂载” 实现的。所谓的『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分割槽的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』

二 文件系统(一个可被挂载的数据为一个文件系统)

参考:文件系统管理

如果/nosh和/ 处于不同磁盘分区,不会直接从不同磁盘分区起始开始读取么?

1. Linux EXT2文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

构成如下

2. 目录树读取

文件名的记录是在目录的 block 当中,因此当我们要读取某个文件时,就务必会经过目录的 inode 与 block ,然后才能够找到那个待读取文件的 inode 号码, 最终才会读到正确的文件的 block 内的数据。根目录所在磁盘会导致所有内容都无法正常运行,找不到对应command.

 后续二:core文件

1. 何时会出core?当系统出错,实则linux接收到某些特殊信号时(参考:http://blog.jobbole.com/101648/),前提是开启core,ulimit -a可查看

2. 如何查看core?利用gdb命令,使用命令 gdb program core 来查看 core 文件,其中 program 为可执行程序名,core 为生成的 core 文件名。

以上场景并不知道产生的program,只知道是php产生,即gdb php core.xxx,重点查看产生的进程名。若仍持续出core,需要杀掉对应进程

posted @ 2017-07-30 11:15  QA小虾  阅读(892)  评论(0编辑  收藏  举报