[pve-devel] [PATCH storage] fix: check connection for nfs v4 only server

Alwin Antreich a.antreich at proxmox.com
Wed Dec 16 15:00:36 CET 2020


On Wed, Dec 16, 2020 at 12:59:04PM +0100, Alwin Antreich wrote:
> the check_connection is done by querying the exports of the nfs server
> in question. With nfs v4 those exports aren't listed anymore since nfs
> v4 employs a pseudo-filesystem starting from root (/).
> 
> rpcinfo allows to query the existence of an nfs v4 service.
> 
> Signed-off-by: Alwin Antreich <a.antreich at proxmox.com>
> ---
> Note: scan_nfs will not work with nfs v4 only, since it also employs
>       showmount. The path has to be provided manually.
> 
>  PVE/Storage/NFSPlugin.pm | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/PVE/Storage/NFSPlugin.pm b/PVE/Storage/NFSPlugin.pm
> index e8e27c0..72e06c2 100644
> --- a/PVE/Storage/NFSPlugin.pm
> +++ b/PVE/Storage/NFSPlugin.pm
> @@ -160,8 +160,16 @@ sub check_connection {
>      my ($class, $storeid, $scfg) = @_;
>  
>      my $server = $scfg->{server};
> -
> -    my $cmd = ['/sbin/showmount', '--no-headers', '--exports', $server];
> +    my $opts = $scfg->{options};
> +
> +    my $cmd;
> +    if (defined($opts) && $opts =~ /vers=4.*/) {
> +	# nfsv4 uses a pseudo-filesystem always beginning with /
> +	# no exports are listed
> +	$cmd = ['/usr/sbin/rpcinfo', '-t', $server, 'nfs', '4'];
> +    } else {
> +	$cmd = ['/sbin/showmount', '--no-headers', '--exports', $server];
> +    }
>  
>      eval { run_command($cmd, timeout => 10, outfunc => sub {}, errfunc => sub {}) };
>      if (my $err = $@) {
> -- 
> 2.27.0
> 
In addition, the rpcbind service needs to run. Otherwise there is no
easy way to do the connection check.

See the troubleshooting on the forum.
https://forum.proxmox.com/threads/unable-to-mount-nfs-storage.80694/#post-357062

--
Cheers,
Alwin





More information about the pve-devel mailing list