如何在Go中列出块设备?

时间:2017-03-30 03:45:53

标签: linux go

我想在Linux 64位系统中获取lsblk命令显示的数据。显然我可以调用lsblk并解析输出。我的问题是,在Go中有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

由于lsblk已经可用且已经完成了您所需的工作(从系统收集信息并将该信息合成到您想要的表格中),我认为使用它是最好的方法。< / p>

lsblk源代码在此处:https://github.com/karelzak/util-linux/blob/master/misc-utils/lsblk.c。乍一看,就个人而言,这在Go中复制似乎并不重要,并且当util-linux软件包更新时,可能值得解析输出和测试破损的麻烦。

这最终必须根据您的特定标准为您的个别项目做出决定。

答案 1 :(得分:0)

我只需要顶级设备的名称,最后只列出/sys/block的内容,这很方便,因为它既不需要运行命令,也不需要解析输出。

func GetDevices() []string {
    dir, err := ioutil.ReadDir("/sys/block")
    if err != nil {
        panic(err)
    }

    files := make([]string, 0)

    for _, f := range dir {
        if strings.HasPrefix(f.Name(), "loop") {
            continue
        }
        files = append(files, f.Name())
    }

    return files
}

既不是非常健壮的解决方案,也不是便携式解决方案,但是可以满足我的需求。

您还可以构想解析/proc/diskstats/proc/partitions的内容。