管理文件空间

由于文件空间对于系统的运行很重要,因此会使用一组单独的调用来注册、更新和删除文件空间标识。 必须先向 IBM® Storage Protect注册文件空间,然后才能存储与系统上的文件空间相关联的任何对象。

使用 dsmRegisterFS 调用来完成此任务。 有关对象名和标识的更多信息,请参阅 对象名和标识

文件空间标识是三部分名称层次结构中的顶级限定符。 通过在文件空间中将相关数据分组在一起,可以更轻松地管理该数据。 例如,应用程序客户机或 IBM Storage Protect 服务器管理员可以删除文件空间以及该文件空间中的所有对象。

文件空间还准许应用程序客户机向服务器提供有关文件空间的信息,管理员之后可以查询该信息。 在 qryRespFSData 结构中进行查询时会返回此信息,其中包含以下文件系统信息:
类型 定义
fstype 文件空间类型。 此字段是应用程序客户机设置的字符串。
fsAttr[platform].fsInfo 用于特定于客户机的数据的客户机信息字段。
capacity 文件空间中的总空间量。
occupancy 当前在文件空间中占用的空间量。
backStartDate 最新备份启动时的时间戳记(通过发送 dsmUpdateFS 调用进行设置)。
backCompleteDate 最新备份完成时的时间戳记(通过发送 dsmUpdateFS 调用进行设置)。

使用 capacity 和 occupancy 取决于应用程序客户机。 某些应用程序可能不需要有关文件空间大小的信息,在这种情况下,这些字段可以缺省为 0。 有关查询文件空间的更多信息,请参阅 查询 IBM Storage Protect 系统

向系统注册文件空间后,可以随时备份或归档对象。 要在备份或归档操作后更新文件空间的占用和容量字段,请调用 dsmUpdateFS。 此调用确保文件系统的 occupancy 和 capacity 值是最新的。 您还可以更新 fsinfobackupstartbackupcomplete 字段。

如果要监视上次备份日期,请在启动备份之前输入 dsmUpdateFS 调用。 将更新操作设置为 DSM_FSUPD_BACKSTARTDATE。 这会强制服务器将文件空间的 backStartDate 字段设置为当前时间。 在该文件空间的备份完成后,输入 dsmUpdateFS 调用并将更新操作设置为 DSM_FSUPD_BACKCOMPLETEDATE。 此调用会在备份结束时创建时间戳记。

如果不再需要文件空间,那么可以使用 dsmDeleteFS 命令将其删除。 在 UNIX 或 Linux® 操作系统上,只有 root 用户或授权用户才能删除文件空间。

图 1 中的示例演示了如何将三个文件空间调用用于 UNIX 或 Linux。 有关如何将三个文件空间调用用于 Windows 的示例,请参阅系统上安装的样本程序代码。
图 1。 使用文件空间的示例(第一部分)
/*  Register the file space if it has not already been done.  */
 
dsInt16        rc;
regFSData    fsData;
char         fsName[DSM_MAX_FSNAME_LENGTH];
char         smpAPI[] = "Sample-API";
 
strcpy(fsName,"/home/tallan/text");
memset(&fsData,0x00,sizeof(fsData));
fsData.stVersion = regFSDataVersion;
fsData.fsName = fsName;
fsData.fsType = smpAPI;
strcpy(fsData.fsAttr.unixFSAttr.fsInfo,"Sample API FS Info");
fsData.fsAttr.unixFSAttr.fsInfoLength =
       strlen(fsData.fsAttr.unixFSAttr.fsInfo) + 1;
fsData.occupancy.hi=0;
fsData.occupancy.lo=100;
fsData.capacity.hi=0;
fsData.capacity.lo=300;
 
rc = dsmRegisterFS(dsmHandle,fsData);
if (rc == DSM_RC_FS_ALREADY_REGED) rc = DSM_RC_OK;  /* already done */
if (rc)
{
   printf("Filespace registration failed: ");
   rcApiOut(dsmHandle, rc);
   free(bkup_buff);
   return (RC_SESSION_FAILED);
}
图 2。 使用文件空间的示例(第二部分)
 
/* Update the file space. */
 
dsmFSUpd     updFilespace;         /* for update FS */
 
updFilespace.stVersion = dsmFSUpdVersion;
updFilespace.fsType = 0;             /* no change */
updFilespace.occupancy.hi = 0;
updFilespace.occupancy.lo = 50;
updFilespace.capacity.hi = 0;
updFilespace.capacity.lo = 200;
strcpy(updFilespace.fsAttr.unixFSAttr.fsInfo,
       "My update for filespace") ;
updFilespace.fsAttr.unixFSAttr.fsInfoLength =
       strlen(updFilespace.fsAttr.unixFSAttr.fsInfo);
 
updAction = DSM_FSUPD_FSINFO |
            DSM_FSUPD_OCCUPANCY |
            DSM_FSUPD_CAPACITY;
 
rc = dsmUpdateFS (handle,fsName,&updFilespace,updAction);
printf("dsmUpdateFS rc=%d\n", rc);
图 3。 使用文件空间的示例(第三部分)
/*  Delete the file space.  */
 
printf("\nDeleting file space 
rc = dsmDeleteFS (dsmHandle,fsName,DSM_REPOS_ALL);
if (rc)
{
   printf("  FAILED!!! ");
   rcApiOut(dsmHandle, rc);
}
else printf("  OK!\n");