问题抛出:
当一台主机硬盘满了或者达到一定程度时候,报警,该怎么做?
A、怎么查看硬盘信息:
如果是监控一些文件的大小,如日志文件,要如何获取文件大小?知道的方法有如下两种:
1、ls -lh 2、du -sh *
发现两个方法得出的文件大小并不完全一致,这是因为:du不是显示文件的大小,而是显示文件所占用的block大小,默认Linux系统分区的block size是4k,也就是说即使文件只有一个字节,也会占用4k。
那么系统块的大小是大点好,还是小点好呢?
如果将来在你的文件系统中是一些比较大的文件的话,使用较大的块大小将得到较好的性能。将ext2文件系统的块大小调整为4096byte而不是缺省的1024byte,可以减少文件碎片,加快fsck扫描的速度和文件删除以及读操作的速度;使用多大的块大小,需要根据你的系统综合考虑,如果系统用作邮件或者新闻服务器,使用较大的块大小,虽然性能有所提高,但会造成磁盘空间较大的浪费。比如文件系统中的文件平均大小为2145byte,如果使用4096byte的块大小,平均每一个文件就会浪费1951byte空间。如果使用1024byte的块大小,平均每一个文件会浪费927byte空间。在性能和磁盘的代价上如何平衡,要看具体应用的需要。
那么可不可以修改系统块大小?该如何修改?
B、当/dev/sda5的使用率超过90%时,发出报警:
初步思路:首先先截取到 /dev/sda5 那行,然后截取这一行的第五列获取到磁盘的使用率11%,为了方便比较,将11%以 ”%”为分隔符做列截取,可以截取到11,然后进行比较。
(为了显示效果,如果使用率超过10%就报警),简单的脚本如下:
上面的简单脚本,利用了grep、awk和cut这些字符截取命令。这对这些字符截取命令:
1、grep:行截取命令:可以截取含有关键字所在的那一行
2、cut:列截取命令:-f 列号 -d 分隔符
cut 命令的不足:不适合分隔符不标准
3、awk命令:
这里会发现第一行并没有按照分隔符“:”进行切分,这是由于awk执行的时候是将一整行读入,把这一整行赋予了$1,$3为空,此时再告诉它以“:”为分隔符时已经迟了,那怎样解决这个问题?首先要设个条件,在开始读取一整行时就告诉awk,以“:”为分隔符
C、现在又简单的脚本可以可以执行确认磁盘容量有没有报警,但是如果每次都要人去执行这个脚本,并不太现实,还缺少的一步,让系统自动去执行这个脚本,去检测磁盘容量是否报警。
这里想到了用Linux中的计划任务——crontab,简单的学习了一下crontab后,也遇到了一些问题,成功解决后,待继续学习后整理。
crontab -e:每分钟去执行一次脚本,并将结果输出的/tmp/log.txt下:
至此,大概实现了磁盘报警(除了日志监控)。
(未完待续)