首先在centos上设置配置文件
[data]
serverpath=/tmp/nfsshare
network=192.168.31.0/24
power=rw
设置共享路径,
运行访问的网络 可网段,可IP,中间用空格分开
设置权限 rw读写,ro只读
shell脚本
yum -y install nfs*
(rpm -qa |grep -E 'nfs|rpcbind')&&echo 安装或更新成功!||echo 安装或更新失败!
#读取配置文件
if [ ! -e ./nfsset.ini ];then
echo 配置文件丢失!
exit
fi
i=0
cat ./nfsset.ini|grep -E 'serverpath|network|power'|awk -F '=' '{print $2}' >/tmp/tmpset.ini
while read line
do
array[$i]=$line
let i++
done < /tmp/tmpset.ini #使用管道符 | 的方法相当于启动了一个独立的子进程,无法访问内部变量
echo "${array[0]}
${array[1]}
${array[2]}"
findstr=`echo ${array[0]}|awk 'BEGIN{FS="/"}''{print $2}'`
echo $findstr
if [[ -d ${array[0]} ]];then
echo nfs共享目录${array[0]}
else
mkdir ${array[0]}
fi
chmod -R 777 ${array[0]}
ls -ali ${array[0]}
if [[ -e /etc/exports ]];then
chmod -R 777 /etc/exports
echo 未修改前权限设置
sed -n "/.*${findstr}.*/p" /etc/exports
sed -i "/.*${findstr}.*/d" /etc/exports
echo "${array[0]} ${array[1]}(fsid=0,insecure,${array[2]},no_root_squash,no_all_squash,sync)" >> /etc/exports
else
echo "${array[0]} ${array[1]}(fsid=0,insecure,${array[2]},no_root_squash,no_all_squash,sync)" > /etc/exports
fi
echo 修改后权限设置
cat /etc/exports
systemctl restart nfs
systemctl restart rpcbind
systemctl enable nfs
systemctl enable rpcbind
systemctl list-units --type=service|grep -i -E "nfs|rpcbind"|awk '{if($4=="running"&&$3=="active"){print $1",服务启动成功"}else{print $1",服务启动失败,请检查"}}'
showmount -e localhost&&echo nfs共享成功||echo nfs共享失败
exportfs -rv
#防火墙设置
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --reload
systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
grep SELINUX=disabled /etc/selinux/config
setenforce 0
echo "enforce `getenforce`"
windows客户端访问配置文件
<?xml version="1.0" encoding="utf-8"?>
<set>
<server ip="192.168.31.218" path="/tmp/nfsshare" >服务器IP与路径</server>
<disk map="M:">映射盘符</disk>
</set>
自动安装客户端和访问脚本如下
cls
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName Microsoft.VisualBasic
$Currentpath=Split-Path -parent $MyInvocation.MyCommand.Definition #获取脚本目录
[xml]$xml=Get-Content "$Currentpath\nfsforwin.xml"
if ($PSVersionTable["PSVersion"].Major -lt 3){
$nfs=Get-WindowsFeature -Name NFS-Client|?{$_.Installed -eq $true}
if ($nfs -eq $null){
Write-Host "正在安装nfs客户端,请稍后...." -ForegroundColor Green
Install-WindowsFeature NFS-Client
return
}
}
else {
if(!(Test-Path "$env:windir\System32\mount.exe")){Write-Host "请先从windows控制面板安装程序里手动安装NFS客户端" -ForegroundColor Red;return }
}
umount -a -f
showmount -e $xml.set.server.ip
& cmd "/c mount $($xml.set.server.ip):$($xml.set.server.path) $($xml.set.disk.map)"
Set-ItemProperty -path HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default -Name AnonymousUid -Value 0 -Force
Set-ItemProperty -path HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default -Name AnonymousGid -Value 0 -Force
效果如下
linux下访问nfs,就更简单些 直接执行命令?
------------------------------------------------------------------------------- [root@CentOS ~]# mount -t nfs -o rw,bg,retry=1? 192.168.31.0/24:/media? /media -------------------------------------------------------------------------------
卸载NFS文件系统 与卸载普通的本地文件系统一样,可以通过umount命令把它卸载,终止与NFS服务器的连接。但在卸载前,应该确保已经没有任何进程在使用该文件系统。用户可以通过fuser命令进行检查。 卸载NFS文件系统的命令格式如下所示: [root@CentOS ~]# umount [远程文件系统或挂载点]
卸载上面例子挂载的NFS文件系统的方法: [root@CentOS ~]# umount /media? 或
[root@CentOS ~]# umount 192.168.31.0/24:/media
8、fuser命令简单用法 linux环境下,当使用umount命令卸载挂载点时,会遇到“device is busy”提示,这时fuser就能查出谁在使用这个资源;当然umount –lf? [挂载点] 也可以强制卸载
运行下面命令看一下哪个用户哪个进程占用着此目录,假设挂载的目录为/media [root@CentOS ~]# fuser -mvu /media
运行下面命令杀掉占用此目录的进程 [root@CentOS ~]# fuser -mvk /media 或者fuser -mvki? /media(每杀掉一下进程会让你确认)
选项说明 -m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。 -u 在每个PID后面添加进程拥有者的用户名称 -v 详细模式 -k 杀掉访问文件的进程 -i 杀掉进程之前询问用户,如果没有-k这个选项会被忽略
|