对于Unix系统管理员来说,文件系统的维护是一项基本和极其重要的工作。Unix系统的正常运行是以文件系统的完整性和拥有足够的自由空间为前提的。文件系统的完整性维护工作主要是在系统启动阶段及文件系统安装、拆卸阶段进行,因此系统运行期间的文件系统维护工作主要是指文件系统空间的维护。每个文件系统应当至少预留15%的自由空间,Unix系统才能运行平稳而且高效,否则系统操作将会变得非常缓慢。一旦没有了自由空间,系统将停止对文件系统的一切写入操作,系统也就不能正常工作。文件系统的自由空间取决于硬盘的容量及硬盘上存储的文件数量。由于硬盘容量是固定的,所以,控制硬盘上存储的文件数量是Unix系统管理员着重考虑的一个因素。
对文件系统的维护,具体体现为对文件系统实施监控,并做出相应的处理。
虽然不同版本的Unix系统都提供了一些文件系统的维护命令,但是它们是针对一般的使用情况。目前随着信息服务的增多,Unix系统上运行的程序越来越多。不同的应用程序需要采取不同的管理策略,这就要求Unix系统管理员开发一些能够实现无人职守功能的管理程序,以减轻工作量。因此,设计一种能定期自动实现对文件系统空间维护的shell程序是Unix系统管理工作需要的。
要实现对文件系统空间无人职守的维护, shell程序的设计过程分三个步骤进行:
首先,要对应用程序使用文件系统的情况进行分析,明确应用程序占用哪些文件系统,应用程序运行期间会产生哪些文件,特别是占用空间大的文件,从而制定相应的管理策略。
其次,根据制定的管理策略,编写实现维护功能的shell程序。
shell程序应具备以下功能:
◆ 对文件系统空间的检测功能;
◆ 对选定的文件进行备份转存处理,清除无保留价值的文件;
◆ 将处理结果以邮件方式传给用户,提醒用户做进一步的处理。
最后,通过时钟守护进程cron调用shell程序,使shell程序能自动定期地执行,实现无人职守的维护管理。
上述方法不仅可用于文件系统的维护,也同样适用于其它方面的管理。
HP OpenMail是运行在HP-UX上的电子邮件系统,对HP OpenMail邮件系统所涉及的文件系统进行维护是系统管理员一项日常工作,下面以此为例说明上述设计思想。
对应用程序使用文件系统进行分析
HP OpenMail邮件系统的所有邮件数据都存放在文件系统 /var/opt/openmail中,如果这一文件系统空间不足,将导致OpenMail系统的不正常。日常维护的方法是定期清理用户的邮箱,可以用OpenMail系统提供的清理用户邮箱命令omtidyallu实现这项工作。
HP OpenMail邮件系统运行过程中会产生记录系统工作情况的日志文件,日志文件存放情况见下表。这些日志文件的大小是没有限制的,随着系统运行时间的推移,日志文件会变得越来越大,大量占用有限的存储空间。因此,系统管理员应当定期将其备份、清空。
表 OpenMail邮件系统的日志文件
| 日志文件 |
文件系统 |
| /var/adm/syslog/mail.log |
/var |
| /var/opt/ns-fasttrack/logs/http-default/access |
/var |
| /var/opt/ns-fasttrack/logs/http-default/errors |
/var |
| /var/opt/openmail/logs/audit |
/var/opt/openmail |
从上表可以看出,前三项日志文件是影响/var文件系统空间大小的主要因素。/var/opt/openmail文件系统除了存储邮件数据外,还存放一些日志文件,主要是/var/opt/openmail/logs/audit。可见邮件数据和日志文件都影响自由空间的大小。
对文件系统/var和/var/opt/openmail的空间维护,就是确保每个文件系统拥有15%以上的自由空间,一旦文件系统使用率达到85%的限制点,系统将自动清理邮件数据,并对日志文件进行备份、清空处理。
编写实现维护功能的shell程序
假设shell程序文件名为ommaintain,同时指定/tmp目录为日志文件备份目录,OpenMail系统管理员账号为omadm。
ommaintain内容如下:
om_date=`date` #获取运行时间
size_of_var=`df -k -v /var|grep -e %|cut -c57-58`
#获取文件系统/var的使用率,在HP-UX中使用率为第57、58位
if test size_of_var -ge 85 #判断文件系统的使用率是否达到85%
then (
cd /var/adm/syslog;
cp mail.log /tmp/mail.log.$om_date; #备份文件
> mail.log; #清空文件
cd /var/opt/ns-fasttrack/logs/http-default;
cp access /tmp/access.$om_date; #备份文件
cp access.format access; #初始化access,该文件为带格式头的文本文件
cp errors /tmp/errors.$om_date; #备份文件
>errors; #清空文件
echo "处理时间:$om_date,文件系统/var使用率达到85%,文件系统已做维护处理"
>message;
mail omadm<message; #通知系统管理员
)
fi
size_of_om=`df -k -v /var/opt/openmail|grep -e %|cut -c57-58`
#获取文件系统/var/opt/openmail 的使用率,在HP-UX中使用率为第57、58位
if test size_of_om -ge 85 #判断文件系统的使用率是否达到85%
then (
cd /var/opt/openmail/logs;
cp audit /tmp/audit.$om_date; #备份文件
> audit; #清空文件
omtidyallu - i30 -o30 -w1 -k; #清除用户收件箱和发件箱30天前的数据以及垃圾箱1天前的数据
echo "处理时间:$om_date,文件系统/var/opt/openmail使用率达到85%,文件系统已做维护处理"
>message;mail omadm<message; #通知系统管理员
)
fi |
实现shell程序自动定期执行
首先,执行chmod+x ommaintain命令,使shell程序ommaintain 具有可执行性,并将其文件拷贝到/bin或者/usr/bin目录中。
其次,用crontab命令将ommaintain加入到时钟守护进程中。这里设置为每小时运行一次ommaintain,运行时刻为整点。用crontab -l可显示:
最后,重启系统,让ommaintain投入运行。
(责任编辑 Sunny)