2020-10-23 10:15:16

by Vasyl Vavrychuk

[permalink] [raw]
Subject: Hard linking symlink does not work

Hi,

I have found that hard links for regular files works well for me over NFS:

$ touch bar
$ ln bar tata

But if I try to make hard link for symlink, then it fails:

$ ln -s foo bar
$ ln bar tata
ln: failed to create hard link 'tata' => 'bar': Operation not permitted

I am using NFSv4 with Vagrant, here is mount entry:

172.28.128.1:PATH on /vagrant type nfs4
(rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=IP,local_lock=none,addr=IP)

I have also verified that rpc-statd is running on host.

Host machine is Ubuntu 18.04 with NFS packages version 1:1.3.4-2.1ubuntu5.3.

Will appreciate help on this.

Thanks,
Vasyl


2020-10-27 17:44:55

by J. Bruce Fields

[permalink] [raw]
Subject: Re: Hard linking symlink does not work

On Fri, Oct 23, 2020 at 01:13:02PM +0300, Vasyl Vavrychuk wrote:
> I have found that hard links for regular files works well for me over NFS:
>
> $ touch bar
> $ ln bar tata
>
> But if I try to make hard link for symlink, then it fails:
>
> $ ln -s foo bar
> $ ln bar tata
> ln: failed to create hard link 'tata' => 'bar': Operation not permitted

Huh. I'm not sure I even realized it was possible to hardlink symlinks.
Makes sense, I guess.

I think my first step debugging this would be to watch wireshark while
attempting the "ln", and see what happens. That should tell us whether
it's the client or server that's failing the operation.

--b.

>
> I am using NFSv4 with Vagrant, here is mount entry:
>
> 172.28.128.1:PATH on /vagrant type nfs4
> (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=IP,local_lock=none,addr=IP)
>
> I have also verified that rpc-statd is running on host.
>
> Host machine is Ubuntu 18.04 with NFS packages version 1:1.3.4-2.1ubuntu5.3.
>
> Will appreciate help on this.
>
> Thanks,
> Vasyl

2020-10-28 21:11:49

by Patrick Goetz

[permalink] [raw]
Subject: Re: Hard linking symlink does not work



On 10/27/20 12:12 PM, J. Bruce Fields wrote:
> On Fri, Oct 23, 2020 at 01:13:02PM +0300, Vasyl Vavrychuk wrote:
>> I have found that hard links for regular files works well for me over NFS:
>>
>> $ touch bar
>> $ ln bar tata
>>
>> But if I try to make hard link for symlink, then it fails:
>>
>> $ ln -s foo bar
>> $ ln bar tata
>> ln: failed to create hard link 'tata' => 'bar': Operation not permitted
>
> Huh. I'm not sure I even realized it was possible to hardlink symlinks.
> Makes sense, I guess.

What's even the use case for hard linking a symlink? That sounds like
asking for trouble...


>
> I think my first step debugging this would be to watch wireshark while
> attempting the "ln", and see what happens. That should tell us whether
> it's the client or server that's failing the operation.
>
> --b.
>
>>
>> I am using NFSv4 with Vagrant, here is mount entry:
>>
>> 172.28.128.1:PATH on /vagrant type nfs4
>> (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=IP,local_lock=none,addr=IP)
>>
>> I have also verified that rpc-statd is running on host.
>>
>> Host machine is Ubuntu 18.04 with NFS packages version 1:1.3.4-2.1ubuntu5.3.
>>
>> Will appreciate help on this.
>>
>> Thanks,
>> Vasyl

2020-10-28 23:24:26

by Vasyl Vavrychuk

[permalink] [raw]
Subject: Re: Hard linking symlink does not work

Thanks for replies about my problem. It is actually a practical one...

I need to compile Yocto BSP which builds only under older
distributions. For convenience I have established a Vagrant virtual
machine which uses NFS to share workspace with the host machine.

Now coming back to hardlinking symlinks.

Yocto build system uses hardlinks to prepare sysroot for packages, and
symlinks are part of that sysroot provided by other packages.

On Tue, Oct 27, 2020 at 10:03 PM Patrick Goetz <[email protected]> wrote:
>
>
>
> On 10/27/20 12:12 PM, J. Bruce Fields wrote:
> > On Fri, Oct 23, 2020 at 01:13:02PM +0300, Vasyl Vavrychuk wrote:
> >> I have found that hard links for regular files works well for me over NFS:
> >>
> >> $ touch bar
> >> $ ln bar tata
> >>
> >> But if I try to make hard link for symlink, then it fails:
> >>
> >> $ ln -s foo bar
> >> $ ln bar tata
> >> ln: failed to create hard link 'tata' => 'bar': Operation not permitted
> >
> > Huh. I'm not sure I even realized it was possible to hardlink symlinks.
> > Makes sense, I guess.
>
> What's even the use case for hard linking a symlink? That sounds like
> asking for trouble...
>
>
> >
> > I think my first step debugging this would be to watch wireshark while
> > attempting the "ln", and see what happens. That should tell us whether
> > it's the client or server that's failing the operation.
> >
> > --b.
> >
> >>
> >> I am using NFSv4 with Vagrant, here is mount entry:
> >>
> >> 172.28.128.1:PATH on /vagrant type nfs4
> >> (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=IP,local_lock=none,addr=IP)
> >>
> >> I have also verified that rpc-statd is running on host.
> >>
> >> Host machine is Ubuntu 18.04 with NFS packages version 1:1.3.4-2.1ubuntu5.3.
> >>
> >> Will appreciate help on this.
> >>
> >> Thanks,
> >> Vasyl

2020-11-06 21:47:36

by J. Bruce Fields

[permalink] [raw]
Subject: Re: Hard linking symlink does not work

On Wed, Oct 28, 2020 at 10:53:20AM +0200, Vasyl Vavrychuk wrote:
> Thanks for replies about my problem. It is actually a practical one...
>
> I need to compile Yocto BSP which builds only under older
> distributions. For convenience I have established a Vagrant virtual
> machine which uses NFS to share workspace with the host machine.
>
> Now coming back to hardlinking symlinks.
>
> Yocto build system uses hardlinks to prepare sysroot for packages, and
> symlinks are part of that sysroot provided by other packages.

For what it's worth, I can't reproduce the problem, linking a symlink
works fine for me.

What's your server? (OS, version, exported filesystem?)

--b.

>
> On Tue, Oct 27, 2020 at 10:03 PM Patrick Goetz <[email protected]> wrote:
> >
> >
> >
> > On 10/27/20 12:12 PM, J. Bruce Fields wrote:
> > > On Fri, Oct 23, 2020 at 01:13:02PM +0300, Vasyl Vavrychuk wrote:
> > >> I have found that hard links for regular files works well for me over NFS:
> > >>
> > >> $ touch bar
> > >> $ ln bar tata
> > >>
> > >> But if I try to make hard link for symlink, then it fails:
> > >>
> > >> $ ln -s foo bar
> > >> $ ln bar tata
> > >> ln: failed to create hard link 'tata' => 'bar': Operation not permitted
> > >
> > > Huh. I'm not sure I even realized it was possible to hardlink symlinks.
> > > Makes sense, I guess.
> >
> > What's even the use case for hard linking a symlink? That sounds like
> > asking for trouble...
> >
> >
> > >
> > > I think my first step debugging this would be to watch wireshark while
> > > attempting the "ln", and see what happens. That should tell us whether
> > > it's the client or server that's failing the operation.
> > >
> > > --b.
> > >
> > >>
> > >> I am using NFSv4 with Vagrant, here is mount entry:
> > >>
> > >> 172.28.128.1:PATH on /vagrant type nfs4
> > >> (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=IP,local_lock=none,addr=IP)
> > >>
> > >> I have also verified that rpc-statd is running on host.
> > >>
> > >> Host machine is Ubuntu 18.04 with NFS packages version 1:1.3.4-2.1ubuntu5.3.
> > >>
> > >> Will appreciate help on this.
> > >>
> > >> Thanks,
> > >> Vasyl