Disk Information
Version Compatibility: XyPriss v6.0.0 and above
Overview
The Disk Information API provides comprehensive access to disk and storage device information, including capacity, usage, and filesystem details. This API enables applications to monitor disk space, detect storage issues, and optimize data management.
API Reference
$disks(mountPoint?: string): DiskInfo[] | DiskInfo
Retrieves information about all mounted disks or a specific disk.
Parameters:
mountPoint- (Optional) Specific mount point to query (e.g., "/", "/mnt/data")
Returns:
DiskInfo[]- Array of all disks (when no mount point specified)DiskInfo- Specific disk information (when mount point provided)
Return Type
DiskInfo
Comprehensive information about a disk or partition.
interface DiskInfo {
name: string; // Disk name (e.g., "/dev/sda1")
mount_point: string; // Mount point (e.g., "/", "/home")
file_system: string; // Filesystem type (e.g., "ext4", "ntfs", "apfs")
total_space: number; // Total capacity in bytes
available_space: number; // Available space in bytes
used_space: number; // Used space in bytes
usage_percent: number; // Usage percentage (0-100)
is_removable: boolean; // Whether disk is removable
disk_type: string; // Disk type (e.g., "HDD", "SSD", "Unknown")
}
Usage Examples
List All Disks
const disks = __sys__.$disks() as DiskInfo[];
console.log("=== Mounted Disks ===");
disks.forEach((disk) => {
console.log(`\nDisk: ${disk.name}`);
console.log(` Mount: ${disk.mount_point}`);
console.log(` Type: ${disk.disk_type} (${disk.file_system})`);
console.log(` Total: ${formatBytes(disk.total_space)}`);
console.log(
` Used: ${formatBytes(disk.used_space)} (${disk.usage_percent.toFixed(
1
)}%)`
);
console.log(` Available: ${formatBytes(disk.available_space)}`);
console.log(` Removable: ${disk.is_removable ? "Yes" : "No"}`);
});
function formatBytes(bytes: number): string {
const gb = bytes / 1024 ** 3;
if (gb >= 1024) {
return `${(gb / 1024).toFixed(2)} TB`;
}
return `${gb.toFixed(2)} GB`;
}
Example Output:
=== Mounted Disks ===
Disk: /dev/nvme0n1p2
Mount: /
Type: SSD (ext4)
Total: 476.94 GB
Used: 234.56 GB (49.2%)
Available: 242.38 GB
Removable: No
Disk: /dev/sdb1
Mount: /mnt/backup
Type: HDD (ext4)
Total: 1.82 TB
Used: 456.78 GB (24.5%)
Available: 1.37 TB
Removable: Yes
Get Root Disk Information
const rootDisk = __sys__.$disks("/") as DiskInfo;
if (rootDisk) {
console.log("Root Disk Status:");
console.log(` Usage: ${rootDisk.usage_percent.toFixed(1)}%`);
console.log(
` Available: ${(rootDisk.available_space / 1024 ** 3).toFixed(2)} GB`
);
if (rootDisk.usage_percent > 90) {
console.warn("WARNING: Root disk is nearly full!");
}
}
Check Disk Space
function checkDiskSpace(
mountPoint: string,
thresholdPercent: number = 80
): boolean {
const disk = __sys__.$disks(mountPoint) as DiskInfo;
if (!disk) {
console.error(`Disk not found: ${mountPoint}`);
return false;
}
if (disk.usage_percent > thresholdPercent) {
console.warn(
`Disk ${mountPoint} is ${disk.usage_percent.toFixed(1)}% full`
);
console.warn(
`Available: ${(disk.available_space / 1024 ** 3).toFixed(2)} GB`
);
return false;
}
return true;
}
// Check root disk
const hasSpace = checkDiskSpace("/", 85);
Common Patterns
Disk Space Monitoring
class DiskMonitor {
private thresholds = {
warning: 80,
critical: 90,
emergency: 95,
};
check(): void {
const disks = __sys__.$disks() as DiskInfo[];
disks.forEach((disk) => {
const usage = disk.usage_percent;
if (usage >= this.thresholds.emergency) {
console.error(
`EMERGENCY: ${disk.mount_point} is ${usage.toFixed(
1
)}% full`
);
this.handleEmergency(disk);
} else if (usage >= this.thresholds.critical) {
console.error(
`CRITICAL: ${disk.mount_point} is ${usage.toFixed(1)}% full`
);
this.handleCritical(disk);
} else if (usage >= this.thresholds.warning) {
console.warn(
`WARNING: ${disk.mount_point} is ${usage.toFixed(1)}% full`
);
}
});
}
private handleEmergency(disk: DiskInfo): void {
// Implement emergency cleanup
console.error(
`Available: ${(disk.available_space / 1024 ** 3).toFixed(2)} GB`
);
console.error("Immediate action required!");
}
private handleCritical(disk: DiskInfo): void {
// Implement critical cleanup
console.error(
`Available: ${(disk.available_space / 1024 ** 3).toFixed(2)} GB`
);
console.error("Cleanup recommended");
}
}
const monitor = new DiskMonitor();
setInterval(() => monitor.check(), 60000); // Check every minute
Storage Health Check
interface StorageHealth {
status: "healthy" | "warning" | "critical";
disks: {
mount: string;
usage: number;
available_gb: number;
}[];
issues: string[];
}
function checkStorageHealth(): StorageHealth {
const disks = __sys__.$disks() as DiskInfo[];
const issues: string[] = [];
let status: "healthy" | "warning" | "critical" = "healthy";
const diskInfo = disks.map((disk) => {
const availableGB = disk.available_space / 1024 ** 3;
if (disk.usage_percent >= 95) {
status = "critical";
issues.push(
`${
disk.mount_point
} is critically full (${disk.usage_percent.toFixed(1)}%)`
);
} else if (disk.usage_percent >= 85) {
if (status !== "critical") status = "warning";
issues.push(
`${
disk.mount_point
} is running low on space (${disk.usage_percent.toFixed(1)}%)`
);
}
if (availableGB < 1) {
status = "critical";
issues.push(`${disk.mount_point} has less than 1GB available`);
}
return {
mount: disk.mount_point,
usage: disk.usage_percent,
available_gb: availableGB,
};
});
return { status, disks: diskInfo, issues };
}
app.get("/health/storage", (req, res) => {
const health = checkStorageHealth();
const statusCode =
health.status === "healthy"
? 200
: health.status === "warning"
? 429
: 503;
res.status(statusCode).json(health);
});
Disk Type Analysis
function analyzeDiskTypes(): {
ssd: number;
hdd: number;
unknown: number;
removable: number;
} {
const disks = __sys__.$disks() as DiskInfo[];
return {
ssd: disks.filter((d) => d.disk_type === "SSD").length,
hdd: disks.filter((d) => d.disk_type === "HDD").length,
unknown: disks.filter((d) => d.disk_type === "Unknown").length,
removable: disks.filter((d) => d.is_removable).length,
};
}
const types = analyzeDiskTypes();
console.log("Disk Type Distribution:");
console.log(` SSDs: ${types.ssd}`);
console.log(` HDDs: ${types.hdd}`);
console.log(` Removable: ${types.removable}`);
Capacity Planning
interface CapacityReport {
totalCapacity: number;
totalUsed: number;
totalAvailable: number;
projectedDaysUntilFull: number | null;
}
class CapacityPlanner {
private usageHistory: Map<string, number[]> = new Map();
private maxSamples = 100;
recordUsage(): void {
const disks = __sys__.$disks() as DiskInfo[];
disks.forEach((disk) => {
const history = this.usageHistory.get(disk.mount_point) || [];
history.push(disk.used_space);
if (history.length > this.maxSamples) {
history.shift();
}
this.usageHistory.set(disk.mount_point, history);
});
}
getProjection(mountPoint: string): number | null {
const history = this.usageHistory.get(mountPoint);
if (!history || history.length < 10) return null;
// Calculate average daily growth
const firstSample = history[0];
const lastSample = history[history.length - 1];
const growth = lastSample - firstSample;
const daysElapsed = history.length / (24 * 60); // Assuming hourly samples
const dailyGrowth = growth / daysElapsed;
if (dailyGrowth <= 0) return null;
const disk = __sys__.$disks(mountPoint) as DiskInfo;
if (!disk) return null;
const remainingSpace = disk.available_space;
return remainingSpace / dailyGrowth;
}
getReport(): CapacityReport {
const disks = __sys__.$disks() as DiskInfo[];
const totalCapacity = disks.reduce((sum, d) => sum + d.total_space, 0);
const totalUsed = disks.reduce((sum, d) => sum + d.used_space, 0);
const totalAvailable = disks.reduce(
(sum, d) => sum + d.available_space,
0
);
// Get worst-case projection
const projections = disks
.map((d) => this.getProjection(d.mount_point))
.filter((p): p is number => p !== null);
const projectedDaysUntilFull =
projections.length > 0 ? Math.min(...projections) : null;
return {
totalCapacity,
totalUsed,
totalAvailable,
projectedDaysUntilFull,
};
}
}
const planner = new CapacityPlanner();
setInterval(() => planner.recordUsage(), 3600000); // Record hourly
Find Largest Disks
function getLargestDisks(count: number = 3): DiskInfo[] {
const disks = __sys__.$disks() as DiskInfo[];
return disks.sort((a, b) => b.total_space - a.total_space).slice(0, count);
}
const largest = getLargestDisks(3);
console.log("Largest Disks:");
largest.forEach((disk, i) => {
const sizeGB = disk.total_space / 1024 ** 3;
console.log(`${i + 1}. ${disk.mount_point}: ${sizeGB.toFixed(2)} GB`);
});
Best Practices
1. Monitor Critical Mount Points
const criticalMounts = ["/", "/home", "/var"];
function checkCriticalMounts(): void {
criticalMounts.forEach((mount) => {
const disk = __sys__.$disks(mount) as DiskInfo;
if (!disk) {
console.error(`Critical mount point not found: ${mount}`);
return;
}
if (disk.usage_percent > 85) {
console.warn(
`Critical mount ${mount} is ${disk.usage_percent.toFixed(
1
)}% full`
);
}
});
}
2. Handle Removable Disks
function getFixedDisks(): DiskInfo[] {
const disks = __sys__.$disks() as DiskInfo[];
return disks.filter((disk) => !disk.is_removable);
}
// Monitor only fixed disks
const fixedDisks = getFixedDisks();
3. Set Appropriate Thresholds
function getThreshold(disk: DiskInfo): number {
const sizeGB = disk.total_space / 1024 ** 3;
// Larger disks can tolerate higher usage percentages
if (sizeGB > 1000) return 90; // >1TB: 90%
if (sizeGB > 500) return 85; // >500GB: 85%
return 80; // <500GB: 80%
}
4. Format Output Consistently
function formatDiskSize(bytes: number): string {
const units = ["B", "KB", "MB", "GB", "TB", "PB"];
let size = bytes;
let unitIndex = 0;
while (size >= 1024 && unitIndex < units.length - 1) {
size /= 1024;
unitIndex++;
}
return `${size.toFixed(2)} ${units[unitIndex]}`;
}
5. Cache Disk Information
class DiskCache {
private cache: DiskInfo[] = [];
private lastUpdate = 0;
private ttl = 60000; // 1 minute
getDisks(): DiskInfo[] {
const now = Date.now();
if (now - this.lastUpdate > this.ttl) {
this.cache = __sys__.$disks() as DiskInfo[];
this.lastUpdate = now;
}
return this.cache;
}
}
Platform Considerations
Linux
- Full disk information available
- Accurate filesystem type reporting
- Removable disk detection reliable
macOS
- Full disk information available
- APFS filesystem support
- Accurate capacity reporting
Windows
- Full disk information available
- Drive letters as mount points
- NTFS and FAT32 support
Performance Impact
Disk information queries:
- Query Time: ~5-20ms (depends on disk count)
- Memory Overhead: ~500 bytes per disk
- CPU Impact: Minimal
Troubleshooting
Disk Not Found
const disk = __sys__.$disks("/mnt/data") as DiskInfo;
if (!disk) {
console.error("Disk not found - may not be mounted");
// List available disks
const available = __sys__.$disks() as DiskInfo[];
console.log("Available mount points:");
available.forEach((d) => console.log(` ${d.mount_point}`));
}
Inaccurate Usage Reporting
// Some filesystems reserve space for root
const disk = __sys__.$disks("/") as DiskInfo;
if (disk) {
const reportedUsage = disk.usage_percent;
const calculatedUsage = (disk.used_space / disk.total_space) * 100;
if (Math.abs(reportedUsage - calculatedUsage) > 5) {
console.log("Note: Filesystem may have reserved space");
}
}
Related Documentation
Version: XyPriss v6.0.0+
Last Updated: 2026-01-12