golang在syscall.Mount中没有这样的设备

时间:2016-02-18 13:27:36

标签: go system-calls mount

我尝试使用syscall.Mount函数挂载usb pendrive并将文件系统自动检测到某个文件夹。我从内核的netlink套接字中获取设备路径并尝试将其挂载到/tmp/+devicename,在我的实例中/dev/sdd1应该挂载到/tmp/sdd1

我在go程序中有以下几行代码

if err := syscall.Mount(src, target, "auto", 0, "ro"); err != nil {
    log.Printf("Mount(\"%s\", \"%s\", \"auto\", 0, \"ro\")\n",src,target)
    log.Fatal(err)
}

输出:

main.go:47: Mount("/dev/sdd1", "/tmp/sdd1", "auto", 0, "ro")
main.go:48: no such device

我使用" sudo"运行具有root权限的应用程序,但似乎无法使用syscall包挂载。但是,如果我在终端类型sudo mount /dev/sdd1 /tmp/sdd1中,则可以正常工作。

这是什么问题?使用系统调用时,设备路径是否有所不同?

感谢任何帮助。 干杯

1 个答案:

答案 0 :(得分:4)

您没有指定您的操作系统,但我认为问题在许多实现中都是相同的。

Linux syscall.Mount上点击mount(2) which doesn't itself support the concept of an "auto" fstype

mount(8) 命令"auto"一起使用的原因是it does its own magic

  

如果没有给出-t选项,或者指定了auto类型,   mount会尝试猜测所需的类型。 Mount使用   用于猜测文件系统类型的blkid库;如果那样的话   没有出现任何看起来熟悉的东西,mount会尝试   读取文件/ etc / filesystems,如果不存在,   /proc/filesystems