Home > Software engineering >  How to convert the client based file path to the server based when we create symlink within NFS Driv
How to convert the client based file path to the server based when we create symlink within NFS Driv

Time:12-14

I am developing NFS Server modules(ProcedureSYMLINK) and met path conversion issue when creating symlink. After I run the NFS server service, I connected the server and mount as a drive on Linux Client. And run the below command to create symbolic link within NFS Drive using full path and debug it on server side. But the target file path is not given on server path based.

ln -s /mnt/nfs/1.bin /mnt/nfs/symlink/1.lnk

Let me give you an example to clarify my question.

The base directory path on NFS Server is /usr/nfs.

So I executed below command on the Server.

./nfs_server /usr/nfs

And I mounted the NFS on Ubuntu Client using the below command.

sudo mount -t nfs -o vers=3,proto=tcp,port=2049 192.168.1.37:/usr/nfs /mnt/nfs

After that, I created the symbolic link.

ln -s /mnt/nfs/1.bin /mnt/nfs/symlink/1.lnk

/mnt/nfs/1.bin : Target Path

/mnt/nfs/symlink/1.lnk : Symlink Path

Once I enter above command and tried to debug on the server side.

in the ProcedureSYMLINK function I could see the status of variables. I could safely get the Symlink Path which is based on Server, but the target path is not based on Server. Target path was still /mnt/nfs/1.bin

Actually, there is no way to get the mount base path of the NFS client (/mnt/nfs) on Server.. right? If I know the base path(/mnt/nfs), I can calculate the target file path on Server based, but I don't know the base path of the Client.

target file path may be /usr/nfs/1.bin. but no way to calculate the path like this. Does anyone know?

I am using NFS v3

CodePudding user response:

Two points which hopefully will help answer your questions:

  1. In NFS, symlinks are always resolved by the client. From the perspective of the NFS server, a symlink is just a special type of file but the content (as in, where the symlink points to) is just considered an opaque blob.
  2. The mountpoint on the client (/mnt/nfs in your example) is purely a client-side matter, there is no provision in the NFS protocol for letting the server know it.
  • Related