linux远程挂载(NFS)

关于NFS参数说明——在文件服务器上(16)/etc/exports中配置10.X.X.X(fsid=2,rw,sync,no_root_squash) 


rw 可读写的权限 

ro 只读的权限 
no_root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权 
               限,这个参数『极不安全』,不建议使用

root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)
             的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份

all_squash 不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
anonuid 可以自行设定这个UID的值,这个UID必需要存在于你的/etc/passwd当中
anongid 同anonuid,但是变成groupID就是了 
sync 资料同步写入到内存与硬盘当中 
async 资料会先暂存于内存当中,而非直接写入硬盘 
insecure 允许从这台机器过来的非授权访问

/etc/exports 部分实例
1./tmp *(rw,no_root_squash) //*号表示所有的IP都可以访问

2./tmp *(rw)

   /home/public 192.168.0.*(rw) *(ro) //下面两行作用一样

   /home/public 192.168.0.0/24(rw) *(ro)

3./home/test 192.168.0.100(rw) //只对某部机器设置权限

4./home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)当*.linux.org 登陆此NFS主机,并且在/home/linux下面写入文件时,该文件的所有人与所有组,就会变 
 成/etc/passwd里面对应的UID为40的那个身份的使用者了。

注意:修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可
exportfs[-aruv] 
参数 含义 
a 全部挂载(或卸载)/etc/exports档案内的设定 
r 重新挂载/etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容 
u 卸载某一目录 
v 在export的时候,将分享的目录显示到荧屏上 
#exportfs -rv//重新export一次 
#exportfs -au//全部卸载 
举例
node1:~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.6G  2.4G  7.2G  25% /
tmpfs                 126M  8.0K  126M   1% /dev/shm
172.16.12.89:/home/test
                      9.6G  2.4G  7.2G  26% /home/nfs
node2:~ # exportfs -av
exporting *:/home/test
node1:~ # umount /home/nfs/
node1:~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.6G  2.4G  7.2G  25% /
tmpfs                 126M  8.0K  126M   1% /dev/shm

showmount命令 
语法:showmount [-aed] [hostname] 
-a:显示目前以及连上主机的client机器的使用目录的状态 
-e:显示hostname的/etc/exports里面共享的目录 
-d:只显示被client机器挂载的目录

NFS故障解决 
1、can't contactportmapper: RPC:Remotesystem error-Connection refused: 
   出现这个错误信息是由于SEVER端的PORTMAP没有启动。

2、mountclntudp_create: RPC: Programnotregistered:NFS没有启动起来,可以 
   用showmout-ehost命令来检查NFSSERVER是否正常启动起来。

3、mount: localhost:/home/test failed, reason given by server: Permission denied:
   这个提示是当client要mountnfsserver时可能出现的提示,意思是说本机没有权限去mount nfsserver上的目录。解决方法当然是去修改NFSSERVER咯。

4、被防火墙搞掉 
   这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先 
   要检测是否打开了这个端口,另外也要检查TCP_Wrappers的设定。

   重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所以端口111必须提供出去.因此在iptablesrules中,要增加: 
   iptables-AINPUT-pTCP --dport111-jACCEPT 
   iptables-AINPUT-pUDP --dport111-jACCEPT 
   如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是: 
   ALL:ALL: deny 
   那就必须在/etc/hosts.allow中增加: 
   portmap:ALL:allow

注意:由于NFS使用的这个RPC在client端连上主机时,那么你的主机想要关机,那可就会成为『不可能的任务』。即如果你的Server上面还有Client在联机,那么你要关机,可能 
      得要等到数个钟头才能够正常的关机成功!所以,建议在NFSServer要关机之前,要先『关掉portmap与nfs』这两个东西。如果无法正确的将这两个daemons关掉,那么先以    
      netstat -utlp找出PID,然后kill掉。

NFS客户端设置
为了担心会不小心将NFS端挂进来的具有SUID权限档案的程序执行,root可以将NFS所分享的目录以较为安全的情况挂载进来,可以 
#mount-t nfs -o nosuid,ro hostname:/directory/mountponit

mountnfs的其它可选参数:
HARD:在后台,NFSCLIENT会不断的尝试与SERVER的连接,直到mount上
SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。 
例如:mount-F nfs -o hard192.168.0.10:/nfs /nfs

timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输
intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000minutes 
同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp/nfs

注意:NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝 
     试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。

<think>我们正在处理一个关于在Linux系统中挂载NFS远程目录用于数据库备份的问题。 根据提供的引用,特别是引用[1]和引用[2],我们可以获得一些配置NFS挂载的指导。 引用[1]提供了关于NFS挂载的一些建议,包括硬挂载(hard)与软挂载(soft)的解释,以及一些最佳实践。 引用[2]则提供了一个实际的NFS远程备份的例子,其中包含了具体的命令和步骤。 我们的目标是为用户提供一个清晰的步骤指南,以挂载NFS目录用于数据库备份。 步骤概述: 1. 在NFS服务器上安装和配置NFS服务,并导出共享目录。 2. 在客户端(数据库服务器)上安装NFS客户端工具。 3. 在客户端上创建挂载点目录。 4. 使用mount命令挂载NFS共享目录到本地挂载点。 5. 验证挂载并配置自动挂载(可选)。 6. 进行数据库备份到挂载NFS目录。 注意:在数据库备份场景中,通常建议使用硬挂载(hard)以确保数据完整性,尽管这可能导致在NFS服务器故障时客户端进程挂起。 具体步骤: 步骤1:在NFS服务器上配置共享目录(假设NFS服务器已经设置好) - 确保NFS服务已安装并运行(如nfs-utils和rpcbind)。 - 编辑`/etc/exports`文件,添加共享目录和允许访问的客户端IP范围及选项。 例如:`/data 192.168.0.0/24(rw,sync,no_root_squash)` - 重新加载exports配置:`exportfs -a` 或重启NFS服务。 步骤2:在客户端(数据库服务器)上安装NFS客户端软件 - 使用包管理器安装所需的软件,例如在基于RPM的系统(如CentOS)上: ```bash yum -y install nfs-utils ``` 步骤3:在客户端上创建挂载点目录 - 例如,创建一个目录`/mnt/backup`: ```bash mkdir -p /mnt/backup ``` 步骤4:挂载NFS共享目录 - 使用mount命令挂载,根据引用[2]中的例子,我们可以使用以下选项(针对Oracle数据库备份): ```bash mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0 <NFS服务器IP或主机名>:/data /mnt/backup ``` 选项解释: rw: 读写 bg: 后台重试(如果首次挂载失败,在后台继续尝试) hard: 硬挂载(确保数据完整性) nointr: 不允许用户中断 rsize和wsize: 读写块大小,设置为32768可以提高性能 tcp: 使用TCP协议 vers=3: NFS版本3(也可以根据服务器支持选择版本4) timeo=600: 超时时间(十分之一秒为单位,即60秒) actimeo=0: 禁止缓存属性(对于备份场景可能不需要,但根据引用[1]的建议,在数据库场景中可能需要调整属性缓存) 注意:根据引用[1]中的文档,对于Oracle数据库,通常建议使用硬挂载(hard)和nointr选项,以避免在NFS问题导致I/O错误时损坏数据库。 步骤5:验证挂载 - 使用`df -h`或`mount | grep nfs`查看挂载情况。 - 尝试在挂载点创建文件并删除,以测试读写权限。 步骤6:配置自动挂载(可选) - 编辑`/etc/fstab`文件,添加一行: ``` <NFS服务器IP或主机名>:/data /mnt/backup nfs rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0 0 0 ``` - 注意:在fstab中使用后台挂载(bg)是有用的,因为如果启动时网络未就绪,系统会在后台重试挂载。 步骤7:进行数据库备份 - 例如,使用RMAN备份到挂载点: ```bash rman target / RMAN> backup database format '/mnt/backup/%U.bkp'; ``` 注意事项: - 确保NFS服务器和客户端之间的网络连接稳定。 - 根据数据库的大小和网络带宽,备份可能需要较长时间。 - 在备份之前,确保挂载点有足够的空间。 - 权限问题:确保运行数据库的用户(如oracle)对挂载点有读写权限。可以通过在NFS服务器上设置共享目录的权限和所有权,并在挂载时使用适当的选项(如no_root_squash)来解决,但要注意安全风险。 引用[1]中特别提到了硬挂载和软挂载的区别:硬挂载服务器不可用时会导致客户端重试直到服务器恢复,而软挂载在超时后会返回错误。对于数据库备份,硬挂载是推荐的选择,以避免备份过程中因短暂的网络问题而失败。 根据引用[2]中的例子,我们采用了类似的挂载选项。 如果用户需要更详细的配置步骤(如NFS服务器的设置),我们可以进一步提供,但问题主要关注在客户端挂载用于备份,因此我们重点放在客户端操作。 生成相关问题: 1. 如何配置NFS服务器以共享目录? 2. 在挂载NFS时,硬挂载和软挂载有什么区别? 3. 如何确保NFS挂载在系统重启后自动挂载? 4. 在数据库备份中,使用NFS挂载有哪些性能优化建议? 5. 如何解决NFS挂载中的权限问题? 现在,我们按照用户要求的结构化方式回答。</think>### 在 Linux挂载 NFS 远程目录用于数据库备份 以下是详细的操作步骤(基于 Oracle 数据库场景最佳实践): #### 1. **NFS 服务器端配置** ```bash # 安装 NFS 服务 (以 CentOS 为例) yum -y install nfs-utils rpcbind # 创建共享目录并授权 mkdir /data chown oracle:oinstall /data # 确保与数据库用户权限一致 # 配置共享目录 (编辑 /etc/exports) echo "/data 192.168.0.0/24(rw,sync,no_root_squash)" >> /etc/exports # 启动服务 systemctl start rpcbind nfs-server systemctl enable rpcbind nfs-server # 验证共享 exportfs -v ``` #### 2. **客户端挂载 NFS 目录** ```bash # 创建本地挂载点 mkdir /mnt/backup # 挂载 NFS (关键参数说明见下文) mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0 station23:/data /mnt/backup ``` **关键挂载参数说明**[^1][^2]: - `hard`:确保 I/O 完整性(数据库备份必须) - `bg`:后台重试(避免系统启动卡死) - `nointr`:禁止用户中断 - `rsize/wsize=32768`:优化读写性能 - `tcp,vers=3`:使用 TCP 协议和 NFSv3 - `timeo=600`:超时设置(60 秒) #### 3. **验证挂载** ```bash # 查看挂载状态 df -hT | grep nfs mount | grep backup # 测试写入权限 su - oracle touch /mnt/backup/testfile ``` #### 4. **配置 fstab 自动挂载** ```bash # 在 /etc/fstab 添加 station23:/data /mnt/backup nfs rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0 0 0 # 测试自动挂载 umount /mnt/backup mount -a ``` #### 5. **执行数据库备份** ```bash # Oracle RMAN 备份示例 rman target / RMAN> BACKUP DATABASE FORMAT '/mnt/backup/%U.bkp'; ``` #### 6. **安全与权限配置** - 🔐 **权限控制**: ```bash # NFS 服务器端限制 IP 范围 /data 192.168.1.50(rw) 192.168.1.51(ro) # 客户端使用 anonuid/anongid 映射用户 -o anonuid=1001,anongid=1001 ``` - 🔄 **高可用建议**: - 使用 NAS 集群替代单点 NFS 服务器 - 结合 `keepalived` 实现 VIP 漂移[^4] #### 7. **故障排查命令** ```bash # 查看 NFS 共享列表 showmount -e <NFS_Server_IP> # 检查 RPC 服务状态 rpcinfo -p # 实时监控挂载点 mountstats /mnt/backup ``` ### 性能优化建议 1. **网络层**: - 使用专用备份网络(分离业务流量) - 启用 Jumbo frames(MTU=9000) 2. **存储层**[^3]: - NFS 服务器使用 SSD 缓存 - 设置 `no_wdelay` 提升写并发 3. **客户端**: ```bash # 调整预读取值 echo 32768 > /sys/class/bdi/0:$(stat -c "%d" /mnt/backup)/read_ahead_kb ``` > ⚠️ **关键警告**:避免使用 `soft` 挂载,可能导致数据库损坏;`intr` 选项在 Linux 2.6.25+ 后已弃用[^1]。 --- ### 相关问题 1. NFS挂载和软挂载对数据库备份有何影响? 2. 如何监控 NFS 挂载点的 I/O 性能? 3. 在 Kubernetes 中如何持久化挂载 NFS 卷? 4. NFSv4 相比 NFSv3 有哪些数据库场景优势? 5. 如何实现跨数据中心的 NFS 灾备方案? [^1]: [NFS-Filesystems: Hard vs Soft mounts Explained](https://support.oracle.com) [^2]: [Linux/NetApp: RHEL/SUSE Setup Recommendations](https://support.oracle.com) [^3]: [Oracle Database NFS Mount Point Recommendations](https://support.oracle.com) [^4]: [高可用 NFS 集群配置实践](http://blog.inthirties.com)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值