一:事故过程
在公司一台准生产环境(还好是准生产)由于公司一个服务日志级别没有调整为ERROR,导致大量的日志记录到/root 目录下(注意/root 是在/分区下是单独分区且不是很大,切记服务的日志级别不能直接打到/root 目录下,程序服务发布到分区比较大按照linux文件组织结构/var 这类可变目录下。) 直接打满/目录容量。重启了服务器,发现服务器只挂载了/目录。
二:问题解决
根据日志提示找到问题原因,通过df ,du命令找到文件,删除日志,重启解决。这些解决方法不是重点,重点是为什么可以使用这些命令。
三:解决后的思考
当/目录没有可用空间为什么重启后没有挂载其他目录。 这是由于其linux文系统决定的一切目录都是要从/开始的通过initab初始化读取fstab里的挂载信息,实现目录挂载。现在/目录已经存满没有空间可以提供挂载其他目录。
为什么可以使用df du rm 命令。这是由于这些命令都是系统命令,而系统命令都是存放在/bin和/sbin目录下。那/bin和/sbin目录有啥区别。
1)从命令功能来看,/sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统,/bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到。
2)从用户权限的角度看,/sbin目录下的命令通常只有管理员才可以运行,/bin下的命令管理员和一般的用户都可以使用。
3)从可运行时间角度看,/sbin,/bin能够在挂载其他文件系统前就可以使用。
/bin和/sbin目录是在系统启动后挂载到根文件系统中的,所以/sbin,/bin目录必须和根文件系统在同一分区;所以知道为什么可以使用df du rm 这些命令了吧。因为df du rm 都是/bin系统命令。其他一些系统命令cat chown cp date dd echo ....等
而/usr/bin,/usr/sbin与/sbin /bin目录的区别在于
1) /bin,/sbin目录是在系统启动后挂载到根文件系统中的,所以/sbin,/bin目录必须和根文件系统在同一分区;
2)/usr/sbin存放的一些非必需的系统命令,/usr/bin 存放一些用户命令
3)usr/bin /usr/sbin 可以和根文件系统不在一个分区。
四:网上转的一个解释
/bin 是系统的一些指令。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。 /sbin 一般是指超级用户指令。主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。 /usr/bin 是你在后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。 /usr/sbin 放置一些用户安装的系统管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。 如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么首先就要考虑root 的$PATH里是否已经包含了这些环境变量。 可以查看PATH,如果是:PATH=$PATH:$HOME/bin则需要添加成如下:PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin