linux之如何以编程方式获取 syscall.Mount() 的文件系统类型
xiaohuochai
阅读:139
2025-06-02 22:19:02
评论:0
函数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 device .已经描述了
here那
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文件系统类型。
更换
auto与
ext4在 Go 中将解决问题,
但是 我感兴趣的是,如何使用 Go 获取文件系统类型,例如
/dev/sda1 ?
有没有类似
blkid的功能或
file可以显示设备的文件系统类型?
请您参考如下方法:
您是否尝试使用 package blkid ?它似乎开箱即用,因为它在内部实现了 blkid shell 命令(见 blkid.go#L101 )。您可以获取从 Blkid() 返回的映射的键名函数并在您的 API 中重用它
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_)
}
Blkiddata struct 包含与默认 Linux 版本一样的所有信息
type Blkiddata struct {
Devname_ string
Uuid_ string
Uuidsub_ string
Type_ string
Label_ string
Parttype_ string
Partuuid_ string
Partlabel_ string
}
只需使用模块
go get github.com/LDCS/qslinux/blkid
它还实现了另一个 Linux 实用程序系列,即 -
df ,
dmidecode ,
etcfstab ,
etchosts ,
etcservice ,
etcshadow ,
etcuser ,
hp ,
md ,
nmap ,
parted ,
scsi ,
smartctl和
tgtd .见
module github.com/LDCS/qslinux
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



