fdisk.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package fdisk
  2. import (
  3. "bytes"
  4. "os/exec"
  5. "strings"
  6. )
  7. type DiskInfo struct {
  8. Name string //e.g. /dev/sda
  9. Model string //e.g. Samsung SSD 860 EVO 1TB
  10. DiskLabel string //e.g. gpt
  11. Identifier string //e.g. 0x12345678
  12. }
  13. func GetDiskModelAndIdentifier(disk string) (*DiskInfo, error) {
  14. //Make sure there is /dev/ prefix
  15. if !strings.HasPrefix(disk, "/dev/") {
  16. disk = "/dev/" + disk
  17. }
  18. //Make sure there is no trailing slash
  19. disk = strings.TrimSuffix(disk, "/")
  20. cmd := exec.Command("sudo", "fdisk", "-l", disk)
  21. var out bytes.Buffer
  22. cmd.Stdout = &out
  23. err := cmd.Run()
  24. if err != nil {
  25. return nil, err
  26. }
  27. lines := strings.Split(out.String(), "\n")
  28. //Only extracting the upper section of disk info
  29. var info DiskInfo = DiskInfo{
  30. Name: disk,
  31. }
  32. for _, line := range lines {
  33. line = strings.TrimSpace(line)
  34. if strings.HasPrefix(line, "Disk model:") {
  35. info.Model = strings.TrimPrefix(line, "Disk model: ")
  36. } else if strings.HasPrefix(line, "Disklabel type:") {
  37. info.DiskLabel = strings.TrimPrefix(line, "Disklabel type: ")
  38. } else if strings.HasPrefix(line, "Disk identifier:") {
  39. info.Identifier = strings.TrimPrefix(line, "Disk identifier: ")
  40. }
  41. }
  42. return &info, nil
  43. }