44 lines
802 B
Go
44 lines
802 B
Go
//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
|
|
}
|