diff options
Diffstat (limited to 'hasPartitionTable.go')
| -rw-r--r-- | hasPartitionTable.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/hasPartitionTable.go b/hasPartitionTable.go new file mode 100644 index 0000000..96ed786 --- /dev/null +++ b/hasPartitionTable.go @@ -0,0 +1,34 @@ +package main + +import ( + "bytes" + "fmt" + "os/exec" + "strings" +) + +// HasPartitionTable runs `parted <device> print` and returns: +// - true if the disk has a recognized partition table +// - false if it's unrecognized or empty +func hasPartitionTable(dev string) (bool, error) { + cmd := exec.Command("parted", "-s", dev, "print") + var out bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = &out + + err := cmd.Run() + output := out.String() + + // Check for known "no label" pattern + if strings.Contains(output, "unrecognised disk label") || + strings.Contains(output, "unrecognized disk label") || + strings.Contains(output, "Error") { + return false, nil + } + + if err != nil { + return false, fmt.Errorf("parted failed: %w: %s", err, output) + } + + return true, nil +} |
