diff --git a/monitoring/unit/disk.go b/monitoring/unit/disk.go index 8fc055f..0a5932d 100644 --- a/monitoring/unit/disk.go +++ b/monitoring/unit/disk.go @@ -171,11 +171,33 @@ func DiskList() ([]string, error) { if err != nil { return nil, err } + + // 同一物理设备只保留路径最短的根挂载点 + deviceMap := make(map[string]disk.PartitionStat) for _, part := range usage { if isPhysicalDisk(part) { - diskList = append(diskList, fmt.Sprintf("%s (%s)", part.Mountpoint, part.Fstype)) + deviceID := part.Device + // ZFS去重: 基于 pool 名称 + if strings.ToLower(part.Fstype) == "zfs" { + if idx := strings.Index(deviceID, "/"); idx != -1 { + deviceID = deviceID[:idx] + } + } + + if existing, ok := deviceMap[deviceID]; ok { + // 优先保留路径更短的挂载点 (e.g., /volume1 优于 /volume1/@appdata/...) + if len(part.Mountpoint) < len(existing.Mountpoint) { + deviceMap[deviceID] = part + } + } else { + deviceMap[deviceID] = part + } } } + + for _, part := range deviceMap { + diskList = append(diskList, fmt.Sprintf("%s (%s)", part.Mountpoint, part.Fstype)) + } } return diskList, nil }