本文目录导读:

在Shell脚本中自动挂载NFS共享,通常有以下几种方法:
使用mount命令直接挂载
#!/bin/bash
# NFS服务器和共享路径
NFS_SERVER="192.168.1.100"
NFS_SHARE="/data/shared"
MOUNT_POINT="/mnt/nfs_share"
# 创建挂载点(如果不存在)
mkdir -p $MOUNT_POINT
# 挂载NFS共享
mount -t nfs $NFS_SERVER:$NFS_SHARE $MOUNT_POINT
# 检查挂载是否成功
if mountpoint -q $MOUNT_POINT; then
echo "NFS共享已成功挂载到 $MOUNT_POINT"
else
echo "挂载失败"
exit 1
fi
使用自动挂载(autofs)
安装autofs
# Ubuntu/Debian apt-get install autofs # CentOS/RHEL yum install autofs
配置主配置文件 /etc/auto.master
/mnt/nfs /etc/auto.nfs --timeout=60
创建NFS映射文件 /etc/auto.nfs
share1 -rw,hard,intr 192.168.1.100:/data/shared1
share2 -rw,soft,bg 192.168.1.100:/data/shared2
启动autofs服务
systemctl restart autofs systemctl enable autofs
使用/etc/fstab实现自动挂载
修改/etc/fstab文件
168.1.100:/data/shared /mnt/nfs_share nfs defaults,_netdev 0 0
添加挂载选项说明
_netdev: 网络设备,在网络可用后才挂载hard: 硬挂载,持续重试直到成功soft: 软挂载,超时后返回错误intr: 允许中断挂起的操作rw: 读写权限noatime: 不更新访问时间,提升性能
测试fstab配置
# 测试挂载 mount -a # 检查是否成功 df -h | grep nfs
完善的NFS挂载脚本示例
#!/bin/bash
# 配置变量
NFS_SERVER="192.168.1.100"
NFS_SHARE="/data/shared"
MOUNT_POINT="/mnt/nfs_share"
MOUNT_OPTIONS="rw,hard,intr,noatime,vers=4"
# 日志函数
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# 检查NFS服务器是否可达
check_server() {
ping -c 1 -W 2 $NFS_SERVER > /dev/null 2>&1
if [ $? -ne 0 ]; then
log_message "错误: NFS服务器 $NFS_SERVER 不可达"
return 1
fi
return 0
}
# 检查挂载点
check_mount_point() {
if [ ! -d "$MOUNT_POINT" ]; then
log_message "创建挂载点: $MOUNT_POINT"
mkdir -p $MOUNT_POINT
fi
}
# 检查是否已挂载
is_mounted() {
mountpoint -q $MOUNT_POINT
return $?
}
# 挂载NFS共享
mount_nfs() {
log_message "尝试挂载 NFS: $NFS_SERVER:$NFS_SHARE -> $MOUNT_POINT"
# 如果已经挂载,先卸载
if is_mounted; then
log_message "卸载现有挂载: $MOUNT_POINT"
umount -f $MOUNT_POINT
sleep 1
fi
# 挂载NFS
mount -t nfs -o $MOUNT_OPTIONS $NFS_SERVER:$NFS_SHARE $MOUNT_POINT
if [ $? -eq 0 ]; then
log_message "成功: NFS已挂载到 $MOUNT_POINT"
return 0
else
log_message "失败: 挂载出错"
return 1
fi
}
# 主函数
main() {
# 检查是否以root运行
if [ "$(id -u)" != "0" ]; then
log_message "错误: 此脚本需要root权限"
exit 1
fi
# 检查NFS服务器
if ! check_server; then
exit 1
fi
# 检查挂载点
check_mount_point
# 执行挂载
if mount_nfs; then
# 显示挂载结果
df -h | grep $MOUNT_POINT
# 测试文件读写
if touch $MOUNT_POINT/test_write && rm $MOUNT_POINT/test_write; then
log_message "读写测试通过"
else
log_message "警告: 读写测试失败"
fi
fi
}
# 执行主函数
main
添加服务检查和重试机制
#!/bin/bash
# 带重试的NFS挂载脚本
NFS_SERVER="192.168.1.100"
MOUNT_POINT="/mnt/nfs_share"
MAX_RETRIES=3
RETRY_INTERVAL=5
# 检查服务是否运行
check_nfs_service() {
service nfs-common status > /dev/null 2>&1
if [ $? -ne 0 ]; then
service nfs-common start
sleep 2
fi
}
# 重试挂载
mount_with_retry() {
local retry=0
while [ $retry -lt $MAX_RETRIES ]; do
if mount -t nfs $NFS_SERVER:$NFS_SHARE $MOUNT_POINT; then
echo "挂载成功"
return 0
fi
retry=$((retry + 1))
if [ $retry -lt $MAX_RETRIES ]; then
echo "挂载失败,${RETRY_INTERVAL}秒后重试 (第${retry}次)"
sleep $RETRY_INTERVAL
fi
done
echo "挂载失败,已达最大重试次数"
return 1
}
# 主执行
check_nfs_service
mount_with_retry
使用建议
- 生产环境:推荐使用autofs或/etc/fstab方式
- 临时挂载:使用mount命令直接挂载
- 容错要求高:添加重试机制和错误检查
- 网络不稳定:使用硬挂载(hard)配合intr选项
- 性能优化:添加noatime, rsize, wsize等参数
选择哪种方式取决于你的具体需求和使用场景。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播