问题:原正常运行的一服务无法运行,报错command not found,日志显示disk no space;
排查信息:df -hl
根目录所在磁盘空间已满,使用命令在/noah下
解决:通过df -h 目录名,确认处于sda2上的目录,发现大量出core文件,清理,问题解决
后续:还是有个很傻的问题没有清晰,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.