diff --git a/src/components/HostInfoPanel.js b/src/components/HostInfoPanel.js index 45e9059..49c306b 100644 --- a/src/components/HostInfoPanel.js +++ b/src/components/HostInfoPanel.js @@ -47,11 +47,11 @@ function HostInfoPanel({ hostId, connectionId, isConnected, onOpenSFTP, onClose echo "===CPU_CORES===$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null)" echo "===MEMORY===$(free -h 2>/dev/null | awk '/^Mem:/ {print $2}' || echo 'N/A')" echo "===MEMORY_USED===$(free -h 2>/dev/null | awk '/^Mem:/ {print $3}' || echo 'N/A')" - echo "===DISK===$(df -h / | awk 'NR==2 {print $2}')" - echo "===DISK_USED===$(df -h / | awk 'NR==2 {print $3}')" - echo "===DISK_PERCENT===$(df -h / | awk 'NR==2 {print $5}')" echo "===LOAD===$(cat /proc/loadavg 2>/dev/null | awk '{print $1, $2, $3}' || uptime | awk -F'load average:' '{print $2}' | xargs)" echo "===IP===$(hostname -I 2>/dev/null | awk '{print $1}' || ifconfig 2>/dev/null | grep 'inet ' | grep -v 127.0.0.1 | head -1 | awk '{print $2}')" + echo "===DISKS_START===" + df -h -T 2>/dev/null | grep -E '^/dev/' | grep -v 'tmpfs\|devtmpfs\|squashfs\|overlay\|loop' | awk '{print $1"|"$2"|"$3"|"$4"|"$6"|"$7}' || df -h 2>/dev/null | grep -E '^/dev/' | awk '{print $1"|unknown|"$2"|"$3"|"$5"|"$6}' + echo "===DISKS_END===" ` ); @@ -61,6 +61,26 @@ function HostInfoPanel({ hostId, connectionId, isConnected, onOpenSFTP, onClose return match ? match[1].trim() : 'N/A'; }; + // 解析多硬盘信息 + const disksMatch = result.stdout.match(/===DISKS_START===([\s\S]*?)===DISKS_END===/); + const disks = []; + if (disksMatch && disksMatch[1]) { + const diskLines = disksMatch[1].trim().split('\n').filter(line => line.trim()); + for (const line of diskLines) { + const parts = line.split('|'); + if (parts.length >= 6) { + disks.push({ + device: parts[0], + type: parts[1], + total: parts[2], + used: parts[3], + percent: parts[4], + mount: parts[5], + }); + } + } + } + setSystemInfo({ hostname: parseValue('HOSTNAME'), os: parseValue('OS'), @@ -70,11 +90,9 @@ function HostInfoPanel({ hostId, connectionId, isConnected, onOpenSFTP, onClose cpuCores: parseValue('CPU_CORES'), memory: parseValue('MEMORY'), memoryUsed: parseValue('MEMORY_USED'), - disk: parseValue('DISK'), - diskUsed: parseValue('DISK_USED'), - diskPercent: parseValue('DISK_PERCENT'), load: parseValue('LOAD'), ip: parseValue('IP'), + disks: disks.length > 0 ? disks : [{ device: '/dev/sda1', type: 'unknown', total: 'N/A', used: 'N/A', percent: '0%', mount: '/' }], }); } } catch (err) { @@ -340,18 +358,45 @@ function HostInfoPanel({ hostId, connectionId, isConnected, onOpenSFTP, onClose /> - {/* 磁盘使用 */} + {/* 磁盘使用 - 支持多硬盘 */}
-
+
- 磁盘 (/) + 磁盘 + + 共 {systemInfo.disks?.length || 0} 个分区 + +
+
+ {systemInfo.disks?.map((disk, index) => ( +
+
+ + {disk.mount} + + + {disk.type !== 'unknown' ? disk.type : disk.device.split('/').pop()} + +
+
+ 使用 + {disk.used} / {disk.total} +
+
+
80 ? '#f85149' : parseInt(disk.percent) > 60 ? '#d29922' : '#58a6ff' + }} + /> +
+
+ {disk.percent} +
+
+ ))}
-
) : (