本文目录导读:

是的,脚本可以自动挂载NFS共享,以下是几种常见的方法和示例脚本:
基本的Shell脚本挂载
#!/bin/bash
# NFS服务器信息
NFS_SERVER="192.168.1.100"
NFS_SHARE="/shared/data"
MOUNT_POINT="/mnt/nfs_share"
# 检查挂载点是否存在,不存在则创建
if [ ! -d "$MOUNT_POINT" ]; then
mkdir -p "$MOUNT_POINT"
fi
# 检查是否已挂载
if mount | grep -q "$MOUNT_POINT"; then
echo "NFS共享已挂载"
else
# 挂载NFS共享
mount -t nfs "$NFS_SERVER:$NFS_SHARE" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "NFS共享挂载成功"
else
echo "NFS共享挂载失败"
exit 1
fi
fi
更完善的脚本(带参数和错误处理)
#!/bin/bash
# 使用方法函数
usage() {
echo "用法: $0 -s <NFS服务器> -d <共享目录> -m <挂载点> [-o <挂载选项>]"
exit 1
}
# 默认值
MOUNT_OPTIONS="rw,hard,intr,timeo=30"
# 解析参数
while getopts "s:d:m:o:" opt; do
case $opt in
s) NFS_SERVER="$OPTARG" ;;
d) NFS_SHARE="$OPTARG" ;;
m) MOUNT_POINT="$OPTARG" ;;
o) MOUNT_OPTIONS="$OPTARG" ;;
*) usage ;;
esac
done
# 检查必要参数
if [ -z "$NFS_SERVER" ] || [ -z "$NFS_SHARE" ] || [ -z "$MOUNT_POINT" ]; then
usage
fi
# 创建挂载点
if [ ! -d "$MOUNT_POINT" ]; then
mkdir -p "$MOUNT_POINT" || { echo "创建挂载点失败"; exit 1; }
fi
# 检查NFS服务器是否可达
ping -c 1 "$NFS_SERVER" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "NFS服务器 $NFS_SERVER 不可达"
exit 1
fi
# 检查NFS服务是否运行
showmount -e "$NFS_SERVER" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "NFS服务未在服务器上运行"
exit 1
fi
# 卸载如果已经挂载
if mount | grep -q "$MOUNT_POINT"; then
umount "$MOUNT_POINT" 2>/dev/null
fi
# 挂载NFS共享
mount -t nfs -o "$MOUNT_OPTIONS" "$NFS_SERVER:$NFS_SHARE" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "成功挂载 $NFS_SERVER:$NFS_SHARE 到 $MOUNT_POINT"
echo "挂载选项: $MOUNT_OPTIONS"
else
echo "挂载失败"
exit 1
fi
自动挂载所有fstab中的NFS
#!/bin/bash
# 挂载所有fstab中定义的NFS共享
mount -a -t nfs
# 检查挂载状态
if [ $? -eq 0 ]; then
echo "所有NFS共享已挂载"
else
echo "部分NFS共享挂载失败"
fi
使用Python脚本
#!/usr/bin/env python3
import os
import subprocess
import sys
def mount_nfs(server, share, mount_point, options="rw,hard,intr"):
"""挂载NFS共享"""
try:
# 创建挂载点
if not os.path.exists(mount_point):
os.makedirs(mount_point)
# 构建挂载命令
cmd = f"mount -t nfs -o {options} {server}:{share} {mount_point}"
# 执行挂载
result = subprocess.run(cmd.split(), capture_output=True, text=True)
if result.returncode == 0:
print(f"成功挂载 {server}:{share} 到 {mount_point}")
return True
else:
print(f"挂载失败: {result.stderr}")
return False
except Exception as e:
print(f"错误: {e}")
return False
if __name__ == "__main__":
# 示例用法
if mount_nfs("192.168.1.100", "/shared/data", "/mnt/nfs"):
print("挂载成功")
else:
sys.exit(1)
使用expect自动处理密码(如果有)
#!/usr/bin/expect -f
# 如果NFS需要认证(通常不需要)
set timeout 30
set server "192.168.1.100"
set share "/shared/data"
set mount_point "/mnt/nfs"
spawn mount -t nfs $server:$share $mount_point
expect {
"Password:" { send "your_password\r"; exp_continue }
timeout { puts "挂载超时"; exit 1 }
eof { puts "挂载完成" }
}
添加到启动脚本
添加到rc.local
# 编辑 /etc/rc.local # 在 exit 0 之前添加: mount -t nfs 192.168.1.100:/shared/data /mnt/nfs_share
使用systemd服务
创建 /etc/systemd/system/mount-nfs.service:
[Unit] Description=Mount NFS Share After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/bin/mount -t nfs 192.168.1.100:/shared/data /mnt/nfs_share RemainAfterExit=true ExecStop=/usr/bin/umount /mnt/nfs_share StandardOutput=journal [Install] WantedBy=multi-user.target
然后启用服务:
sudo systemctl enable mount-nfs.service sudo systemctl start mount-nfs.service
使用建议
-
安全性考虑:
- 不要在脚本中硬编码密码
- 使用SSH密钥认证,而不是密码
- 限制脚本的访问权限
chmod 700 script.sh
-
最佳实践:
- 使用
-o hard,intr选项提供更好的错误处理 - 添加重试逻辑
- 记录日志
- 在/etc/fstab中配置自动挂载(最简单)
- 使用
-
故障排除:
- 检查
showmount -e <server>确认共享可用 - 检查防火墙规则
- 查看日志
tail -f /var/log/messages
- 检查
选择哪种方法取决于你的具体需求:简单场景用fstab,需要复杂逻辑用shell脚本,需要更多功能用Python。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播