123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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)
- }
|