main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "strings"
  6. )
  7. func getDiskUsage(path string) (uint64, error) {
  8. cmd := exec.Command("df", "-B1", path)
  9. output, err := cmd.CombinedOutput()
  10. if err != nil {
  11. return 0, err
  12. }
  13. lines := strings.Split(string(output), "\n")
  14. if len(lines) < 2 {
  15. return 0, fmt.Errorf("unexpected output from df command")
  16. }
  17. fields := strings.Fields(lines[1])
  18. if len(fields) < 3 {
  19. return 0, fmt.Errorf("unexpected output format from df command")
  20. }
  21. used := fields[2]
  22. usedBytes, err := parseSize(used)
  23. if err != nil {
  24. return 0, err
  25. }
  26. return usedBytes, nil
  27. }
  28. func parseSize(sizeStr string) (uint64, error) {
  29. var size uint64
  30. unit := sizeStr[len(sizeStr)-1]
  31. value := sizeStr[:len(sizeStr)-1]
  32. _, err := fmt.Sscan(value, &size)
  33. if err != nil {
  34. return 0, err
  35. }
  36. switch unit {
  37. case 'B':
  38. return size, nil
  39. case 'K':
  40. return size * 1024, nil
  41. case 'M':
  42. return size * 1024 * 1024, nil
  43. case 'G':
  44. return size * 1024 * 1024 * 1024, nil
  45. default:
  46. return 0, fmt.Errorf("unknown unit: %c", unit)
  47. }
  48. }
  49. func main() {
  50. path := "/dev/vdb" // 替换为您要查询的硬盘路径,如 "/dev/sda"
  51. used, err := getDiskUsage(path)
  52. if err != nil {
  53. fmt.Println("Error:", err)
  54. return
  55. }
  56. fmt.Printf("Used Disk Space: %d bytes\n", used)
  57. }