【IT168 专稿】一、问题的提出
在用Windows 2000 Server作为文件服务器的系统平台,采用共享目录的方式为用户提供文件服务时,常有两个问题一直困扰着IT管理员。
一个是文件服务器总是在扩展存储空间,甚至增加了大容量的SATA磁盘阵列,可是硬盘分区被占满的情况仍旧时有发生,而管理员所能做的只是联系用户做文件整理,删除冗余数据。实际上对于共享给单用户的文件夹便于管理,而对于共享给多用户的文件夹,这种文件存储量的增长趋势就非常难以控制。
就此问题,管理员都希望有一种能够通过编程的方式检索文件服务器上所有文件共享目录的容量值,显示给所有用户,并且能够做到实时更新或者定时更新。同时在逻辑上设置共享目录配额,对于超出配额的目录提示警告。
通过这种方式可以使用户能够主动地关注共享目录增长所带来的隐患,并且采取相应措施,例如清理文件等,从而减轻管理员的负担。
第二个问题就是对于公司中所有的同事都在文件服务器上分配有1000MB的存储空间作为Home Directory,并映射为网络硬盘,便于存储私人数据,并且使用了Quota Entry为每个用户设置了磁盘配额。通过Quota Entry只能让管理员了解到用户使用的存储空间的情况,而且并不直观,对于用户则无法直观地得知当前自己的有效剩余空间。
针对此问题,管理员希望通过程序建立一种机制能够满足对用户Home Directory容量的监测需求,并以网页报表的形式提供给用户。
二、解决方法
基于以上两种需求,本文设计了一种用简短的代码,较高的运行效率,降低了系统开销,以一种编程的方式实现对共享目录及Home Directory监测功能。此程序是通过编程模型中的文件系统对象所提供的基于对象的处理文件和文件夹的功能能够高效迅速地获取目录和文件的信息,再使用循环得到所有下一级目录和文件的属性,由此最终得到目标目录的size属性值。
再建立一种机制可以动态地维护需要监测的所有目录的列表,最好的解决办法就是在创建共享目录的时候尽可能地将共享目录都放在一个或几个共同的父目录或分区中,程序只需检索这些父目录或分区便可动态地维护共享文件夹列表,管理员也只需维护这些父目录或分区的信息即可。
最后将所创建的应用程序添加到文件服务器的计划任务中,设定运行时间,便可及时地更新信息。而且公司的0I部门可以对共享目录设置逻辑配额值,对于容量超出配额的,提示警告,并且计算公司各部门使用文件服务器的开销。
‘在SQL Server中建立数据表,表的结构实现代码如下:
Sub Main()
If Not App.PrevInstance Then
‘首先更新所有共享目录(Home Directory也属于共享目录)的列表
ly_UpdateFolderList
表一 FolderParents
ColumnName |
DataType |
Length |
Allow Null |
Default Value |
id |
int |
4 |
(no) |
|
enabled1 |
int |
4 |
(yes) |
0 |
parentpath1 |
text |
16 |
(yes) |
|
type |
text |
16 |
(yes) |
|
表二 FolderSize
ColumnName |
DataType |
Length |
Allow Null |
Default Value |
id |
int |
4 |
(no) |
|
enabled1 |
int |
4 |
(yes) |
0 |
Forced1 |
int |
4 |
(yes) |
0 |
folderpath1 |
varchar |
50 |
(yes) |
|
type1 |
text |
16 |
(yes) |
|
group1 |
text |
16 |
(yes) |
|
usename1 |
text |
16 |
(yes) |
|
caption1 |
text |
16 |
(yes) |
|
folderbytes1 |
float |
8 |
(yes) |
|
quota1 |
float |
8 |
(yes) |
|
quota2 |
char |
10 |
(yes) |
|
percent1 |
decimal |
9 |
(yes) |
|
duration1 |
decimal |
9 |
(yes) |
|
datetime1 |
datetime |
8 |
(yes) |
|
minihours1 |
decimal |
9 |
(yes) |
1 |
表三 FolderOwner
ColumnName |
DataType |
Length |
Allow Null |
Default Value |
dept |
varchar |
50 |
(yes) |
|
logon |
varchar |
50 |
(yes) |
|
usename |
varchar |
50 |
(yes) |
|
guid |
varchar |
50 |
(yes) |
|