三九宝宝网宝宝教育学龄段教育

unix文件系统被塞满的清理策略

12月21日 编辑 39baobao.com

[企业职业危害与预防之铸件清理]钢铸件清理作业中出现的噪声级为115~120分贝;而铁铸件的清理作业实际噪声为105~115分贝。英国钢铁铸造研究协会明确了铸件清理时噪声来源于: 1)清理工具排气; 2)锤或砂轮在铸件上...+阅读

尽管现在的磁盘容量越来越大,但它终究有被塞满的可能,如果遇上粗枝大叶的系统管理员,磁盘被塞满的时间将变得更短。一个unix/linux运行环境,一旦遇到某个分区(也称文件系统)被塞满,后果也许会十分糟糕—我曾有过在凌晨2点起来干活的经历—分区/tmp满了,导致某个守护进程不能写入磁盘而异常终止。想必其他人也有类似的情况,怎样处理和避免这样的麻烦呢?这里有些意见供大家参考。

先谈非技术方面的因素,简单的讲就是规章制度。Linux/unix大多是公共服务器,应该禁止上传与工作无关的私人数据。某君买了一个NAS(网络附属存储)设备,4个73G的硬盘,考试,大提示本来打算做web的后台数据存储,但是,但是….后来据我所知,这个大容量磁盘不到2个月所剩空间不到20G,私下浏览,嘿!大部分数据是他私人的,他本来就有收藏废品的嗜好,难怪呢。因此在这个方面,制度应该严厉一些,避免同事放垃圾数据在公共空间。

磁盘上的数据可能随时增长,任何人不可能24小时盯着它,因此实现自动化监控手段是十分必要的,对于更大规模的网络环境,这也许是的途径。下面是一个用perl写的监控磁盘容量的脚本(大宇对此有贡献):

#!/usr/bin/perl -w

# this program will check disk capacity $full and send the warning message

# to $email_address

# (set the threshold to 90 and check it in the daytime so no paging

# is needed)

my $email_address = ’sa#your.’;

my $hostname = `/sbin/ifconfig -a|grep i|head -1|cut -f2 -d":"|cut -f1 -d" "`;

my $dmesg = `dmesg`;

chomp(my $now = `date +"%x %X"`);

my $full = 90; # the threshold to send the warning

my $warn = 95;

my $count = 0;

my ($dev,$total,$used);

my #df_messages = `df|grep -v proc`;

print #df_messages;

shift(#df_messages);

foreach $message (#df_messages) {

chomp($message);

($dev, $total, $used, $ailable, $capacity, $mount) = split(/\s+/, $message);

$capacity =~ s/(\d+)\%/$1/;

if ($capacity >$full) {

$ailable[$count] = $ailable;

$capacity[$count] = $capacity;

$mount[$count] = $mount;

++$count;

$email_address = ’sa#your.’ if ($capacity >$warn);

}

}

if ($count >0) {

open(MAIL, "|/usr/sbin/sendmail -t");

print MAIL "To: $email_address \n";

print MAIL "Subject: Disk almost full on $hostname ($now)\n";

print MAIL "\n";

for ($i = 0; $i< $count; ++$i) {

print MAIL "There are only $ailable[$i] KB ($capacity[$i]\% full) left on $mount[$i] \n";

}

}

if ( $dmesg =~ m/ERROR/ )

{

open(EMAIL, "|/usr/sbin/sendmail -t") or die "Can’t fork for sendmail: $!\n";

print EMAIL

推荐阅读
图文推荐