From 35ed9c11c7cb8247ed77288f948b9846552a4734 Mon Sep 17 00:00:00 2001 From: Ofek Lev Date: Thu, 26 Apr 2018 18:27:15 -0400 Subject: [PATCH] [disk][linux] add label based on devicemapper name of disk --- disk/disk.go | 1 + disk/disk_linux.go | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/disk/disk.go b/disk/disk.go index 1c31047..38d8a8f 100644 --- a/disk/disk.go +++ b/disk/disk.go @@ -42,6 +42,7 @@ type IOCountersStat struct { WeightedIO uint64 `json:"weightedIO"` Name string `json:"name"` SerialNumber string `json:"serialNumber"` + Label string `json:"label"` } func (d UsageStat) String() string { diff --git a/disk/disk_linux.go b/disk/disk_linux.go index 46904e3..852dc1f 100644 --- a/disk/disk_linux.go +++ b/disk/disk_linux.go @@ -5,6 +5,7 @@ package disk import ( "context" "fmt" + "io/ioutil" "os/exec" "path/filepath" "strconv" @@ -370,6 +371,8 @@ func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOC d.Name = name d.SerialNumber = GetDiskSerialNumber(name) + d.Label = GetLabel(name) + ret[name] = d } return ret, nil @@ -406,6 +409,26 @@ func GetDiskSerialNumberWithContext(ctx context.Context, name string) string { return "" } +// GetLabel returns label of given device or empty string on error. +// Name of device is expected, eg. /dev/sda +// Supports label based on devicemapper name +// See https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block-dm +func GetLabel(name string) string { + // Try label based on devicemapper name + dmname_filename := fmt.Sprintf("/sys/block/%s/dm/name", name) + + if !common.PathExists(dmname_filename) { + return "" + } + + dmname, err := ioutil.ReadFile(dmname_filename) + if err != nil { + return "" + } else { + return dmname + } +} + func getFsType(stat unix.Statfs_t) string { t := int64(stat.Type) ret, ok := fsTypeMap[t]