|
@@ -0,0 +1,69 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "os/exec"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+func getDiskUsage(path string) (uint64, error) {
|
|
|
+ cmd := exec.Command("df", "-B1", path)
|
|
|
+ output, err := cmd.CombinedOutput()
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+
|
|
|
+ lines := strings.Split(string(output), "\n")
|
|
|
+ if len(lines) < 2 {
|
|
|
+ return 0, fmt.Errorf("unexpected output from df command")
|
|
|
+ }
|
|
|
+
|
|
|
+ fields := strings.Fields(lines[1])
|
|
|
+ if len(fields) < 3 {
|
|
|
+ return 0, fmt.Errorf("unexpected output format from df command")
|
|
|
+ }
|
|
|
+
|
|
|
+ used := fields[2]
|
|
|
+ usedBytes, err := parseSize(used)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return usedBytes, nil
|
|
|
+}
|
|
|
+
|
|
|
+func parseSize(sizeStr string) (uint64, error) {
|
|
|
+ var size uint64
|
|
|
+ unit := sizeStr[len(sizeStr)-1]
|
|
|
+ value := sizeStr[:len(sizeStr)-1]
|
|
|
+
|
|
|
+ _, err := fmt.Sscan(value, &size)
|
|
|
+ if err != nil {
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+
|
|
|
+ switch unit {
|
|
|
+ case 'B':
|
|
|
+ return size, nil
|
|
|
+ case 'K':
|
|
|
+ return size * 1024, nil
|
|
|
+ case 'M':
|
|
|
+ return size * 1024 * 1024, nil
|
|
|
+ case 'G':
|
|
|
+ return size * 1024 * 1024 * 1024, nil
|
|
|
+ default:
|
|
|
+ return 0, fmt.Errorf("unknown unit: %c", unit)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func main() {
|
|
|
+ path := "/dev/vdb" // 替换为您要查询的硬盘路径,如 "/dev/sda"
|
|
|
+
|
|
|
+ used, err := getDiskUsage(path)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Printf("Used Disk Space: %d bytes\n", used)
|
|
|
+}
|