Add a command that disables a pNFS server mirrored DS.

This command can be used by a sysadmin to disable a malfunctioning pNFS server
mirrored DS. It is safe to use when a mirrored DS has already been disabled
via an I/O or network partitioning error.
This commit is contained in:
Rick Macklem 2018-06-15 11:52:34 +00:00
parent cfba8dec89
commit b3cd498b58
3 changed files with 146 additions and 0 deletions

View File

@ -0,0 +1,6 @@
# $FreeBSD$
PROG= pnfsdskill
MAN= pnfsdskill.8
.include <bsd.prog.mk>

View File

@ -0,0 +1,64 @@
.\" Copyright (c) 2018 Rick Macklem
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd March 9, 2018
.Dt PNFSDSKILL 8
.Os
.Sh NAME
.Nm pnfsdskill
.Nd
disables a pNFS data storage server (DS)
.Sh SYNOPSIS
.Nm
.Ar mounted-on-DS-dir
.Sh DESCRIPTION
The
.Nm
command disables one DS when mirroring is enabled.
If one mirrored DS is malfunctioning, a system administrator
may use this command on the metadata server (MDS) to disable use of this mirror.
This command must be used on the MDS and the
.Ar mounted-on-DS-dir
must be the exact pathname used when mounting the DS on the MDS.
.Pp
If this command fails with
.Dq Device not configured
(ENXIO), it probably
means that the DS has already been disabled due to an error either detected
by the MDS or reported to the MDS by a client.
.Pp
The pNFS service should continue to run normally so long as the number of
operational DSs is at least as many as the level of mirroring.
.El
.Sh SEE ALSO
.Xr nfsv4 4 ,
.Xr pnfs 4 ,
.Xr nfsd 8 ,
.Xr pnfsdscopymr 8 ,
.Xr pnfsdsfile 8
.Sh HISTORY
The
.Nm
command appeared in FreeBSD12.

View File

@ -0,0 +1,76 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2017 Rick Macklem
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <nfs/nfssvc.h>
#include <fs/nfs/nfsproto.h>
#include <fs/nfs/nfskpiport.h>
#include <fs/nfs/nfs.h>
static void usage(void);
/*
* This program disables use of a DS mirror. The "dspath" command line
* argument must be an exact match for the mounted-on path of the DS.
* It should be done before any forced dismount is performed on the path
* and should work even when the mount point is hung.
*/
int
main(int argc, char *argv[])
{
struct nfsd_pnfsd_args pnfsdarg;
if (argc != 2)
usage();
if (geteuid() != 0)
errx(1, "Must be run as root/su");
pnfsdarg.op = PNFSDOP_DELDSSERVER;
pnfsdarg.dspath = argv[1];
if (nfssvc(NFSSVC_PNFSDS, &pnfsdarg) < 0)
err(1, "Can't kill %s", argv[1]);
}
static void
usage(void)
{
fprintf(stderr, "pnfsdsfile [filepath]\n");
exit(1);
}