我有下面的简单代码,但由于参数无效而失败。我以 root 身份运行这个程序。并且挂载点确实存在。在“:/vol/share”中,IP是NFS服务器的IP地址,可以访问。
package main
import (
"fmt"
"syscall"
)
func nfsMount() {
// err := syscall.Mount("<IP>:/vol/share", "/mnt/export1", "nfs", 0x0, "")
err := err := syscall.Mount("IP:/vol/share", "/mnt/export1", "nfs", 0, "")
if err != nil {
fmt.Printf("error : %v\n", err.Error())
}
}
func main() {
nfsMount()
}
root@~#
root@~# nfsmount
error : invalid argument
root@~#
I have tried the similar program in C.
#include <stdio.h>
#include <sys/mount.h>
#include <errno.h>
void
nfsmount(void)
{
const char *src = "IP:/vol/share";
const char *target = "/mnt/export1";
const char *fsType = "nfs";
unsigned long mountFlags = 0;
const void *data = NULL;
int rc;
rc = mount(src, target, fsType, mountFlags, "");
if (rc != 0) {
printf("mount failed, rc = %d, errno=%d\n", rc, errno);
}
}
int
main(void)
{
nfsmount();
}
root@~# cc nfsmount.c -o nfsmountc
root@~#./nfsmountc
mount failed, rc = -1, errno=22
root@~#
在我看来,这个错误与data
(const void *data)`(最后一个挂载的参数)有关。
当我通过外壳进行安装时,它可以工作。
root@~# mount -t nfs IP:/vol/share /mnt/export1
root@~# echo $?
0
root@~# cat /proc/mounts | grep export1
IP:/vol/share /mnt/export1 nfs rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=IP,mountvers=3,mountport=4046,mountproto=udp,local_lock=none,addr=172.22.14.107 0 0
root@~#
经过进一步阅读,Linux 中的 NFS 挂载系统调用帮助了我。修复似乎:
err := syscall.Mount(":/vol/share", "/mnt/export1", "nfs", 0, "nolock,addr=NFSServer>")