123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //go:build darwin
- package analytic
- import "strings"
- // macOSVirtualFilesystems contains macOS-specific virtual filesystem types
- var macOSVirtualFilesystems = map[string]bool{
- "devtmpfs": true,
- "kernfs": true,
- "fdesc": true,
- "map": true,
- "synthfs": true,
- "volfs": true,
- "ctlfs": true,
- "objfs": true,
- "procfs": true,
- "lifs": true,
- "mtab": true,
- "nullfs": true,
- "unionfs": true,
- "osxfuse": true,
- "macfuse": true,
- "fuse": true,
- "bindfs": true,
- "autofs_nowait": true,
- }
- // shouldSkipPath checks if a macOS path should be skipped from disk calculation
- func shouldSkipPath(mountpoint, device string) bool {
- // Skip Time Machine snapshots and system snapshots
- if strings.Contains(mountpoint, ".timemachine") ||
- strings.Contains(mountpoint, ".Snapshot") ||
- strings.Contains(mountpoint, "/.vol/") ||
- strings.Contains(device, "@") { // APFS snapshots contain @
- return true
- }
- // Skip read-only system volumes (including root partition on macOS Catalina+)
- // The root "/" partition is read-only and shares space with "/System/Volumes/Data"
- if strings.HasPrefix(mountpoint, "/System/Volumes/") &&
- !strings.HasPrefix(mountpoint, "/System/Volumes/Data") {
- return true
- }
- // Skip root partition "/" on macOS Catalina+ to avoid double counting with Data volume
- // In modern macOS, "/" and "/System/Volumes/Data" are the same APFS container
- if mountpoint == "/" {
- return true
- }
- // Skip preboot and recovery volumes
- if strings.Contains(mountpoint, "Preboot") ||
- strings.Contains(mountpoint, "Recovery") ||
- strings.Contains(mountpoint, "Update") ||
- strings.Contains(mountpoint, "VM") {
- return true
- }
- // Skip network mounts
- if strings.HasPrefix(device, "//") ||
- strings.HasPrefix(device, "afp://") ||
- strings.HasPrefix(device, "smb://") ||
- strings.HasPrefix(device, "nfs://") {
- return true
- }
- // Skip virtual disk images
- if strings.Contains(device, ".dmg") ||
- strings.Contains(device, ".sparsebundle") ||
- strings.Contains(device, ".sparseimage") {
- return true
- }
- return false
- }
- // getAdditionalVirtualFilesystems returns macOS-specific virtual filesystem types
- func getAdditionalVirtualFilesystems() map[string]bool {
- return macOSVirtualFilesystems
- }
|