如何以编程方式获取syscall.Mount()的文件系统类型

时间:2020-07-06 15:34:31

标签: linux bash go filesystems mount

函数Linux syscall.Mount需要文件系统类型。

如果您尝试使用文件系统auto运行它,如下所示:

func main(){
    if err := syscall.Mount("/dev/sda1", "/mnt1", "auto", 0, "w"); err != nil {
        log.Printf("Mount(\"%s\", \"%s\", \"auto\", 0, \"rw\")\n","/dev/sda1","/mnt1")
        log.Fatal(err)
    }
}

它将失败,并显示no such devicehere已经描述为Linux syscall.Mount仅包装mount(2)which doesn't itself support the concept of an "auto" fstype

我知道如何使用bash查找它:

root@ubuntu:~/go/src# blkid /dev/sda1
/dev/sda1: UUID="527c895c-864e-4f4c-8fba-460754181173" TYPE="ext4" PARTUUID="db5c2e63-01"

root@ubuntu:~/go/src# file -sL /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=527c895c-864e-4f4c-8fba-460754181173 (needs journal recovery) (extents) (large files) (huge files)

在两种情况下,您都获得ext4文件系统类型。

在Go中用auto替换ext4将解决问题,但是我感兴趣的是,如何使用Go获取文件系统类型,例如/dev/sda1

是否有类似于blkidfile的功能可以显示设备的文件系统类型?

1 个答案:

答案 0 :(得分:6)

您尝试使用package blkid吗?它似乎是开箱即用的,因为它在内部实现了import re text = "hello ,world!" replaces = {"hello": "hi", "world":" 2020", "!":"."} regex = re.sub("|".join(replaces.keys()), lambda match: replaces[match.string[match.start():match.end()]], text) print(regex) shell命令(请参阅blkid.go#L101)。您只需获取从blkid函数返回的地图的键名,然后在您的API中重复使用它

Blkid()

package main import ( "fmt" blkid "github.com/LDCS/qslinux/blkid" ) func main() { rmap := blkid.Blkid(false) var key string var result *blkid.Blkiddata for key, result = range rmap { fmt.Printf("Devname: %q\n", key) } fmt.Printf("Uuid_=%q\n", result.Uuid_) fmt.Printf("Uuidsub_=%q\n", result.Uuidsub_) fmt.Printf("Type_=%q\n", result.Type_) fmt.Printf("Label_=%q\n", result.Label_) fmt.Printf("Parttype_=%q\n", result.Parttype_) fmt.Printf("Partuuid_=%q\n", result.Partuuid_) fmt.Printf("Partlabel_ =%q\n", result.Partlabel_) } 结构包含默认Linux版本中的所有信息

Blkiddata

只需使用以下模块即可

type Blkiddata struct {
    Devname_   string
    Uuid_      string
    Uuidsub_   string
    Type_      string
    Label_     string
    Parttype_  string
    Partuuid_  string
    Partlabel_ string
}

它还实现了其他Linux utils系列-go get github.com/LDCS/qslinux/blkid dfdmidecodeetcfstabetchostsetcserviceetcshadowetcuserhpmdnmappartedscsismartctl。参见module github.com/LDCS/qslinux