DISKMANAGER 是 ZerOS 内核的磁盘分区管理服务,提供分区的创建、检查、删除、合并等管理功能。所有分区实际存储在 system/service/DISK/ 目录下,支持 A-Z 共 26 个分区。
分区元数据存储在 system/service/DISK/D/DiskData.json 文件中(D: 是系统盘,如果 D: 不存在则使用第一个可用分区),包含分区数量、分区名称、分区大小和磁盘总大小等信息。
PHP 后端(默认):http://localhost:8089/system/service/DISKMANAGER.php
推荐使用 SystemInformation 构建服务URL:
// 使用 SystemInformation 构建URL(推荐,自动适配后端类型)
const url = SystemInformation.buildServiceUrlObject(SystemInformation.SERVICE_NAMES.DISKMANAGER);
// 或直接构建URL
const serviceUrl = new URL('/system/service/DISKMANAGER.php', window.location.origin);
所有请求通过 GET 方法发送,使用 action 参数指定操作类型:
GET /system/service/DISKMANAGER.php?action=<操作名>&<参数1>=<值1>&<参数2>=<值2>
所有响应均为 JSON 格式:
{
"status": "success" | "error",
"message": "操作结果消息",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
// 操作返回的数据(成功时)
}
}
所有分区名称使用以下格式:
C:, D:, E:system/service/DISK/{字母}/test/assets/SYSTEMRESOURCE.zip 解压系统资源system/service/DISK/D/检查指定分区是否存在,并返回分区详细信息。
操作名: check
参数:
partition (string, 必需): 分区名称(如 C:, D:)示例:
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'check');
url.searchParams.set('partition', 'C:');
const response = await fetch(url.toString());
const result = await response.json();
响应(成功):
{
"status": "success",
"message": "分区存在",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "C:",
"letter": "C",
"path": "/path/to/system/service/DISK/C",
"exists": true,
"size": 1073741824,
"fileCount": 150,
"dirCount": 20,
"diskTotalSize": 500107862016,
"diskFreeSpace": 495107862016,
"diskUsedSpace": 5000000000,
"diskUsagePercent": 1.0
}
}
响应(分区不存在):
{
"status": "success",
"message": "分区不存在",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "E:",
"letter": "E",
"path": "/path/to/system/service/DISK/E",
"exists": false
}
}
错误响应:
{
"status": "error",
"message": "无效的分区名称格式: X (格式应为单个大写字母+冒号,如 C:)",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200
}
创建新的磁盘分区。
操作名: create
参数:
partition (string, 必需): 分区名称(如 C:, D:, E:)特殊说明:
test/assets/SYSTEMRESOURCE.zip 解压系统资源DiskData.json示例:
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'create');
url.searchParams.set('partition', 'E:');
const response = await fetch(url.toString());
const result = await response.json();
响应(成功 - 普通分区):
{
"status": "success",
"message": "分区创建成功: E:",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "E:",
"letter": "E",
"path": "/path/to/system/service/DISK/E",
"created": "2024-12-10 12:00:00"
}
}
响应(成功 - D: 系统分区):
{
"status": "success",
"message": "系统分区 D: 创建成功(从系统资源文件解压)",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "D:",
"letter": "D",
"path": "/path/to/system/service/DISK/D",
"created": "2024-12-10 12:00:00",
"source": "SYSTEMRESOURCE.zip",
"fileCount": 1250,
"totalSize": 2147483648
}
}
错误响应(分区已存在):
{
"status": "error",
"message": "分区已存在: C:",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "C:",
"path": "/path/to/system/service/DISK/C"
}
}
HTTP 状态码: 409
错误响应(系统资源文件不存在):
{
"status": "error",
"message": "系统资源文件不存在: /path/to/test/assets/SYSTEMRESOURCE.zip",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200
}
HTTP 状态码: 404
删除指定的磁盘分区。
操作名: delete
参数:
partition (string, 必需): 分区名称(如 C:, E:)force (boolean, 可选): 是否强制删除(即使分区不为空),默认 false特殊说明:
force=true 可以强制删除非空分区(递归删除所有内容)DiskData.json示例:
// 删除空分区
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'delete');
url.searchParams.set('partition', 'E:');
const response = await fetch(url.toString());
const result = await response.json();
// 强制删除非空分区
url.searchParams.set('force', 'true');
const response2 = await fetch(url.toString());
const result2 = await response2.json();
响应(成功):
{
"status": "success",
"message": "分区已删除: E:",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "E:",
"force": false,
"deleted": "2024-12-10 12:00:00"
}
}
错误响应(尝试删除 D: 系统分区):
{
"status": "error",
"message": "系统分区 D: 不允许删除",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "D:",
"reason": "D: 是系统盘,受保护"
}
}
HTTP 状态码: 403
错误响应(分区不为空):
{
"status": "error",
"message": "分区不为空,无法删除: E: (包含 150 个文件/目录,使用 force=true 强制删除)",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partition": "E:",
"fileCount": 150
}
}
HTTP 状态码: 400
错误响应(分区不存在):
{
"status": "error",
"message": "分区不存在: E:",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200
}
HTTP 状态码: 404
将源分区的内容复制到目标分区。
操作名: merge
参数:
source (string, 必需): 源分区名称(如 C:)target (string, 必需): 目标分区名称(如 D:)deleteSource (boolean, 可选): 合并后是否删除源分区,默认 false特殊说明:
DiskData.jsondeleteSource=true,合并后会删除源分区(但 D: 系统分区仍然受保护)示例:
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'merge');
url.searchParams.set('source', 'E:');
url.searchParams.set('target', 'C:');
url.searchParams.set('deleteSource', 'true'); // 合并后删除源分区
const response = await fetch(url.toString());
const result = await response.json();
响应(成功):
{
"status": "success",
"message": "分区合并成功,源分区已删除",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"source": "E:",
"target": "C:",
"mergedCount": 150,
"mergedSize": 1073741824,
"sourceFileCount": 150,
"sourceSize": 1073741824,
"sourceDeleted": true,
"merged": "2024-12-10 12:00:00"
}
}
响应(成功,但源分区删除失败):
{
"status": "success",
"message": "分区合并成功,但源分区删除失败",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"source": "E:",
"target": "C:",
"mergedCount": 150,
"mergedSize": 1073741824,
"sourceFileCount": 150,
"sourceSize": 1073741824,
"sourceDeleted": false,
"warning": "分区合并成功,但源分区删除失败",
"merged": "2024-12-10 12:00:00"
}
}
错误响应(源分区和目标分区相同):
{
"status": "error",
"message": "源分区和目标分区不能相同",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200
}
HTTP 状态码: 400
错误响应(分区不存在):
{
"status": "error",
"message": "源分区不存在: E:",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200
}
HTTP 状态码: 404
列出所有已存在的分区及其详细信息。
操作名: list
参数: 无
示例:
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'list');
const response = await fetch(url.toString());
const result = await response.json();
响应(成功):
{
"status": "success",
"message": "分区列表获取成功",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"partitions": [
{
"partition": "C:",
"letter": "C",
"path": "/path/to/system/service/DISK/C",
"size": 1073741824,
"fileCount": 150,
"dirCount": 20,
"created": "2024-12-10 10:00:00",
"modified": "2024-12-10 11:30:00",
"diskTotalSize": 500107862016,
"diskFreeSpace": 495107862016,
"diskUsedSpace": 5000000000,
"diskUsagePercent": 1.0
},
{
"partition": "D:",
"letter": "D",
"path": "/path/to/system/service/DISK/D",
"size": 2147483648,
"fileCount": 1250,
"dirCount": 150,
"created": "2024-12-10 09:00:00",
"modified": "2024-12-10 12:00:00",
"diskTotalSize": 500107862016,
"diskFreeSpace": 490107862016,
"diskUsedSpace": 10000000000,
"diskUsagePercent": 2.0
}
],
"count": 2
}
}
响应字段说明:
partitions: 分区数组,按分区字母排序count: 分区数量partition: 分区名称(如 C:)letter: 分区字母(如 C)path: 分区物理路径size: 分区实际使用大小(字节)fileCount: 文件数量dirCount: 目录数量created: 创建时间modified: 最后修改时间diskTotalSize: 磁盘总大小(字节)diskFreeSpace: 磁盘剩余空间(字节)diskUsedSpace: 磁盘已用空间(字节)diskUsagePercent: 磁盘使用百分比从 DiskData.json 读取磁盘元数据。
操作名: read_data
参数: 无
示例:
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'read_data');
const response = await fetch(url.toString());
const result = await response.json();
响应(成功):
{
"status": "success",
"message": "磁盘数据读取成功",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"totalSize": 3221225472,
"partitionCount": 2,
"partitions": {
"C:": 1073741824,
"D:": 2147483648
}
}
}
响应字段说明:
totalSize: 磁盘总大小(字节),默认 3GBpartitionCount: 分区数量partitions: 分区对象,键为分区名称(如 C:),值为分区大小(字节)同步磁盘数据到 DiskData.json(根据实际分区目录)。
操作名: sync_data
参数: 无
说明:
system/service/DISK/ 目录下的所有分区DiskData.json 文件,使其与实际分区一致示例:
const url = new URL('/system/service/DISKMANAGER.php', window.location.origin);
url.searchParams.set('action', 'sync_data');
const response = await fetch(url.toString());
const result = await response.json();
响应(成功):
{
"status": "success",
"message": "磁盘数据同步成功",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
"totalSize": 3221225472,
"partitionCount": 2,
"partitions": {
"C:": 1073741824,
"D:": 2147483648
},
"synced": "2024-12-10 12:00:00"
}
}
磁盘元数据文件优先存储在系统盘 system/service/DISK/D/DiskData.json(如果 D: 不存在则使用第一个可用分区),格式如下:
{
"totalSize": 3221225472,
"partitionCount": 2,
"partitions": {
"C:": 1073741824,
"D:": 2147483648
}
}
字段说明:
totalSize: 磁盘总大小(字节),默认 3GB (3221225472)partitionCount: 分区数量partitions: 分区对象
C:, D:)自动同步:
sync_data 操作手动同步200: 操作成功400: 请求参数错误(如无效的分区名称格式、分区不为空等)403: 禁止操作(如尝试删除 D: 系统分区)404: 资源不存在(如分区不存在、系统资源文件不存在)409: 冲突(如分区已存在)500: 服务器内部错误(如创建分区失败、解压失败等)所有错误响应遵循统一的 JSON 格式:
{
"status": "error",
"message": "错误描述信息",
"timestamp": "2024-12-10 12:00:00",
"timestamp_unix": 1702195200,
"data": {
// 可选的错误详情
}
}
/**
* 磁盘分区管理 API 封装
*/
class DiskManagerAPI {
constructor() {
this.baseUrl = SystemInformation.buildServiceUrlObject(SystemInformation.SERVICE_NAMES.DISKMANAGER);
}
/**
* 检查分区
*/
async checkPartition(partition) {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'check');
url.searchParams.set('partition', partition);
const response = await fetch(url.toString());
return await response.json();
}
/**
* 创建分区
*/
async createPartition(partition) {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'create');
url.searchParams.set('partition', partition);
const response = await fetch(url.toString());
return await response.json();
}
/**
* 删除分区
*/
async deletePartition(partition, force = false) {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'delete');
url.searchParams.set('partition', partition);
if (force) {
url.searchParams.set('force', 'true');
}
const response = await fetch(url.toString());
return await response.json();
}
/**
* 合并分区
*/
async mergePartitions(source, target, deleteSource = false) {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'merge');
url.searchParams.set('source', source);
url.searchParams.set('target', target);
if (deleteSource) {
url.searchParams.set('deleteSource', 'true');
}
const response = await fetch(url.toString());
return await response.json();
}
/**
* 列出所有分区
*/
async listPartitions() {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'list');
const response = await fetch(url.toString());
return await response.json();
}
/**
* 读取磁盘数据
*/
async readDiskData() {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'read_data');
const response = await fetch(url.toString());
return await response.json();
}
/**
* 同步磁盘数据
*/
async syncDiskData() {
const url = new URL(this.baseUrl);
url.searchParams.set('action', 'sync_data');
const response = await fetch(url.toString());
return await response.json();
}
}
// 使用示例
const diskManager = new DiskManagerAPI();
// 列出所有分区
const listResult = await diskManager.listPartitions();
console.log('分区列表:', listResult.data.partitions);
// 创建新分区
const createResult = await diskManager.createPartition('E:');
console.log('创建结果:', createResult);
// 检查分区
const checkResult = await diskManager.checkPartition('C:');
console.log('分区信息:', checkResult.data);
D: 系统分区保护
test/assets/SYSTEMRESOURCE.zip 文件存在分区名称格式
C:, D:)c:, d:)分区创建
分区删除
force=true 可以强制删除非空分区(会递归删除所有内容)分区合并
数据同步
create、delete、merge 操作会自动同步到 DiskData.jsonDiskData.json 中,创建分区时不会覆盖已有的大小配置(保留用户配置)sync_data 操作手动同步数据系统资源文件
test/assets/SYSTEMRESOURCE.zip 文件D 的目录磁盘管理 GUI 程序(diskmanager):调用本 API 的 ZerOS 图形界面程序。
dev/zom-sources/diskmanager/diskmanager.zom(使用 dev/toolkit/zompkg.ps1 打包)dev/zom-sources/README.md。