| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 1 | pNFS block layout server user guide | 
|  | 2 |  | 
|  | 3 | The Linux NFS server now supports the pNFS block layout extension.  In this | 
|  | 4 | case the NFS server acts as Metadata Server (MDS) for pNFS, which in addition | 
|  | 5 | to handling all the metadata access to the NFS export also hands out layouts | 
|  | 6 | to the clients to directly access the underlying block devices that are | 
|  | 7 | shared with the client. | 
|  | 8 |  | 
|  | 9 | To use pNFS block layouts with with the Linux NFS server the exported file | 
|  | 10 | system needs to support the pNFS block layouts (currently just XFS), and the | 
|  | 11 | file system must sit on shared storage (typically iSCSI) that is accessible | 
|  | 12 | to the clients in addition to the MDS.  As of now the file system needs to | 
|  | 13 | sit directly on the exported volume, striping or concatenation of | 
|  | 14 | volumes on the MDS and clients is not supported yet. | 
|  | 15 |  | 
|  | 16 | On the server, pNFS block volume support is automatically if the file system | 
|  | 17 | support it.  On the client make sure the kernel has the CONFIG_PNFS_BLOCK | 
|  | 18 | option enabled, the blkmapd daemon from nfs-utils is running, and the | 
|  | 19 | file system is mounted using the NFSv4.1 protocol version (mount -o vers=4.1). | 
|  | 20 |  | 
|  | 21 | If the nfsd server needs to fence a non-responding client it calls | 
|  | 22 | /sbin/nfsd-recall-failed with the first argument set to the IP address of | 
|  | 23 | the client, and the second argument set to the device node without the /dev | 
|  | 24 | prefix for the file system to be fenced. Below is an example file that shows | 
|  | 25 | how to translate the device into a serial number from SCSI EVPD 0x80: | 
|  | 26 |  | 
|  | 27 | cat > /sbin/nfsd-recall-failed << EOF | 
|  | 28 | #!/bin/sh | 
|  | 29 |  | 
|  | 30 | CLIENT="$1" | 
|  | 31 | DEV="/dev/$2" | 
|  | 32 | EVPD=`sg_inq --page=0x80 ${DEV} | \ | 
|  | 33 | grep "Unit serial number:" | \ | 
|  | 34 | awk -F ': ' '{print $2}'` | 
|  | 35 |  | 
|  | 36 | echo "fencing client ${CLIENT} serial ${EVPD}" >> /var/log/pnfsd-fence.log | 
|  | 37 | EOF |