diff --git a/disk/disk_freebsd.go b/disk/disk_freebsd.go index e74c186..dd3eba1 100644 --- a/disk/disk_freebsd.go +++ b/disk/disk_freebsd.go @@ -4,10 +4,14 @@ package disk import ( + "bufio" "bytes" "context" "encoding/binary" + "fmt" + "os/exec" "strconv" + "strings" "golang.org/x/sys/unix" @@ -163,7 +167,22 @@ func getFsType(stat unix.Statfs_t) string { } func SerialNumberWithContext(ctx context.Context, name string) (string, error) { - return "", common.ErrNotImplementedError + geom, err := exec.LookPath("geom") + if err != nil { + return "", fmt.Errorf("find geom: %w", err) + } + geomOut, err := invoke.CommandWithContext(ctx, geom, "disk", "list", name) + if err != nil { + return "", fmt.Errorf("exec geom: %w", err) + } + s := bufio.NewScanner(bytes.NewReader(geomOut)) + for s.Scan() { + flds := strings.Fields(s.Text()) + if len(flds) == 2 && flds[0] == "ident:" { + return flds[1], nil + } + } + return "", nil } func LabelWithContext(ctx context.Context, name string) (string, error) {