管理文件空间
由于文件空间对于系统的运行很重要,因此会使用一组单独的调用来注册、更新和删除文件空间标识。 必须先向 IBM® Storage Protect注册文件空间,然后才能存储与系统上的文件空间相关联的任何对象。
使用 dsmRegisterFS 调用来完成此任务。 有关对象名和标识的更多信息,请参阅 对象名和标识。
文件空间标识是三部分名称层次结构中的顶级限定符。 通过在文件空间中将相关数据分组在一起,可以更轻松地管理该数据。 例如,应用程序客户机或 IBM Storage Protect 服务器管理员可以删除文件空间以及该文件空间中的所有对象。
| 类型 | 定义 |
|---|---|
| fstype | 文件空间类型。 此字段是应用程序客户机设置的字符串。 |
| fsAttr[platform].fsInfo | 用于特定于客户机的数据的客户机信息字段。 |
| capacity | 文件空间中的总空间量。 |
| occupancy | 当前在文件空间中占用的空间量。 |
| backStartDate | 最新备份启动时的时间戳记(通过发送 dsmUpdateFS 调用进行设置)。 |
| backCompleteDate | 最新备份完成时的时间戳记(通过发送 dsmUpdateFS 调用进行设置)。 |
使用 capacity 和 occupancy 取决于应用程序客户机。 某些应用程序可能不需要有关文件空间大小的信息,在这种情况下,这些字段可以缺省为 0。 有关查询文件空间的更多信息,请参阅 查询 IBM Storage Protect 系统。
向系统注册文件空间后,可以随时备份或归档对象。 要在备份或归档操作后更新文件空间的占用和容量字段,请调用 dsmUpdateFS。 此调用确保文件系统的 occupancy 和 capacity 值是最新的。 您还可以更新 fsinfo, backupstart和 backupcomplete 字段。
如果要监视上次备份日期,请在启动备份之前输入 dsmUpdateFS 调用。 将更新操作设置为 DSM_FSUPD_BACKSTARTDATE。 这会强制服务器将文件空间的 backStartDate 字段设置为当前时间。 在该文件空间的备份完成后,输入 dsmUpdateFS 调用并将更新操作设置为 DSM_FSUPD_BACKCOMPLETEDATE。 此调用会在备份结束时创建时间戳记。
如果不再需要文件空间,那么可以使用 dsmDeleteFS 命令将其删除。 在 UNIX 或 Linux® 操作系统上,只有 root 用户或授权用户才能删除文件空间。
/* 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);
}
/* 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);
/* 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");