远程储存及其用途
在网络广为普及的今天,远程储存早已不是专家或高手才能使用的专利了。广义地说,电子邮件、网络硬盘、WEB页面、程序文件的下载和上传都是远程储存的典型例子。但由于工作性质和环境的不同,特别是管理方式不同,故本文所介绍的远程储存不是广义性的.它具有以下特定含义:
win2000系列的操作系统可以支持远程储存,本质是一种将远端的可利用磁盘空间扩充为本地磁盘空间的方法。具体说,用户总是将那些频繁访问的数据或文件放在本地计算机的一个卷或某个特定位置,目的是尽量减少数据文件的存取时间。在实现远程储存时,必须有操作系统的支持,以求得最高的工作效率。当然,这不是严格的技术性的论述,只是比较直观的表达。为了叙述上的方便,我们将操作系统中负责远程储存功能的部分,取一个专用的名称叫做:Remote Storage。
Remote Storage可以将那些符合条件的数据文件自动地拷贝到本地计算机的储存介质上并建立相应的卷来进行管理。然后,Remote Storage就时刻监视本地计算机(所建立卷)的可用的磁盘空间。如果本地的可用磁盘空间降低至运行所需要的下限,Remote Storage将会自动将卷中的文件移动到远端的磁盘上一些,腾出一些空间以满足本地计算机运行的需要。相反,如果本地计算机要访问的数据在远端,Remote Storage也负责将这些数据由远端传送到本地。上述的这一切,都被纳入操作系统的管理范围。
可以看出,实际应用中,这种双向的传送会消耗很多本地计算机的系统资源,降低本地计算机运行速度。为了减少这种消耗,网络的远端,有专门配套的服务器,专门负责储存系统的管理。这种服务器支持多种储存介质,例如:硬盘、磁带机等等,数据量很大而对速度要求不高的存取一般就使用磁带机,这样可以降低存储成本,如果要求速度较高,当然要使用硬盘设备。还可以对两种速度不同的介质划分级别,根据文件数据接受访问的级别或频率,先将磁带机上的数据暂时储存在硬盘上以利于提高速度;也可将硬盘上那些不急用的数据储存到磁带上以扩充硬盘的可用空间。不论采用哪一种,外界访问都可以先被服务器接受,然后由服务器查找到对应的内容。这很像我们在VCD上点播歌曲的情形。
广义的远程储存,不同功能都需要相应的服务程序,例如我们建立的个人主页,要用FTP上传后才能使用、收发电子邮件必须用Outlook之类的邮件程序等等。而Remote Storage则是win 2000系统中已经存在的功能,无须再用别的管理程序。
远程储存诊断程序(Rsdiag.exe)
对于建立在win2000系统的远程储存功能,也有一个基于命令行的诊断工具Rsdiag.exe。用这个工具,可以进行诊断查询,也有诸如取消某个作业之类的执行功能。其完整的语法如下:
rsdiag [/c jobname] [/d filetype fullpath&filename] [/e errorcode] [/i] [/j [jobname]] [/m] [/r [/f]] [/s] [/t] [/v [driveletter]] [/x queuedrecall] [/w fullpath&filename]
rsdiag是命令名称,这无须多说。其后面跟随很多参数,实现功能不同,所用的参数不同。参数以及含义分别介绍如下,这也是我们需主要掌握的部分:
/c jobname
用/C来取消指定的作业,jobname 是要取消的作业的名称。至于如何得到作业的名称,请参考下面相应的介绍。
/d filetype fullpath&filename
作用:将数据库诊断信息转换到一个文本文件中,远程储存服务器在管理数据文件的时候,采用了数据库技术。
filetype :指定输出到文本格式中的源文件的种类,必须是下面的某一个:
e 数据库引擎
f 文件系统代理数据库
a 文件系统代理集合
n 引擎集合
s 子系统集合
fullpath&filename :必须是文本文件的完整路径名称和完整的文件名称。
/e errorcode
显示错误代码, errorcode 可以采用十进制或十六进制的代码表示一个错误信息。
/i
显示文件的版本信息。
/j [jobname]
如果没有指定作业,则显示所有的作业信息,包括作业的名称。利用这一点,在想取消某个作业而不知道这个作业是否正在进行时,可以用这个参数进行查看。如果在参数之后指定作业名称,则显示这个作业的所有信息。[jobname]是作业名称。
/m
显示符合处理条件的卷。
/r [/f]
将远程服务器检索队列之内的位于当前检索队列内的信息显示出来,显示的信息有:列出每一个检索到的文件名称和逻辑顺序。如果用[/f]选项,还可以显示包含文件状态在内的检索结果的扩展信息,以及初始检索的值和文件在储存介质上的偏移量信息。
/s
显示关于储存介质的物理信息。
/t
再装入的(供检索的)轨迹文件,因为对所有的存取服务过程来说,都必须读取轨迹文件中的注册设置信息。
/v [driveletter]
这是一个外部参数,显示卷信息。
如果使用附加的参数 driveletter, 可以显示指定卷的扩展信息。
/x queuedrecall
在远程储存服务器的检索队列中,取消指定的检索作业,用/r开关,可以列出检索。
/w fullpath&filename
显示指定文件所在的储存介质的名称,这里指的是物理介质名称,必须在参数中提供文件的完整路径和详细的文件名称。
关于诊断中显示的管理数据库输出信息的含义
远程储存管理利用了数据库技术,这些信息被保存到一个文本文件中,这个文本文件相当于一个储存情况的快照。要显示这些信息,可以使用命令:rsdiag /d数据库输出含义如下:
Engine database(数据库引擎)数据库引擎包含三个表.分别是:
1.Segment Table(分段表):这个表中的信息是数据文件在次一级储存介质上的位置标志符,设分段表的目的是映射BAG表示符和数据片断在次级储存介质的详细位置。
2. Media Table(媒体介质表):这个表用来映射外部媒体介质的名称的标识符号,这个表需要用外部的媒体介质名称与个内部的标识关联,并用这些来管理媒体子系统。
3.BAG Information Table(BAG信息表):包含每一个BAG的全局信息
分段表
各个信息项目的含义如下:
项目简略名称 | 项目完整名称 | 作用描述 |
BagId |
BAG ID |
BAG的ID标识号,具有唯一性 |
StartLoc |
BAG Segment Start Location |
描述BAG段起始位置 |
SegLen |
Bag Segment Length |
BAG段的长度 |
LocType |
Location Type |
位置类型,用来表示文件数据在介质上的位置或在别处找到这些数据的索引信息 |
PrimPos |
Primary Location Position Specifier |
表示指定的主储存位置,对于介质储存,指定的是储存位置。对于逻辑定向,这是BAG标识号。 |
SecPos |
Secondary Location Position Specifier |
表示指定的次一级的储存位置。对于介质储存,指定的是储存位置。对于逻辑定向,这是BAG标识号。 |
IDB SeqNum |
数据库序列号。数据库最初附加的序号。 |
表中是各个字段的意义,下面给出一个实际的分段表各项的具体数值:
BagId = {b010419f-fb1b-11d1-a1ba-00a0c9190447}, StartLoc = 3072, SegLen = 52224, LocType = 0, PrimPos = {b0104199-fb1b-11d1-a1ba-00a0c9190447}, SecPos = 0 (IDB SeqNum = 1)
这里面的每一项都与上表中介绍的相对应。
媒体信息表
各个信息项目的含义如下:
项目简略名称 | 项目完整名称 | 作用描述 |
Id |
Media ID |
储存媒体的ID标识,具有唯一性 |
NtmsId |
储存媒体的标识的句柄,是一个可移动储存媒体的管理标识号。 | |
StoragePoolId |
Storage Pool ID |
储存池标识的ID号,具有唯一性 |
IDB SeqNum |
数据库序列号。数据库最初附加的序号。 |
下面是媒体信息表实际内容的一个例子:
id = {b0104199-fb1b-11d1-a1ba-00a0c9190447}
ntmsId = {da96022d-fb19-11d1-a1ba-00a0c9190447}
StoragePoolId = {e5390a42-fb19-11d1-a1ba-00a0c9190447}
(IDB SeqNum = 1)
BAG信息表
各个信息项目的含义如下:
项目简略名称 | 项目完整名称 | 作用描述 |
Type |
记录的类型 | |
BagId |
BAG ID |
供图形式用户界面使用的ID号 |
BirthDate |
BAG Birthdate |
BAG创建时的数据与时间 |
Len |
Original BAG Length |
BAG建立时候的实际长度 |
Type |
BAG Type |
普通情况下不用 |
VolId |
Volume ID |
卷标识ID |
DeletedAmount |
Deleted BAG amount |
删除总量 |
RemoteDataSet |
Remote Data Set Number |
远程数据设置序号 |
IDB SeqNum |
数据库序列号。数据库最初附加的序号。 |
下面是BAG信息表实际内容的一个例子:
Type = 2 BagId = {b010419f-fb1b-11d1-a1ba-00a0c9190447}, BirthDate = 06/03/1998 20:42:20, Len = 47051200, Type = 0, VolId = {9db6f302-fb1b-11d1-a1ba-00a0c9190447}, DeletedAmount = 0, RemoteDataSet = 1 (IDB SeqNum = 1)
文件代理系统所使用的数据库表:
这个表是文件转移之前的状态列表。
项目简略名称 | 作用描述 |
AccessTime |
最后访问文件的时间 |
BagID |
ID,包含这个文件移动的数据标识 |
BagOffset |
文件位置偏移量 |
FileId |
用于标识文件的ID号 |
Waiting for Close |
一般不使用 |
Offset |
一般不使用 |
Path |
文件路径,这个信息可能是被压缩的形式 |
Size |
转移之前的数据总量 |
RecallTime |
最后尝试调用的时间 |
File USN |
该文件的更新次序号 |
下面是文件代理数据库表的一个例子:
AccessTime = 03/30/1998 20:52:46 BagId = {b01043e7-fb1b-11d1-a1ba-00a0c9190447}, BagOffset = 56320, FileId = 1000000 Waiting for close = FALSE, Offset = 0, Path = \dir0\test1.tst, Size = 1000000 RecallTime = 01/01/1601 00:00:00, File USN = 589408
关于作业项目信息的含义:
上面介绍过使用特定参数可以显示全部的系统作业名称,命令形式是:rsdiag /j jobname
所显示的信息有如下的格式,具体含义是:
项目简略名称 | 作用描述 |
Name |
作业名称 |
RunID |
正在运行的作业的ID号 |
IsActive |
逻辑标志,正在运行的作业为true,否则为false |
IsUsers |
用户建立的作业为OK,自动建立的作业为false |
Done |
作业已经完成为OK,否则为false |
DoneOK |
如果作业已经完成且无错误条件为OK,否则为false |
MaxSess |
该数值总是1 |
作业项目显示的一个例子,这实际是执行rsdiag /j命令之后显示的结果:请注意,后两项的名称太长,对应的值只好下移一行。
Name RunId IsActive IsUsers Done DoneOk MaxSess
Manage 00000002 False False Ok Ok 0000001
RemoteStorageJob_H_ QuickUnmanage
00000001 False Ok Ok Ok 0000001
RemoteStorageJob_G_ CopyFiles
00000001 False Ok Ok Ok 0000001
一个作业是运行在一个或多个资源上的,对每个活动资源来说,执行一个作业需要一个或多个阶段,每阶段又可以执行多个动作,尽管多个阶段和多个动作可能被赋予一个有代表性的名称。例如:作业管理程序将扫描所有被管理的作业设备和转移之前的有效文件。当作业管理程序利用命令来执行转储时,对每一个资源都显示所发现的、相应的两个阶段和两个动作.第一个阶段是扫描的阶段,接着的动作也调用扫描。然后的阶段是数据传送阶段,同时取得数据传送之前的信息。
执行rsdiag /j jobname 命令,可以得到每个作业中包含的设备资源、阶段和动作信息。详情见下表:
项目简略名称 | 作用描述 |
Name |
作业名称 |
Identifier |
这个作业唯一的标识号 |
Hsm Identifier |
远程储存服务器标识号 |
Run Identifier |
运行的作业标识号 |
MaxSess |
这个数值总是1 |
Is User Defined |
用户建立的作业为OK,自动建立的作业为false |
Is Active |
逻辑标志,正在运行的作业为true,否则为false |
Did Finish |
作业已经完成为OK,否则为false |
Did Finish Ok |
如果作业已经完成且无错误条件为OK,否则为false |
下面是关于一个设备资源描述的项目解释:
项目简略名称 | 作用描述 |
Resource Name |
运行作业时设备资源的名称 |
作业的当前态,有效的状态是: | |
State |
活动 |
已经取消 | |
正在取消 | |
完成 | |
失败 | |
空闲 | |
已中止 | |
正在中止 | |
恢复 | |
跳过 | |
开始 | |
Starting Path |
作业启动的路径 |
Current Path |
当前作业执行的路径 |
Start Time |
启动时间 |
Stop Time |
停止时间 |
Sub-Run Id |
子作业的运行标识 |
下面是一个阶段中每个状态的描述信息:
项目简略名称 | 作用描述 |
Phase Name |
运行作业时阶段的名称,可用的有: All – 包含阶段中所有可用的项目 Scan – 扫描阶段 File Update - RSFSA 更新文件 Data Transfer – 数据库引擎正在传送文件 |
作业的当前态,有效的状态是: | |
State |
活动 |
已经取消 | |
正在取消 | |
完成 | |
失败 | |
空闲 | |
已中止 | |
正在中止 | |
恢复 | |
跳过 | |
开始 | |
Media State |
以下是在执行作业时媒体可能的状态: |
空闲 | |
当前不可用 | |
装配 | |
就绪 | |
传送中 | |
传送完毕、结束 | |
Priority |
作业的优先权 |
Start Time |
作业开始时间 |
Stop Time |
作业停止时间 |
Elapsed Time |
从作业开始到停止持续的时间 |
Items |
项目号 |
Size |
这个阶段的中所有动作完成的字节数 |
Skipped Items |
这个阶段需要跳过的项目号 |
Skipped Size |
这个阶段跳过的项目的总量 |
每个阶段中各个动作描述项目的信息:
项目简略名称 | 作用描述 |
Action Name |
该阶段动作名称 |
Items |
动作项目号 |
Size |
本动作完成的数据总量 |
Skipped Items |
需要跳过的项目号 |
Skipped Size |
该工作中需要跳过的数据总量 |
资源显示的命令示例:
rsdiag可以用来显示资源状态的情况,但用途不同,使用的切换开关不同:
命令rsdiag/m,显示服务器所管理的卷;命令rsdiag /v显示所有的资源;命令rsdiag /v driveletter 显示详细的资源。
对普通信息,例如设备的逻辑名称和自由空间的描述,包括一个或的多个规则和自动截取信息,规则由包含文件的相关信息组成。一个规则包含一些标准和这个动作内包含的文件描述信息。
这个表中列出的是对设备资源描述的项目:
项目简略名称 | 作用描述 |
Logical name |
设备资源的逻辑名称 |
Identifier |
这个设备资源的唯一的标识号 |
Serial Number |
卷序列号 |
File System Name |
文件系统类型名称 |
Name (Label) |
驱动器卷标(例如D:盘用diskd) |
User Friendly name |
驱动器字母标签(例如常用C、D代表某个磁盘) |
Sticky name |
windows2000中使用的名称 |
Path |
该资源当前的路径映射 |
UNC Path |
该资源的UNC路径 |
Alternate Path |
资源的预备的路径 |
Old Path |
资源的原始路径 |
Db Path |
关于资源(数据)移动之前的数据库列表路径 |
Is Managed |
逻辑值:如果资源是可被管理的为TRUE,否则为FALSE |
Is Active |
逻辑值:如果资源是活动的为TRUE,否则为FALSE |
Is Available |
逻辑值:如果资源是可用的为TRUE,否则为FALSE |
Managing Hsm |
管理资源的服务器的唯一的标识 |
Desired Free |
希望得到的自由空间的百分率 |
Actual Free |
实际可得到的自由空间的百分率 |
Total |
这个设备资源的总容量 |
Free |
总容量中可用的自由空间的字节数 |
Premigrated |
移动之前的数据总量 |
Truncated |
移动之后的数据总量 |
Manageable Size |
可管理文件的最小"尺寸" |
每个规则包含的描述项目:
项目简略名称 | 作用描述 |
Rule Path |
规则所适用的路径 |
Name |
规则名称,这是标准的文件名称统配符 |
Search Name |
规则序列号 |
Is Include |
逻辑值:如果管理中包含文件适用的规则为TRUE,否则为FALSE |
Is User Defined |
逻辑值:如果是用户自定义规则为TRUE,否则为FALSE |
Is In SubDirs |
逻辑值:如果在规则的路径中,包含指定路径的子目录为TRUE,否则为FALSE |
Criterium Name |
标准名称 |
Is Ignored |
逻辑值:忽略该项为TRUE,否则FALSE |
Is Negated |
逻辑值:否定该项为TRUE,否则FALSE |
描述"自动截取"功能所用的项目:
项目简略名称 | 作用描述 |
Keep Recall Time |
未使用 |
Run Interval |
自动截取作业之间间隔的毫秒数 |
如何用命令行得到储存媒体状态信息输出的举例:
如果想得到媒体状态输出的信息,可以使用:rsdiag /s
对媒体状态进行描述的信息如下表:
项目简略名称 | 作用描述 |
Description |
所给出的描述远程储存介质的名称 |
Name |
所给出的描述可移动或可抽取的储存介质的名称 |
Media ID |
远程储存介质的标识号 |
RSM ID |
可移动或可抽取介质的标识号 |
Media Type |
媒体类型列表 |
Last update |
媒体执行"写"操作的最后时间 |
Last error |
返回错误信息的最后时间 |
Recall Only |
逻辑值:仅当被调用为TRUE,处于读写状态FALSE |
Capacity |
媒体占据的总字节数 |
Free Bytes |
总的自由空间的字节数 |
Next Data Set |
下一个写入数据的设置 |
Recreate |
媒体是否重建的逻辑标志 |
项目简略名称 | 作用描述 |
Title |
构件标题 |
Registry Name |
构件标题在注册表中的名称 |
Identifier |
这个设备资源唯一的标识 |
DB Version |
构件使用的数据库版本 |
Build Version |
远程储存系统编译号 |
NT Version |
(适用的)windows版本 |
NT Build |
windows编译号 |
DB Path |
部件(所用)文件集合的路径 |