//go:build !windows package disk import ( "os" "path/filepath" "syscall" ) func IsMountPoint(path string) bool { pathInfo, err := os.Stat(path) if err != nil { return false } parent := filepath.Dir(filepath.Clean(path)) parentInfo, err := os.Stat(parent) if err != nil { return false } pathStat, ok := pathInfo.Sys().(*syscall.Stat_t) if !ok { return false } parentStat, ok := parentInfo.Sys().(*syscall.Stat_t) if !ok { return false } return pathStat.Dev != parentStat.Dev } func DiskUsage(mountPath string) (total, free int64, err error) { var stat syscall.Statfs_t if err = syscall.Statfs(mountPath, &stat); err != nil { return 0, 0, err } total = int64(stat.Blocks) * int64(stat.Bsize) free = int64(stat.Bavail) * int64(stat.Bsize) return total, free, nil }