本文目录导读:

我来教你编写自动挂载网络存储(如 NFS、SMB/CIFS)的脚本。
NFS 自动挂载脚本
基础版本
#!/bin/bash
# NFS 自动挂载脚本
# 使用前请修改变量
# 配置参数
NFS_SERVER="192.168.1.100"
NFS_SHARE="/shared/path"
MOUNT_POINT="/mnt/nfs_share"
CRED_FILE="/etc/nfs_credentials"
# 检查是否为 root 用户
if [[ $EUID -ne 0 ]]; then
echo "此脚本需要 root 权限运行"
exit 1
fi
# 创建挂载点
mkdir -p $MOUNT_POINT
# 检查是否已挂载
if mount | grep -q "$MOUNT_POINT"; then
echo "目录 $MOUNT_POINT 已经挂载"
exit 0
fi
# 检测网络连通性
ping -c 2 $NFS_SERVER > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "无法连接到 NFS 服务器 $NFS_SERVER"
exit 1
fi
# 安装 nfs-common(如果未安装)
if ! command -v mount.nfs &> /dev/null; then
apt-get update && apt-get install -y nfs-common
# 对于 CentOS/RHEL: yum install -y nfs-utils
fi
# 挂载 NFS 共享
mount -t nfs -o vers=4,hard,intr,rsize=1048576,wsize=1048576 \
$NFS_SERVER:$NFS_SHARE $MOUNT_POINT
if [ $? -eq 0 ]; then
echo "NFS 挂载成功: $MOUNT_POINT"
else
echo "NFS 挂载失败"
exit 1
fi
SMB/CIFS 自动挂载脚本
支持密码文件
#!/bin/bash
# SMB/CIFS 自动挂载脚本
# 配置参数
SMB_SERVER="//192.168.1.100"
SMB_SHARE="/shared_folder"
MOUNT_POINT="/mnt/smb_share"
USERNAME="your_username"
PASSWORD="your_password"
DOMAIN="WORKGROUP" # 可选
# 检查 root 权限
if [[ $EUID -ne 0 ]]; then
echo "此脚本需要 root 权限运行"
exit 1
fi
# 创建凭据文件(提高安全性)
create_credentials() {
local cred_file="/etc/smb_credentials"
cat > $cred_file << EOF
username=$USERNAME
password=$PASSWORD
domain=$DOMAIN
EOF
chmod 600 $cred_file
echo $cred_file
}
# 创建挂载点
mkdir -p $MOUNT_POINT
# 检查是否已挂载
if mount | grep -q "$MOUNT_POINT"; then
echo "目录 $MOUNT_POINT 已经挂载"
exit 0
fi
# 安装 cifs-utils
if ! command -v mount.cifs &> /dev/null; then
apt-get update && apt-get install -y cifs-utils
fi
# 创建凭据文件
CRED_FILE=$(create_credentials)
# 挂载 SMB 共享
mount -t cifs -o credentials=$CRED_FILE,vers=3.0,uid=$(id -u),gid=$(id -g),file_mode=0755,dir_mode=0755 \
"$SMB_SERVER$SMB_SHARE" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "SMB 挂载成功: $MOUNT_POINT"
else
echo "SMB 挂载失败"
exit 1
fi
智能自动挂载脚本(支持多种协议)
#!/bin/bash
# 智能网络存储自动挂载脚本
# 支持 NFS、SMB/CIFS、SSHFS
set -e
# 配置函数
load_config() {
# 从配置文件读取
if [ -f "/etc/network-mount.conf" ]; then
source "/etc/network-mount.conf"
else
# 默认配置
NETWORK_SHARES=(
"nfs|192.168.1.100:/shared/data|/mnt/data"
"smb|//192.168.1.100/shared/docs|/mnt/docs|user|pass"
"sshfs|user@192.168.1.100:/home/shared|/mnt/remote"
)
fi
}
# 检查依赖
check_dependencies() {
local type=$1
case $type in
nfs)
command -v mount.nfs &> /dev/null || \
install_package "nfs-common" "nfs-utils"
;;
smb)
command -v mount.cifs &> /dev/null || \
install_package "cifs-utils"
;;
sshfs)
command -v sshfs &> /dev/null || \
install_package "sshfs"
;;
esac
}
# 安装软件包
install_package() {
local deb_pkg=$1
local rpm_pkg=$2
if command -v apt-get &> /dev/null; then
apt-get update && apt-get install -y $deb_pkg
elif command -v yum &> /dev/null; then
yum install -y $rpm_pkg
elif command -v dnf &> /dev/null; then
dnf install -y $rpm_pkg
else
echo "未支持的包管理器"
exit 1
fi
}
# 挂载单个共享
mount_share() {
local share_type=$1
local share_source=$2
local mount_point=$3
local credentials=$4
# 创建挂载点
mkdir -p "$mount_point"
# 检查是否已挂载
if mount | grep -q "$mount_point"; then
echo "跳过 $mount_point:已经挂载"
return 0
fi
# 检查网络
local server=$(echo $share_source | grep -oP '(\d{1,3}\.){3}\d{1,3}')
if [ -z "$server" ]; then
server=$(echo $share_source | cut -d'@' -f2 | cut -d':' -f1)
fi
ping -c 1 -W 2 $server &> /dev/null || {
echo "无法连接到 $server,跳过 $mount_point"
return 1
}
# 执行挂载
case $share_type in
nfs)
check_dependencies "nfs"
mount -t nfs -o vers=4,hard,intr "$share_source" "$mount_point"
;;
smb)
check_dependencies "smb"
if [ -n "$credentials" ]; then
echo "$credentials" > /tmp/smb_cred_$$
mount -t cifs -o credentials=/tmp/smb_cred_$$ \
"$share_source" "$mount_point"
rm -f /tmp/smb_cred_$$
else
mount -t cifs "$share_source" "$mount_point"
fi
;;
sshfs)
check_dependencies "sshfs"
sshfs -o allow_other,default_permissions \
"$share_source" "$mount_point"
;;
esac
if [ $? -eq 0 ]; then
echo "成功挂载 $share_type: $mount_point"
else
echo "挂载失败: $share_type $share_source"
return 1
fi
}
# 主函数
main() {
# 检查 root 权限
if [[ $EUID -ne 0 ]]; then
echo "请以 root 权限运行此脚本"
exit 1
fi
# 加载配置
load_config
# 遍历并挂载所有共享
for share in "${NETWORK_SHARES[@]}"; do
IFS='|' read -r type source mount cred <<< "$share"
mount_share "$type" "$source" "$mount" "$cred" || true
done
}
# 执行主函数
main "$@"
配置文件示例
创建 /etc/network-mount.conf:
# 网络存储挂载配置
# 格式: type|source|mount_point|credentials(可选)
# NFS 共享
NETWORK_SHARES+=(
"nfs|192.168.1.100:/srv/nfs/data|/mnt/data"
"nfs|192.168.1.101:/exports/backup|/mnt/backup"
)
# SMB 共享
NETWORK_SHARES+=(
"smb|//192.168.1.100/shared|/mnt/shared|username=admin\npassword=secret\ndomain=WORKGROUP"
)
# SSHFS 共享
NETWORK_SHARES+=(
"sshfs|user@192.168.1.200:/home/shared|/mnt/sshfs"
)
系统自启动设置
创建 systemd 服务
# /etc/systemd/system/network-mount.service [Unit] Description=Network Storage Auto Mount After=network-online.target Wants=network-online.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/bin/auto-mount.sh ExecStop=/usr/local/bin/auto-umount.sh User=root [Install] WantedBy=multi-user.target
启用服务
# 保存脚本到 /usr/local/bin/ sudo chmod +x /usr/local/bin/auto-mount.sh # 启用服务 sudo systemctl daemon-reload sudo systemctl enable network-mount.service sudo systemctl start network-mount.service
使用说明
- 脚本权限:
chmod +x script.sh - 运行脚本:
sudo ./auto-mount.sh - 配置文件路径:
/etc/network-mount.conf - 日志检查:使用
journalctl -u network-mount.service查看日志
这些脚本会根据网络状态自动判断是否尝试挂载,支持多种协议,并会自动处理依赖安装。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播