1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package fdisk
- import (
- "bytes"
- "os/exec"
- "strings"
- )
- type DiskInfo struct {
- Name string //e.g. /dev/sda
- Model string //e.g. Samsung SSD 860 EVO 1TB
- DiskLabel string //e.g. gpt
- Identifier string //e.g. 0x12345678
- }
- func GetDiskModelAndIdentifier(disk string) (*DiskInfo, error) {
- //Make sure there is /dev/ prefix
- if !strings.HasPrefix(disk, "/dev/") {
- disk = "/dev/" + disk
- }
- //Make sure there is no trailing slash
- disk = strings.TrimSuffix(disk, "/")
- cmd := exec.Command("sudo", "fdisk", "-l", disk)
- var out bytes.Buffer
- cmd.Stdout = &out
- err := cmd.Run()
- if err != nil {
- return nil, err
- }
- lines := strings.Split(out.String(), "\n")
- //Only extracting the upper section of disk info
- var info DiskInfo = DiskInfo{
- Name: disk,
- }
- for _, line := range lines {
- line = strings.TrimSpace(line)
- if strings.HasPrefix(line, "Disk model:") {
- info.Model = strings.TrimPrefix(line, "Disk model: ")
- } else if strings.HasPrefix(line, "Disklabel type:") {
- info.DiskLabel = strings.TrimPrefix(line, "Disklabel type: ")
- } else if strings.HasPrefix(line, "Disk identifier:") {
- info.Identifier = strings.TrimPrefix(line, "Disk identifier: ")
- }
- }
- return &info, nil
- }
|